首页 > 数据库 > Oracle > oralce触发器解决问题
*
1、 表 TJDWJBXX1 (体检单位基本信息)结构如下:
BIANH MINGXH DANWMC TIJMC
(编号) (明细号) (单位名称) ( 体检名称 )
现在我提交数据库一组数据 如下:
BIANH MINGXH DANWMC TIJMC
(编号) (明细号) (单位名称) ( 体检名称 )
00000001 012 教育局 一般检查
2、这里的“一般检查”项目包括 视力检查 血型检查 和钡餐
一般检查的内容如下两个表关联(TJSFXM XYCFMX):
TJSFXM(体检收费项目)
BAINH MINGC DANJ
(编号) (名称) (单价)
0000002 一般检查 10
XYCFMX(协议处方明细)
BIANH MINGC ZHIXKS
000002 视力检查 五官科
000002 血型检查 检验科
000002 钡餐 放射科
3、表 TJDWJZD(体检单位记帐单) 结构如下
DANWMC DWMCXH XIANGMXH TIJXM TIJXMBH ZHIXKS
单位名称 单位序号 项目序号 体检项目 体检项目编号 执行科室
当我向TJDWJBXX1 (体检单位基本信息)插入一组数据后
如:插入这组数据
BIANH MINGXH DANWMC TIJMC
(编号) (明细号) (单位名称) ( 体检名称 )
00000001 012 教育局 一般检查
表 TJDWJZD(体检单位记帐单) 就自动提交如下数据
DANWMC DWMCXH XIANGMXH TIJXM TIJXMBH ZHIXKS
教育局 012 01 视力检查 000002 五官科
教育局 012 02 血型检查 000002 检验科
教育局 012 03 钡餐 000002 放射科
*/
/*
create table TJDWJBXX1 --体检单位基本信息
(
BIANH nvarchar(20),
MINGXH nvarchar(20),
DANWMC nvarchar(20),
TIJMC nvarchar(20)
)
select * from TJSFXM
create table TJSFXM --体检收费项目
(
BAINH nvarchar(20),
MINGC nvarchar(20),
DANJ nvarchar(20)
)
select * from XYCFMX
create table XYCFMX --协议处方明细
(
BAINH nvarchar(20),
MINGC nvarchar(20),
ZHIXKS nvarchar(20)
)
create table TJDWJZD --体检单位基本信息
(
DANWMC nvarchar(20),
DWMCXH nvarchar(20),
XIANGMXH nvarchar(20),
TIJXM nvarchar(20),
TIJXMBH nvarchar(20),
ZHIXKS nvarchar(20)
)*/
--insert into TJSFXM values('0000002','一般检查','10')
/*
insert into XYCFMX
select '0000002','视力检查','五官科' union all
select '0000002','血型检查','检验科' union all
select '0000002','钡餐','放射科'
*/
create trigger tri_TJDWJBXX1
ON TJDWJBXX1
FOR update ,insert,delete
AS
BEGIN
declare @MINGXH varchar(20)
declare @DANWMC varchar(20)
declare @TIJMC varchar(20)
--取编码BAINH
declare @BAINH1 varchar(20)
--检查项目
declare @BIANH2 varchar(20)
declare @MINGC2 varchar(20)
declare @ZHIXKS varchar(20)
declare @i int
set @i=1
--取出要插入的数据
SELECT @MINGXH=MINGXH,@DANWMC=DANWMC,@TIJMC=TIJMC FROM INSERTED
--取“一般检查对应的编码
SELECT @BAINH1=BAINH FROM TJSFXM WHERE MINGC=@TIJMC
--取“编码所检查的项目” 定义游标
DECLARE tmpcur CURSOR FOR SELECT BAINH, MINGC,ZHIXKS FROM XYCFMX WHERE BAINH=@BAINH1
OPEN tmpcur
FETCH NEXT FROM tmpcur INTO @BIANH2,@MINGC2,@ZHIXKS
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO TJDWJZD (DANWMC, DWMCXH, XIANGMXH ,TIJXM, TIJXMBH, ZHIXKS)
VALUES(@DANWMC,@MINGXH,@i,@MINGC2,@BIANH2,@ZHIXKS)
SET @i=@i+1
FETCH NEXT FROM tmpcur INTO @BIANH2,@MINGC2,@ZHIXKS
END
CLOSE tmpcur
DEALLOCATE tmpcur
END
insert into TJDWJBXX1 VALUES('00000001','012','教育局','一般检查')
+++++++++++++++++++++++++++++++++++++++++++++
[@more@]oralce触发器解决问题代码:
如果是oracle的
SQL> create table TJDWJBXX1 (BIANH varchar2(20),MINGXH varchar2(20), DANWMC varchar2(20), TIJMC varchar2(20));
Table created
SQL> create table TJSFXM (BAINH varchar2(20), MINGC varchar2(20), DANJ number(10,2));
Table created
SQL> insert into TJSFXM values ('000002' ,'一般检查', 10);
1 row inserted
SQL> create table XYCFMX (BIANH varchar2(20),MINGC varchar2(20), ZHIXKS varchar2(20));
Table created
SQL> insert into XYCFMX values ('000002', '视力检查', '五官科');
1 row inserted
SQL> insert into XYCFMX values ('000002', '血型检查', '检验科');
1 row inserted
SQL> insert into XYCFMX values ('000002', '钡餐', '放射科');
1 row inserted
SQL> create table TJDWJZD (DANWMC varchar2(20), DWMCXH varchar2(20),XIANGMXH varchar2(20),TIJXM varchar2(20),
2 TIJXMBH varchar2(20),ZHIXKS varchar2(20));
Table created
SQL> create or replace trigger tr_TJDWJBXX1 before insert on TJDWJBXX1
2 for each row
3 begin
4 for x in
5 (select decode(length(rownum),1,'0'||rownum,to_char(rownum)) rn,BIANH, MINGC, ZHIXKS
6 from XYCFMX
7 where BIANH = (select bianh from TJSFXM where MINGC = :new.TIJMC)) loop
8 insert into TJDWJZD(DANWMC, DWMCXH, XIANGMXH, TIJXMBH, TIJXM, ZHIXKS)
9 Values (:new.DANWMC,:new.MINGXH,x.rn,x.BIANH, x.MINGC, x.ZHIXKS);
10 end loop;
11 end tr_TJDWJBXX1;
12 /
Trigger created
SQL> insert into TJDWJBXX1 values ('00000001', '012', '教育局', '一般检查');
1 row inserted
SQL> commit;
Commit complete
SQL> select * from TJSFXM;
BAINH MINGC DANJ -------------------- -------------------- ------------ 000002 一般检查 10.00
SQL> select * from TJDWJZD;
DANWMC DWMCXH XIANGMXH TIJXM TIJXMBH ZHIXKS -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- 教育局 012 01 视力检查 000002 五官科
教育局 012 02 血型检查 000002 检验科
教育局 012 03 钡餐 000002 放射科
SQL>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/101162/viewspace-927334/ ,如需转载,请注明出处,否则将追究法律责任。