ODP.NET 过程编译

Posted

技术标签:

【中文标题】ODP.NET 过程编译【英文标题】:ODP.NET Procedure Compilation 【发布时间】:2010-05-04 23:08:20 【问题描述】:

当我尝试使用 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);
    

【问题讨论】:

【参考方案1】:

解决办法是:

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

【讨论】:

非常感谢!我要花十年时间才能弄清楚这一点!【参考方案2】:

执行 SELECT * FROM USER_ERRORS,您应该会看到记录为错误的内容。 可能会出现一些奇怪的角色..

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

【讨论】:

感谢您的回复。奇怪的是,但仍然是一个要求! TABLE1_GETPROCEDURE1121PLS -00103:在预期以下情况之一时遇到符号“”:( ; 使用已编译包装的外部确定性并行启用流水线化的 authid 作为集群压缩顺序 ERROR103

以上是关于ODP.NET 过程编译的主要内容,如果未能解决你的问题,请参考以下文章

odp.net 使用用户定义参数的输出参数运行 oracle 存储过程

如何使用 ODP.Net 传递字节数组?

在 odp.net 上使用带有 number 属性的 oracle 对象类型

ODP.Net 数组绑定异常处理

odp.net 可以将参数传递给布尔 pl/sql 参数吗?

.NET Core 使用ODP.NET Core连接操作Oracle数据库