プロシジャ定義時に発生したトラブルの事例、およびその対処方法について説明します。
定義文を入力してrdbddlexコマンドを実行すると、qdg12226eのエラーが発生する
以下の定義文を入力にして、rdbddlexコマンドを実行するとエラーになります。
CREATE PROCEDURE S.P1(IN PARA1 INTEGER) BEGIN DECLARE A INTEGER ; SET A = PARA1 + 1 ; INSERT INTO T1(C_ID, U_NO, S_CODE) VALUES ('IDxxxxxx', A, '0001') ; END ;
qdg12226e:ルーチン定義の実行で重症エラーを検出しました 詳細メッセージ='JYP8635E "INTEGER"の 前後にセミコロンが指定されていません.'
プロシジャルーチンを定義するときは、プロシジャルーチンの前後を「EXEC SQL」と「END-EXEC;」で囲んで定義します。
これにより、上記定義文では、「BEGIN」~「END;」におけるENDの後のセミコロン(;)は不要となります。
以下にプロシジャルーチン定義文を記述します。
EXEC SQL CREATE PROCEDURE S.P1(IN PARA1 INTEGER) BEGIN DECLARE A INTEGER ; SET A = PARA1 + 1 ; INSERT INTO T1(C_ID, U_NO, S_CODE) VALUES ('IDxxxxxx', A, '0001') ; END END-EXEC ;
なお、rdbddlexコマンドでプロシジャルーチンを定義する場合は、以下のようにxオプションの指定が必要です。
rdbddlex -d データベース名 -x 入力ファイル
参照
関連する質問として、“8.1.3 SQLの構文について知る”の“プロシジャ定義する変数の精度は指定する必要があるか?”があります。必要に応じて参照してください。