国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

oracle 觸發器 實現出入庫

2024-08-29 13:56:32
字體:
來源:轉載
供稿:網友
用語言實現
好處:
1、可以減少對數據庫的訪問。
2、可移植性好。
壞處:
1、操作起來考慮的東西較多,修改一處就要修改別一處。也就是說是相互關聯的。如果少改了某一處,很可能使數據不一致。
用觸發器實現
好處:
1、可以使程序員從復雜的相互關聯中解放出來,把精力放在復雜的業務上。
壞處:
1、可移植性差。
下面我就用一個例子實現一個簡單的出入庫。因為是例子表中所用到的字段很少。這里的例子只做為拋磚引玉。
數據表為入庫金額表(以下簡稱入庫表)income,出庫金額表(以下簡稱出庫表)outlay,余額表balance

復制代碼 代碼如下:


income{
id number;
pay_amount number;(入庫金額字段)
}
outlay{
id number;
outlay_amount number;(出庫金額字段)
}
balance
{
id number;
balance number;(余額字段)
}


下面分別在入庫和出庫表中建立觸發器
入庫表(income):

復制代碼 代碼如下:


CREATE TRIGGER "AA"."TRI_ADD" AFTER
INSERT
OR DELETE ON "INCOME" FOR EACH ROW begin
if deleting then
update balance set balance = nvl(balance,0) - :old.pay_amount;
elsif updating then
update balance set balance = nvl(balance,0) - :old.pay_amount + :new.pay_amount;
else
update balance set balance = nvl(balance,0) + :new.pay_amount;
end if;
end;


出庫表(outlay):

復制代碼 代碼如下:


CREATE TRIGGER "AA"."TRI_CUT" AFTER
INSERT
OR DELETE
OR UPDATE ON "OUTLAY" FOR EACH ROW begin
if deleting then
update balance set balance = nvl(balance,0) + :old.outlay_amount;
elsif updating then
update balance set balance = nvl(balance,0) + :old.outlay_amount - :new.outlay_amount;
else
update balance set balance = nvl(balance,0) - :new.outlay_amount;
end if;
end;


下面我解釋一下
oracle觸發器,觸發事件分為插入,刪除,更新列三種事件,分別對應inserting /deleting/updating關鍵字
可以用if語句分別實現

復制代碼 代碼如下:


if inserting then
-----
elsif updating then
-----
elsif deleting then
------
end if;


NVL(eExpression1, eExpression2)
如果 eExpression1 的計算結果為 null 值,則 NVL( ) 返回 eExpression2。
如果 eExpression1 的計算結果不是 null 值,則返回 eExpression1。eExpression1 和 eExpression2 可以是任意一種數據類型。
如果 eExpression1 與 eExpression2 的結果皆為 null 值,則 NVL( ) 返回 .NULL.。
這里插入和刪除就不說了。主要是更新操作,更新操作要注意的是更新應該是先減去舊值,在加上新值。
以上就是觸發器例子的實現。文章寫的不好請大家諒解。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五常市| 盐池县| 周口市| 宜君县| 永济市| 嘉义市| 郁南县| 乌鲁木齐市| 泰安市| 武汉市| 延长县| 根河市| 和林格尔县| 武山县| 永济市| 社会| 麻阳| 吉木萨尔县| 吉木萨尔县| 宁化县| 芜湖县| 长海县| 民丰县| 湛江市| 嫩江县| 前郭尔| 棋牌| 遂溪县| 房山区| 藁城市| 宁武县| 新龙县| 探索| 洮南市| 苍山县| 寻乌县| 鄂伦春自治旗| 湛江市| 疏附县| 黄浦区| 中西区|