【问题标题】:Oracle auto increment trigger issueOracle 自动增量触发器问题
【发布时间】: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 语句

非常感谢。

【问题讨论】:

  • 你用的是什么客户端?
  • 为什么不直接使用:new.line_num := SPSS_QUOTE_LINE_ITEMS_SEQ.NEXTVAL; 而不是select ... from dual;
  • @Codo,我尝试使用建议,但是当我在脚本末尾添加 / 时,我收到另一个错误,显示 [代码:17439,SQL 状态:99999] SQL 类型无效: sqlKind = 未初始化。
  • @sstan,我正在使用 DBVisualizer

标签: oracle oracle11g 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 来引用新值。

【讨论】:

  • 感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 2019-10-24
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 2015-11-11
  • 2020-02-13
相关资源
最近更新 更多