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判断 

解决方案 »

  1.   

    你的if判断是对的啊  第二次走update 
    这句话没理解“按理说这2个条件不同应该走insert语句
      

  2.   

    你写的都是多余的。。直接使用sql%notfound就可以搞定
    直接就是
    update_statement;
    if sql%notfound then
    insert_statement
    end if
      

  3.   

    如果没有数据更新的话sql%notfound返回为真。
      

  4.   

    你的意思先执行update 然后做判断 这样肯定不行的
    我select 要查询出 有没有记录 
    有记录我才更新  没有的话 我就插入
      

  5.   

    也是不行  如果记录没有的话 还会走update
      

  6.   

    没记录更新的话,sql%notfound为true吗?
      

  7.   

     if  sql%notfound then
        insert 
      else
        update 
      end if;现在有没有记录都会走update   根本不走insert 如果没有记录的话 应该走的是insert  有记录的话 才更新它的数据
      

  8.   

    275263973
    一个的插入的思路都是这样的。
    当你像一个表里插入记录的时候,为了避免数据的重复,先做update,然后根据update之后的sql%notfound的判断是否有数据更新,如果有数据更新这个变量返回的为false,没有返回为true,我们就可以根据返回的true进行插入操作,这样就保证了插入的数和原表的数据没有冲突
      

  9.   

    我看到 这个 如果存在 ...update 如果不存在 insert
    我就想到了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