我现在有这样的一个需求:
我们有三张表A,B,C。其中A,B,两个表主键相同,也是C表的参考表。当初设计时候,当做一个个表处理,会造成字段太多,所以就拆开了做两个表。
现在想实现这样的一个功能:
我在向C表插入一条记录的时候,同时向D表插入一条记录。D表的数据来源于A,B,C表的部分字段。
我的实现如下:create or replace trigger TR_C_insert
before insert on C
for each row
declare
--local variables here
ARGS_a1 NVARCHAR2(30);
ARGS_a2 NVARCHAR2(30);
ARGS_a3 RAW(16);
ARGS_b1 NVARCHAR2(30);
ARGS_b2NVARCHAR2(30);
ARGS_b3 NVARCHAR2(30);begin
begin
select a1 into ARGS_a1
from a
where a.id = :new.ref;
exception when others then
ARGS_a1:=null;
end;begin
select a2 into ARGS_a2
from a
where a.id = :new.ref;
exception when others then
ARGS_a2:=null;
end;
------接下来还需要写很多这样的句子
INSERT INTO D values(:new.id
,ARGS_a1
,ARGS_a2
,ARGS_a3
,ARGS_a4
,ARGS_b1
,ARGS_b2
);
end ;如果我D表的字段很多,那我这个trigger将会写的很长,有没有好的实现方法。谢谢!
我们有三张表A,B,C。其中A,B,两个表主键相同,也是C表的参考表。当初设计时候,当做一个个表处理,会造成字段太多,所以就拆开了做两个表。
现在想实现这样的一个功能:
我在向C表插入一条记录的时候,同时向D表插入一条记录。D表的数据来源于A,B,C表的部分字段。
我的实现如下:create or replace trigger TR_C_insert
before insert on C
for each row
declare
--local variables here
ARGS_a1 NVARCHAR2(30);
ARGS_a2 NVARCHAR2(30);
ARGS_a3 RAW(16);
ARGS_b1 NVARCHAR2(30);
ARGS_b2NVARCHAR2(30);
ARGS_b3 NVARCHAR2(30);begin
begin
select a1 into ARGS_a1
from a
where a.id = :new.ref;
exception when others then
ARGS_a1:=null;
end;begin
select a2 into ARGS_a2
from a
where a.id = :new.ref;
exception when others then
ARGS_a2:=null;
end;
------接下来还需要写很多这样的句子
INSERT INTO D values(:new.id
,ARGS_a1
,ARGS_a2
,ARGS_a3
,ARGS_a4
,ARGS_b1
,ARGS_b2
);
end ;如果我D表的字段很多,那我这个trigger将会写的很长,有没有好的实现方法。谢谢!
解决方案 »
- 100分求优化SQL
- 存储过程改成一条sql
- 请教一个APP与低版本打交道的方案
- oracle中怎样修改varchar2字段为clob字段
- 正在执行的存储过程,如何使用命令中断
- 求救 Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12518)(ERROR_STACK=(ERROR=(
- oracle 10g中scott用户不能登陆.
- 我想单步跟踪存储过程的执行情况,并观察变量的内容,请问该如何执行?谢谢!
- 如何配置Oracle 中net?请高手给指点!!
- 为何我用jdbc连接oracel出错?请大侠帮忙!!!高分相赠!!!
- Oracle语句的问题,在线等解!
- 如何通过Sql语句将一个数值型字段转化为日期类型
begin
begin
select a1 into ARGS_a1
from a
where a.id = :new.ref;
exception when others then
ARGS_a1:=null;
end;begin
select a2 into ARGS_a2
from a
where a.id = :new.ref;
exception when others then
ARGS_a2:=null;
end;
你的这两句可以合成一句呀--那就简单了~~~
select a1,a2 into ARGS_a1,ARGS_a2
from a
where a.id = :new.ref;
select xx into args ,xx1 into args1 from xx ;报错
原来是你这样写的谢谢了啊!