Création d'une clé primaire en utilisant un trigger
Bonjours à tous les abonnés du forum,
Je lance un trigger pour générer la clé primaire de la table Computer, à partir de la clé primaire de la table C_HW(qui se trouve dans la table computer),
Mais je reçois le message suivant au cours de l'exécution :
Citation:
ORA-01403: aucune donnée trouvée
Voila le code du déclencheur :
Code:
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
| create or replace trigger "T_C_K"
BEFORE
insert on "COMPUTER"
for each row
DECLARE
CT C_HW.CH_TYPE%TYPE;
CH1 CHAR(5);
CH2 CHAR(2);
CH3 CHAR(7);
NN NUMBER(4);
begin
CH1:='DE001';
SELECT S_C_K.NEXTVAL
INTO NN
FROM DUAL;
CT := :NEW.C_H_ART ;
CT:=SUBSTR(CT,1,2);
IF CT= 'NB' THEN
CH2:='WL';
ELSIF CT = 'PC' THEN
CH2:='WD';
ELSIF CT= 'SV' THEN
CH2:='WS';
ELSIF CT= 'WS' THEN
CH2:='WC';
ELSE RAISE_APPLICATION_ERROR(-20010, 'the type of computer is not existing, existings type : laptop, cad, desktop, server');
END IF;
CH3:=CONCAT(CH1,CH2);
:NEW.C_NR := CH3||LPAD(NN,4,'0');
end; |
La chose que je n'ai pas encore compris est que la séquence reste toujours à sa valeur initiale, bien que NEXTVAL soit situé au début du code (la séquence va de 4000 à 9999).
La table Computer est la suivante :
Code:
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
| CREATE TABLE "COMPUTER"
( "C_NR" VARCHAR2(5),
"C_USER" VARCHAR2(5),
"C_H_ART" VARCHAR2(10),
"C_TYP" VARCHAR2(20),
"C_HERST" VARCHAR2(20),
"C_LIEF" VARCHAR2(20),
"C_PREIS" NUMBER,
"C_BEZ" VARCHAR2(25) NOT NULL DISABLE,
"C_SERI" VARCHAR2(25),
"C_CPU" VARCHAR2(20),
"C_RAM" VARCHAR2(20),
"C_FP" VARCHAR2(40),
"C_LIEF_DAT" DATE,
"C_FREIGAB_NR" VARCHAR2(20),
"C_BEST_NR" VARCHAR2(20),
"C_BEM" VARCHAR2(500),
"C_BEST_DAT" DATE,
"C_FREIGAB_DAT" DATE,
"C_RAUM" NUMBER,
"IP_ADR" VARCHAR2(15),
"SUB_NETZ" NUMBER,
"MAC_ADR" VARCHAR2(25),
CONSTRAINT "COMPUTER_PK" PRIMARY KEY ("C_NR") ENABLE
)
/
ALTER TABLE "COMPUTER" ADD CONSTRAINT "COMPUTER_FK2" FOREIGN KEY ("C_USER")
REFERENCES "Users" ("U_NR") ENABLE
/
ALTER TABLE "COMPUTER" ADD CONSTRAINT "COMPUTER_FK3" FOREIGN KEY ("C_H_ART")
REFERENCES "C_HW" ("CH_ART") ENABLE
/ |
Les tables Users et C_HW desquelles dépendent la table computer sont déjà peuplées.