ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小C#代码异常

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

我正在尝试使用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 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
                        });

正是我需要的。非常感谢。