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--------------------------------+   
   +-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------------------'   

注 :
  1. COMMIT、ROLLBACK、CONNECT、DISCONNECT、SET CONNECTION、および SET RESULT SETS ステートメントは、SQL プロシージャーでしか使用できません。
  2. REPLACE キーワードを指定する ALTER PROCEDURE (SQL)、ALTER FUNCTION (SQL スカラー)、および ALTER FUNCTION (SQL 表) ステートメントは、SQL-routine-body では使用できません。
  3. SET TRANSACTION ステートメントは、SQL 関数またはトリガーでしか使用できません。
  4. 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 つの方法を条件ハンドラー本体の外部で使用することもできます。 条件がエラーであり、その条件を処理するハンドラーがない場合、ルーチンまたはトリガーがそのエラー条件によって終了されます。