我使用以下代码执行了大约5个存储过程(参数将根据存储过程而有所不同)。除了下面的SP,这些工作正常。 以下代码的输出是: p_out = 2 p_msg ='执行时异常'
在SP中,它将进入异常块。任何人都可以告诉我确切的问题。
代码:
Database db = DatabaseFactory.CreateDatabase("OracleDBConnectionString");
OracleCommand oracleCommand = new OracleCommand();
oracleCommand.CommandType = CommandType.StoredProcedure;
oracleCommand.CommandText = "PCK_ADMIN.PROC_VALIDATE_USER";
oracleCommand.Parameters.Add("P_USERNAME", OracleDbType.Varchar2).Value = "ddd";
oracleCommand.Parameters.Add("P_out", OracleDbType.Int32).Direction = ParameterDirection.Output;
oracleCommand.Parameters.Add("P_msg", OracleDbType.Varchar2).Direction = ParameterDirection.Output;
db.ExecuteNonQuery(oracleCommand);
string outValue = oracleCommand.Parameters["P_out"].Value.ToString();
string outMsg = oracleCommand.Parameters["P_msg"].Value.ToString();
存储过程是:
create or replace
PACKAGE BODY PCK_ADMIN AS
PROCEDURE PROC_VALIDATE_USER
(P_USERNAME IN USR_USER.USERNAME%TYPE,
P_out OUT NUMBER,
P_msg OUT VARCHAR2) AS
v_cnt NUMBER(5):=0;
BEGIN
P_OUT := 0;
Select count(USERID) into v_cnt from usr_user
where username = P_USERNAME;
IF v_cnt = 0 then
p_out := 0;
p_msg := 'Record doesnot exists';
ELSE
p_out := 1;
p_msg := 'Record already exists';
END IF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
p_out := 2;
p_msg := 'exception while execution';
END PROC_VALIDATE_USER;
END PCK_ADMIN;
usr_user的表结构是
USERNAME VARCHAR2(20 BYTE)
USERID NUMBER
答案 0 :(得分:1)
我为P_msg输出参数指定了大小并且它有效。
oracleCommand.Parameters.Add("P_msg", OracleDbType.Varchar2, 50).Direction = ParameterDirection.Output;