2016-08-22 2 views
0

Je rencontre un problème lors de la création du déclencheur d'incrémentation automatique dans Oracle 11g. Si quelqu'un peut signaler ce que je fais mal, je l'apprécierais vraiment. Mon script pour la séquence est la suivante:Problème déclencheur d'incrémentation automatique Oracle

CREATE SEQUENCE SPSS_QUOTE_LINE_ITEMS_SEQ start with 1 
increment by 1 
minvalue 1; 

Le script de déclenchement:

CREATE OR REPLACE TRIGGER SPSSQUOTELINEITEMS_ON_INSERT 
BEFORE INSERT ON SPSS_QUOTE_LINE_ITEMS 
FOR EACH ROW 

BEGIN 
SELECT SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL 
INTO :new.line_num 
FROM dual; 
END; 

L'erreur que je reçois: [Code: 900, Etat SQL: 42000] ORA-00900: SQL non valide déclaration

Merci beaucoup.

+2

Éventuellement le même problème: http://stackoverflow.com/questions/29450495/autoincrement-in-oracle-with-seq-and-trigger-invalid-sql-statement – Codo

+0

Quel client utilisez-vous? – sstan

+0

Pourquoi ne pas simplement ': new.line_num: = SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL;' au lieu de 'select ... from dual;' –

Répondre

0

La bonne façon de le faire pour modifier votre déclencheur comme ci-dessous:

CREATE OR REPLACE TRIGGER SPSSQUOTELINEITEMS_ON_INSERT 
BEFORE INSERT ON SPSS_QUOTE_LINE_ITEMS 
FOR EACH ROW 
BEGIN 

:new.line_num := SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL; 
--No need to write any Select Into statement here. 
END; 

Ou si je suis votre chemin il va comme

CREATE OR REPLACE TRIGGER SPSSQUOTELINEITEMS_ON_INSERT 
BEFORE INSERT ON SPSS_QUOTE_LINE_ITEMS 
FOR EACH ROW 
declare 
var number; 

BEGIN 

SELECT SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL 
INTO var 
FROM dual; 

:new.line_num :=var; 

END; 

Vous utilisez normalement les termes dans un déclencheur à l'aide : old pour référencer l'ancienne valeur de la colonne et: new pour référencer la nouvelle valeur.

+0

Merci pour la réponse. – John