【问题标题】:PL/SQL: numeric or value error: character string buffer too small %ROWTYPEPL/SQL:数字或值错误:字符串缓冲区太小 %ROWTYPE
【发布时间】:2013-07-14 04:00:26
【问题描述】:

我不知道我是否遗漏了什么,但我正在做的是:

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

字段不应该来自同一个表和相同的数据类型(据我所知)吗?

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

【问题讨论】:

  • 为什么不使用 Varchar2 而不是 Char?

标签: oracle plsql procedure


【解决方案1】:

我敢打赌,问题源于使用固定长度字符串 Char。不知道在哪里,但是在代码的某个地方,您尝试将长度为 N 的 Char 或 varchar2 字符串放入长度为 M 的字符中,其中 M > N。

【讨论】:

    【解决方案2】:

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

    示例代码如下所示:

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

    【讨论】:

    • 完美!经过很长时间试图找到错误后,我终于知道为什么了。非常感谢!
    猜你喜欢
    • 2013-09-14
    • 2011-03-31
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2015-05-16
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多