sql >> Database teknologi >  >> RDS >> Oracle

Trigger med Merge statement i oracle

Du har alle dine kildedata blandet sammen i din fusionserklæring, formoder jeg. Du vil kun overveje de rækker, der indsættes, ikke?

Jeg tror, ​​at din trigger skal være noget som:

CREATE OR REPLACE TRIGGER test_tri
   after INSERT
   ON test1
   FOR EACH ROW WHEN (NEW.col5 >= '01-MAY-16')
   DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   IF INSERTING
   THEN
        MERGE INTO test_hist hist
        USING (select :new.package_id, :new.col1, :new.col2, :new.col3, :new.col4, :new.col5
               from   dual) t1
          ON (t1.PACKAGE_ID=hist.PACKAGE_ID)
        WHEN MATCHED THEN
          UPDATE SET hist.col5=t1.col5
        WHEN NOT MATCHED THEN
          INSERT (col1, col2, col3, col4, col5)
          VALUES (t1.col1, t1.col2, t1.col3, t1.col4, t1.col5);
   END IF;  
   COMMIT;
END;
/

N.B. hvis :new.col5 er en datokolonne, skal du ændre:

FOR EACH ROW WHEN (NEW.col5 >= '01-MAY-16')

til

FOR EACH ROW WHEN (NEW.col5 >= to_date('01/05/2016', 'dd/mm/yyyy'))

Årstal har 4 cifre (jeg har gættet, at du mente 2016 og ikke 1916!).




  1. Hvad er den bedste og nemmeste måde at udfylde en dropdown baseret på en anden dropdown

  2. Kan ikke indlæse DLL "OraOps10.dll"

  3. fejl:kommando 'x86_64-linux-gnu-gcc' ved installation af mysqlclient

  4. Vælg den nærmeste numeriske værdi med MySQL-forespørgsel