假设: 我向 A 表insert 的时候触发.
触发内容是: 向B 表插入多条记录.(要根据insert A表的数据,来处理.)
问题就来了: 当我向 B 表插入数据的时候, 我获取不到 A 表的数据,(事务还木有提交) 所以我就不发 向B 表insert数据. 怎么解决种类问题呢?
触发内容是: 向B 表插入多条记录.(要根据insert A表的数据,来处理.)
问题就来了: 当我向 B 表插入数据的时候, 我获取不到 A 表的数据,(事务还木有提交) 所以我就不发 向B 表insert数据. 怎么解决种类问题呢?
1.创建表
create table TEST1
(
NAME VARCHAR2(20),
CODE VARCHAR2(4),
FULL VARCHAR2(50)
)
tablespace test_table
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);2、创建package
create or replace package pkg_test1 as
type t_gno is table of test1.code%type index by binary_integer;
v_gno t_gno;
v_numbertries binary_integer := 0;
end pkg_test1;3、创建触发器1
create or replace trigger tr_test1_row
before insert or update of code on test1
for each row
begin
pkg_test1.v_numbertries := pkg_test1.v_numbertries + 1;
pkg_test1.v_gno(pkg_test1.v_numbertries) := :new.code;
end tr_test1_row;4、创建触发器2
create or replace trigger tr_test1_tb
after insert or update of code on test1
declare
v_gatejob_no test1.code%type;
begin
for v_loopindex in 1 .. pkg_test1.v_numbertries loop
v_gatejob_no := pkg_test1.v_gno(v_loopindex);
update test1
set full = 'lily';
end loop;
end tr_test1_tb;
假如A表B表只有一列,类型是int.当往A中插入数据成功后.对插入值进行判断,如果大于5就向B中插入该值加1的值.如果插入A表失败(比如违反约束条件等)就不会向B中插入值.
create or replace procedure insert_value(v_insert in int)
is
begin
insert into A values(v_insert);--如果此处插入失败会抛出异常并跳到异常处理语句不会执行下面语句
commit;
if(v_insert > 5) then
insert into B values(v_insert + 1);
commit;
end if;
--exception
--when others then
--insert into B values(v_insert + 1);-如果想让插入A失败时仍插入B则把注释掉的语句加上
end;