2010-05-04 65 views
3

當我嘗試使用ODP.NET執行一個創建過程時,我得到ORA-24344:編譯錯誤成功。但是,當我在SQL Developer中運行相同的語句時,它會成功編譯。有誰知道我需要改變以便讓我的程序編譯?這是一個字符集問題嗎?ODP.NET過程編譯

我使用Oracle 10g Express中,.NET 3.5 SP1,和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

做一個SELECT * FROM USER_ERRORS,你應該看到什麼被記錄爲錯誤。 可能有一些奇怪的字符在爬行..

PS。在應用程序中創建過程似乎很奇怪。

+0

感謝您的答覆。奇怪的是,但仍然是一個要求!

TABLE1_GET PROCEDURE PLS-00103:出現符號 「」 期待當下列中的一種: (;與AUTHID作爲集羣壓縮命令使用編譯的 封裝了外部確定性parallel_enable流水線 ERROR 103
Bobcat1506 2010-05-05 01:16:08

5

的解決方案是:

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

謝謝SOOOO了!這要花十年時間才能搞定! – Pascal 2011-09-27 23:10:57