表A(id,no,val1,stat1,val2,stat2,val3,stat3,...val10,stat10);
表B(value,status);1往表A中插入一条记录时,在B中产生记录的个数取决于表A中no的值,这个插入触发器如何写
2修改表A中val或stat的值,B中相应的记录也会改变,这个触发器如何写
谢谢!
表B(value,status);1往表A中插入一条记录时,在B中产生记录的个数取决于表A中no的值,这个插入触发器如何写
2修改表A中val或stat的值,B中相应的记录也会改变,这个触发器如何写
谢谢!
解决方案 »
- 求助:ORACLE如何从WINDOWS迁移到AIX上?
- 如何在group后做数据段连接
- oracle乱码问题
- 急!将账户1的查询结果插入到账户2的表中
- toad for oracle 和 pl/sql 哪个用的比较多,哪个比较好呢?
- 如何取得当前时间与数据库时间的小时差?
- Trigger中调用存储过程的问题
- 如果时间为:****-**-** 00:00:00的时候,用getString取出的时间为:****-**-** 00:00:00.0后面多了".0",其他的情况没问题
- 定义constraint foreign key时,被引用表上的主键写与不写有什么区别?
- 急!!关于数据的导入导出!!
- 请问:引用远程数据链路中,关于使用case when 语句的问题,谢谢
- Oracle高手进来看看吧!
大体写了个,你看看吧Create Or Replace Trigger TIUA_表A
After Insert Or Update On 表A Of No ,Value ,Status For Each Row
Declare
I Integer := 0;
Begin
If Inserting Then
I := 0;
Loop
Exit When I >= Nvl(:New.No,0);
--//循环向表B中插入数据
End Loop;
End If;
If Updating Then
Update 表B
Set Value = :New.Value,
Status = :New.Status
Where ……
End If;
End TIUA_表A ;
不知道lz要的是不是这样的?create or replace trigger insert_a
before insert on a
for each row
declare
v_no a.no%type;
I a.no%type;
v_sql varchar2(8000);begin
v_no := :new.no;
I := 0;
Loop
Exit When I >= Nvl(:New.No,0);
v_sql := 'insert into B(value,status) values (:new.val'||to_char(I)||',:new.stat'||to_char(I)||')';
execute immediate v_sql;
End Loop;
end insert_a;
谢谢上面各位,可能我描述的不是很清楚
表A(id,no,val1,stat1,val2,stat2,val3,stat3,...val10,stat10);
表B(r_id,id,value,status)其中r_id为主键,id同表A中的id。
1插入触发器 当在表A中插入一条记录的时候,表B中产生相应的no条记录。先找出表B中r_id的最大值max(r_id)
插入的记录为(max(r_id)+1,id,val1,stat1),...(max(r_id)+no,id,valno,statno)
2更新触发器 当在表A中更新val或stat值时,表B中相应的纪录会修改。
当表A中更新no的值时,表B中的记录会相应的增删。
这两个触发器如何实现,谢谢!
create or replace trigger insert_a
before insert on a
for each row
declare
v_no a.no%type;
x b.r_id%type;
v_sql varchar2(8000);
begin
v_no := :new.no;
I := 0;
select max(r_id) into x from b;
x:=x+1;
for i in 1..v_no loop
v_sql := 'insert into B(r_id,id,value,status) values (:x,:id,:val,:stat)' ;
v_sql:=v_sql||' using x,:new.id,:new.val'||i||',:new.stat'||i;
execute immediate v_sql ;
x:=x+1;
End Loop;
end insert_a;update触发器,可以通过判断:old.val1=:new.val1,:old.stat1=:new.stat1 如果不等,则说明更新该列,如果等,说明没有更新该列数据
读出是第几个stat+n被更新,再到b表update相应的行!!