create trigger increment_trigger before insert on Agent for each row begin select increment_seq.nextval into :new.ID from dual; end;
Når jeg forsøger at indsætte en ny række i tabellen får jeg en ORA-04098: trigger increment_trigger is invalid and failed re-validation.
Har ikke arbejdet med Triggers før, så jeg er ret lost. Er der en der kan give mig en hånd?
Følgende er sequencen increment_seq: create sequence increment_seq start with 1 increment by 1 nomaxvalue;
Formålet er at tælle mit ID-felt i tabellen Agent en op, hver gang der oprettes en ny Agent - præcis som auto_increment i MySQL eller Identity(1,1) i MS SQL. Hvis der findes en bedre løsning, er jeg lutter øren.
alternativet er at hente sequencen ud i det omgivende programmeringssprog - som regel skal man bruge værdien bagefter, og så er det rart at vide hvilket id den record har fået.
SQL> CREATE TABLE agent (id NUMBER, text VARCHAR2(100));
Table created.
SQL> CREATE SEQUENCE increment_seq;
Sequence created.
SQL> CREATE OR REPLACE TRIGGER increment_trigger 2 BEFORE INSERT ON agent 3 FOR EACH ROW 4 BEGIN 5 SELECT increment_seq.nextval INTO :new.ID FROM dual; 6 END; 7 /
Trigger created.
SQL> INSERT INTO agent (text) VALUES ('En tekst');
1 row created.
SQL> INSERT INTO agent (text) VALUES ('En anden tekst');
1 row created.
SQL> SELECT * FROM agent;
ID TEXT ---------- ----------------------------------------------------- 1 En tekst 2 En anden tekst
Får fejlen: Error: Invalid cursor state. (State:24000, Native Code: 0)
Nogen idé om, hvad det betyder?
PFT
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.