pl/sql : 执行立即更新?
Posted
技术标签:
【中文标题】pl/sql : 执行立即更新?【英文标题】:pl/sql : execute immediate update? 【发布时间】:2015-12-21 03:49:17 【问题描述】: V_SQL4 := 'UPDATE EMP_TABLE m
Set m.name = mft.name,
m.age = mft.age,
m.dept = mft.dept,
Where m.id = mft.id and
(m.name != mft.name Or
m.age != mft.age Or
m.dept != mft.dept )';
DBMS_OUTPUT.PUT_LINE(V_SQL4);
EXECUTE IMMEDIATE V_SQL4;
如何在语句中将临时表EMP_TMP
声明为mft
?
【问题讨论】:
【参考方案1】:如果我查看需求,我看不到 PL/SQL 的需求 这。更好的方法是使用 Merge。我图解了一个 下面的例子。如果动态 SQL 不是硬的和绑定的,你可以使用这个 也。让我知道这是否有帮助。
MERGE INTO EMP_TABLE m USING EMP_TMP mft
ON (m.id = mft.id AND (m.name != mft.name OR m.age != mft.age OR m.dept != mft.dept))
WHEN MATCHED THEN
UPDATE SET
m.name = mft.name,
m.age = mft.age,
m.dept = mft.dept;
【讨论】:
【参考方案2】:这个 SO post 有一个类似问题的答案。
在您的情况下,查询将转换如下
V_SQL4 := 'UPDATE EMP_TABLE m
SET (name, age, dept) = (SELECT mft.name
,mft.age
,mft.dept
FROM EMP_TMP mft
WHERE m.id = mft.id
AND m.name != mft.name Or
AND m.age != mft.age Or
AND m.dept != mft.dept
)
WHERE EXISTS (
SELECT 1
FROM EMP_TMP mft
WHERE m.id = mft.id
)';
【讨论】:
以上是关于pl/sql : 执行立即更新?的主要内容,如果未能解决你的问题,请参考以下文章