一共有三个表分别是A,B,C,表结构如下
A:[id](主键,非空),[cj_id](唯一键,外键,非空),[name](vchar(50),可为空)
B:[id](主键,非空),[well_id](唯一键,外键,非空),[name](vchar(50),可为空)
C:[cj_id](主键,非空),[well_id](外键,非空)表C是表A和表B的关联表,
其中表A的cj_id和biaoB的well_id都来自于表C中的相应字段。现在要求当表A中插入数据时,在表B中的相应字段也插入数据:B.id=A.id,B.well_id=C.well_id,B.name=A.name请问,用触发器能实现吗?最好能写的详细些,我是新手,原来没太接触过这方面的东西,谢谢了。
A:[id](主键,非空),[cj_id](唯一键,外键,非空),[name](vchar(50),可为空)
B:[id](主键,非空),[well_id](唯一键,外键,非空),[name](vchar(50),可为空)
C:[cj_id](主键,非空),[well_id](外键,非空)表C是表A和表B的关联表,
其中表A的cj_id和biaoB的well_id都来自于表C中的相应字段。现在要求当表A中插入数据时,在表B中的相应字段也插入数据:B.id=A.id,B.well_id=C.well_id,B.name=A.name请问,用触发器能实现吗?最好能写的详细些,我是新手,原来没太接触过这方面的东西,谢谢了。
解决方案 »
- ORACLE FORALL IN的一个错误,郁闷中
- 有没有实时监控数据表变化高性能的方法?
- 如何查询到有几个特定字段的表名...
- execute immediate sqlt(sqlt是变量)
- 100分求SQL语句!!!急,在线等!!!
- 请问高人:定时间每隔一个月运行一次存储过程,时间那段如何计算( DBMS—JOB。SUBMIT(:JOBNO,‘PROCEDURE—NAME’,SYSDATE,‘SYSDA
- 数据的导出和导入
- 请教:为什么创建的这个触发器老是说编译错误
- 请问哪里可以下载oracle816nt.zip?
- 新手求救(备份与恢复)
- 一道oracle查询问题?
- Oracle 存储过程问题
不是很理解,请说明在c表中需要插入数据应满足的条件。
BEGIN
INSERT INTO B(id,well_id,name)
SELECT new.id,C.well_id,new.name
FROM C
WHERE C.id=new.cj_id;
END trigger_a2b;
/
before insert on a
declare
v_id varchar2(20);
begin
select well_id into v_id from c where cj_id=:new.cj_id;
insert into b(id,well_id,name)value(:new.id,v_id,:new.name);
exception
when others then
null;
end;
试试看
create or replace trigger a_trig
before insert on a for each row
declare
v_id varchar2(20);
begin
select well_id into v_id from c where cj_id=:new.cj_id;
insert into b(id,well_id,name)value(:new.id,v_id,:new.name);
exception
when others then
null;
end;
4楼的比较简单一些。
在触发器中不能使用异常捕获。