2010-10-19 46 views
2

Je suis en train d'apprendre Oracle et je comprends le concept de déclencheurs et de séquences. Ce que je n'arrive pas à trouver, c'est comment ils sont utilisés ensemble d'une manière auto-incrémentée similaire à un paramètre SqlServer Identity. Dans un exemple très simple, j'ai une table appelée Employees qui a trois champs (tous requis): EmployeeID (PK), FirstName, LastName. J'ai créé une séquence pour obtenir la valeur suivante pour le champ ID. J'ai alors créé un déclencheur qui ressemble à ceci:Comment utiliser un déclencheur qui obtient la valeur suivante dans une séquence

CREATE OR REPLACE TRIGGER MyFirstTrigger 
BEFORE INSERT ON EMPLOYEES FOR EACH ROW 
BEGIN 
    Select EMP_SEQ.NextVal into :NEW.EMPLOYEEID from dual; 
END MyFirstTrigger; 
/

Cependant, comment est-ce utilisé dans une instruction d'insertion? Une instruction d'insertion avec uniquement les valeurs FirstName et LastName échoue pour "Pas assez de valeurs" (j'utilise Toad, d'ailleurs). Si je dois inclure EMP_SEQ.NextVal comme première valeur de l'instruction d'insertion, quel est le point de déclenchement?

J'espère que cela a du sens. Merci d'avance.

Répondre

4

Vous pouvez omettre l'ID de l'insert, mais vous devez spécifier les colonnes cibles:

insert into employees (firstname, lastname) values ('Tony', 'Andrews'); 

Vous devriez ne pas avoir d'insertions sans liste de colonnes dans le code de production; Cependant, si vous l'avez fait, vous pouvez simplement passer une valeur NULL pour la colonne D:

insert into employees values (null, 'Tony', 'Andrews'); 
+0

Impressionnant. C'est exactement ce que j'avais besoin de savoir. C'est tellement simple, mais je n'ai rien trouvé sur Internet ou dans le guide de l'utilisateur d'Oracle. Peut-être que c'est supposé que les gens le savent. Merci. –

0

Cela devrait fonctionner sinon je vais décrire la raison possible de cela et l'utilisation.

INSERT INTO EMPLOYEES (FirstName, LastName) VALUES ('Name', 'LastName') 

et que vous serez en mesure de le faire

INSERT INTO EMPLOYEES (EMPLOYEEID , FirstName, LastName) VALUES (null, 'Name', 'LastName')