2014년 9월 24일 수요일

자주 발생하는 Error - 김태양[ORACLE/SQL/HINT/오라클/교육/강의/강좌/SQL교육/오라클 PLSQL/강의/강좌/오라클교육/ORACLE초보교육/오라클실무강좌]

오늘은 proc에서 자주 발생하는 error메시지에 대해서 알아보도록 하겠습니다. 


1)  

ORACLE Error detected:<BR> 

SQL-02108: Invalid descriptor passed to run-time library <BR> 



위와 같은 에러메시지가 난 경우에는 100% 다음과 같은 실수를 했을 경우에 나타난다. 



sprintf(sqlstmt.arr," select S_NAME , S_AGE , S_SEX , S_ADDRESS , S_TELEPHONE , to_char(S_DATE, 'yy/mm/dd') , S_MEMO, S_ID " 

" from s_reg_db " 

" order by S_DATE "); 



EXEC SQL PREPARE s_reg_result FROM :sqlstmt; 

EXEC SQL DECLARE reg_cursor CURSOR for s_reg_result; 

EXEC SQL OPEN reg_cursor; 



위의 문장을 잘 살펴보면 sqlstmt.arr에 query를 입력한 후 곧바로 커서를 지정하였다. 이렇게 되면 문제가 발생할 수 있다. 왜냐하면 

sqlstmt.len을 지정해 주지 않았기 때문이다.  



다음의 문장을 추가하면 에러가 나지 않는다. 



sprintf(sqlstmt.arr," select S_NAME , S_AGE , S_SEX , S_ADDRESS , S_TELEPHONE , to_char(S_DATE, 'yy/mm/dd') , S_MEMO, S_ID " 

" from s_reg_db " 

" order by S_DATE "); 

sqlstmt.len = strlen( (char *)sqlstmt.arr); 

EXEC SQL PREPARE s_reg_result FROM :sqlstmt; 

EXEC SQL DECLARE reg_cursor CURSOR for s_reg_result; 

EXEC SQL OPEN reg_cursor; 



2) 결과 데이터가 깨져서 나타나는 경우 

: 이런 경우에는 memset을 하지 않았기 때문이다. 데이터를 변수에 입력하기 전에 memset을 해주면 문제는 해결된다. 



3) 결과 데이터가 모자랄 경우 

: fetch할때 파라메터를 적게 줄경우에 나타난다. fetch할 때의 파라메터 개수를 잘 세어보면 문제를 해결할 수 있다. 



4) 

ORACLE Error detected: 

ORA-00904: invalid column name 



위와 같은 에러메시지가 나타나는 경우에는 query문에서 column명을 틀리게 주었기 때문이다. 그러므로 column명을 수정해 주면 문제는 해결된다. 



5) 

ORACLE Error detected: 

SQL-02112: SELECT..INTO returns too many rows 



위와 같은 에러메시지가 나타난 경우에는 query한 결과가 1개 이상일 때 cursor를 사용하지 않았을 때 생기는 것이다. 다음의 예제를 보면 원인을 

쉽게 알 수 있다. 



1번 : sprintf(sqlstmt.arr,"select s_name from s_reg_db"); 

sqlstmt.len = strlen( (char *)sqlstmt.arr); 

EXEC SQL PREPARE s_reg_result FROM :sqlstmt; 

EXEC SQL DECLARE reg_cursor CURSOR for s_reg_result; 

EXEC SQL OPEN reg_cursor; 



2번 : EXEC SQL select s_name into :re1 from s_reg_db; 



1번의 경우에는 에러가 나지 않지만 2번의 경우에는 에러가 난다. 왜냐하면 s_reg_db라는 곳에 s_name column에 해당하는 row가 1개 이상이기 때문이다. 

만약 리턴되는 row가 1개라면 2번문장도 문제가 없을 것이다. 결국 1번 같은 경우에는 return되는 row가 많을 경우 1개씩 받아서 fetch하여 처리할 때 

사용하는 것이고 2번의 경우에는 리턴되는 row가 1개일 경우에 사용하는 것이다. 



ex) EXEC SQL select count(*) from s_reg_db; 

EXEC SQL select s_name into :re1 from s_reg_db where id = 1; 


 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-271983
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111453
53 [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… 오라클자바…03-151207
52 [주말주간]C#, ASP.NET마스터 오라클자바…01-311372
51 [평일,기업100%환급]SQL기초에서 Schema Object까지 오라클자바…01-311199
50 [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 오라클자바…01-311063
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191371
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111204
47 [평일야간,주말주간]JAVA,Network&JSP&Spring,MyBatis,Hibernate 오라클자바…01-031706
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-271983
45 [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… 오라클자바…12-191474
44 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) 오라클자바…12-141436
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111453
42 [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 오라클자바…12-091168
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011375
40 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… 오라클자바…12-011532
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011031

댓글 없음:

댓글 쓰기