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는 현재 사용되지 않고
있음.
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는 현재 사용되지 않고
있음.
TAGS Pro*C pre-compiler
Leave your greetings here.