2011-01-04 27 views
0

oracleでストアド・プロシージャをコールするときに、パラメータ型の順序が重要なのでしょうか?例えばOracleのストアドプロシージャ... INパラメータの前にOUTパラメータを置くことに問題がありますか?

(構文の誤差はご容赦ください)

my_proc (
param_a IN NUMBER 
, param_b IN STRING 
, param_c OUT NUMBER 
, param_d OUT STRING 
) begin 
param_c = param_a 
param_d = param_b 
end 

我々は上記のような何かをするとき、我々は(再び特定の構文を許してください)OUTパラメータにバックで出て渡された値を取得します。我々はparam_b上param_c移動すると

はしかし、我々は代わりに渡された値の0.0とNULLを取得します。私たちは、PL/SQLでこれをテストしている

my_proc (
param_a IN NUMBER 
, param_c OUT NUMBER 
, param_b IN STRING 
, param_d OUT STRING 
) begin 
param_c = param_a 
param_d = param_b 
end 

見落としているものはありますか?

おかげ BayouBob

答えて

0

おかげで、それはちょっと単純なものであることが判明しました。 ojdbc6を使ってストアド・プロシージャを呼び出す方法は、大きな違いがあるようです。

これは、もともと私たちがPL/SQLで確認しようとしていたJava/Oracleの質問だったと告白しなければなりません。

私たちが 'call my_proc(...)'としてストアドプロシージャを呼び出した場合、INパラメータとOUTパラメータの順序が重要であるように見えます。一方、 'begin my_proc(...)end'はうまく動作します。

注:これは、Java 6でcallablestatementをojdbc6で構築する場合に適用されます。

+0

名前付きパラメータまたは定位置パラメータを使用していますか?名前は時々あなたが期待しているように扱われず、ポジションとして扱われ、あなたが見たものを説明するかもしれません。 –

+0

私たちは、接続する必要があるデータベースを提供するクライアントの気まぐれから自分自身を切り離そうとして、位置指定から名前付けに切り替えています。 –

0

あなたが好きな順番であなたのIN/OUTパラメータを定義することができます。この手続きはどうやって呼びますか?空文字列を渡すと、NULLの出力値が得られます。たとえば、次のように

declare 
    param_c NUMBER; 
    param_d VARCHAR2(100); 
begin 

    my_proc (
    0, 
    param_c, 
    '', 
    param_d 
); 

    dbms_output.put_line(param_c); 

    dbms_output.put_line(nvl(param_d, 'null')); 

end; 

この出力すべき:これを考えられて誰にでも

0 
null 
関連する問題