declare
  m_storeloc varchar2(30); 
  q_invbasdoc varchar2(30); k_invbasdoc varchar2(30);
  q_invcode varchar2(30); k_invcode varchar2(30);i number;
begin 
   select pk_calbody into m_storeloc from bd_calbody where bd_calbody.pk_calbody = :new.pk_calbody;
   select count(*) into i from bd_produce where pk_invbasdoc = :new.pk_invbasdoc;    
   if i = 1 then
      if m_storeloc = '01' then 
        select invcode into k_invcode from v_bd_inv_ven_k where pk_invbasdoc=:new.pk_invbasdoc;
        insert into inf_nc_trans(transnum,storeloc,optype,cmdnum,enterdate) 
          values(k_invcode,'L0017','insert','item',sysdate);
      else if m_storeloc = '02' then
        select invcode into q_invcode from v_bd_inv_ven where                               pk_invbasdoc=:new.pk_invbasdoc;
        insert into inf_nc_trans(transnum,storeloc,optype,cmdnum,enterdate) 
          values(q_invcode,'L1001','insert','item',sysdate);
      end if;
   else if i > 1 then    //在这就要报错,写成这样elsif i...也报错
      if m_calbody = '01' then
         select pk_invbasdoc,invcode into k_invbasdoc,k_invcode from v_bd_inv_ven_k v where v.pk_invbasdoc = :new.pk_invbasdoc;
          if k_invbasdoc = null then
             insert into inf_nc_trans(transnum,storeloc,optype,cmdnum,enterdate) 
                values(k_invcode,'L0017','insert','item',sysdate);
          end if;
      else if m_calbody = '02' then
         select pk_invbasdoc,invcode into q_invbasdoc,q_invcode from v_bd_inv_ven v where v.pk_invbasdoc = :new.pk_invbasdoc;
         if q_invbasdoc = null then
            insert into inf_nc_trans(transnum,storeloc,optype,cmdnum,enterdate) 
                values(q_invcode,'L1001','insert','item',sysdate);
         end if;
      end if;
    end if ;
end;  ///这里也有错哦,不知道咋了

解决方案 »

  1.   

    你可以参照一下这个表:
    user_errors,里面的信息会帮你忙的
      

  2.   

    else if 应该改为:“elsif”
      

  3.   

    i 先初始化。
    count 肯定是 >= 0 的吧。条件不用那么多巴
      

  4.   


    else if m_storeloc = '02' then
    ====>
    elsif m_storeloc = '02' then
    就行了
      

  5.   

    补充还有一个地方:else if m_calbody = '02' then
    ====〉
    elsif m_calbody = '02' then
      

  6.   

    条件if语句的写法 if..then..end if;   if...then...elsif(多个)....end if;注意elsif不是else if,elseif.