posted by 구름너머 2007. 3. 6. 10:26
BULLETIN CATEGORY BULLETIN TOPIC: PRECOMPILER      
: (pro*c) CORE DUMP 해결방법 

pro*c로 Precompile시에 에러 메세지 없이 Core Dump가 발생하면서  
작업이 중단되는 경우가 있다. 그 이유는 다음과 같다. 아래의 경우는 모든 경우에 적용되는 것은 아니다. Compiler에 따라 아무 문제 없이 실행되는 경우도 있다.  
그러므로 debug를 하여서 어느 부분에서 Core Dump가 발생하는지 확인후 조치를 해야한다.  
   
1.syntax에러가 있는 경우로, 예를 들면  
1)WHERE ENAME = MILLER ' ; 와 같이 따옴표가 빠져 있는 경우  
2)SQL query 문을 잘못 사용한 경우 등...  
   
2.EXEC SQL VAR 변수명 IS STRING[크기];  
에서 STRING 크기를 지정하지 않은 경우  
   
3.함수값을 retrun할 때 return()을 사용한 경우. 이때는 return 으로 바꾸  
면 해결 된다. 모든 경우에 적용되는 것은 아니고 compiler에 따라 이러한 경우가  
생기는 경우가 있다.  
   
4.typedef 를 이용하여 선언한 변수가 struct 의 member로 사용되는 경우  
   
5.mode=oracle이 아닌 mode=ansi로 컴파일 할 때 core dump가 발생하는 경우가 있다.  
   
6.환경변수 NLS_LANG이 Korean_Korea.KO16KSC5601과 같이 한글 characterset  
을 사용할 때 core dump가 떨어지는 경우가 있다. 이 때는 American_America.US7ASCII 로 변경하면 된다.  
   
7.#define에서 기술한 매크로의 이름이나 그 길이가 매우 길 경우  
   
8.주석문에서 /*+ 가 있을 경우, 즉 /* 다음에 바로 플러스기호(+)가 나올  
경우  
   
9.typedef로 선언한 변수가 너무 많을 경우.  
   
10.string concatenation을 implicit하게 처리할 때, 즉  
   
printf("%s\n","hello""world");  
   
와 같이 따옴표를 그냥 붙여서 concatenation 할 때  
   
  1. Precompile 시에 주는 옵션에서 SQLCHECK=FULL
또는 SQLCHECK=SEMANTICS를 사용하는 경우에 Core Dump가 떨어지는 경우가 있는데, 프로그램 안에서 Pl/Sql Block이나 Stored Procedure Call을 하지 않는 경우라면 Sqlcheck 옵션과 Userid 옵션을 삭제하고 Precompile을 하면 된다.  
 
12.Sql Statement의 길이가 길 때 발생하는 경우가 있다. 이 때에는 View  
등을 이용하여 Sql Statement의 길이를 줄이도록 한다.  
   
13.Cursor 선언에서 Column 갯수가 많을 때 발생하는 경우로, 이 때에는  
Cursor를 여러개를 선언해서 Select하는 Column을 분리 하도록 한다. 

'ORACLE' 카테고리의 다른 글

시간차이 구하기...  (0) 2007.07.04
MS-SQL 접속 삽질의 날!!!  (0) 2007.06.29
Pro*C란  (11) 2007.03.06
sqlplus 사용을 고급화하기.  (0) 2007.01.12
오라클 Role 관리  (0) 2006.12.18