【问题标题】:why is auto-increment trigger creation in oracle failing?为什么在 oracle 中创建自动增量触发器失败?
【发布时间】:2015-09-01 23:38:45
【问题描述】:

使用 Oracle Database 11g 企业版 11.2.0.1.0 - 64 位生产 我正在尝试为自动增量创建触发器。这个解决方案在整个网络上都有讨论,并且几乎被认为是 Oracle 的标准自动增量解决方案。例如this Stack Overflow article 似乎是确定的。

因此,在引导下,我们有这个:

如果您使用的是 Oracle 11.1 或更高版本,您可以将触发器简化为 位

CREATE OR REPLACE TRIGGER trigger_name
  BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  :new.primary_key_column := name_of_sequence.nextval;
END;

我完全按照这个食谱做。在我的脚本中,我创建了序列。我创建表格。

但是每次脚本开始创建触发器时,它似乎都进入了一个永远无法摆脱的无限循环。触发器永远不会被创建,并且脚本中任何低于此的 SQL 语句都不会被执行。

我已经盯着它看了一百万次了。我的副本是准确的。我可能做错了什么?

【问题讨论】:

    标签: oracle11g triggers auto-increment


    【解决方案1】:

    尝试使用斜杠

    CREATE OR REPLACE TRIGGER trigger_name
      BEFORE INSERT ON table_name
      FOR EACH ROW
    BEGIN
      :new.primary_key_column := name_of_sequence.nextval;
    END;
    /
    

    【讨论】:

    • 因为 ;用于 PL/SQL 结束语句; SQLPLUS 不能用它来表示“终止当前语句,执行它并将其存储到 SQLPLUS 缓冲区”,因为我们希望整个 PL/SQL 块完全在缓冲区中,然后执行它。
    猜你喜欢
    • 2019-10-24
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2011-02-16
    • 2012-01-09
    • 2013-04-29
    • 2011-02-28
    相关资源
    最近更新 更多