ITPub博客

首页 > 数据库 > Oracle > oralce触发器解决问题

oralce触发器解决问题

原创 Oracle 作者:cosio 时间:2007-07-21 22:55:09 0 删除 编辑

*

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','教育局','一般检查')


+++++++++++++++++++++++++++++++++++++++++++++

代码:

如果是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
>

[@more@]oralce触发器解决问题

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/101162/viewspace-927334/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: LINUX FQC
请登录后发表评论 登录
全部评论

注册时间:2008-07-13

  • 博文量
    71
  • 访问量
    976098