ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小C#代码异常
我正在尝试使用asp.net上的#代码中的in和out参数执行一些oracle pl/sql过程。我想从out参数中检索值。但当我执行时,我得到了一个oracle异常,比如“ORA-06502:PL/SQL:数值或值错误:字符串缓冲区太小”。我现在该怎么办?请帮帮我 代码: 我的oracle程序是:ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小C#代码异常,c#,asp.net,oracle,plsql,C#,Asp.net,Oracle,Plsql,我正在尝试使用asp.net上的#代码中的in和out参数执行一些oracle pl/sql过程。我想从out参数中检索值。但当我执行时,我得到了一个oracle异常,比如“ORA-06502:PL/SQL:数值或值错误:字符串缓冲区太小”。我现在该怎么办?请帮帮我 代码: 我的oracle程序是: create or replace procedure check_user_372640( user_id in varchar2, id out varchar2 ) as u_id varch
create or replace procedure check_user_372640(
user_id in varchar2,
id out varchar2
)
as
u_id varchar2(20);
begin
select user_id into u_id from ACTIVITY_USERS_372640 where user_id=user_id;
id:=u_id;
end;
问题源于使用固定长度的字符串Char。
不确定在哪里,但在代码中的某个地方,您尝试放置一个字符或
将长度为N的varchar2字符串转换为长度为M的字符,其中M>N
你能试一下吗
锚定数据类型,如%type.
语法:-
tablename.colname%type.
您需要增加u\u id的大小
u_id varchar2(4000);
它现在正在为我工作。
错误在于我将参数“Id”声明为varchar2。但是我没有给它任何尺寸。
现在我已经声明了参数的最大大小,并且它工作正常
cmd_chk.Parameters.Add("id", OracleDbType.Varchar2,32767).Direction = ParameterDirection.Output;
我们遇到的另一个与此相关的问题是Oracle函数,对于特殊的ParameterDirection.ReturnValue(***ParameterDirection的所有其余部分都可以工作) 如果您像下面那样对其进行标记,则直接在构造函数中它不起作用:
OracleParameter retval = (new OracleParameter("myretval", OracleDbType.Long, 10);
retval.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(retval);
cmd.Parameters.Add(新的OracleParameter(“myretval”,OracleDbType.Long,10,ParameterDirection.ReturnValue))代码>
导致如下错误:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-01403: no data found
ORA-06512: at line 1
如果您这样声明它,它将起作用:
OracleParameter retval = (new OracleParameter("myretval", OracleDbType.Long, 10);
retval.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(retval);
在将out值声明为Varchar2时遇到了相同的问题。向参数添加Size属性解决了该问题
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "function_name";
command.Parameters.Add(new OracleParameter
{
ParameterName = "result",
Size = 1,
Direction = ParameterDirection.ReturnValue,
OracleDbType = OracleDbType.Varchar2
});
正是我需要的。非常感谢。