我正在尝试执行一个触发器,在insert语句之后将一些插入到列中。例如,我有一个列有列的表:
Column1 Column2 Column3
我正在将数据插入第1列,插入表(Column1)值('256234','234234')。 现在我想自动插入到COlumn2 TImestamp和Column3 Value“Y”中,所以输出应该看起来:
Column1 Column2 Column3
256234 2015-10-28 08:48 Y
234234 2015-10-28 08:48 Y
伙计们,你能帮帮我吗?我试图使用光标
最后我得到了类似的东西:
create or replace trigger name
after insert on table
declare
c1 sys_refcursor;
idx varchar2(200);
begin
open c1 for select Column1 from table ;
loop
fetch c1 into idx;
exit when c1%NOTFOUND;
update table a1 set a1.Column2 = (select to_char(sysdate,'YYYYMMDDHHMISS') from dual) where Column1=idx;
update table a1 set a1.Column3 = (select 'Y' from dual) where Column1=idx;
end loop;
close c1;
end;
它工作正常,但我想知道是否还有其他更好的解决方案呢?
答案 0 :(得分:4)
无需游标甚至更新:
create or replace trigger name
before insert on table_x
begin
:new.column2 := sysdate;
:new.column3 := 'Y';
end;
/
但是你需要before
触发器,因为after
触发器无法修改新插入的行。
但为什么不直接为这些列定义默认值,那么根本不需要触发器:
create table table_x
(
column_1 integer,
column_2 date default sysdate,
column_3 varchar(1) default 'Y'
);
答案 1 :(得分:1)
您可以创建类似的触发器:
CREATE OR REPLACE TRIGGER "TRG_NAME"
BEFORE INSERT ON "TABLE_NAME"
FOR EACH ROW
DECLARE
BEGIN
:NEW.Column2 := to_char(sysdate,'YYYYMMDDHHMISS');
:NEW.Column3 := 'Y';
END TRG_NAME ;
/
ALTER TRIGGER "TRG_NAME" ENABLE;
/
希望这个PL / SQL能帮到你..