天天看點

.net 執行oracle存儲過程時 找不到存儲過程名,總是找函數的原因

原代碼部分:

存儲過程:

procedure ChangeWorkTask(p_pt_id           int,
                           p_pt_pid          int,
                           p_pt_name         varchar2,
                           p_pt_planstart    date,
                           p_pt_planend      date,
                           p_pt_realstart    date,
                           p_pt_realend      date,
                           p_pt_remark       varchar2,
                           ResultValue       out number) as
           

界面上調用的部分:

public bool ChangeWorkTask(int id, int pid, string name, DateTime planstart, DateTime planend, DateTime realstart, DateTime realend, string remark)
        {
            OracleParameter[] param = { 
                                           new OracleParameter("p_pt_id",OracleType.Number),
                                          new OracleParameter("p_pt_pid",OracleType.Number),
                                          new OracleParameter("p_pt_name",OracleType.VarChar,200),
                                          new OracleParameter("p_pt_planstart",OracleType.DateTime),
                                        new OracleParameter("p_pt_planend",OracleType.DateTime),
                                        new OracleParameter("p_pt_realstart",OracleType.DateTime),
                                        new OracleParameter("p_pt_realend",OracleType.DateTime),
                                        new OracleParameter("p_pt_remark",OracleType.VarChar,4000),
                                        new OracleParameter("p_pt_actualmanday",OracleType.Number),
                                        new OracleParameter("p_pt_company",OracleType.VarChar,200),
                                        new OracleParameter("p_pt_product",OracleType.VarChar,200),
                                         new OracleParameter("ResultValue",OracleType.Number,4,ParameterDirection.Output,string.Empty,DataRowVersion.Default,true,null)
                                     };
            int rowEffect;
            param[0].Value = id;
            param[1].Value = pid;
            param[2].Value = name;
            param[3].Value = planstart;
            param[4].Value = planend;
            param[5].Value = realstart;
            param[6].Value = realend;
            param[7].Value = remark;
            param[8].Value = actualmanday;
            param[9].Value = company;
            param[10].Value = product;
            int result=   DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param,out rowEffect);
            if (result == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
           

就是在調用存儲過程的時候,即

   int result= DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param,out rowEffect);    報錯

錯誤如下:

ORA-06550: 第 1 行, 第 23 列:

PLS-00222: 在此範圍中不存在名為 ‘PRJ_PersonalLogTask_PKG.ChangeWorkTask' 的函數 

ORA-06550: 第 1 行, 第 7 列:

PL/SQL: Statement ignored

但是,在資料庫中,可以找到此包,也能找到此存儲過程。且資料庫的連接配接也是正常的。

我在網上查了半天,也沒有找到解決方案,隻看到一篇文章遇到這樣的問題。但沒看懂解決方法。

http://blog.csdn.net/changnan85/article/details/1798722

後來,我感覺好像是輸入輸出參數那個部分,我好像沒弄清楚。

現解決了,把解決方案記下來。

對于存儲過程中,含有輸出類型的參數,如: ResultValue out number   時,在界面上 傳參時,不能用   int result= DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param,out rowEffect);     這種形式    要修改成:

DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param);
            decimal result = Convert.ToDecimal(param[11].Value);
            if (result == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
           

即可!