1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as mni
SQL>
SQL> Create table team (
2 id number(6) primary key,
3 nom Varchar2(10)
4 )
5 /
Table created
SQL> Create table player (
2 id number(6) Primary key,
3 nom Varchar2(10),
4 prenom Varchar2(10),
5 team_id references team(id) deferrable initially deferred
6 )
7 /
Table created
SQL> create sequence seq_team
2 /
Sequence created
SQL> create sequence seq_player
2 /
Sequence created
SQL> create or replace
2 TRIGGER TRI_PLAYER_ID
3 BEFORE INSERT ON player
4 FOR EACH ROW
5 WHEN (new.id IS NULL)
6 DECLARE
7 v_index number;
8 BEGIN
9 SELECT seq_player.NEXTVAL
10 INTO :new.id
11 FROM dual;
12 --
13 SELECT seq_team.currval
14 INTO v_index
15 FROM dual;
16
17 v_index := v_index + 1;
18
19 :new.team_id := v_index;
20
21 END;
22 /
Trigger created
SQL> create or replace
2 TRIGGER TRI_TEAM_ID
3 BEFORE INSERT ON team
4 FOR EACH ROW
5 WHEN (new.id IS NULL)
6
7 DECLARE
8 v_nb number;
9
10 BEGIN
11 SELECT seq_team.NEXTVAL
12 INTO :new.id
13 FROM dual;
14
15 SELECT count(*) INTO v_nb
16 FROM player
17 WHERE team_id = :new.id;
18
19 IF (v_nb < 2) THEN
20 Raise_Application_Error (-20001, 'Cardinalite non respectee');
21 END IF;
22 END;
23 /
Trigger created
SQL>
SQL> INSERT INTO player (nom, prenom) VALUES ('AB', 'GH');
INSERT INTO player (nom, prenom) VALUES ('AB', 'GH')
ORA-08002: séquence SEQ_TEAM.CURRVAL pas encore définie dans cette session
ORA-06512: à "MNI.TRI_PLAYER_ID", ligne 8
ORA-04088: erreur lors d'exécution du déclencheur 'MNI.TRI_PLAYER_ID'
SQL> INSERT INTO player (nom, prenom) VALUES ('CD', 'IJ');
INSERT INTO player (nom, prenom) VALUES ('CD', 'IJ')
ORA-08002: séquence SEQ_TEAM.CURRVAL pas encore définie dans cette session
ORA-06512: à "MNI.TRI_PLAYER_ID", ligne 8
ORA-04088: erreur lors d'exécution du déclencheur 'MNI.TRI_PLAYER_ID'
SQL> INSERT INTO player (nom, prenom) VALUES ('EF', 'KL');
INSERT INTO player (nom, prenom) VALUES ('EF', 'KL')
ORA-08002: séquence SEQ_TEAM.CURRVAL pas encore définie dans cette session
ORA-06512: à "MNI.TRI_PLAYER_ID", ligne 8
ORA-04088: erreur lors d'exécution du déclencheur 'MNI.TRI_PLAYER_ID'
SQL> INSERT INTO team (nom) VALUES ('Toulon');
INSERT INTO team (nom) VALUES ('Toulon')
ORA-20001: Cardinalite non respectee
ORA-06512: à "MNI.TRI_TEAM_ID", ligne 14
ORA-04088: erreur lors d'exécution du déclencheur 'MNI.TRI_TEAM_ID'
SQL> COMMIT;
Commit complete
SQL> |
Partager