SQLCA (SQL Communication Area)

1. 정의
    ⊙ 프로그램내에서 각각의 SQL 실행문이 처리 될때마다 발생하는
         상황처리를
       RETURN해주는 ORACLE 제공의 통신 영역.

2. 사용법
    ⊙ "EXEC SQL INCLUDE sqlca.h"
    ⊙ Global SQLCA는 1개만 지정 가능하며, 트랜잭션에 의해 리턴된
        정보를 보존하기 위해, 각각의 루틴에서 "로컬변수"로 각각의
        SQLCA를 사용할 수도 있다.

3. 구조

      ⊙ struct sqlca {
              char sqlcaid[8];
              long sqlcabc;
              long sqlcode;
              struct {
                 unsigned short sqlerrm1;
                 char sqlerrmc[70]
              } sqlerrm;
              char sqlerrp[8];
              long sqlerrd[6];
              char sqlwarn[8];
              char sqlext[8];
       };
       struct sqlca sqlca;

4. 기능설명

    ⊙ sqlca.sqlcaid
       : 문자열. 이 필드는 글로벌 구조로서 사용하는 경우에
         한해서, 할당시에 "SQLCA"로 초기화 된다.

    ⊙ sqlca.sqlcabc
       : 4바이트 2진정수. 이필드에는 SQLCA 구조 자신의 길이가
         바이트로 설정된다.

    ⊙ sqlca.sqlcode
       : 4바이트 2진정수. 이필드에는 SQL문의 실행결과를 나타낸다.

       ▶ Zero(0) : 실행이 정상으로 종료한 것을 나타낸다.
       ▶ 양수 : 상태코드와 함께 실행이 성공한 것을 나타냄.
                 현재의 경우 양의 코드는 '1403'뿐이며, 이것은
                 "행이 발견되지 않는다" 또는 마지막 행이 리턴된
                 것을 나타냄.
       ▶ 음수 : 프로그램내의 에러 또는 시스템 장애를 나타냄.
                 : "오라클 에러 메세지 및 코드" 편 참조

    ⊙ sqlca.sqlerrm.sqlerrml
       :sqlca.sqlerrm.sqlerrmc의 텍스트의 길이를 나타낸다.

    ⊙ sqlca.sqlerrm.sqlerrmc
       : 가변길이의 문자열이고, sqlca.sqlcode내에 표시된
         에러번호에 대응하는 에러 메세지의 내용.

    ⊙ sqlca.sqlerrp
       : 현재의 경우는 사용하지 않는다. 이 필드는 문자열이다.

    ⊙ sqlca.sqlerrd
       : 4바이트 2진정수 6개로 된 배열이고, ORACLE RDBMS의 내부
         상황을 파악하기위해 사용한다.
         3번째의 요소[2]만이 사용되고 있고, INSERT나 UPDATE처럼
         DML 처리에 대해서 몇개의 행이 처리됐는지를 나타낸다.
       : 요소 0,1,3,4,5는 현재의 경우 사용되고 있지 않다.
       : 인포믹스에서 sqlca.sqlerrd[1]의 값은 insert 후의 serial
         값이 됩니다.

    ⊙ sqlca.sqlwarn
       : 1문자의 요소 8개로 구성된 구조이다.
       : 이들의 요소는 Pre-Compile중에 발생한 여러가지 상황에 대한
         경고를 나타낸다.
         예를 들면, ORACLE이 평균치의 계산에서 NULL을 무시한 경우
         등에 경고가 설정된다. 이 경우는 대응하는 요소의 값이 "W"로
         된다.
       : 첫번째 요소 [0]은 항상 "W"가 된다.

       ▶ sqlca.sqlwarn[0]
          : 그 문에 대해 경고가 1개도 설정되지 않았음을 나타냄.
          : sqlca.sqlwarn[0]에 "W"가 설정되어 있는 경우 1개 이상의
            경고가 설정되어 있는 것이므로 검사해야 한다. 치며적인
            에러는 아니지만 검사해야 할 문제나
            상황이 있음을 나타냄.

       ▶ sqlca.sqlwarn[1]
          : sqlca.sqlwarn[0]에 "W"가 설정되어 있는 경우, 호스트
            변수의 폭이 충분하지않기 때문에 리턴된 문자 필드가 1개
            이상 절사 되었음을 나타냄.
          : 이것은 문자 데이터에 대해서만 적용하며, 수치타입 데이터
            에 대해서는 경고를 설정하거나, 음의 sqlca.sqlcode를
            리턴하지 않고서 절사를 행함.

       ▶ sqlca.sqlwarn[2]
          : sqlca.sqlwarn[2]에 "W"가 설정되어 있는 경우, AVG, SUM,
            MIN, MAX등의 함수 계산에서 1개 이상의 NULL이 무시되었음
            을 보여줌.

       ▶ sqlca.sqlwarn[3]
          : sqlca.sqlwarn[3]에 "W"가 설정되어 있는 경우, SELECT 리스
            트내의 항목수가 INTO구의 호스트 변수 갯수와 같지 않음을
            보여줌.
          : 데이터는 리턴되지만, 리턴되는 항목의 수는 적은 쪽에
            일치함.

       ▶ sqlca.sqlwarn[4]
          : sqlca.sqlwarn[4]에 "W"가 설정되어 있는 경우, UPDATE또는
            DELETE문에 WHERE구가 지정되지 않았음을 보여줌. 즉
            어느행을 갱신.삭제할지 한정되지 않았기 때문에 테이블내
            의 모든 행이 갱신.삭제됨을 의미하며, ORACLE은
            확인 또는 롤백에 대한 경고를 설정하여 줌.
           
       ▶ sqlca.sqlwarn[5]
          : sqlca.sqlwarn[5]는 현재 사용하고 있지 않음.

       ▶ sqlca.sqlwarn[6]
          : sqlca.sqlwarn[6]에 "W"가 설정되어 있는 경우, 실행된
            SQL문에 의해 ORACLE 이 논리적 작업단위의 롤백을 행한
            경우에 해당된다.
          : Deadlock에 의한 트랜잭션의 Rollback.

       ▶ sqlca.sqlwarn[7]
          : sqlca.sqlwarn[7]에 "W"가 설정되어 있는 경우, 행의 현재
            데이터가 Query 와는 모순되는 데이터의 경우 혹은 행의
            현재 데이터가 이 Query의 시작
            후에 삭제된 경우등에 해당된다.

   ⊙ sqlca.sqlext
       : SQLCA의 마지막 필드인 sqlca.sqlext는 현재 사용되지 않고
         있음.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
Posted by 소리나는연탄.

Leave your greetings here.