2012-11-12 1 views
1

J'ai une table appelée employés avec les données suivantes:problème oracle avec déclencheur et nextval

Employee_ID  Employee_Salary  Employee_HireDate 
    100    ----     ----- 
    101    ----     ----- 

Maintenant, je veux créer un déclencheur qui me permet de chercher la nouvelle employee_id et incrémentons il peut être mis dans la table. J'ai trouvé un exemple comme celui-ci:

CREATE OR REPLACE TRIGGER employee_b 
BEFORE INSERT ON employee 
FOR EACH ROW 
DECLARE 
     v_employee_id employee.employee_id%TYPE; 
BEGIN 
     SELECT employee_ID_SEQ.NEXTVAL 
     INTO v_employee_id 
      FROM dual; 
     :NEW.employee_id:=v_employee_id; 
END; 

Mais l'erreur que je reçois est:

ERROR at line 4: PL/SQL: ORA-02289: sequence does not exist 

Je veux utiliser ce déclencheur avant un événement d'insertion comme:

INSERT INTO employee(employee_salary,employee_hiredate) VALUES (-----,------) 

Tous aider avec ça? Merci

+0

Il semble que votre séquence n'existe pas ... Pouvez-vous publier les résultats de 'select * from all_sequences où sequence_name = upper ('employee_ID_SEQ')'? – Ben

+0

Merci pour le commentaire, j'ai exécuté cette requête et apparaît que "Données non trouvées", comment puis-je créer une séquence dans ce cas? – Layla

+1

[La documentation] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_6015.htm#SQLRF01314) a une bonne description. – Ben

Répondre

1

run

create sequence employee_ID_SEQ start with 100 increment by 1; 

puis compilez le déclencheur et l'essayer. lire sur les séquences et définir une valeur appropriée CACHE etc (cache par défaut de 20 est probablement ok, si vous faites une tonne d'insertions rapides, vous pouvez en vouloir plus).