Oracle 自动增量触发器问题
Posted
技术标签:
【中文标题】Oracle 自动增量触发器问题【英文标题】:Oracle auto increment trigger issue 【发布时间】:2016-08-22 16:19:41 【问题描述】:在 Oracle 11g 中创建自动增量触发器时遇到问题。如果有人能指出我做错了什么,我将不胜感激。我的序列脚本是这样的:
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 语句
非常感谢。
【问题讨论】:
可能同样的问题:***.com/questions/29450495/… 你用的是什么客户端? 为什么不直接使用:new.line_num := SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL;
而不是select ... from dual;
@Codo,我尝试使用建议,但是当我在脚本末尾添加 / 时,我收到另一个错误,显示 [代码:17439,SQL 状态:99999] SQL 类型无效: sqlKind = 未初始化。
@sstan,我正在使用 DBVisualizer
【参考方案1】:
修改触发器的正确方法如下:
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;
您通常在触发器中使用术语,使用 :old 来引用列的旧值,使用 :new 来引用新值。
【讨论】:
感谢您的回复。以上是关于Oracle 自动增量触发器问题的主要内容,如果未能解决你的问题,请参考以下文章