2010-11-07 62 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