- - PR -
PL/SQLでのOUTパラメータ利用について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-10-30 20:38
○環境
サーバーOS:Windows2000server DB:Oracle 8.1.7 この環境にて、下記のようなプロシージャを作成したところ ------------------------------------------------------ Create Procedure ProcA( i_para1 IN CHAR, i_para2 IN CHAR, o_paraA OUT CHAR, o_paraB OUT NUMBER ) IS BEGIN --パッケージを呼んで、o_paraAにデータを代入する PACKA.ProcB( i_para1, i_para2, o_paraA --5byteの文字が戻ってくる ); INSERT INTO TESTDB VALUES( 'A', --NOT NULL項目 'B', --NOT NULL項目 o_paraA --NOT NULL項目 ); o_paraB := 0; EXCEPTION WHEN OTHERS THEN o_paraB := 9; END; ------------------------------------------------------ INSERT時にNULLを代入してエラーになってしまいました。 (Ora-01400 が発生) しかし、唯一NULLの可能性があるo_paraAの中身を確認すると データが代入されています。(このプロシージャを呼び出すVBや ObjectBrowserでの単体実行で確認済み) そもそも、PACKA.ProcBは必ず何か戻すのでNULLはありえません。 そこで、 ------------------------------------------------------ Create Procedure ProcA( i_para1 IN CHAR, i_para2 IN CHAR, o_paraA OUT CHAR, o_paraB OUT NUMBER ) IS w_paraA CHAR(5); --変数を作ってみる BEGIN --パッケージを呼んで、w_paraAにデータを代入する用に修正 PACKA.ProcB( i_para1, i_para2, w_paraA --5byteの文字が戻ってくる ); INSERT INTO TESTDB VALUES( 'A', --NOT NULL項目 'B', --NOT NULL項目 w_paraA --NOT NULL項目 ); o_paraB := 0; o_paraA := w_paraA; EXCEPTION WHEN OTHERS THEN o_paraB := 9; END; ------------------------------------------------------ と、変数に代入して、o_paraAは値を戻すだけにして実行すると 問題なく実行されます。 とりあえず、問題としては変数を利用することで解決するのですが、 OUTパラメータを戻り値以外で利用するといけない?という疑問が 残ります。 ご存知の方居ませんか? |
|
投稿日時: 2007-10-30 21:03
ストアードプロシージャでは、INは入力専用・OUTは出力専用・IN OUTは
入力・出力で使用可能となります。 1.ProcA(i_para1,i_para2, o_para1,o_Para2)を実行 引数の値がそれぞれ次のようになっているとして i_para1=1 i_para2=2 o_para1=NULL o_para2=NULL 2.エラー発生 3.o_para1にはProcBの実行結果が設定されている。 といった具合でしょうか? だとしたら単純にプロシージャ内でo_paraA(o_para1)はOUT設定の為、 ProcBの戻り値は格納できますが以降のINSERT文では"OUTパラメータ"をNULLと みなして処理を行い、エラーが発生しているだけです。 |
1