根据输入参数对更新 sql 脚本进行条件处理
Posted
技术标签:
【中文标题】根据输入参数对更新 sql 脚本进行条件处理【英文标题】:conditional handling of update sql script depending on input parameter 【发布时间】: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;
【问题讨论】:
【参考方案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 中使用更新语句,这看起来不错。以上是关于根据输入参数对更新 sql 脚本进行条件处理的主要内容,如果未能解决你的问题,请参考以下文章