Oracle SQL-触发器插入到表中,并从序列中传递空值

用户名

我有两个表TABLE_ATABLE_B当将某些东西插入到TABLE_A中时,会触发一个触发器,该触发器还将数据插入到TABLE_B中TABLE_A具有一个ID列,该ID列使用序列填充。然后,此ID也将插入TABLE_B中这是整个DDL:

CREATE TABLE  "TABLE_A" 
   (    "ID" NUMBER(8,0) NOT NULL ENABLE, 
    "COLUMN1" NUMBER(8,0) NOT NULL ENABLE, 
    "COLUMN2" NUMBER(4,0) NOT NULL ENABLE
   )
/

CREATE TABLE  "TABLE_B" 
   (    "ID" NUMBER(8,0) NOT NULL ENABLE, 
    "COLUMN1" NUMBER(8,0) NOT NULL ENABLE, 
    "COLUMN2" NUMBER(4,0) NOT NULL ENABLE
   )

/   

  CREATE UNIQUE INDEX  "AID_PK" ON  "TABLE_A" ("ID")
/

ALTER TABLE  "TABLE_A" ADD CONSTRAINT "AID_PK" PRIMARY KEY ("ID")
  USING INDEX  "AID_PK"  ENABLE
/


create or replace TRIGGER my_trigger
BEFORE INSERT OR UPDATE OR DELETE ON TABLE_A
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO TABLE_B(
ID,
COLUMN1,
COLUMN2)
VALUES(
:new.ID,
:new.COLUMN1,
:new.COLUMN2);
END IF;
END;

/
ALTER TRIGGER  "my_trigger" ENABLE
/

 CREATE SEQUENCE   "MY_SEQ"  MINVALUE 1 MAXVALUE 999999999999999 INCREMENT BY 1 START WITH 5002 CACHE 20 NOORDER  NOCYCLE  NOKEEP  NOSCALE  GLOBAL;


/

CREATE OR REPLACE EDITIONABLE TRIGGER  "MYSEQ_SEQ_IOT" 
before insert on table_a
for each row
begin
select MY_SEQ.nextval into :new.id from dual;
end;

/
ALTER TRIGGER  "MYSEQ_SEQ_IOT" ENABLE
/

现在,当我运行以下语句时:

INSERT INTO PER_ART(
    COLUMN1,
    COLUMN2
    )
VALUES(
    1111111,
    2222222); 

我收到此错误:

ORA-01400: cannot insert NULL into ("TABLE_B"."ID")
ORA-06512: at "my_trigger", line 7
ORA-04088: error during execution of trigger 'my_trigger'

为什么在应填充序列时ID为null?

安迪丹

您的两个触发器触发的顺序是不确定的。我认为,最好的解决方案是只使用一个触发器:

create or replace TRIGGER my_trigger
  BEFORE INSERT ON TABLE_A
  FOR EACH ROW
BEGIN
  select MY_SEQ.nextval
    into :new.id 
    from dual;

  INSERT INTO TABLE_B(
    ID,
    COLUMN1,
    COLUMN2)
  VALUES(
    :new.ID,    -- Or use MY_SEQ.curreval
    :new.COLUMN1,
    :new.COLUMN2);
END;

如果由于某种原因必须有两个触发器,则可以使用CREATE TRIGGER语句的FOLLOWS和PRECEDES子句控制它们的触发顺序。有关控制触发顺序的详细信息,请参阅文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle PL / SQL约束触发器

来自分类Dev

从SQL中的序列中获取最后一个值并将其插入到另一个表(Oracle)

来自分类Dev

从SQL中的序列中获取最后一个值并将其插入到另一个表(Oracle)

来自分类Dev

在Oracle PL / SQL中,触发器名称的最大长度是多少?

来自分类Dev

ORACLE SQL-无法获取触发器来从正在更新的表中获取值的总和/计数

来自分类Dev

在Oracle,SQL中创建表

来自分类Dev

Oracle PL / SQL触发器-捕获名称错误的插入

来自分类Dev

在Oracle SQL Developer中插入后如何添加触发器以自动计算行数

来自分类Dev

如何在Oracle PL / SQL中实现AFTER INSERT触发器?

来自分类Dev

检查新旧表值的Oracle SQL触发器

来自分类Dev

Oracle sql中的表值函数循环

来自分类Dev

触发器在Oracle PL / SQL中无法正确执行

来自分类Dev

用于视图的Oracle SQL触发器

来自分类Dev

Oracle SQL触发器

来自分类Dev

Oracle SQL触发器在插入/更新时计算2个值并更新第三个值

来自分类Dev

在Oracle,SQL中创建表

来自分类Dev

触发器中的SQL ORACLE错误

来自分类Dev

Oracle中的PL / SQL触发器错误

来自分类Dev

Oracle触发器不会在另一个表中插入值

来自分类Dev

SQL Server触发器信息插入到另一个表中

来自分类Dev

Oracle PL / SQL触发器-捕获名称错误的插入

来自分类Dev

Oracle中的PL / SQL触发器

来自分类Dev

在SQL Server中插入触发器

来自分类Dev

Oracle Merge Sql,在目标中插入并从源中删除

来自分类Dev

ORACLE SQL 触发器和 SUM()

来自分类Dev

更新不同表的 Oracle PL/SQL 触发器

来自分类Dev

我们如何在 SQL Server 2012 的触发器中使用会话值并插入到表中?

来自分类Dev

Oracle SQL 在表中插入日期

来自分类Dev

在 Oracle SQL 表中插入值的有效方法

Related 相关文章

  1. 1

    Oracle PL / SQL约束触发器

  2. 2

    从SQL中的序列中获取最后一个值并将其插入到另一个表(Oracle)

  3. 3

    从SQL中的序列中获取最后一个值并将其插入到另一个表(Oracle)

  4. 4

    在Oracle PL / SQL中,触发器名称的最大长度是多少?

  5. 5

    ORACLE SQL-无法获取触发器来从正在更新的表中获取值的总和/计数

  6. 6

    在Oracle,SQL中创建表

  7. 7

    Oracle PL / SQL触发器-捕获名称错误的插入

  8. 8

    在Oracle SQL Developer中插入后如何添加触发器以自动计算行数

  9. 9

    如何在Oracle PL / SQL中实现AFTER INSERT触发器?

  10. 10

    检查新旧表值的Oracle SQL触发器

  11. 11

    Oracle sql中的表值函数循环

  12. 12

    触发器在Oracle PL / SQL中无法正确执行

  13. 13

    用于视图的Oracle SQL触发器

  14. 14

    Oracle SQL触发器

  15. 15

    Oracle SQL触发器在插入/更新时计算2个值并更新第三个值

  16. 16

    在Oracle,SQL中创建表

  17. 17

    触发器中的SQL ORACLE错误

  18. 18

    Oracle中的PL / SQL触发器错误

  19. 19

    Oracle触发器不会在另一个表中插入值

  20. 20

    SQL Server触发器信息插入到另一个表中

  21. 21

    Oracle PL / SQL触发器-捕获名称错误的插入

  22. 22

    Oracle中的PL / SQL触发器

  23. 23

    在SQL Server中插入触发器

  24. 24

    Oracle Merge Sql,在目标中插入并从源中删除

  25. 25

    ORACLE SQL 触发器和 SUM()

  26. 26

    更新不同表的 Oracle PL/SQL 触发器

  27. 27

    我们如何在 SQL Server 2012 的触发器中使用会话值并插入到表中?

  28. 28

    Oracle SQL 在表中插入日期

  29. 29

    在 Oracle SQL 表中插入值的有效方法

热门标签

归档