2016-08-22 71 views
0

我在Oracle 11g中創建自動增量觸發器時遇到問題。如果有人能指出我做錯了什麼,我會非常感激。我對序列的腳本是這樣的:Oracle自動增量觸發器問題

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

觸發腳本:

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; 

我得到的錯誤: [編號:900,SQL狀態:42000] ORA-00900:無效的SQL聲明

非常感謝。

+2

可能相同的問題:http://stackoverflow.com/questions/29450495/autoincrement-in-oracle-with-seq-and-trigger-invalid-sql-statement – Codo

+0

你使用什麼客戶端? – sstan

+0

爲什麼不簡單':new.line_num:= SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL;'而不是'select ... from dual;' –

回答

0

這樣做是爲了修改觸發如下正確的方法:

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; 

或者,如果我按照自己的方式則是這樣

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; 

您通常使用使用條款中的觸發器:舊的引用列的舊值和:new引用新值。

+0

感謝您的回覆。 – John