• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    1. BEGIN ... END 복합 명령문 구문
    2. 레이블 구문
    3. DECLARE 구문
    4. 저장 프로그램 내의 변수
    5. 흐름 제어문
    6. 커서
    7. 조건의 처리
    1. DECLARE ... CONDITION 구문
    2. DECLARE ... HANDLER 구문
    3. GET DIAGNOSTICS 구문
    4. RESIGNAL 구문
    5. SIGNAL 구문
    6. 핸들러의 범위에 관한 규칙
    7. MySQL의 진단 영역
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.6.7.3 GET DIAGNOSTICS 구문

GET [CURRENT] DIAGNOSTICS
{
    statement_information_item
    [, statement_information_item] ... 
  | CONDITION condition_number
    condition_information_item
    [, condition_information_item] ...
}

statement_information_item:
    target = statement_information_item_name

condition_information_item:
    target = condition_information_item_name

statement_information_item_name:
    NUMBER
  | ROW_COUNT

condition_information_item_name:
    CLASS_ORIGIN
  | SUBCLASS_ORIGIN
  | RETURNED_SQLSTATE
  | MESSAGE_TEXT
  | MYSQL_ERRNO
  | CONSTRAINT_CATALOG
  | CONSTRAINT_SCHEMA
  | CONSTRAINT_NAME
  | CATALOG_NAME
  | SCHEMA_NAME
  | TABLE_NAME
  | COLUMN_NAME
  | CURSOR_NAME

condition_number, target:
    (see following discussion) 

SQL 문은 진단 영역을 채우는 진단 정보를 생성합니다. GET DIAGNOSTICS 문을 사용하면 응용 프로그램에서이 정보를 확인할 수 있습니다. 이것은 MySQL 5.6.4의 시점에서 사용할 수 있습니다. ( SHOW WARNINGS 또는 SHOW ERRORS 를 사용하여 조건 또는 오류를 확인할 수 있습니다.)

GET DIAGNOSTICS 실행하는 데 특별한 권한이 필요하지 않습니다.

키워드 CURRENT 는 현재의 진단 영역에서 정보를 검색하는 것을 보여줍니다. MySQL은 그것이 기본 동작이기 때문에 이것은 아무 효과도 없습니다.

GET DIAGNOSTICS 은 일반적으로 저장 프로그램에서 핸들러에서 사용되지만, 이것은 어떤 SQL 문 실행을 확인하기 위해 핸들러의 컨텍스트 외부에서 허용되는 MySQL 확장입니다. 예를 들어, mysql 클라이언트 프로그램을 호출하는 경우 프롬프트에서 다음 명령을 입력 할 수 있습니다.

mysql> DROP TABLE test.no_such_table;
ERROR 1051 (42S02): Unknown table 'test.no_such_table'
mysql> GET DIAGNOSTICS CONDITION 1
    ->   @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
mysql> SELECT @p1, @p2;
+-------+------------------------------------+
| @p1   | @p2                                |
+-------+------------------------------------+
| 42S02 | Unknown table 'test.no_such_table' |
+-------+------------------------------------+

진단 영역은 섹션 13.6.7.7 "MySQL의 진단 영역" 을 참조하십시오. 쉽게 말하면, 여기에는 다음의 2 종류의 정보가 포함되어 있습니다.

  • 발생 조건의 수와 영향을받은 행수 등의 문 정보.

  • 오류 코드 및 메시지 등의 조건 정보. 문이 여러 조건을 발생시킨 경우 진단 영역이 부분에는 각 조건의 조건 영역이 포함되어 있습니다. 문이 어떤 조건도 발생시키지 않는 경우 진단 영역이 부분은 비어 있습니다.

3 개의 조건을 생성하는 명령문의 경우 진단 영역에는 다음과 같은 명령문 정보와 조건 정보가 포함되어 있습니다.

 Statement information :
   row count
   ... other statement information items ...
 Condition area list :
   Condition area 1 :
     error code for condition 1
     error message for condition 1
     ... other condition information items ...
   Condition area 2 :
     error code for condition 2 :
     error message for condition 2
     ... other condition information items ...
   Condition area 3 :
     error code for condition 3
     error message for condition 3
     ... other condition information items ...

GET DIAGNOSTICS 은 문 또는 조건 정보 중 하나를 얻을 수 있지만 같은 문 모두를 얻을 수 없습니다.

  • 문 정보를 얻으려면 원하는 문 항목을 대상 변수로 가져옵니다. GET DIAGNOSTICS 다음의 예에서는 사용 가능한 조건의 수와 영향을받은 행 수를 사용자 변수 @p1 과 @p2 에 할당합니다.

     GET DIAGNOSTICS @ p1 = NUM​​BER @ p2 = ROW_COUNT;
    
  • 조건 정보를 얻으려면 조건 번호를 지정하고 원하는 조건 항​​목을 대상 변수로 가져옵니다. GET DIAGNOSTICS 다음 예에서는 SQLSTATE 값과 오류 메시지를 사용자 변수 @p3 와 @p4 에 할당합니다.

     GET DIAGNOSTICS CONDITION 1
       @ p3 = RETURNED_SQLSTATE @ p4 = MESSAGE_TEXT;
    

