运行Oracle包:ORA-06550 || ORA-06502

时间:2015-06-02 13:09:35

标签: c# .net oracle

当我尝试从Oracle的.net提供程序或Microsoft oracle提供程序在我们的oracle数据库上运行程序包时,它给出了以下错误:

{"ORA-06550: line 1, column 7:\nPLS-00221: 'BEGIN_TRANSACTION' is not a procedure or is undefined\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored"}

这是我的C#代码:

OracleConnection cn = new OracleConnection(connectionString);
OracleCommand cmd = new OracleCommand();

cmd.Connection = cn;
cmd.CommandText = "DOTNET.SYSTEM_CRUD.BEGIN_TRANSACTION";
cmd.CommandType = CommandType.StoredProcedure;


cmd.Parameters.Add("p_user_id", OracleDbType.Decimal, ParameterDirection.Input).Value = 4720;
cmd.Parameters.Add("p_commt", OracleDbType.Varchar2, ParameterDirection.Input).Value = "TEST";
//cmd.Parameters.Add("return_value", OracleDbType.Decimal).Direction = ParameterDirection.ReturnValue;

cmd.ExecuteNonQuery(); 

这是我的包装定义:

Function Begin_Transaction ( p_user_id  IN NUMBER,
                             p_commt    IN  VARCHAR2
                            )
  RETURN Number;

当我取消注释我添加的第三个参数时,我得到一个不同的错误:

{"ORA-06502: PL/SQL: numeric or value error: character to number conversion error\nORA-06512: at line 1"}

2 个答案:

答案 0 :(得分:0)

请尝试以下代码:

using (OracleCommand cmd = new OracleCommand())
{

    cmd.Connection = cn;
    cmd.CommandText = "DOTNET.SYSTEM_CRUD.BEGIN_TRANSACTION";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.BindByName = true;

    cmd.Parameters.Add(new OracleParameter("p_user_id", OracleDbType.Decimal, 4720, ParameterDirection.Input));
    cmd.Parameters.Add(new OracleParameter("p_commt", OracleDbType.Varchar2, "TEST", ParameterDirection.Input));

    cmd.ExecuteNonQuery();
}

注释:

请勿原谅using施工中的一次性物品。

答案 1 :(得分:0)

我从包定义中删除了用户名,并且还为返回值取消注释了我的add参数。

using (OracleConnection cn = new OracleConnection(connectionString))
            {
                using (OracleCommand cmd = new OracleCommand())
                {

                    cmd.Connection = cn;
                    cmd.CommandText = "SYSTEM_CRUD.BEGIN_TRANSACTION";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.BindByName = true;


                    cmd.Parameters.Add("p_user_id", OracleDbType.Decimal, ParameterDirection.Input).Value = 4720;
                    cmd.Parameters.Add("p_commt", OracleDbType.Varchar2, ParameterDirection.Input).Value = "TEST";
                    cmd.Parameters.Add("return_value", OracleDbType.Decimal).Direction = ParameterDirection.ReturnValue;

                    cmd.ExecuteNonQuery();