創(chuàng)建觸發(fā)器,給觸發(fā)器命名,在哪個表上的增刪改進(jìn)行觸發(fā),是否為行級觸發(fā)

太平ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
編寫你的邏輯
編譯檢查是否有語法錯誤啥的
測試,這里的話,就是你某一個工種的最低工資增加,那屬于這個工種的員工中原來是最低工資的也要增加,所以你要先把工種中最低工資查出來,根據(jù)工種號,查詢屬于該工種的人有哪些,把這些員工的工資查出來,再修改工種的最低工資,再查員工工資是否也增加了。
你這表也沒有,我門也沒有辦法給你寫一個很詳細(xì)的。大致思路一般是這樣
觸發(fā)器是一種特殊的存儲過程 下面是觸發(fā)器的詳細(xì)說明
ORACLE 觸發(fā)器
ORACLE產(chǎn)生數(shù)據(jù)庫觸發(fā)器的語法為
create [or replace] trigger 觸發(fā)器名 觸發(fā)時間 觸發(fā)事件
on 表名
[for each row]
pl/sql 語句
其中
觸發(fā)器名 觸發(fā)器對象的名稱 由于觸發(fā)器是數(shù)據(jù)庫自動執(zhí)行 的 因此該名稱只是一個名稱 沒有實質(zhì)的用途
觸發(fā)時間 指明觸發(fā)器何時執(zhí)行 該值可取
before 表示在數(shù)據(jù)庫動作之前觸發(fā)器執(zhí)行
after 表示在數(shù)據(jù)庫動作之后出發(fā)器執(zhí)行
觸發(fā)事件 指明哪些數(shù)據(jù)庫動作會觸發(fā)此觸發(fā)器
insert 數(shù)據(jù)庫插入會觸發(fā)此觸發(fā)器
update 數(shù)據(jù)庫修改會觸發(fā)此觸發(fā)器
delete 數(shù)據(jù)庫刪除會觸發(fā)此觸發(fā)器
表 名 數(shù)據(jù)庫觸發(fā)器所在的表
for each row 對表的每一行觸發(fā)器執(zhí)行一次 如果沒有這一選項 則只對整個表執(zhí)行一次
舉例 下面的觸發(fā)器在更新表auths之前觸發(fā) 目的是不允許在周末修改表
create trigger auth_secure
before insert or update or delete file://對整表更新前觸發(fā)
on auths
begin
if(to_char(sysdate DY )= SUN
RAISE_APPLICATION_ERROR( 不能在周末修改表auths );
( RAISE_APPLICATION_ERROR是函數(shù) 括弧內(nèi)的 第一參數(shù)范圍在 ~ 之間 第二個
參數(shù)是字符串 大小在 k 超過的話 系統(tǒng)自動截斷)
end if;
lishixinzhi/Article/program/Oracle/201311/17609
你說的這東西本身就不適合弄做觸發(fā)器
std表是部門號與某部門的平均工資
如果往emp里插入一條記錄的話,那么整個部門的平均工資就會發(fā)生變化
所以這個時候std表里的數(shù)據(jù)就不是真正的平均工資了
不知道為什么要這么做,你們老師想不開吧?
而且emp1的表結(jié)構(gòu)是什么?
還有,工資低于所屬部門的平均工資的職員信息插入到emp1表中?
那么難道不是每插入一個員工的話,emp1表就要插入一遍,那么emp1表里會有N
多重復(fù)數(shù)據(jù)
創(chuàng)建兩個表:
create?table?a
(stdid?int,
stdname?varchar2(10));
create?table?b
(stdid?int,
stdname?varchar2(10));
創(chuàng)建觸發(fā)器:
CREATE?OR?REPLACE?TRIGGER?tr_insert?
after?insert
ON?a
FOR?EACH?ROW?
BEGIN
INSERT?INTO?b(stdid,stdname)
VALUES(:new.stdid,:new.stdname);
END;
驗證,在a表中插入數(shù)據(jù):
insert?into?a?values?(1,'a');
commit;
驗證b表結(jié)果:
今天在項目中遇到一個比較棘手的問題,需要用到觸發(fā)器。在編寫觸發(fā)器和調(diào)試過程中遇到下列問題,在此記錄一下:
由于之前寫的觸發(fā)器都能正常運行,就沒有涉及到觸發(fā)器的調(diào)試,今天發(fā)現(xiàn)觸發(fā)器沒起作用,需要調(diào)試,竟不知道在哪兒調(diào)試。在網(wǎng)上借鑒一些別人的經(jīng)驗(),記錄一下。在PL/SQL中,觸發(fā)器的調(diào)試方法如下:
1,選中要調(diào)試的觸發(fā)器,右擊,然后勾選 Add debug information,只有勾選這個按鈕后,調(diào)試才能進(jìn)入到斷點。
2,選中觸發(fā)器,點擊 Edit,到Edit 界面,在要調(diào)試的行號前面單擊,或者右鍵,添加斷點。
3,在菜單的新建中選擇“測試窗口”,打開一個如下塊,在begin和end中間添加能觸發(fā)觸發(fā)器的語句
4,按F9或者點擊調(diào)試菜單中的開始菜單,進(jìn)入運行調(diào)試狀態(tài)(后面的紅框是單步進(jìn)入)
5,點擊運行圖標(biāo)跳到觸發(fā)器中斷點位置
6,鼠標(biāo)放到變量上可以顯示變量值。
7,如果有異常,就彈出相關(guān)異常信息。
調(diào)試的時候發(fā)現(xiàn)new對象的日期格式為中文,而后面又需要yyyy-mm-dd 的格式來作為查詢條件。所以就在賦值的時候轉(zhuǎn)換一下。
在select into 給變量賦值的時候,select 查詢出來的集合為空,導(dǎo)致報錯ORA-01403,解決方案就是將這一段用begin end 包裹起來,拋出改異常的時候給變量一個默認(rèn)值。如下圖:
1
創(chuàng)建table1:
CREATE
TABLE
table1
(
id
number(5),
name
char(20),
age
number(2),
);
2
創(chuàng)建table2,并給count字段初值為0
CREATE
TABLE
table2
(
count
number(5),
);
INSERT
INTO
table2
VALUES
(0);
3
插入觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_insert
AFTER
INSERT
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
4
刪除觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_delete
AFTER
DELETE
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
5
更新觸發(fā)器
CREATE
OR
REPLACE
TRIGGER
add_after_update
AFTER
UPDATE
ON
table1
FOR
EACH
ROW
DECLARE
v_currentCount
number(5);
BEGIN
SELECT
count
INTO
v_currentCount
FROM
table2;
UPDATE
table2
SET
count
=
v_currentCount
+1;
END
網(wǎng)頁名稱:oracle怎么做觸發(fā)器 oracle觸發(fā)器怎么寫
本文來源:http://chinadenli.net/article34/hjigpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、、Google、網(wǎng)站策劃、網(wǎng)站導(dǎo)航、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)