검색 목록에는 쉼표로 구분 된 하나 이상의 target = item_name 할당을 지정합니다. 각 할당은 대상 변수와이 문이 문 또는 조건 정보 중 어떤 것을 얻을 여부에 따라 statement_information_item_name 또는 condition_information_item_name 지시자 중 하나를 지정합니다.

항목 정보를 저장하기위한 유효한 target 지시자는 저장 프로 시저 또는 저장 함수의 매개 변수 DECLARE 에서 선언 된 프로 프로그램의 로컬 변수 사용자 정의 변수 중 하나입니다.

유효한 condition_number 지시자는 저장 프로 시저 또는 저장 함수의 매개 변수 DECLARE 에서 선언 된 프로 프로그램의 로컬 변수 사용자 정의 변수, 시스템 변수, 리터럴 중 하나입니다. 문자 리터럴은 _charset 인트로 듀서를 포함 할 수 있습니다. 조건 1부터 정보가 포함되어있는 조건 영역의 수까지의 범위에없는 경우 경고가 발생합니다. 이 경우이 경고는 진단 영역에 그 영역을 클리어하지 않고 추가됩니다.

현재는 조건이 발생했을 때 MySQL이 GET DIAGNOSTICS 의해 인식되는 모든 조건 항목을 채우는 것은 아닙니다. 예 :

mysql> GET DIAGNOSTICS CONDITION 1
    ->   @p5 = SCHEMA_NAME, @p6 = TABLE_NAME;
mysql> SELECT @p5, @p6;
+------+------+
| @p5  | @p6  |
+------+------+
|      |      |
+------+------+

표준 SQL에서는 여러 조건이있는 경우 첫 번째 조건은 이전의 SQL 문에 대해 반환 된 SQLSTATE 값에 관련하고 있습니다. MySQL에서는 이것이 보장되지 않습니다. 메인 오류를 얻기 위해 다음과 같이 할 수 없습니다.

 GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO;

대신 먼저 조건 수를 검색 한 다음 그것을 사용하여 어떤 조건 번호를 검사할지 여부를 지정합니다.

 GET DIAGNOSTICS @cno = NUM​​BER;
 GET DIAGNOSTICS CONDITION @cno @errno = MYSQL_ERRNO;

허용되는 문 정보와 조건 정보의 항목 및 조건이 발생했을 때 어떤 항목이 이입되는지에 대해서는 섹션 13.6.7.7.2 "진단 영역의 정보 항목" 을 참조하십시오.

저장 프로 시저의 컨텍스트에서 GET DIAGNOSTICS 와 예외 처리기를 사용하여 삽입 작업의 결과를 평가하는 방법을 보여줍니다. 삽입이 성공했을 경우,이 프로는 GET DIAGNOSTICS 를 사용하여 영향을받은 행 수를 가져옵니다. 이것은 진단 영역이 클리어되지 않는 한, GET DIAGNOSTICS 를 여러 번 사용하여 명령문에 대한 정보를 얻을 수 있음을 보여줍니다.

 CREATE PROCEDURE do_insert (value INT)
 BEGIN
   - Declare variables to hold diagnostics area information
   DECLARE code CHAR (5) DEFAULT '00000';
   DECLARE msg TEXT;
   DECLARE rows INT;
   DECLARE result TEXT;
   - Declare exception handler for failed insert
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
     BEGIN
       GET DIAGNOSTICS CONDITION 1
         code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;
     END;

   - Perform the insert
   INSERT INTO t1 (int_col) VALUES (value);
   - Check whether the insert was successful
   IF code = '00000'THEN
     GET DIAGNOSTICS rows = ROW_COUNT;
     SET result = CONCAT ( 'insert succeeded, row count ='rows);
   ELSE
     SET result = CONCAT ( 'insert failed, error ='code ', message ='msg);
   END IF;
   - Say what happened
   SELECT result;
 END;

t1.int_col 이 NOT NULL 로 선언 된 정수 컬럼이라고합니다. 이 프로시 저는 NULL 이 아닌 값과 NULL 값을 삽입하기 위해 호출하면 각각 다음의 결과를 생성합니다.

mysql> CALL do_insert(1);
+---------------------------------+
| result                          |
+---------------------------------+
| insert succeeded, row count = 1 |
+---------------------------------+

mysql> CALL do_insert(NULL);
+-------------------------------------------------------------------------+
| result                                                                  |
+-------------------------------------------------------------------------+
| insert failed, error = 23000, message = Column 'int_col' cannot be null |
+-------------------------------------------------------------------------+

GET DIAGNOSTICS 조건 핸들러에서 진단 영역을 클리어하고, 그 핸들러를 활성화 한 조건에 관한 정보가 손실 될 수있는 다른 문 앞에 사용하도록하십시오. 진단 영역이 언제 설정 및 클리어되는지에 대해서는 섹션 13.6.7.7 "MySQL의 진단 영역" 을 참조하십시오.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved