gpt4 book ai didi

sql - Oracle - 如何使用合并根据其他表和列的值更新列

转载 作者:行者123 更新时间:2023-12-01 19:31:27 25 4
gpt4 key购买 nike

我想根据其他列和其他表的值比较来更新关闭日期列中的值。我使用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.

我总是找到PSOUG尽管 documentation 对此类事情来说是一个很好的引用还有一些很好的例子。

关于sql - Oracle - 如何使用合并根据其他表和列的值更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11398397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com