ルーチンで使用する SQL ステートメントのデータ・アクセスの種別

特定の SQL ステートメントは、ストアード・プロシージャーまたはユーザー定義関数で実行できます。 実行できるステートメントは、ルーチンの定義に使用した SQL データ・アクセスのレベルに応じて異なります。

下記の表は、SQL ステートメント (第 1 列で指定されている) を、 指定された SQL データ・アクセス種別を使用してルーチンで実行できるかどうかを示します。 Yはい (yes) を意味します。

一般に、NO SQL として定義されているルーチンで実行可能な SQL ステートメントが見つかった場合には、SQLSTATE 38001 が戻されます。 ルーチンの定義で、あるレベルの SQL アクセスが許されている場合、 コンテキストでサポートされていない SQL ステートメントは SQLSTATE 38003 を 戻します。 CONTAINS SQL として定義されているルーチンで許されていない SQL ステートメントの場合は SQLSTATE 38004 を戻し、READS SQL DATA で許されていない SQL ステートメントの場合は SQLSTATE 38002 を戻します。

表 1. ルーチンで使用する SQL データ・アクセスの種別
SQL ステートメント SQL データ・アクセスのレベル
NO SQL CONTAINS SQL READS SQL DATA MODIFIES SQL DATA
ALLOCATE CURSOR     Y Y
ALTER       Y
ASSOCIATE LOCATORS     Y Y
BEGIN DECLARE SECTION 1 1 Y Y Y
CALL   2 2 2
CLOSE     Y Y
COMMENT       Y
COMMIT   Y Y Y
CONNECT   Y Y Y
CREATE       Y
DECLARE CURSOR 1 1 Y Y Y
DECLARE GLOBAL TEMPORARY TABLE       Y
DECLARE STATEMENT 1 1 Y Y Y
DECLARE TABLE 1 1 Y Y Y
DECLARE VARIABLE 1 1 Y Y Y
DELETE       Y
DESCRIBE     Y Y
DESCRIBE CURSOR     Y Y
DESCRIBE INPUT     Y Y
DESCRIBE OUTPUT     Y Y
DESCRIBE PROCEDURE     Y Y
DESCRIBE TABLE     Y Y
DROP       Y
END DECLARE SECTION 1 1 Y Y Y
EXCHANGE       Y
EXECUTE   3 3 Y
EXECUTE IMMEDIATE   3 3 Y
EXPLAIN       Y
FETCH     Y Y
FREE LOCATOR   Y Y Y
GET DIAGNOSTICS   Y Y Y
GRANT       Y
HOLD LOCATOR   Y Y Y
INCLUDE 1 1 Y Y Y
INSERT       Y
ラベル       Y
LOCK TABLE   Y Y Y
MERGE       Y
OPEN     Y Y
PREPARE   Y Y Y
REFRESH TABLE       Y
RELEASE 接続   Y Y Y
RELEASE SAVEPOINT       Y
RENAME       Y
REVOKE       Y
ROLLBACK   Y Y Y
ROLLBACK TO SAVEPOINT       Y
SAVEPOINT       Y
SELECT INTO     Y Y
SET CONNECTION   Y Y Y
SET 代入ステートメント   4 Y Y
SET 特殊レジスター   Y Y Y
SIGNAL   Y Y Y
TRUNCATE       Y
UPDATE       Y
VALUES     Y Y
VALUES INTO   4 Y Y
WHENEVER 1 1 Y Y Y
注:
  1. この SQL オプションは SQL ステートメントが指定できないことを暗黙指定して いますが、実行不能なステートメントは制限されません。
  2. 呼び出されるストアード・プロシージャーの SQL データ・アクセスは、 現在有効なレベルと同じか、より制限されたレベルである必要があります。 例えば、MODIFIES SQL DATA として定義されたルーチンは、 MODIFIES SQL DATA、READS SQL DATA、CONTAINS SQL、または NO SQL として定義されたストアード・プロシージャーを呼び出す ことができます。 CONTAINS SQL として定義されたルーチンは、CONTAINS SQL または NO SQL として定義された プロシージャーを呼び出すことができます。
  3. EXECUTE ステートメントに指定されるステートメントは、有効な SQL データ・アクセスの 特定のレベルで許されるステートメントでなければなりません。 例えば、有効なレベルが READS SQL DATA の場合、ステートメントは INSERT、UPDATE、MERGE、または DELETE ステートメントであってはなりません。
  4. ステートメントは、副照会または照会式を含まない場合のみサポートされます。