c#
  • asp.net
  • oracle
  • ado.net
  • plsql
  • 2012-12-29 28 views 0 likes 
    0

    我的代碼的錯誤名稱/號碼:Oracle。查詢中的參數。可變

    oracleCom.CommandText = @"declare P_ID tbl_objects.i_id%TYPE; 
              BEGIN 
              UPDATE tbl_objects 
              SET i_status_id = 234 
              WHERE s_code = '" + objectsChanged[j] + 
              @"' RETURNING i_id INTO P_ID; 
               :param_id := P_ID; 
              END;"; 
    oracleCom.Parameters.Add("param_id", OracleType.Number).Direction = ParameterDirection.Output; 
    try 
    { 
        oracleCom.ExecuteNonQuery(); 
    } 
    catch 
    {----------} 
    

    編譯器生成一個錯誤:變量的 錯誤名稱/號碼。 但是當我在pl/sql開發者中使用這個sql時,一切正常。

    此代碼正常工作:

    OracleCommand oracleCom = new OracleCommand 
    { 
        Connection = oraConnect, 
        CommandText = @"declare P_ID tbl_objects.i_id%TYPE; 
            BEGIN insert into tbl_objects 
               (s_code, i_status_id) 
               values 
               (:s_code, 234) 
             RETURNING I_ID INTO :p_id; 
            END;" 
    }; 
    
    +0

    如果這是一個編譯器錯誤,與運行時錯誤相反,這意味着在Java代碼中存在錯誤,而不是PL/SQL字符串中的錯誤。編譯器表示有什麼錯誤? –

    +0

    在PL/DEVELOPER中,它正常工作 – user1848942

    回答

    0

    OracleCommand不能處理多行的存儲過程。您必須將您的CommandText更改爲一行。 (只需刪除所有新行)。

    我個人有一種方法,用空格替換新行,這樣我就可以存儲格式化的命令,但在將它們放入OracleCommand之前將它們「壓平」。

    +0

    我在問題結尾添加的代碼正確工作 – user1848942

    0

    這可能只是一個小小的錯誤。相反的:

    :param_id = P_ID; 
    

    它應該是:

    :param_id := P_ID; 
    

    (分配,而不是平等的運營商)。

    +0

    我更正了這一行。但它沒有幫助我。 – user1848942

    相關問題