一、表結構如圖,其中orders的orderid是主鍵,orderitem的orderid是外來鍵
-- orders表
create
table orders(
2 orderid number primary
key,
-- 編號
3 ordername varchar2(32)
,-- 名稱
4 orederprice number -- 單價5)
6/insert
into orders values(1
,'麵包',3
);insert
into orders values(2
,'衛衣',45
);insert
into orders values(3
,'手機'
,1800);
insert
into orders values(4
,'滑鼠',45
);insert
into orders values(5
,'鍵盤'
,130);
-- orderitem表
create
table orderitem(
2 orderitemid number primary
key,
-- 編號
3 orderid number references orders(orderid)
,-- 訂單編號
4 orderitemnumber number -- 訂購數量5)
6/insert
into orderitem values(1
,1,3
);insert
into orderitem values(2
,1,2
);insert
into orderitem values(3
,2,1
);insert
into orderitem values(4
,2,1
);insert
into orderitem values(5
,3,1
);insert
into orderitem values(6
,3,2
);insert
into orderitem values(7
,4,2
);insert
into orderitem values(8
,5,1
);insert
into orderitem values(9
,5,2
);
向訂單資訊表orderitem中插入資料時,如果數量小於等於0,直接將要插入的訂單數量修改1,並提示使用者訂購數量必須大於0
-- 觸發器
create
orreplace
trigger t1
before
insert
on orderitem
for each row
when
(new.orderitemnumber <1)
begin
:new.orderitemnumber:=1;
end;
-- 觸發觸發器
insert
into orderitem values(10
,5,0
);
-- 查詢一下
select
*from orderitem;
當刪除訂單表orders中的訂單時,如果該訂單的編號被orderitem表引用,就先刪除外來鍵再刪除主鍵,並提示使用者『已經將外來鍵刪除!
-- 觸發器
create
orreplace
trigger t2
before
delete
on orders
for each row
declare
n number;
begin
select
count(*
)into n from orderitem where orderid = :old.orderid;
if n >
0then
delete
from orderitem where orderid = :old.orderid;
endif
;end
;
-- 觸發觸發器
delete
from orders where orderid =
1;
二、表結構:
賬戶資訊表(cardinfo):卡號(主鍵),密碼,餘額
create
table cardinfo(
2 cardinfo_id number primary
key,
3 cardinfo_pwd varchar2(32)
,4 cardinfo_balance number
5)6/
insert
into cardinfo values(1
,'123',32
);insert
into cardinfo values(2
,'123',45
);insert
into cardinfo values(3
,'123',23
);
交易資訊表(transinfo):編號,卡號(外來鍵),交易型別(只能是』支取』和』存入』),交易金額,交易日期
create
table transinfo(
2 transinfo_id number primary
key,
3 transinfo_cardinfoid references cardinfo(cardinfo_id)
,4 transinfo_deal varchar2(32)
check
(transinfo_deal in
('支取'
,'存入'))
,5 transinfo_dealmoney number,
6 transinfo_dealdate date7)
8/insert
into transinfo values(1
,1,'支取',12
,sysdate)
;insert
into transinfo values(2
,1,'支取'
,100
,sysdate)
;insert
into transinfo values(3
,1,'存入'
,1000
,sysdate)
;insert
into transinfo values(4
,2,'存入'
,500
,sysdate)
;insert
into transinfo values(5
,2,'支取'
,100
,sysdate)
;insert
into transinfo values(6
,3,'支取'
,100
,sysdate)
;
-- 觸發器
create
orreplace
trigger t3
before
delete
on transinfo
for each row
when
(months_between(sysdate,old.transinfo_dealdate)
<1)
begin
-20002
,'這條交易記錄的時間不超過乙個月!');
end;
delete
from transinfo where transinfo_id =
3;
4.當乙個使用者開戶時(即向賬戶資訊表插入一條記錄時),應該對應的在交易資訊表中插入一條交易記錄,交易型別為』存入』,金額為1,時間為系統當前時間
-- 觸發器
create
orreplace
trigger t4
after
insert
on cardinfo
for each row
declare
n number;
begin
select
max(transinfo_id)
into n from transinfo;
insert
into transinfo values
(n+1
,:new.cardinfo_id,
'存入',1
,sysdate)
;end
;
insert
into cardinfo values(4
,'123',54
);
Oracle資料庫中的觸發器
觸發器是一種特殊的儲存過程,它在發生某種資料庫事件時由oracle系統自動觸發。觸發器通常用於加強資料庫的完整性約束和業務規則等,對於表來說,觸發器可以實現比check約束更為複雜的約束。oracle中的觸發器的型別主要有dml觸發器 替代觸發器 系統事件觸發器和ddl觸發器。針對所有的dml事件,...
oracle資料庫觸發器
instead of觸發器介紹 instead of觸發器代替觸發動作,並在處理約束之前激發 對於每個觸發操作,每個表或檢視都只能有乙個instead of觸發器。而乙個表對於每個觸發操作可以有多個after觸發器 instead of觸發器的建立模板 create or replace trigg...
Oracle資料庫update觸發器
在專案中使用到oracle資料庫的update觸發器,先記錄下來方便以後查閱。預備知識和格式以後再編輯吧,先把內容貼出來。create or replace trigger demo trigger after update on tb goods referencing new as new ol...