表test中字段id,name,tablename
其中字段tanblename中存储的是需要插入的表名,建立以下触发器时不能通过编译
create or replace trigger tri_i_test
after insert on test for each row
declare
begin
if :new.ID>1 then
insert into :new.tablename||(col1,col2) values (:new.id,:new.name);
end if;
end;
其中字段tanblename中存储的是需要插入的表名,建立以下触发器时不能通过编译
create or replace trigger tri_i_test
after insert on test for each row
declare
begin
if :new.ID>1 then
insert into :new.tablename||(col1,col2) values (:new.id,:new.name);
end if;
end;
是什么意思哦? 没懂! 需求说清楚点,col1和col2 咋来的哦
--我明白了
create or replace trigger tri_i_test
before insert on test
for each row
declare
sql_str varchar2(100);
begin
if :new.ID>1 then
sql_str:='insert into '||:new.tablename||'(col1,col2) values ('||:new.id||','||:new.name||')';
execute immediate sql_str;
end if;
end;
create or replace trigger tri_i_test
before insert on test
for each row
declare
sql_str varchar2(100);
begin
if :new.ID>1 then
sql_str:='insert into '||:new.tablename||'(col1,col2)
values ('||:new.id||','''||:new.tablename||''')';
execute immediate sql_str;
end if;
end;
create or replace trigger tri_i_test
before insert on test
--after 当你插入的时候:new.id已经是你插入到表中的数据成为了:old.id 了。
--before 时你的:new.id 在你的内存中。还没有插入到你的表中。之处用before
for each row
declare
sql_str varchar2(100);
begin
if :new.ID>1 then
sql_str:='insert into '||:new.tablename||'(col1,col2)
values ('||:new.id||','''||:new.tablename||''')';
execute immediate sql_str;
end if;
end;
after insert on test for each row
declare
v_sql varchar2(1000);
begin
v_sql:='insert into '||:new.tablename(col1,col2)||' values('||:new.id||','||:new.name||')';
if :new.ID>1 then
execute immediate v_sql;
end if;
exception
when others then
dbms_output.put_line('表的字段与值类型不符合');
end;