2013-07-16 44 views
5

私は何かが欠けていた場合、私は知らない私がやっていることは次のとおりです。PL/SQL:数値または値のエラー:文字列バッファが小さすぎ%のROWTYPE

私は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 

を取得するには、同じ表のと(私の小さな理解のように)同じデータ型であるはずの分野ではありませんか?

EDIT: SELECT *とすべての作品を試しました。私は間違いなくここに何かを欠いている。私はちょうどそれがあることを知らない。

+0

Charの代わりにVarchar2を使用してみませんか? –

+0

うわー本当に問題を解決しました。答えを入れて、私は最高の答えとしてそれをマークします。 本当に困惑しているのは、同じテーブルと列から「someChar」がクエリされているので、col4と同じデータ型と長さがあると予想しています。 – Incognito

答えて

5

私はこの問題が、固定長の文字列であるCharの使用に起因すると考えています。あなたのコードのどこかで、長さNのCharまたはvarchar2文字列を長さMの文字に配置しようとしています。M> N

3

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

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

OracleParameterのoparamProjectId = mycom.Parameters.Add(。 "p_open_flag"、OracleDbTypeのVARCHAR2)。 oparamProjectId.Direction = ParameterDirection.Output; oparamProjectId.Size = 100;

+0

パーフェクト!最終的にエラーを見つけようとした後、私はその理由を知っています。どうもありがとうございました! –

関連する問題