MERGE INTO MSA2008BS.ATYW_ZS_GCZL A
USING (SELECt * fROM LOADTMP.MSA2008BS_ATYW_ZS_GCZL WHERe ETL_F IN ('I','D','A')) B
ON (A.ATZSCZLOID=B.ATZSCZLOID)
WHEN MATCHED AND B.SHIPFID ='' THEN UPDATE SET
A.SHIPFID =B.SHIPFID ,
A.GCZLDJZHM=B.GCZLDJZHM ,
A.CBDJH =B.CBDJH
WHEN NOT MATCHED THEN
INSERT(A.ATZSCZLOID,A.SHIPFID,A.GCZLDJZHM,A.CBDJH,A.CBCZR)
VALUES(B.ATZSCZLOID,B.SHIPFID,B.GCZLDJZHM,B.CBDJH,B.CBCZR)
;
中因为在WHEN MATCHED后加入了AND条件即:AND B.SHIPFID =''
之后报错,是不是oracle不支持WHEN MATCHED后跟条件呢?大神帮忙.....
ORACLE关于merge into用法!
答案:3 悬赏:20
解决时间 2021-02-27 16:01
- 提问者网友:余味
- 2021-02-26 15:29
最佳答案
- 二级知识专家网友:晚安听书人
- 2021-02-26 17:03
在when matched then 和 when not matched then 后面只能加insert() values 或者 update set ....,.... ,不能附加条件,而且then 后面的语句不能使用其他语句。 另外注意到,B的域只在using里面的查询有用吧 ,如果你要使用 也得是 在Using () M 用m吧
全部回答
- 1楼网友:努力只為明天
- 2021-02-26 19:26
merge into dept60_bonuses b --更新dept60_bonuses b这个表
using ( --用一下select出的表的内容
select employee_id, salary, department_id
from hr.employees
where department_id = 60) e--用e表内容更新dept60_bonuses b表
on (b.employee_id = e.employee_id) --更新的条件 即在哪更新
when matched then --当符合上面on的条件时
update set b.bonus_amt = e.salary * 0.2 --更新setb.bonus_amt = e.salary * 0.2
where b.bonus_amt = 0 --满足更新条件
delete where (e.salary > 7500) --更新的同时做删除
when not matched then --当不满足on的条件时
insert (b.employee_id, b.bonus_amt) --做insert操作
values (e.employee_id, e.salary * 0.1)
where (e.salary < 7500);
给你一个merge的用法:
merge的用法:
merge就是通常用于match时做一个事 不match时做一个事
merge into table_a t1 --table_a表是需要更新的表
using table_e t2 -- 用于更新表的表
on (t1.userid=t2.userid) --两表之间的更新条件
when matched then --匹配关联条件,作更新处理
update set
t1.userpassword=t1.userpassword+ 1,
t1.username=t2.username --此处只是说明可以同时更新多个字段。
when not matched then --不匹配关联条件,作插入处理。如果只是作更新,下面的语句可以省略。
insert values ( t2.userid,t2.username, t2.userpassword);
- 2楼网友:何必打扰
- 2021-02-26 17:54
qiyechao
说的很对,when matched then 和 when not matched then 后面只能加insert() values 或者 update set ,B的域只在using里面的查询有用,AND B.SHIPFID ='' 写在using里面,即
MERGE INTO MSA2008BS.ATYW_ZS_GCZL A
USING (SELECT * fROM LOADTMP.MSA2008BS_ATYW_ZS_GCZL WHERe ETL_F IN ('I','D','A') AND B.SHIPFID ='' ) B
ON (A.ATZSCZLOID=B.ATZSCZLOID)
WHEN MATCHED THEN UPDATe SET
A.SHIPFID =B.SHIPFID ,
A.GCZLDJZHM=B.GCZLDJZHM ,
A.CBDJH =B.CBDJH
WHEN NOT MATCHED THEN
INSERT(A.ATZSCZLOID,A.SHIPFID,A.GCZLDJZHM,A.CBDJH,A.CBCZR)
VALUES(B.ATZSCZLOID,B.SHIPFID,B.GCZLDJZHM,B.CBDJH,B.CBCZR)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |