【问题标题】:Is this Valid Oracle Stored procedure这是有效的 Oracle 存储过程吗
【发布时间】:2010-11-07 13:09:52
【问题描述】:

我必须从不受我们控制的 oracle 服务器调用存储过程 所以在挖掘之后,我在 groovy 中编写了一个脚本来了解这个过程的内容和 是这样的

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中是否相同。

我调用了它,但没有错误,我发送的值也没有反映在表格上。

这是一个有效的程序吗?

谢谢

【问题讨论】:

  • 这不仅没有意义,而且代价高昂:该过程将更新表中的每一行(至少,MSG_ID 不为空)!

标签: sql oracle stored-procedures plsql


【解决方案1】:

根据范围规则,它将在参数名称之前使用列名称,因此更新不会做任何事情。我总是在每个参数名称前加上“p_”以避免这样的冲突。

【讨论】:

  • 我工作过的地方也使用某种前缀来表示变量或参数。其中之一使用“IN_”、“OUT_”和“INO_”来表示参数的方向。
  • 根据 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
猜你喜欢
  • 2011-02-20
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 2018-07-07
  • 2011-01-03
  • 2011-12-29
相关资源
最近更新 更多