A表
create table AA
(
AA_ID NUMBER not null,
SEX VARCHAR2(10)
)
AA_Backup(AA表的备份表)
create table AA_Backup
(
AA_ID NUMBER not null,
SEX VARCHAR2(10)
)
我的触发器的目的是判断AA表的记录数如果大于3条记录
就复制表数据到AA_Backup 然后删除AA表那3条记录以下是我的代码 但我不明白为什么我只能用before 而不能用after(事件发生之前或之后激活触发器)create or replace trigger trigger_aa
before INSERT ON aa
for each row
declare
count_num number;BEGIN
select count(*) into count_num from aa;
If count_num>3
THEN
insert into AA_backup(sex) select sex from (select sex from aa order by AA_ID asc) aa where rownum<=3;
delete from aa where rownum<=3;
END IF;
END trigger_aa;以上代码可以使用 但我想搞明白 如果用after怎么写 万分感谢!
create table AA
(
AA_ID NUMBER not null,
SEX VARCHAR2(10)
)
AA_Backup(AA表的备份表)
create table AA_Backup
(
AA_ID NUMBER not null,
SEX VARCHAR2(10)
)
我的触发器的目的是判断AA表的记录数如果大于3条记录
就复制表数据到AA_Backup 然后删除AA表那3条记录以下是我的代码 但我不明白为什么我只能用before 而不能用after(事件发生之前或之后激活触发器)create or replace trigger trigger_aa
before INSERT ON aa
for each row
declare
count_num number;BEGIN
select count(*) into count_num from aa;
If count_num>3
THEN
insert into AA_backup(sex) select sex from (select sex from aa order by AA_ID asc) aa where rownum<=3;
delete from aa where rownum<=3;
END IF;
END trigger_aa;以上代码可以使用 但我想搞明白 如果用after怎么写 万分感谢!
update 操作 :new,:old ,如果更新某个字段触发使用if updating( 'col ') then ......
delete 操作 :old
因为after触发器是不能在触发体中再对你触发表aa进行select查询的,
只有before 触发器才能。
因为你触发体中要判断触发表中笔数,不能用after触发器
BEFORE 和after 只是一个触发时机的问题,你可以详细看看Oracle触发器,我个人资源里有两个PDF文章,你可以去下载看看
你的最终目的是什么 是把AA表的数据备份吧
在这里用before或是after 对你很大影响么
create or replace trigger trigger_aa after INSERT ON aadeclare
count_num number;BEGIN
select count(*) into count_num from aa;
If count_num>3
THEN
insert into AA_backup(sex,AA_ID) select sex,AA_ID from (select sex,AA_ID from aa order by AA_ID asc) aa where rownum<=3;
delete from aa where rownum<=3;
END IF;
END trigger_aa;
---你的备份表的AA_ID不能为空 的补上AA_ID
insert into AA_backup(sex,AA_ID) select sex,AA_ID from (select sex,AA_ID from aa order by AA_ID asc) aa where rownum<=3;