2016-08-22 72 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