PL / SQL:数字或值错误:字符串缓冲区太小%ROWTYPE

时间:2013-07-16 05:26:20

标签: oracle plsql procedure

我不知道我是否遗漏了一些东西,但我正在做的是:

我有一个返回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

Aren的字段应该来自同一个表格和相同的数据类型(因为我的理解不多)?

编辑: 我尝试SELECT *并且每个都有效。我在这里肯定遗漏了一些东西。我只是不知道它是。

2 个答案:

答案 0 :(得分:5)

我敢打赌问题源于使用固定长度字符串Char。不确定在哪里,但是在代码中的某处,你试图将长度为N的Char或varchar2字符串放入长度为M的字符中,其中M> 1。 Ñ

答案 1 :(得分:3)

通过我的.Net代码访问Oracle SP时出现此错误。 如果有人面临此错误,那么对于他/她指定输入/输出参数的大小将有助于解决问题。

示例代码如下:

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