在toad for oracle10中对存储过程调试没有问题!
在.NET中调试,报上面的错误!其中页面代码为        public int BlackInfoAdd(GM.Model.BLACKINFO model)
        {
            int rowsAffected;
            OracleParameter[] parameters = {
                new OracleParameter("ReturnValue",OracleType.Int16,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null),
                    new OracleParameter("vFlag", OracleType.Number),
                    new OracleParameter("vprior", OracleType.Number),
                    new OracleParameter("vblackNumber", OracleType.Number)
                    };
            //parameters[0].Direction = ParameterDirection.ReturnValue;
            parameters[1].Value = model.FLAG;
            parameters[2].Value = model.PRIOR;
            parameters[3].Value = model.BLACKNUMBER;            return DbHelperOra.RunProcedure("UP_BLACKINFO_ADD", parameters,out rowsAffected);
            
        }
----------------------------------------- public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
int result;
connection.Open();
OracleCommand command = BuildIntCommand(connection,storedProcName, parameters );
rowsAffected = command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
//Connection.Close();
return result;
}
}
-------------------------------------------------存储过程为:CREATE OR REPLACE PROCEDURE EFENCE."UP_BLACKINFO_ADD" (
 ReturnValue OUT int,
vflag number,
vprior number,
vblackNumber number
)
AS
BEGIN
insert into BLACKINFO values(SEQ_BLACK_ID.NEXTVAL,vPrior,vFlag,vBlackNumber,null,0);if (SQL%Rowcount=1) then
SELECT SEQ_BLACK_ID.CURRVAL INTO  ReturnValue FROM DUAL;
else
ReturnValue:=0;
end if;END UP_BLACKINFO_ADD;
不清楚到底错哪里,分不多,请兄弟们帮忙。

解决方案 »

  1.   

    单独过程的写法没什么问题 估计看是你的 C#中问题 你要么到sqlplus运行下过程
      

  2.   

    我想插入数据库后,通过ReturnValue获取最新的BLACK_ID,
    这个存储过程 
    execute immediate UP_BLACKINFO_ADD (0,0,0,11111111);
    报错为:
    ORA-06550: 第一行,第17列:
    PLS-00103:出现符号"UP_BLACKINFO_ADD"在需要下列之一时:
    := . ( @ % 符号 ":="被替换为"UP_BLACKINFO_ADD" 后继续。

    不知道什么错误!!
      

  3.   

    调用出错 因为你的含有out参数 不能这样调用var num number
    exec UP_BLACKINFO_ADD (:num,0,0,11111111)
    print num
      

  4.   

    --or
    declare
    v number;
    begin
    UP_BLACKINFO_ADD (v,0,0,11111111);
    dbms_output.put_line(v);
    end;
      

  5.   

    OracleParameter没指定类型,默认是in参数,out参数要指定类型.
      

  6.   


    谢谢楼上的兄弟,
    通过这种方式在SQLPLUS中能够得到 num ,但通过.NET调用存储过程依然有问题。
    这个比较迷茫。是不是ReturnValue前需要加“:”表示是输出字段;new OracleParameter(":ReturnValue",OracleType.Int16,4,……这个自己测试下,另外有个问题。
    通过上述SQLPLUS,num每次不是+1,而是+2,这个是什么道理。存储过程里面有问题么?
      

  7.   


    就一个。.NET调用还是出现那个错误。oracle和sql 2005 的存储过程调用区别很大,转到oracle开发,我太菜了。很不明确,不用存储过程,用sql语句倒是没有问题,但没有返回值,不能确定是否插入成功