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部落格 ” ,連結:http://blog.itpub.net/101162/viewspace-927334/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle觸發器死鎖問題解決Oracle觸發器
- oracle變異表觸發器相關問題解決Oracle觸發器
- 利用觸發器解決更新主鍵衝突的問題觸發器
- oracle觸發器~ 更新多表的問題Oracle觸發器
- oracle 臨時表 解決 "表 *** 發生了變化,觸發器/函式不能讀"的問題Oracle觸發器函式
- 發現問題,解決問題
- MySQL 高階 | 用儲存過程、定時器、觸發器來解決資料分析問題MySql儲存過程定時器觸發器
- Oracle資料庫DDL審計觸發器觸發的bug問題Oracle資料庫觸發器
- 觸發器詳解觸發器
- ORACLE觸發器詳解Oracle觸發器
- 解決「問題」,不要解決問題
- Oracle使用觸發器實現ID自增的問題Oracle觸發器
- SQL Server:觸發器詳解SQLServer觸發器
- 瞭解SQL Server觸發器及觸發器中的事務AWSQLServer觸發器
- OGG同步複製時與相容觸發器解決方法觸發器
- [原創] 有關觸發器 ORA-04091解決方法觸發器
- 解決視訊播放器找不到解碼器問題播放器
- SQL觸發器例項講解SQL觸發器
- zabbix觸發器表示式詳解觸發器
- 解決問題
- 阿里雲伺服器不能發郵件問題解決方案阿里伺服器
- 解決瀏覽器解析度問題瀏覽器
- 用jquery解決瀏覽器相容問題jQuery瀏覽器
- Oracle觸發器觸發級別Oracle觸發器
- 用分散式鎖解決併發問題分散式
- 雲伺服器中文亂碼問題解決伺服器
- 怎麼解決伺服器延遲問題伺服器
- 解決syslog伺服器啟動問題伺服器
- yum問題解決
- sqlitedabaseislocked問題解決SQLite
- dump 解決問題
- Oracle觸發器6(建立系統事件觸發器)Oracle觸發器事件
- 根據業務寫觸發器(oracle觸發器片)觸發器Oracle
- 兩塊磁碟,oralce執行慢的問題
- MySQL觸發器MySql觸發器
- mysql——觸發器MySql觸發器
- mysql 觸發器MySql觸發器
- SQL觸發器SQL觸發器