select count(*) into LJBH from WMS_U_MERGE_PALLET where MATERIAL_CODE=Material_code and PALLET_CODE=TrayCode;
dbms_output.put_line('是否存在:'||LJBH);
if LJBH > 0 then
update
else
insert 第一次执行的时候 TrayCode=P1100,Material_code=20010BB
走else语句 因为在WMS_U_MERGE_PALLET查询不到第2次执行的时候 TrayCode=P1100,Material_code=200AAA他返回LJBH=1 走update 语句 按理说这2个条件不同应该走insert语句在sql语句查询中 第2次 返回count=0 但是oracle下方依然显示是一行被选择,在线求解 ,怎么做if判断
dbms_output.put_line('是否存在:'||LJBH);
if LJBH > 0 then
update
else
insert 第一次执行的时候 TrayCode=P1100,Material_code=20010BB
走else语句 因为在WMS_U_MERGE_PALLET查询不到第2次执行的时候 TrayCode=P1100,Material_code=200AAA他返回LJBH=1 走update 语句 按理说这2个条件不同应该走insert语句在sql语句查询中 第2次 返回count=0 但是oracle下方依然显示是一行被选择,在线求解 ,怎么做if判断
这句话没理解“按理说这2个条件不同应该走insert语句”
直接就是
update_statement;
if sql%notfound then
insert_statement
end if
我select 要查询出 有没有记录
有记录我才更新 没有的话 我就插入
insert
else
update
end if;现在有没有记录都会走update 根本不走insert 如果没有记录的话 应该走的是insert 有记录的话 才更新它的数据
一个的插入的思路都是这样的。
当你像一个表里插入记录的时候,为了避免数据的重复,先做update,然后根据update之后的sql%notfound的判断是否有数据更新,如果有数据更新这个变量返回的为false,没有返回为true,我们就可以根据返回的true进行插入操作,这样就保证了插入的数和原表的数据没有冲突
我就想到了Merge
既然oracle给你做好了这个功能 直接用酒好了Merge INTO WMS_U_MERGE_PALLE k
using (select Material_code as MATERIAL_CODE,TrayCode as PALLET_CODE from dual) p
on (k.MATERIAL_CODE=p.MATERIAL_CODE and k.PALLET_CODE=p.PALLET_CODE)
when matched then
update ...
when not matched then
insert values();select count(*) into LJBH from WMS_U_MERGE_PALLET where MATERIAL_CODE=Material_code and PALLET_CODE=TrayCode;
dbms_output.put_line('是否存在:'||LJBH);
if LJBH > 0 then
update
else
insert