6

何かが欠けているかどうかはわかりませんが、私がやっていることは次のとおりです。

ROWTYPE を返す関数があります

  FUNCTION myFunc(pChar CHAR) RETURN myTable%ROWTYPE AS
    myTable_rec myTable%ROWTYPE;
  BEGIN
    SELECT col1, col2, col3
    INTO myTable_rec.col1 
      , myTable_rec.col2
      , myTable_rec.col3
    FROM myTable
    WHERE col4 = pChar;

    RETURN(myTable_rec);
  END B001_03;

次に、私の手順(上記の関数を呼び出します)で、次のように宣言しました。

myTable_rec myTable%ROWTYPE;

しかし、プロシージャを呼び出すと:

...
myTable_rec := myFunc(someChar);
...

私は得る

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

フィールドは FROM 同じテーブルと OF THE SAME データ型であるはずではありませんか (私のほとんど理解していないため)。

編集:私は * を選択しようとしましたが、すべてが機能します。ここで間違いなく何かが欠けています。私はそれがそうであることを知りません。

4

2 に答える 2

6

この問題は、固定長の文字列である Char を使用することに起因していると思います。どこかはわかりませんが、コードのどこかで、長さ N の Char または varchar2 文字列を長さ M の文字 (M > N) に入れようとしています。

于 2013-07-16T06:00:56.927 に答える
3

.Net コードから Oracle SP にアクセスしているときに、このエラーが発生しました。誰かがこのエラーに直面している場合、入力/出力パラメーターのサイズを指定すると、問題の解決に役立ちます。

サンプルコードは次のようになります:

OracleParameter oparamProjectId = mycom.Parameters.Add(" p_open_flag ", OracleDbType.Varchar2 ); oparamProjectId.Direction = ParameterDirection.Output; oparamProjectId.Size = 100 ;

于 2016-02-19T07:21:26.077 に答える