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;
/
关于性能问题,我认为您真的应该尝试一下。我觉得真的不会有这么大的负面影响。
我想在 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;
/
关于性能问题,我认为您真的应该尝试一下。我觉得真的不会有这么大的负面影响。