我不知道我是否遗漏了一些东西,但我正在做的是:
我有一个返回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 *并且每个都有效。我在这里肯定遗漏了一些东西。我只是不知道它是。
答案 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 ;