-----------
에러의 처리
-----------
모든 응용프로그램의 가장 중요한 부분중의 하나는 에러 처리가 될것이다. 특히 데이타베이스를  
사용하는 프로그램의 경우 서버가 유저 프로그램과는 별도로 동작하므로 서버와의 통신 및  
데이타베이스의 각종 상태를 이를 통하여 처리해야 함으로 매우 중요한 부분이라 하겠다.  
오라클의 PRE*Compiler를 사용하는 경우 에러처리란 SQL문장의 처리중 발생할수 있는 에러의  
감지및 이의 복구를 의미한다. 이장에서는 오라클의 PRE*Compiler를 사용하는 경우의 에러처리
방법을 알아보기로 하자.


1.1 에러 정보의 종류
오라클의 PRE*Compiler를 통해 얻을수 있는 에러정보는 SQLCA에 있는 변수를 통해서 가능하다.  
모든 SQL문이 수행될때마다 SQLCA에 SQLCODE로 모든 상태정보가 전달된다. 프로그램에서는  
WHENEVER를 이용하여 내부적으로 확인하거나 SQLCODE를 직접 참조하여 이를 확인할수 있다.  
'0'값이 전달되면 오라클이 SQL문장을 에러나 EXCEPTION('NO DATA FOUND', 'TOO MANY ROWS'등  
오라클이 내부적으로 정한 예외 사항 )없이 정상적으로 수행한것을 뜻하며 양수값이 전달되면  
오라클이 문장은 수행하였으나 EXCEPTION이 발생된것을 뜻한다. 만일 음수값이 전달되면 에러에  
의해 문장을 수행할수 없었음을 뜻한다. 이밖에도 SQLWARN으로 전달되는 경고메세지도 마찬가지
방법으로 참조할수 있으며 다중처리에서 설명된 추출된 로우의 총수를 알수있는 SQLERRD(3)도  
참조할수 있는 에러정보의 일종이다.

1.2 SQLCA의 사용
에러정보를 직접 다루어 에러처리를 하기 위해서는 SQLCA 영역의 정보를 사용해야만 한다.
이 방법을 이용할 경우는 매 SQL 수행후마다 에러처리를 해야만 하지만 그만큼 유연한 코딩이  
가능하다. SQLCA의 선언은 HEADER FILE의 INCLUDE만으로 가능하다.

EXEC SQL INCLUDE SQLCA;
이 소스코드는 GLOBAL지역에 선언되어 전코드에서 사용하도록 하고 SQLCA내에 저장되는 정보는
다음과 같다.
SQLCA
SQLCAID "SQLCA"라는 값
SQLCABC SQLCA 정보의 길이(bytes)
SQLCODE 오라클 에러메세지 코드
SQLERRM 에러메세지를 저장하기 위한 레코드
  SQLERRML 에러메세지의 길이
  SQLERRMC 에러메세지의 내용
SQLERRP
SQLERRD 6가지 상태코드 ARRAY
  SQLERRD(1)
  SQLERRD(2)
  SQLERRD(3) 수행된 로우수
  SQLERRD(4)
  SQLERRD(5) 파싱 에러 OFFSET
  SQLERRD(6)  
SQLWARN 8개의 경고(WARNING) ARRAY
  SQLWARN(1) 또다른 경고 FLAG
  SQLWARN(2) 잘려나간(Truncated) 문자열
  SQLWARN(3)  
  SQLWARN(4) SELECT 목록과 INTO 목록이 다름
  SQLWARN(5) WHERE절이 없는 UPDATE나 DELETE
  SQLWARN(6)  
  SQLWARN(7)
  SQLWARN(8)
SQLEXT  


- oraclejava -

'Program > Pro*c' 카테고리의 다른 글

[Pro*C] db에 image 저장하기  (0) 2007.08.18
[Pro*C] SendMail Function  (0) 2007.07.26
[Pro*C] 에러처리에 관하여(1)...  (0) 2007.07.13
[Pro*C]에러처리에 관하여(2)...  (1) 2007.07.13
[Pro*C] ORA Error Message  (0) 2007.07.12
[Pro*C] DB Connection  (0) 2007.06.15
Posted by pino93