从你的业务逻辑看,a与b1是主从表,应包含主键与附键的约束,即先insert a表的数据,后insert b1。如此,你的想法不能实现。
如果你去掉主键与附键的约束,先insert b1表的数据,后insert a,我想trigger你也因该会了。但你要注意出现的其他问题。
如果你去掉主键与附键的约束,先insert b1表的数据,后insert a,我想trigger你也因该会了。但你要注意出现的其他问题。
解决方案 »
- 求高手解决异常问题,小弟感激不尽。
- ORACLE序列的当前值可不可以修改?
- 在安装oracle数据库软件时,遇到的与数据库监听程序有关的问题
- 请高手帮忙解决这个奇怪问题,多谢!!
- 如何将xls文件中的内容导入到Oracle数据库?
- 怎么把dbf文件导入到Oracle数据库中啊?(急!!!!!)
- 比較ニ種写法的SQL語句的効率
- 多媒体存储求助
- 关于Oracle安装的问题(安装界面为乱码!)解决问题后另夫100分!
- 请教:oracle分析函数lead()over()运算后的结果如何插入到表中新的字段?
- 急:ORACLE9i中在哪打开DBCA(数据库配置助手)?
- oracle数据导出,但是视图,存储过程,函数,序列等不能导出?
after insert on b1
for each row
declare
mykey char(x);
myflag char(x);
begin
If :new.flag2 <> '0' then Return; end if; select key,nvl(flag1,'*') into mykey,myflag
from a
where a.key = :new.key
and a.flag1 = '0'; if myflag='*' then Return; end if; insert into b2 values (:new.x,:new.y,:new.z.....);
end trg_mytable;
after insert on b1
for each row
declare
mykey char(x);
myflag char(x);
begin
--假设插入值不为0,则返回
If :new.flag2 <> '0' then Return; end if; select key,nvl(flag1,'*') into mykey,myflag
from a
where a.key = :new.key
and a.flag1 = '0'; --假设a表中,相关flag1不为0,则返回
if myflag='*' then Return; end if; --插入b2
insert into b2 values (:new.x,:new.y,:new.z.....);
end trg_mytable;
If :new.flag2 = '0' then
insert into b2 values ...
我想怎么能提高效率。举例,a表插入10条,b1就会插入1000条。a表10条中只有一条flag1 = '0',b1中就是1000条中才有一条flag2 = '0'。 我想减少判断次数。
性能能否改善,还需要试验。
至于逐行触发问题,我现在使用的数据量大概在400万条左右,全部遍历并不需要很多时间。++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++