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------------------'
注 :
- 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 つの方法を条件ハンドラー本体の外部で使用することもできます。 条件がエラーであり、その条件を処理するハンドラーがない場合、ルーチンまたはトリガーがそのエラー条件によって終了されます。