Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 匹配时更新不工作oracle合并_Sql_Oracle_Insert Update_On Duplicate Key - Fatal编程技术网

Sql 匹配时更新不工作oracle合并

Sql 匹配时更新不工作oracle合并,sql,oracle,insert-update,on-duplicate-key,Sql,Oracle,Insert Update,On Duplicate Key,这里有一些有趣的东西!merge语句工作正常。但当值匹配时,它不会按预期将状态更新为“B”。知道为什么吗 merge into bbbt b using (select bank,ifsc,branch, center,district,state, address,status from rtgbrn_temp where ifsc in (SELECT ifsc

这里有一些有趣的东西!
merge
语句工作正常。但当值匹配时,它不会按预期将状态更新为“B”。知道为什么吗

merge into bbbt b 
using (select bank,ifsc,branch,
              center,district,state,
              address,status 
         from rtgbrn_temp 
        where ifsc in (SELECT ifsc 
                         FROM rtgbrn_temp 
                        MINUS 
                       SELECT ifsc_code 
                         FROM bbbt)
        ) x
   on (x.ifsc = b.ifsc_code)
 when matched then 
   update 
      set rtgs_stat = 'B' 
    where (x.ifsc=b.ifsc_code)
 when not matched then 
   insert (bankid,benbrn_code,brn_name,
           brn_addr,brn_loc,brn_stat,
           brn_city,coun_code,
           remarks,ifsc_code,
           rtgs_stat)
   values (substr(x.ifsc,1,4), substr(x.ifsc,5), 
           x.branch, x.address, x.district, 
           x.state, x.center,'IN', x.bank, x.ifsc,'R');
[还尝试在重复更新时使用,但因错误而无法工作]

SQL Error: ORA-00933: SQL command not properly ended!

insert into bbbt(bankid,benbrn_code,brn_name,brn_addr,brn_loc,brn_stat,brn_city,coun_code,remarks,ifsc_code,rtgs_stat)
select substr(x.ifsc,1,4), substr(x.ifsc,5), x.branch, x.address, x.district, x.state, x.center,'IN', x.bank, x.ifsc,'R' from 
(select bank,ifsc,branch,center,district,state,address,status from rtgbrn_temp where ifsc in (SELECT ifsc FROM rtgbrn_temp MINUS SELECT ifsc_code FROM bbbt))x
ON DUPLICATE KEY UPDATE rtgs_stat = 'B'; 

请分享你的知识,谢谢

查询中的值无法匹配。

请仔细查看查询的这一部分

select ..., ifsc, .....
from rtgbrn_temp 
where ifsc in (........
               .........
               MINUS 
               SELECT ifsc_code 
               FROM bbbt )
此查询检索
bbbt
表中不等于任何
ifsc\u代码的
ifsc
代码。

然后查询使用以下代码匹配记录:

 on (x.ifsc = b.ifsc_code)
上述内容与

on (subquery.ifsc = bbbt.ifsc_code)
因为
x
是子查询的别名,
b
bbbt
表名。

想一想
子查询只返回不等于bbbt.ifsc_code的任何值的代码 这意味着,条件
subquery.ifsc=bbbt.ifsc\u code
从不匹配编辑的代码:

merge into bbbt b using (select bank,ifsc,branch,center,district,state,address,status from rtgbrn_temp) x
on (x.ifsc = b.ifsc_code)
when matched then update set rtgs_stat = 'B'
when not matched then insert (bankid,benbrn_code,brn_name,brn_addr,brn_loc,brn_stat,brn_city,coun_code,remarks,ifsc_code,rtgs_stat)
values (substr(x.ifsc,1,4), substr(x.ifsc,5), x.branch, x.address, x.district, x.state, x.center,'IN', x.bank, x.ifsc,'R');

您不需要更新部分中的
where
。你没有试过吗?是的,我试过了。但这没有什么区别..检查您的数据--代码看起来正常。它正在合并,但匹配时不会更新为“B”。。不过……嘿,你说得绝对正确。真的谢谢你的启发!在删除重复项后,我将代码更改为以下内容,这样您就不会出现错误“SQL错误:ORA-30926:无法在源表中获得一组稳定的行”