【问题标题】:conditional handling of update sql script depending on input parameter根据输入参数对更新 sql 脚本进行条件处理
【发布时间】:2014-04-02 14:41:21
【问题描述】:

我是 SQL 新手,使用 Oracle 11。我需要编写一个 sql 脚本,根据输入参数是否为空来使用不同的更新命令。

我需要这样的东西

['&' 后跟参数名称是我看到参数在其他此类中使用的方式 我们项目的脚本]

IF &PRG_ID IS NULL
   UPDATE PROGRAM_TABLE P SET HANDLED_IND = 'Y' WHERE EXISTS
      (SELECT 1 FROM HANDLED_PROGRAM H WHERE H.PROGRAM_ID = P.PROGRAM_ID);
ELSE
   UPDATE PROGRAM_TABLE P SET HANDLED_IND = 'Y' WHERE 
     P.PROGRAM_ID = &PRG_ID AND EXISTS
       (SELECT 1 FROM HANDLED_PROGRAM H WHERE H.PROGRAM_ID = P.PROGRAM_ID);
END IF;

【问题讨论】:

    标签: sql oracle sqlplus


    【解决方案1】:

    类似的东西(未经测试):

       UPDATE PROGRAM_TABLE P SET HANDLED_IND = 'Y' WHERE EXISTS
          (SELECT 1 FROM HANDLED_PROGRAM H WHERE H.PROGRAM_ID = P.PROGRAM_ID)
          AND (&PRG_ID IS NULL OR P.PROGRAM_ID = &PRG_ID);
    

    但考虑到这种变化可能会导致 PRG_ID 具有确定值的情况下的性能下降。

    【讨论】:

    • 谢谢 Dmitry,考虑到性能,使用 2 个查询是否合理,例如 UPDATE PROGRAM_TABLE P SET HANDLED_IND = 'Y' WHERE EXISTS (SELECT 1 FROM HANDLED_PROGRAM H WHERE H.PROGRAM_ID = P.PROGRAM_ID ) AND (&PRG_ID 为空); UPDATE PROGRAM_TABLE P SET HANDLED_IND = 'Y' WHERE EXISTS (SELECT 1 FROM HANDLED_PROGRAM H WHERE H.PROGRAM_ID = P.PROGRAM_ID) AND &PRG_ID 不为 NULL 且 P.PROGRAM_ID = &PRG_ID;
    • 并非如此。如果您由于 (&PRG_ID IS NULL OR P.PROGRAM_ID = &PRG_ID) 而遇到性能问题,我会保留您的原始代码 - 如果您在 PL/SQL 中使用更新语句,这看起来不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2016-03-07
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多