Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


6.10.1 GET DIAGNOSTICSの形式と規則

〈この項の構成〉

(1) 機能

直前に実行したSQL文が次のどれかの場合,そのエラー情報及び診断情報を,診断領域から取得します。

ルーチンのSQLオブジェクトの再作成時,この診断情報に,正常に再作成したルーチンの情報が含まれます。

(2) 形式

 GET DIAGNOSTICS
   {:埋込み変数=文情報項目名
      〔,:埋込み変数=文情報項目名〕…
    |EXCEPTION 条件番号
      :埋込み変数=条件情報項目名
        〔,:埋込み変数=条件情報項目名〕…}
 
 文情報項目名::={NUMBER|MORE}
 条件情報項目名::={RETURNED_SQLCODE
            |ERROR_POSITION
            |ERROR_SQL_NO
            |ERROR_SQL
            |ROUTINE_TYPE
            |ROUTINE_SCHEMA
            |ROUTINE_NAME
            |TRIGGER_SCHEMA
            |TRIGGER_NAME
            |CONSTRAINT_SCHEMA
            |CONSTRAINT_NAME
            |MESSAGE_TEXT
            |QUERY_NAME
            |CONDITION_IDENTIFIER}

(3) オペランド

(a) 文情報項目名

NUMBER

診断領域中の診断情報の数を取得する場合に指定します。データ型はSMALLINTを指定してください。

MORE

診断情報の数が,診断領域に格納できる数を超えたかどうかの情報を取得する場合に指定します。

データ型はCHAR,長さは1バイトを指定してください。

診断領域にすべての診断情報が設定されている場合はN,そうでない場合はYが格納されます。

(b) 条件番号

何番目の診断情報を取得するかを示す値を埋込み変数で指定します。

(c) 条件情報項目名

RETURNED_SQLCODE

リターンコード(SQLCODE)の値を取得する場合に指定します。データ型はINTEGERを指定してください。

ERROR_POSITION

構文エラーが発生した場合の,SQL中のエラーの位置を取得するときに指定します。

データ型はINTEGERを指定してください。構文エラー以外のエラーが発生した場合は,0が設定されます。

ERROR_SQL_NO

次のどれかのSQLを実行した場合,そのルーチン中でエラーとなったSQL手続き文を示す番号を取得したいときに指定します。

  • CREATE PROCEDURE

  • CREATE FUNCTION

  • CREATE TYPE

  • CREATE TRIGGER

  • ALTER PROCEDURE

  • ALTER ROUTINE

  • ALTER TRIGGER

  • CALL文

  • トリガを引き起こす操作系SQL(ただし,取得できる情報はトリガの動作についてだけです)

番号は,手続き中のSQL手続き文の開始位置の順序で,各SQL手続き文に0から順に付けたものです。データ型はINTEGERを指定してください。

ERROR_SQL

診断情報のSQLの種別を示す文字列を取得したいときに指定します。

データ型はVARCHAR,長さは32バイト(文字集合名UTF16を指定した場合は64バイト)を指定してください。

設定される文字列を次の表に示します。

表6‒2 ERROR_SQLに設定される文字列

分類(SQL種別)

文字列設定の有無

設定される文字列

ルーチン

左記以外

定義

実行

前処理

実行

定義系

SQL

ALTER INDEX

×

×

ALTER INDEX

ALTER PROCEDURE

×

×

ALTER PROCEDURE

ALTER ROUTINE

×

×

ALTER ROUTINE

ALTER TABLE

×

×

ALTER TABLE

ALTER TRIGGER

×

×

ALTER TRIGGER

COMMENT(表に注釈を付ける)

×

×

COMMENT TABLE

COMMENT(列に注釈を付ける)

×

×

COMMENT COLUMN

CREATE AUDIT

×

×

CREATE AUDIT

CREATE CONNECTION SECURITY

×

×

CREATE CONNECTION SECURITY

CREATE FUNCTION

×

×

CREATE FUNCTION

CREATE PUBLIC FUNCTION

×

×

CREATE FUNCTION

CREATE INDEX

×

×

CREATE INDEX

