SQL プロシージャー・ステートメント
SQL 制御ステートメントでは、その SQL 制御ステートメントの内部に、複数の SQL ステートメントを指定することができます。 これらのステートメントは、SQL プロシージャー・ステートメントとして定義されます。
構文 |--+-SQL-control-statement-----------------------+--------------| +-ALLOCATE CURSOR-statement-------------------+ +-ALLOCATE DESCRIPTOR-statement---------------+ +-ALTER FUNCTION-statement--(2)---------------+ +-ALTER MASK-statement------------------------+ +-ALTER PERMISSION-statement------------------+ +-ALTER PROCEDURE-statement--(2)--------------+ +-ALTER SEQUENCE-statement--------------------+ +-ALTER TABLE-statement-----------------------+ +-ALTER TRIGGER-statement---------------------+ +-ASSOCIATE LOCATORS-statement----------------+ +-CLOSE-statement-----------------------------+ +-COMMENT-statement---------------------------+ +-COMMIT-statement--(1)-----------------------+ +-CONNECT-statement--(1)----------------------+ +-CREATE ALIAS-statement----------------------+ +-CREATE FUNCTION (external scalar)-statement-+ +-CREATE FUNCTION (external table)-statement--+ +-CREATE FUNCTION (sourced)-statement---------+ +-CREATE INDEX-statement----------------------+ +-CREATE MASK-statement-----------------------+ +-CREATE PERMISSION-statement-----------------+ +-CREATE PROCEDURE (external)-statement-------+ +-CREATE SCHEMA-statement---------------------+ +-CREATE SEQUENCE-statement-------------------+ +-CREATE TABLE-statement----------------------+ +-CREATE TYPE-statement-----------------------+ +-CREATE VIEW-statement-----------------------+ +-DEALLOCATE DESCRIPTOR-statement-------------+ +-DECLARE GLOBAL TEMPORARY TABLE-statement----+ +-DELETE-statement----------------------------+ +-DESCRIBE-statement--------------------------+ +-DESCRIBE CURSOR-statement-------------------+ +-DESCRIBE INPUT-statement--------------------+ +-DESCRIBE PROCEDURE-statement----------------+ +-DESCRIBE TABLE-statement--------------------+ +-DISCONNECT-statement--(1)-------------------+ +-DROP-statement------------------------------+ +-EXECUTE-statement---------------------------+ +-EXECUTE IMMEDIATE-statement-----------------+ +-FETCH-statement-----------------------------+ +-GET DESCRIPTOR-statement--------------------+ +-GRANT-statement-----------------------------+ +-INCLUDE-statement---------------------------+ +-INSERT-statement----------------------------+ +-LABEL-statement-----------------------------+ +-LOCK TABLE-statement------------------------+ '-MERGE-statement-----------------------------'
構文 (続き) |--+-OPEN-statement---------------------------------+-----------| +-PREPARE-statement------------------------------+ +-REFRESH TABLE-statement------------------------+ +-RELEASE-statement------------------------------+ +-RELEASE SAVEPOINT-statement--------------------+ +-RENAME-statement-------------------------------+ +-REVOKE-statement-------------------------------+ +-ROLLBACK-statement--(1)------------------------+ +-SAVEPOINT-statement----------------------------+ +-SELECT INTO-statement--------------------------+ +-SET CONNECTION-statement--(1)------------------+ +-SET CURRENT DEBUG MODE-statement---------------+ +-SET CURRENT DECFLOAT ROUNDING MODE-statement---+ +-SET CURRENT DEGREE-statement-------------------+ +-SET CURRENT IMPLICIT XMLPARSE OPTION-statement-+ +-SET CURRENT TEMPORAL SYSTEM_TIME-statement-----+ +-SET DESCRIPTOR-statement-----------------------+ +-SET ENCRYPTION PASSWORD-statement--------------+ +-SET PATH-statement-----------------------------+ +-SET RESULT SETS-statement--(1)-----------------+ +-SET SCHEMA-statement---------------------------+ +-SET TRANSACTION-statement--(3)-----------------+ +-SET transition-variable-statement--(4)---------+ +-TRANSFER OWNERSHIP-statement-------------------+ +-TRUNCATE-statement-----------------------------+ +-UPDATE-statement-------------------------------+ '-VALUES INTO-statement--------------------------'
注 :
- COMMIT、ROLLBACK、CONNECT、DISCONNECT、SET CONNECTION、および SET RESULT SETS ステートメントは、SQL プロシージャーでしか使用できません。
- REPLACE キーワードを指定する ALTER PROCEDURE (SQL)、ALTER FUNCTION (SQL スカラー)、および ALTER FUNCTION (SQL 表) ステートメントは、SQL-routine-body では使用できません。
- SET TRANSACTION ステートメントは、SQL 関数またはトリガーでしか使用できません。
- SET transition-variable-statement は、トリガーでしか使用できません。fullselect および VALUES-statement もトリガーで指定できます。
注
コメント: SQL プロシージャーの本体内に、コメントを含めることができます。 二重ダッシュ形式のコメント (--) に加えて、/* で始まり */ で終わるコメントも使用できます。 この形式のコメントには、以下の規則が適用されます。
- 開始文字の /* は、隣接させて同一行に置く必要があります。
- 終了文字の */ は、隣接させて同一行に置く必要があります。
- コメントは、スペースを入れることができるところならば、どこからでも開始できます。
- コメントは、次の行に続けることができます。
エラーおよび警告条件の検出および処理:: SQL ステートメントが実行されると、データベース・マネージャーは、その SQL ステートメントの記述に特別な指定がない限り、そのステートメントの処理に関する情報を診断領域に保管します (SQLSTATE および SQLCODE を含む)。 完了条件では、SQL ステートメントの正常完了、警告条件付きの完了、NOT FOUND 条件付きの完了のいずれかが示されます。 例外条件は、SQL ステートメントが正常に実行されなかったことを示します。
例外条件、警告条件、または NOT FOUND 条件が発生した場合に実行されるように、複合ステートメント内に条件ハンドラーを定義することができます。
条件ハンドラーの宣言には、条件ハンドラーを活動化するときに実行するコードが含まれます。
正常完了以外の条件が SQL プロシージャー・ステートメント の処理内で発生すると、その条件を処理できる条件ハンドラーが有効範囲内にある場合、その条件ハンドラーがこの条件を処理するために活動化されます。
条件ハンドラーの定義については、複合 (compound) ステートメントを参照してください。
条件ハンドラー内のコードは、警告条件、NOT FOUND 条件、または例外条件があるか確認し、適切なアクションをとることができます。
条件ハンドラー活動化の要因となった診断領域内の条件を確認するには、その条件ハンドラーの本体の開始時に以下のいずれかの方法を使用します。
- GET DIAGNOSTICS ステートメントを発行して、条件情報を要求する。 GET DIAGNOSTICS ステートメントを参照してください。
- SQL 変数 SQLSTATE および SQLCODE をテストする。
条件が警告であり、その条件を処理するハンドラーがない場合、条件の確認を行う対象となるステートメントの直後に、上記の 2 つの方法を条件ハンドラー本体の外部で使用することもできます。 条件がエラーであり、その条件を処理するハンドラーがない場合、ルーチンまたはトリガーがそのエラー条件によって終了されます。
