2010-11-07 50 views
2

我要調用從Oracle服務器的存儲過程不在我們的控制之下 所以挖後,我在Groovy寫了一個腳本知道這個程序的內容和 它是這樣這是有效的Oracle存儲過程

PROCEDURE SAM2_update_message_status (
     msg_id  IN NUMBER, 
     sam4_id  IN NUMBER, 
     msg_status IN NUMBER, 
    smsc_answer IN VARCHAR2 
    ) 
    IS 
    BEGIN 
    UPDATE TRC_MESSAGES_REMINDERS 
    SET msg_status = msg_status 
    WHERE MSG_ID = msg_id; 
    COMMIT; 

從我的編程經驗來看這沒有意義MSG_ID = msg_id,msg_status = msg_status 但我不知道它在oracle中是否一樣。

我打電話給它,但沒有錯誤,我發送的值沒有反映在表上。

這是一個有效的程序?

感謝

+0

它不僅沒有意義,而且很昂貴:過程將更新表中的每一行(至少MSG_ID不爲空)! – 2010-11-08 01:01:09

回答

9

通過範圍規則,將使用列名的參數名稱前,這樣的更新沒有做任何事情。我總是在每個參數名稱前加上「p_」以避免這種衝突。

+0

謝謝man.your答案將是我的論點:) – ibmkhd 2010-11-07 13:56:52

+0

我曾經在也使用某種前綴來指示變量或參數的地方工作。其中一個使用「IN_」,「OUT_」和「INO_」也表示參數的方向。 – 2010-11-07 19:59:58

+1

根據Oracle的「最佳實踐」總是使用別名:例如'UPDATE TRC_MESSAGES_REMINDERS t SET t.msg_status = SAM2_update_message_status.msg_status WHERE t.MSG_ID = SAM2_update_message_status.msg_id' – 2010-11-08 01:00:02