CREATE PROCEDURE

×

×

CREATE PROCEDURE

CREATE PUBLIC PROCEDURE

×

×

CREATE PROCEDURE

CREATE SCHEMA

×

×

CREATE SCHEMA

CREATE SEQUENCE

×

×

CREATE SEQUENCE

CREATE TABLE

×

×

CREATE TABLE

CREATE TRIGGER

×

×

CREATE TRIGGER

CREATE TYPE

×

×

CREATE TYPE

CREATE VIEW

×

×

CREATE VIEW

CREATE PUBLIC VIEW

×

×

CREATE VIEW

DROP AUDIT

×

×

DROP AUDIT

DROP CONNECTION SECURITY

×

×

DROP CONNECTION SECURITY

DROP DATA TYPE

×

×

DROP DATA TYPE

DROP FUNCTION

×

×

DROP FUNCTION

DROP PUBLIC FUNCTION

×

×

DROP FUNCTION

DROP INDEX

×

×

DROP INDEX

DROP PROCEDURE

×

×

DROP PROCEDURE

DROP PUBLIC PROCEDURE

×

×

DROP PROCEDURE

DROP SCHEMA

×

×

DROP SCHEMA

DROP SEQUENCE

×

×

DROP SEQUENCE

DROP TABLE

×

×

DROP TABLE

DROP TRIGGER

×

×

DROP TRIGGER

DROP VIEW

×

×

DROP VIEW

DROP PUBLIC VIEW

×

×

DROP VIEW

GRANT CONNECT

×

×

GRANT CONNECT

GRANT DBA

×

×

GRANT DBA

GRANT RDAREA

×

×

GRANT RDAREA

GRANT SCHEMA

×

×

GRANT SCHEMA

GRANT SCHEMA OPERATION

×

×

GRANT SCHEMA

GRANT アクセス権限

×

×

GRANT ACCESS

GRANT AUDIT

×

×

GRANT AUDIT

REVOKE CONNECT

×

×

REVOKE CONNECT

REVOKE DBA

×

×

REVOKE DBA

REVOKE RDAREA

×

×

REVOKE RDAREA

REVOKE SCHEMA

×

×

REVOKE SCHEMA

REVOKE SCHEMA OPERATION

×

×

REVOKE SCHEMA

REVOKE アクセス権限

×

×

REVOKE ACCESS

操作系

SQL

ALLOCATE CURSOR文

×

×

×

ALLOCATE CURSOR

ASSIGN LIST文

×

×

ASSIGN LIST

CALL文

CALL

CLOSE文

×

×

CLOSE

×

×

(カーソルに指定したSQL種別の,この項目を参照してください)

DEALLOCATE PREPARE文

×

×

×

DECLARE CURSOR

×

×

×

DECLARE CURSOR

×

×

(動的SELECT文の,この項目を参照してください)

DELETE文

DELETE

準備可能動的DELETE文:位置付け

×

×

DELETE

DESCRIBE文

×

×

(DESCRIBE文に指定したSQL種別の,この項目を参照してください)

DESCRIBE CURSOR文

×

×

(DESCRIBE CURSOR文に指定したSQL種別の,この項目を参照してください)

DESCRIBE TYPE文

×

×

(DESCRIBE TYPE文に指定したSQL種別の,この項目を参照してください)

DROP LIST文

×

×

DROP LIST

EXECUTE文

×

×

(EXECUTE文で実行したSQL種別の,この項目を参照してください)

EXECUTE IMMEDIATE文

×

×

(EXECUTE IMMEDIATE文で実行したSQL種別の,この項目を参照してください)

FETCH文

×

×

FETCH

×

×

(カーソルに指定したSQL種別の,この項目を参照してください)

FREE LOCATOR文

×

×

FREE LOCATOR

INSERT文

INSERT

OPEN文

×

×

OPEN

×

×

(カーソルに指定したSQL種別の,この項目を参照してください)

PREPARE文

(PREPARE文に指定したSQL種別の,この項目を参照してください)

PURGE TABLE文

PURGE TABLE

1行SELECT文

SELECT

