【问题标题】:Creating a INSERT TRIGGER in different table在不同的表中创建一个 INSERT TRIGGER
【发布时间】:2012-03-29 10:30:41
【问题描述】:

我需要有关在我的 table1 上创建触发器的帮助 这会将特定列从 table1 插入 table2。 我怎样才能做到这一点?我正在使用 Oracle 11G XE。

这是我的代码:

create trigger AllowanceTrigger
on ex_bulacan
after insert
as
insert into allowance VALUES (PLANT_ORIGIN,SO_NO, SO_STATUS,SO_REMARKS,DRIVER_NAME)
    select plant_origin, sales_order_no, status,remarks, driver_name
    from ex_bulacan;
go ; 

当我运行该命令时出现此错误

ORA-04071: missing BEFORE, AFTER or INSTEAD OF keyword

解释是:

ORA-04071。 00000 - “缺少 BEFORE、AFTER 或 INSTEAD OF 关键字”
*原因:触发器语句缺少 BEFORE/AFTER/INSTEAD OF 子句。
*操作:指定 BEFORE、AFTER 或 INSTEAD OF。

【问题讨论】:

  • 顺便说一句,这是我的声明,我使用 SQL 开发人员在 ex_bulacan 上创建触发器 AllowanceTrigger,在插入为津贴值 (PLANT_ORIGIN,SO_NO, SO_STATUS,SO_REMARKS,DRIVER_NAME) 后,在 ex_bulacan 上创建触发器 AllowanceTrigger 选择 plant_origin,sales_order_no,状态、备注、来自 ex_bulacan 的 driver_name;去;
  • 嗯,值应该是值。请将该信息也添加到原始问题中。
  • 这是一个语法错误。你应该做的是阅读文档(Amil 提供了一个链接)并找出你的代码与它不同的地方。

标签: sql triggers oracle11g


【解决方案1】:

PL/SQL 中没有“go”语句,并且您没有遵循正确的触发器定义语法(它是 well documented

试试这个:

create trigger AllowanceTrigger
after insert on ex_bulacan
begin
    insert into allowance (PLANT_ORIGIN,SO_NO, SO_STATUS,SO_REMARKS,DRIVER_NAME)
        select plant_origin, sales_order_no, status,remarks, driver_name
        from ex_bulacan;
end; 

我不确定它是否符合您的预期。它会在每次插入 statement 时触发一次,而不是针对每一行,它会将 ex_bulacan 中的 all 行插入到容差中,而不仅仅是您刚刚插入的行。也许你想要的实际上是:

create trigger AllowanceTrigger
after insert on ex_bulacan
for each row
begin
    insert into allowance (PLANT_ORIGIN,SO_NO, SO_STATUS,SO_REMARKS,DRIVER_NAME)
        values (:new.plant_origin, :new.sales_order_no, :new.status, :new.remarks, 
                :new.driver_name);
end; 

【讨论】:

  • 感谢您的回复.. 我要试试您的代码.. 我想问一下,如果我不仅想要插入,还想要更新特定数据怎么办?
  • 它的工作!非常感谢你..我想知道如何使用更新命令编译你的代码?
  • 您可以像这样在触发器中执行更新:更新配额集状态 = :new.status where so_no = :new.sales_order_no;
【解决方案2】:

您的代码中存在语法错误。您必须按此顺序指定触发器:

CREATE TRIGGER AllowanceTrigger
AFTER INSERT
ON ex_bulacan

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-02
    • 2017-03-24
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多