Oracle 中的触发器

Trigger in Oracle

我想在 oracle 中创建一个触发器。 当有人在 table 上插入时,触发器应该更改插入语句的一个元素。示例:

有人插入:

"User1" "Road2" "Town2" "Age44"

我的触发器应该这样做:

"User1 "Road2" "Town2 "**Age35**"

但这不应该是

"after insert on table1 begin update table1 set age='Age35'"

我需要像 "instead of insert on table1 begin insert into table1 values "User" "Road" "Town" "Age35"

这样可以立即完成的东西

这样触发器只改变插入的一个元素,其余元素相等。我真的很感谢你们能提供的任何帮助。我不知道该怎么做。

只需使用 "before insert" 而不是 "after insert" 来编辑年龄变量的值。

你可以在插入之前完成:

create table test (myuser varchar2(100), age number);
create or replace trigger test_trigger 
before insert on test
referencing new as new 
for each row
begin
  if :new.age = 45 then 
     :new.age := 35;
  end if;
end;
/
insert into test values ('user1',45);
insert into test values ('user2',46);
select * from test;

输出:

Table created.
Trigger created.
1 row created.
1 row created.

    MYUSER         AGE
----------  ----------
user1               35                                                              
user2               46

2 rows selected.

编辑:

你也可以使用WHEN。但是你不能避免逐行进行。您不会以某种方式获得整个插入语句并对其进行操作。没有 instead of trigger 表格。

create or replace trigger test_trigger 
    before insert on test
    referencing new as new 
    for each row
    when(new.age = 45)
    begin
      :new.age := 35;
    end;
    /

关于性能问题,我认为您真的应该尝试一下。我觉得真的不会有这么大的负面影响。