oralce觸發器解決問題

cosio發表於2007-07-21

*

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部落格 ” ,連結:http://blog.itpub.net/101162/viewspace-927334/,如需轉載,請註明出處,否則將追究法律責任。

相關文章