ODP.NET程序编译

时间:2010-05-04 23:08:21

标签: .net oracle odp.net

当我尝试使用ODP.NET执行创建过程时,我回到ORA-24344:编译错误成功。但是,当我在SQL Developer中运行相同的语句时,它会成功编译。有谁知道我需要改变什么来让我的程序编译?这是字符集问题吗?

我正在使用Oracle 10g Express,.NET 3.5 SP 1和ODP.NET 2.111.7.20(Oracle.DataAccess.dll版本)

    [TestMethod]
    public void OdpNet_CreateProcedure()
    {
        ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["ODP.NET"];
        using (var con = new OracleConnection(settings.ConnectionString))
        {
            con.InfoMessage += new OracleInfoMessageEventHandler(con_InfoMessage);
            con.Open();

            var cmd = new OracleCommand();
            cmd.Connection = con;

            cmd.CommandText = @"
                CREATE OR REPLACE PROCEDURE TABLE1_GET
                (
                  P_CURSOR OUT SYS_REFCURSOR
                )
                IS
                BEGIN

                  OPEN P_CURSOR FOR
                  SELECT * 
                  FROM TABLE1;

                END;";

            cmd.ExecuteNonQuery(); // ORA-24344: success with compilation error

            cmd.CommandText = @"ALTER PROCEDURE TABLE1_GET COMPILE";
            cmd.ExecuteNonQuery(); // ORA-24344: success with compilation error
        }
    }

    void con_InfoMessage(object sender, OracleInfoMessageEventArgs eventArgs)
    {
        System.Diagnostics.Debug.WriteLine(eventArgs.Message);
    }

2 个答案:

答案 0 :(得分:5)

解决方案是:

cmd.CommandText = cmd.CommandText.Replace("\r\n", "\n");

答案 1 :(得分:1)

执行SELECT * FROM USER_ERRORS,您应该看到正在记录的错误。 可能会有一些奇怪的人物爬进来......

PS。在应用程序中创建过程似乎很奇怪。