5

.NET アプリからストアド プロシージャを呼び出しています。proc は Varchar2 型の out パラメータを返します。out パラメータをフェッチするために、パラメータを OracleParameter としてコマンドに渡します。

parm12 = new OracleParameter("testkey"
                              , OracleDbType.Varchar2
                              , out2
                              , ParameterDirection.Output);

proc を実行すると、エラーが発生します

PL/SQL: numeric or value error: character string buffer too small.
4

2 に答える 2

7

答えを見つけました。

OUT パラメータについては、varchar の最大サイズ - 32767 を宣言し、動作を開始しました。

簡単にするために、ストアド プロシージャは VARCHAR2 型のパラメータ OUT を返します。しかし、.NET i からの出力を消費するには、サイズなしで VARCHAR2 を渡していました。そのため、戻り値を受け取るために割り当てられたバッファ スペースは 0 バイトでした。proc が 0 バイトである割り当てられたバッファを超える値を返すと、エラーが発生します。

だから私はC#コードでVARCHAR2-32767の最大値を指定し、それが動作し始めました:)。

于 2010-01-16T15:32:06.937 に答える
1

コードout2には、パラメーターの長さを指定する引数があります。したがって、その変数の値を確認してください。これは、プロシージャの出力に十分な長さがないように見えるためです。

于 2010-01-16T14:37:25.867 に答える