/// <summary>
/// 执行存储过程,返回影响的行数
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="rowsAffected">影响的行数</param>
/// <returns></returns>
        public static int RunProcedure(string storedProcName, IDataParameter[] parameters)
{
            using (OracleConnection connection = new OracleConnection(connectionString))
{
                try
                {
                    int result;
                    connection.Open();
                    OracleCommand command = BuildIntCommand(connection, storedProcName, parameters);
                    command.ExecuteNonQuery();
                    result = (int)command.Parameters["ReturnValue"].Value;
                    connection.Close();
                    return result;
                }
                catch (Exception)
                {
                    throw;
                }
}
}
这个是在oraclehelper中的一个调用存储过程的方法,我连接的是oracle数据库。当我断点测试到
command.ExecuteNonQuery();
这句话时,出现下面的错误:
ORA-06550: 第 1 行, 第 23 列: 
PLS-00222: 在此范围中不存在名为 'AJ_SONGDAHUIZHENG_INSERT' 的函数
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored

是什么原因啊?

解决方案 »

  1.   


    没有 AJ_SONGDAHUIZHENG_INSERT 函数。。
      

  2.   

    create or replace procedure aj_songdahuizheng_insert(--创建(修改)存储过程
    s_xtajbh nvarchar2,--输入变量
    s_ssdr nvarchar2,
    s_wsmcjs nvarchar2,
    s_sddd nvarchar2,
    s_ssdrqm nvarchar2,
    s_sdrq nvarchar2,
    s_sdr nvarchar2,
    s_bz nvarchar2,
    s_zltz number,
    s_sxgz number,
    s_tzgz number,
    s_cljd number,
    o_res  out number--输出变量,这里的out参数在存储过程中必须给他赋值,否则存储过程编译出错。
    )isbegin
    --添加
    insert into aj_songdahuizheng values(s_xtajbh,s_ssdr,s_wsmcjs,s_sddd,s_ssdrqm,s_sdrq,s_sdr,s_bz,s_zltz,s_sxgz,s_tzgz,s_cljd);
    o_res := 1;--给输出参数赋值,增加返回值(此操作必须在过程中执行)
    COMMIT;--增加事务控制
    EXCEPTION
       WHEN OTHERS  THEN
       ROLLBACK;
       o_res := 0;
    end aj_songdahuizheng_insert;
    有的,你看看。
      

  3.   

    BuildIntCommand(connection, storedProcName, parameters);
    里面呢
      

  4.   

    /// <summary>
    /// 创建 OracleCommand 对象实例(用来返回一个整数值)
    /// </summary>
    /// <param name="storedProcName">存储过程名</param>
    /// <param name="parameters">存储过程参数</param>
    /// <returns>OracleCommand 对象实例</returns>
    private static OracleCommand BuildIntCommand(OracleConnection connection,string storedProcName, IDataParameter[] parameters)
    {
    OracleCommand command = BuildQueryCommand(connection,storedProcName, parameters );
    command.Parameters.Add( new OracleParameter ( "ReturnValue",
                    OracleType.Int32, 4, ParameterDirection.ReturnValue,
    false,0,0,string.Empty,DataRowVersion.Default,null ));
    return command;
    }
    这样子,好像这里没有错吧。
      

  5.   

    这个要用dbo.AJ_SONGDAHUIZHENG_INSERT 或具体的owner名字。你的创建不是dbo或连接帐号没有这个权限吧。在SSMS里用同一用户试一下就知道了。
      

  6.   

    你的存储过程里根本没有叫 ReturnValue 的参数呀。
    o_res  <-- 这个名字应该保持一致。ParameterDirection.ReturnValue 也不对,应该是Output。另外,还有很多参数呢?http://blog.csdn.net/fangxinggood/article/details/507989
      

  7.   

    > 在此范围中不存在名为 'AJ_SONGDAHUIZHENG_INSERT' 的函数这个应该是权限问题。创建一个synonym并赋给连接用户权限吧。