
[英]How to update values of a column based on other table in Oracle SQL syntax
[英]Oracle - How to use merge to update a column based on the values from other table and columns
我想根据其他列和其他表的值比较来更新closed_date列中的值。 我使用Oracle merge into语句。 但这给了我一个错误:
错误:ORA-00969:缺少ON关键字
我不确定出了什么问题。 我想念什么吗? 下面是我的脚本:
MERGE INTO PR_DMN dmn
USING (select alg.PR_DMN_ID, alg.PR_ACTIVITY_ID, alg.ACTIVITY_TS from PR_ACTIVITY_LOG) alg
ON dmn.PR_DMN_ID = alg.PR_DMN_ID
-- update
WHEN MATCHED THEN
UPDATE SET dmn.CLOSED_DATE =
(CASE
WHEN alg.PR_ACTIVITY_ID IN ('10009', '10010', '10011', '10013') THEN alg.ACTIVITY_TS
WHEN alg.PR_ACTIVITY_ID = '10005' AND dmn.CONT_RESP_TS <= dmn.CONT_RESP_DUE_TS THEN dmn.CONT_RESP_TS
WHEN alg.PR_ACTIVITY_ID = '10008' AND dmn.CORR_RESP_TS <= dmn.CORR_RESP_DUE_TS THEN dmn.CORR_RESP_TS
ELSE dmn.CLOSED_DATE
END)
正如您在一个简单示例中看到的那样,您有两个错误。 首先, on
子句需要用括号括起来。 其次,您不能在该子查询的using
子句中引用该子选择的别名。
如果我使用您的表名设置一个简单的示例,如下所示:
create table pr_dmn as
select level as a, sysdate as b
from dual
connect by level <= 10;
Table created.
create table PR_ACTIVITY_LOG as
select level as a, sysdate as b
from dual
connect by level <= 20;
Table created.
然后执行正确的查询,它应该可以工作:
merge into pr_dmn dmn
using (select a, b from pr_activity_log) alg -- no alg. inside the sub-query
on (dmn.a = alg.a) -- wrapped in parenthesis
when matched then
update set dmn.b = alg.b
;
10 rows merged.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.