Skip to content
Advertisement

Is there a way to convert this query into Oracle query using merge statement?

   Update
   vtnhmashaupl as UPL 
   inner join
      vtsmvaccounts vacc 
      on vaccines. Vaiban = upl.vaiban 
   Inner join
      vtsmvaccfmrmap as vfmr 
      on vacc.vaibanid = vfmr.vaibanid 
      and vfmr.fmrcode = upl.fmrcode 
   inner join
      vtnhmbudget bd 
      on bd.hloccode = vacc.vacustidnt 
   inner join
      vtnhmbudgetdtls dtls 
      on dtls.fmrcode = upl.fmrcode 
      and ifnull (Dtls.fnyear, bd.fnyear) = in_fnyear 
set
   upl.buddtlsid = dtls.buddtlsid, upl.budid = dtls.budid, upl.hloccode = bd.hloccode;

Advertisement

Answer

I think this does what you expect. Without table structures and sample input data it is not possible for me to test it.

merge into vtnhmashaupl upl
using ( select vacc.vaiban
               , vfmr.fmrcode
               , dtls.buddtlsid
               , dtls.budid
               , bd.hloccode
        from vtsmvaccounts vacc 
        inner join vtsmvaccfmrmap as vfmr 
          on vacc.vaibanid = vfmr.vaibanid 
        inner join vtnhmbudget bd 
          on bd.hloccode = vacc.vacustidnt 
        inner join vtnhmbudgetdtls dtls 
          on dtls.fmrcode = vfmr.fmrcode
          and nvl (dtls.fnyear, bd.fnyear) = in_fnyear 
       ) sq
on ( sq.vaiban  = upl.vaiban  
     and sq.fmrcode = upl.fmrcode )         
when matched then 
    update          
    set upl.buddtlsid = sq.buddtlsid
       , upl.budid = sq.budid
       , upl.hloccode = sq.hloccode;
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement