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

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

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

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 回答