動的SELECT文

×

×

SELECT

UPDATE文

UPDATE

準備可能動的UPDATE文:位置付け

×

×

UPDATE

代入文

SET

制御系

SQL

CALL COMMAND文

CALL COMMAND

COMMIT文

COMMIT

CONNECT文

×

×

×

×

DISCONNECT文

×

×

×

×

LOCK文

LOCK TABLE

ROLLBACK文

ROLLBACK

SET SESSION AUTHORIZATION文

×

×

SET SESSION AUTHORIZATION

埋込み

言語

文法

BEGIN DECLARE SECTION

×

×

×

×

END DECLARE SECTION

×

×

×

×

(該当しません)

ALLOCATE CONNECTION HANDLE

×

×

×

×

FREE CONNECTION HANDLE

×

×

×

×

DECLARE CONNECTION HANDLE SET

×

×

×

×

(該当しません)

DECLARE CONNECTION HANDLE UNSET

×

×

×

×

(該当しません)

GET CONNECTION HANDLE

×

×

×

×

COPY

×

×

×

×

(該当しません)

GET DIAGNOSTICS

×

×

×

×

COMMAND EXECUTE

×

×

×

×

SQL先頭子

×

×

×

×

(該当しません)

SQL終了子

×

×

×

×

(該当しません)

WHENEVER

×

×

×

×

SQLCODE変数

×

×

×

×

(該当しません)

SQLSTATE変数

×

×

×

×

(該当しません)

PDCNCTHDL型変数の宣言

×

×

×

×

(該当しません)

INSTALL JAR

×

×

INSTALL JAR

REPLACE JAR

×

×

REPLACE JAR

REMOVE JAR

×

×

REMOVE JAR

INSTALL CLIB

×

×

INSTALL CLIB

REPLACE CLIB

×

×

REPLACE CLIB

REMOVE CLIB

×

×

REMOVE CLIB

DECLARE AUDIT INFO SET

×

×

×

×

(該当しません)

ルーチ

ン制御

SQL

SQL変数宣言

×

×

DECLARE

カーソル宣言

×

×

×

DECLARE CURSOR

×

×

SELECT

条件宣言

×

×

×

DECLARE CONDITION

ハンドラ宣言

×

×

×

DECLARE HANDLER

SQL手続き文

×

×

(SQL手続き文に指定したSQL種別の,この項目を参照してください)

複合文

×

×

BEGIN

IF文

×

×

IF

LEAVE文

×

×

LEAVE

RETURN文

×

×

RETURN

WHILE文

×

×

WHILE

FOR文

×

×

FOR

WRITE LINE文

×

×

WRITE LINE

SIGNAL文

×

×

SIGNAL

RESIGNAL文

×

×

RESIGNAL

上記に分類できない場合

半角空白

(凡例)

○:「設定される文字列」欄に記載されている文字列が設定されます。

×:文字列は設定されません。

−:設定される文字列はありません。

括弧内の表記は,注釈を示します。

ROUTINE_TYPE

エラーとなった関数又は手続きの種別を取得したい場合に指定します。データ型はCHAR,長さは1バイト(文字集合名UTF16を指定した場合は2バイト)を指定してください。種別が手続きの場合はP,関数の場合はFが設定されます。

ROUTINE_SCHEMA

エラーとなった関数又は手続きの認可識別子を取得したい場合に指定します。データ型はVARCHAR,長さは30バイト(文字集合名UTF16を指定した場合は60バイト)を指定してください。

以下のエラーの場合は認可識別子に”PUBLIC”が設定されます。

  • パブリック関数,パブリック手続きの定義,削除時のエラー

  • パブリック手続きのCALL文実行時のエラー

ROUTINE_NAME

エラーとなった関数又は手続きの識別子を取得したい場合に指定します。データ型はVARCHAR,長さは30バイト(文字集合名UTF16を指定した場合は60バイト)を指定してください。

TRIGGER_SCHEMA

エラーとなったトリガの認可識別子を取得したい場合に指定します。データ型はVARCHAR,長さは30バイト(文字集合名UTF16を指定した場合は60バイト)を指定してください。

