반응형
GET DIAGNOSTICS문은 실행된 이전 SQL문(GET DIAGNOSTICS문 이외)에 대한 정보를 포함하여 현재 실행 환경 정보를 획득하기 위해 사용됩니다. GET DIAGNOSTICS문을 통해 사용할 수 있는 일부 정보는 SQLCA에서도 사용할 수 있습니다.
호출
이 명령문은 다음에서 임베드될 수 있습니다.
- SQL 프로시저 정의
- 복합 SQL(컴파일된)문
- 복합 SQL(인라인된)문
권한 부여
필요 없음
구문
>>-GET DIAGNOSTICS--+-| statement-information |-+-------------->< '-| condition-information |-' statement-information |--SQL-variable-1--=--+-DB2_RETURN_STATUS-----+-----------------| +-DB2_SQL_NESTING_LEVEL-+ '-ROW_COUNT-------------' condition-information .-,---------------------------------------. V | |--EXCEPTION--1----SQL-variable-2--=--+-DB2_TOKEN_STRING-+-+----| '-MESSAGE_TEXT-----'
설명
- statement-information
- 실행된 마지막 SQL문에 대한 정보를 리턴합니다.
- SQL-variable-1
- 지정 대상인 변수를 식별합니다. 변수는 전역 변수가 아니어야 합니다. SQL 변수는 복합 명령문에 정의될 수 있습니다. 변수의 데이터 유형은 표 1에 지정된 것처럼 데이터 유형과 호환 가능해야 합니다.
- DB2_RETURN_STATUS
- 명령문이 상태를 리턴하는 프로시저를 호출하는 CALL문인 경우, 이전에 실행된 SQL문과 연관된 프로시저에서 리턴된 상태 값을 식별합니다. 이전 명령문이 그러한 명령문이 아닌 경우, 리턴된 값에는 의미가 없고 정수일 수 있습니다.
- DB2_SQL_NESTING_LEVEL
- GET DIAGNOSTICS문이 실행될 때 실행 중인 중첩 또는 순환의 현재 레벨을 식별합니다. 각 중첩 레벨은 컴파일된 SQL 함수, 컴파일된 SQL 프로시저, 컴파일된 트리거 또는 동적으로 준비된 복합 SQL(컴파일된)문의 중첩되거나 반복적인 호출에 해당합니다. GET DIAGNOSTICS문이 중첩 레벨의 외부에서 실행되는 경우, 영(0) 값이 리턴됩니다. 이 옵션은 컴파일된 SQL 함수, 컴파일된 SQL 프로시저, 컴파일된 트리거 또는 복합 SQL(컴파일된)문의 컨텍스트에서만 지정될 수 있습니다(SQLSTATE 42601).
- ROW_COUNT
- 이전 SQL문과 연관되는 행 수를 식별합니다. 이전 SQL문이 DELETE, INSERT 또는 UPDATE 명령문인 경우, ROW_COUNT는 조작에 대해 규정된 행 수를 식별합니다. 이전 명령문이 PREPARE문인 경우, ROW_COUNT는 준비된 명령문에서 결과 행의 개략 수를 식별합니다.
- condition-information
- 이전에 실행된 SQL문에 대한 오류 또는 경고 정보가 리턴된다는 것을 지정합니다. 오류에 대한 정보가 필요한 경우, GET DIAGNOSTICS문은 오류를 처리하는 핸들러에 지정된 첫 번째 명령문이 되어야 합니다. 경고에 대한 정보가 필요하고 핸들러가 경고 조건의 제어를 받는 경우, GET DIAGNOSTICS문은 해당 핸들러에 지정된 첫 번째 명령문이어야 합니다. 핸들러가 경고 조건의 제어를 받지 않는 경우, GET DIAGNOSTICS문은 실행된 다음 명령문이어야 합니다. 이 옵션은 SQL 프로시저의 컨텍스트에 지정될 수 있습니다(SQLSTATE 42601).
- SQL-variable-2
- 지정 대상인 변수를 식별합니다. 변수는 전역 변수가 아니어야 합니다. SQL 변수는 복합 명령문에 정의될 수 있습니다. 변수의 데이터 유형은 표 1에 지정된 것처럼 데이터 유형과 호환 가능해야 합니다.
- DB2_TOKEN_STRING
- 이전에 실행된 SQL문에서 리턴된 경고 메시지 토큰 또는 오류를 식별합니다. 0의 SQLCODE로 완료된 명령문 또는 SQLCODE에 토큰이 없는 경우, 비어 있는 문자열이 VARCHAR 변수에 대해 리턴되거나 공백이 CHAR 변수에 대해 리턴됩니다.
- MESSAGE_TEXT
- 이전에 실행된 SQL문에서 리턴된 경고 메시지 텍스트 또는 오류를 식별합니다. 메시지 텍스트는 명령문이 처리되는 데이터베이스 서버의 언어로 리턴됩니다. 0의 SQLCODE로 완료된 명령문의 경우, 비어 있는 문자열이 VARCHAR 변수에 대해 리턴되거나 공백이 CHAR 변수에 대해 리턴됩니다.
참고
- GET DIAGNOSTICS문은 진단 영역(SQLCA)의 컨텐츠를 변경하지 않습니다. SQLSTATE 또는 SQLCODE 특수 변수가 SQL 프로시저에 선언되는 경우, 이는 GET DIAGNOSTICS문을 실행하는 것으로부터 리턴되는 SQLSTATE 또는 SQLCODE로 설정됩니다.
- 항목에 대한 데이터 유형: 다음 테이블에는 각 진단 항목에 대한 SQL 데이터 유형이 표시됩니다. 진단 항목이 변수에 지정될 때, 변수의 데이터 유형은 요청된 진단 항목의 데이터 유형과 호환 가능해야 합니다.
표 1. GET DIAGNOSTICS 항목에 대한 데이터 유형 정보 유형 항목 데이터 유형 명령문 정보 DB2_RETURN_STATUS 정수 명령문 정보 DB2_SQL_NESTING_LEVEL 정수 명령문 정보 ROW_COUNT DECIMAL(31,0) 조건 정보 DB2_TOKEN_STRING VARCHAR(1000) 조건 정보 MESSAGE_TEXT VARCHAR(32672) - 구문 대체: 다음은 Db2®의 이전 버전 및 다른 데이터베이스 제품과의 호환성을 위해 지원됩니다. 이 대체는 표준이 아니므로 사용하지 마십시오.
- RETURN_STATUS는 DB2_RETURN_STATUS 대신 지정될 수 있습니다.
예
- 예제 1: SQL 프로시저에서 GET DIAGNOSTICS문을 실행하여 갱신되는 행 수를 판별하십시오.
CREATE PROCEDURE sqlprocg (IN deptnbr VARCHAR(3)) LANGUAGE SQL BEGIN DECLARE SQLSTATE CHAR(5); DECLARE rcount INTEGER; UPDATE CORPDATA.PROJECT SET PRSTAFF = PRSTAFF + 1.5 WHERE DEPTNO = deptnbr; GET DIAGNOSTICS rcount = ROW_COUNT; -- At this point, rcount contains the number of rows that were updated. ... END
- 예제 2: SQL 프로시저 내에서 사용자 실패를 표시하는 양수 값을 명시적으로 리턴하거나 음수 리턴 상태 값의 결과를 가져오는 SQL 오류가 발생할 수 있는 TRYIT이라고 하는 프로시저의 호출에서 리턴된 상태 값을 처리하십시오. 프로시저가 성공적이면 이는 0의 값을 리턴합니다.
CREATE PROCEDURE TESTIT () LANGUAGE SQL A1:BEGIN DECLARE RETVAL INTEGER DEFAULT 0; ... CALL TRYIT; GET DIAGNOSTICS RETVAL = DB2_RETURN_STATUS; IF RETVAL <> 0 THEN ... LEAVE A1; ELSE ... END IF; END A1
출처 : https://www.ibm.com/support/knowledgecenter/ko/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0005647.html
반응형