【发布时间】:2015-06-11 00:20:42
【问题描述】:
这些是我尝试从我的 c# 代码执行存储过程时遇到的错误。
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "MYAPP.PRO_COMPANYSEARCH", line 28
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 1
我的 c# 代码如下所示:
using (var mCon = new OracleConnection(MyConnectionString))
{
myCon.Open();
using (OracleCommand myOracleCmd = myCon.CreateCommand())
{
myOracleCmd.CommandType = CommandType.StoredProcedure;
myOracleCmd.CommandText = "PRO_COMPANYSEARCH";
myOracleCmd.Parameters.Add("o_result_cur", OracleDbType.RefCursor, ParameterDirection.Output);
myOracleCmd.Parameters.Add("o_sqlcode", OracleDbType.Int32, ParameterDirection.Output);
myOracleCmd.Parameters.Add("o_sqlmsg", OracleDbType.Varchar2, ParameterDirection.Output);
var reader = myOracleCmd.ExecuteReader();
dtCompany.Load(reader);
reader.Dispose();
}
}
有3个输出参数,其中2个用于跟踪异常,另一个用于结果。
编辑:这是我的存储过程,(不敢相信我忘了发布它)
CREATE OR REPLACE
PROCEDURE PRO_COMPANYSEARCH (
o_result_cur OUT SYS_REFCURSOR,
o_sqlcode OUT NUMBER,
o_sqlmsg OUT VARCHAR2)
IS
BEGIN
o_sqlmsg := 'SUCCESS';
o_sqlcode := 0;
OPEN o_result_cur FOR Select distinct irint, irname, irabbv, iropt From vw_issue;
EXCEPTION
WHEN NO_DATA_FOUND THEN
o_sqlcode := SQLCODE * -1;
o_sqlmsg := 'NO DATA FOUND';
WHEN OTHERS THEN
o_sqlcode := SQLCODE * -1; --This is line 28, I removed unnecessary comments.
o_sqlmsg := SUBSTR(SQLERRM, 1, 200);
END PRO_COMPANYSEARCH;
【问题讨论】:
-
我猜你的存储过程的第 28 行可能有助于识别问题。
-
我发布了存储过程。
-
我怀疑这是问题所在。通过从 pl/sql 块调用过程来运行独立测试,看看是否仍然出现错误。
-
当我在 sql developer 中运行存储过程时,它工作正常,并运行查询。
标签: c# oracle stored-procedures