TRIGGER_NAME

エラーとなったトリガの認可識別子を取得したい場合に指定します。データ型はVARCHAR,長さは30バイト(文字集合名UTF16を指定した場合は60バイト)を指定してください。

CONSTRAINT_SCHEMA

検査制約,参照制約で制約違反エラーとなった制約の認可識別子を取得したい場合に指定します。データ型はVARCHAR,長さは30バイト(文字集合名UTF16を指定した場合は60バイト)を指定してください。

CONSTRAINT _NAME

検査制約,参照制約で制約違反エラーとなった制約の制約名を取得したい場合に指定します。データ型はVARCHAR,長さは30バイト(文字集合名UTF16を指定した場合は60バイト)を指定してください。

MESSAGE_TEXT

メッセージテキストを取得したい場合に指定します。データ型はVARCHAR,長さは254バイト(文字集合名UTF16を指定した場合は508バイト)を指定してください。

QUERY_NAME

WITH句指定のある動的SELECT文,及びカーソル宣言を実行した場合,エラーが発生した問合せ指定の問合せ名を取得したい場合に指定します。データ型はVARCHAR,長さは30バイト(文字集合名UTF16を指定した場合は60バイト)を指定してください。

CONDITION_IDENTIFIER

SQL手続き中又はトリガ中で実行された,SIGNAL文,又はRESIGNAL文に指定した条件名,又はSQLSTATE値を取得したい場合に指定します。データ型はVARCHAR,長さは30バイト(文字集合名UTF16を指定した場合は60バイト)を指定してください。

SQLSTATE値を指定した場合は,'SQLSTATE:XXXXX'(XXXXXは指定したSQLSTATE値)が設定されます。

(4) 共通規則

  1. GET DIAGNOSTICSは,動的に実行できません。

  2. 直前に実行したSQLの結果だけ取得できます。取得できるSQLについては,表「ERROR_SQLに設定される文字列」を参照してください。

  3. 条件番号を指定する埋込み変数のデータ型は,SMALLINTを指定してください。

  4. 文情報項目,及び条件情報項目を受け取る埋込み変数のデータ型は,それぞれの項目のデータ型と同じ型を指定してください。

  5. 条件番号には,0以下の値,又は診断領域中のエラーの数を超える値は指定できません。

  6. SQL解析前に発生したエラーはGET DIAGNOSTICSでは診断情報が取得できない場合があります。このとき,GET DIAGNOSTICSを実行すると0件が返ってきます。エラー情報はエラー発生時のSQLCAを参照してください。

  7. 条件情報項目名の説明の中で,設定する情報を明記していないSQLについては,1バイトの空白,又は0が設定されます。

  8. 関数実行時に発生したエラーに対して,GET DIAGNOSTICSでは次の診断情報が取得できない場合があります。

    • ROUTINE_TYPE

    • ROUTINE_SCHEMA

    • ROUTINE_NAME

(5) 使用例

直前に実行したCREATE FUNCTIONの次の診断情報を取得します。

  CREATE FUNCTION NEXT_DAY(INDATE DATE,曜日 NCHAR)
    RETURNS DATE
    BEGIN
      DECLARE SDOW,TDOW INTEGER;
      SET TDOW=(CASE 曜日 WHEN N'日' THEN 0
        WHEN N'月' THEN 1
        WHEN N'火' THEN 2
        WHEN N'水' THEN 3
        WHEN N'木' THEN 4
        WHEN N'金' THEN 5
        ELSE 6 END);
      SET SDOW=MOD(DAYS(INDATE),7);
      RETURN (INDATE + (CASE WHEN TDOW>SDOW THEN TDOW-SDOW
        ELSE 7+TDOW-SDOW END) DAYS);
    END
  GET DIAGNOSTICS EXCEPTION 1
      :XSQLCODE=RETURN_SQLCODE,
      :XPOSITION=ERROR_POSITION,
      :XSQL_NO=ERROR_SQL_NO,
      :XSQL=ERROR_SQL,
      :XMESSAGE=MESSAGE_TEXT