中易网

ORACLE关于merge into用法!

答案:3  悬赏:20  
解决时间 2021-02-27 16:01
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后跟条件呢?大神帮忙.....
最佳答案
在when matched then 和 when not matched then 后面只能加insert() values 或者 update set ....,.... ,不能附加条件,而且then 后面的语句不能使用其他语句。 另外注意到,B的域只在using里面的查询有用吧 ,如果你要使用 也得是 在Using () M 用m吧
全部回答
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);
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)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
正宇大酒店这个地址在什么地方,我要处理点事
邵阳顺驰汽车销售服务有限公司地址在哪,我要
想买沃尔沃电动车哪里买
下载一个电影需要花费多少流量
珍珠很轻是假的吗
如何正确拨打急救电话,为急救争取黄金时间
文件名以及“我的电脑”地址栏不能输入汉字
求助spss lack-of-fit test怎么做
大扬工业有限公司地址在什么地方,想过去办事
bilibili升级弹黁答复题以下那一个不是游戏王
曾经看过一篇文章,关于女性身体属寒性的,上
劳动法为什么会从私法演变成社会法?
淘宝群在那里有
你好,我先问下,做食品行业,东西找别人代加
双源有线广播器材地址在什么地方,想过去办事
推荐资讯
景兴昌地址在哪,我要去那里办事
开淘宝店卖什么东西适合新手起步呢,谢谢
家乡烧菜馆这个地址在什么地方,我要处理点事
冰箱基本上24小时工作不停是怎么回事
dota先知幽鬼宙斯混沌小精灵求破?
物理学专业的学生毕业可以从事什么行业
如图是法国科学家帕斯卡在1648年做的一个实验
安丘市慈埠镇圈子村村民委员会这个地址在什么
为什么我家电脑刚刚更新了显卡就进不到游戏了
通广电子怎么去啊,有知道地址的么
好又多星级农超万国城店地址在什么地方,想过
万里乡地址在什么地方,想过去办事
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?