For at få tilføjet nummeret til min tabel har jeg lavet en trigger hvori jeg bruger \'new\' og \'old\'. Men jeg får af vide at jeg ikke kan anvende disse kommandoer i table level triggers (Fejl ORA-04082). Dvs. jeg får ikke lov til indsætte mit nye nummer i min tabel genereret af min Seqence.
CREATE OR REPLACE TRIGGER cd_ins_bef BEFORE INSERT ON cd_arkiv REFERENCING NEW AS new_row FOR EACH ROW DECLARE -- local variables here BEGIN SELECT cd_nr.nextval INTO :new_row.cd_nr FROM dual; END cd_ins_bef;
Jeg kaldte dem det samme... Her er en rette version.
CREATE OR REPLACE TRIGGER cd_ins_bef BEFORE INSERT ON cd_arkiv REFERENCING NEW AS new_row FOR EACH ROW DECLARE -- local variables here BEGIN SELECT cd_seq.nextval INTO :new_row.cd_nr FROM dual; END cd_ins_bef;
Nosjns har beskrevet en create or replace trigger i denne står der også FOR EACH ROW. DVS den fyrer for hver række som bliver indsat. Hvis der ikke stod FOR EACH ROW bliver triggeren fyret en gang for hvert insert statement (som kan indsætte flere rækker).
Når der er tale om en \"statement trigger\", kan du ikke anvende new eller old. Disse bruges på kolonne niveau.
CREATE OR REPLACE TRIGGER TRG_CNT_OTBLMUNDT Before INSERT OR UPDATE on OTBLMUNDT
FOR EACH ROW -- Hvis denne ikke er der har du ikke fat i en række, men et statement -- Som ORA-04082 skriver kan du ikke bruge NEW på en table level trigger. -- Den har jo en kolonne at putte værdien i. REFERENCING NEW AS new_row DECLARE BEGIN SELECT MUNDT.NEXTVAL into :new_row.pk_mundt FROM dual; END;
CREATE OR REPLACE TRIGGER TRG_CNT_OTBLMUNDT BEFORE INSERT ON cd_arkiv REFERENCING NEW AS new_row FOR EACH ROW BEGIN SELECT MUNDT.NEXTVAL into :new_row.pk_mundt FROM dual; END TRG_CNT_OTBLMUNDT;
Mange tak for hjælpen - det var For Each der gjorde det.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.