把存儲(chǔ)過程單拉出來寫,觸發(fā)器觸發(fā)的時(shí)候調(diào)用該過程
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、網(wǎng)站設(shè)計(jì)、康馬網(wǎng)絡(luò)推廣、小程序設(shè)計(jì)、康馬網(wǎng)絡(luò)營銷、康馬企業(yè)策劃、康馬品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供康馬建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
like
create or replace procedure aaa (para1 in varchar...)
is
begin...end;
CREATE OR REPLACE TRIGGER interface_ygcc
BEFORE UPDATE ON 表1
FOR EACH ROW
aaa(para1...)
CREATE OR REPLACE TRIGGER trg_cost
AFTER INSERT ON cost for each row
begin
update cost a
set a.oper_date =sysdate
where a.oper_date =:new.NEW.OPER_DATE
-- 其他條件
...;
END ;
希望能夠幫到你。謝謝!
觸發(fā)器是一種特殊類型的存儲(chǔ)過程 它不同于存儲(chǔ)過程 觸發(fā)器主要是通過事件進(jìn)行觸發(fā)而被執(zhí)行的 觸發(fā)器的觸發(fā)事件分可為 類 分別是DML事件 DDL事件和數(shù)據(jù)庫事件 而存儲(chǔ)過程可以通過存儲(chǔ)過程名字而被直接調(diào)用 當(dāng)對(duì)某一表進(jìn)行諸如UPDATE INSERT DELETE 這些操作時(shí) SQL Server 就會(huì)自動(dòng)執(zhí)行觸發(fā)器所定義的SQL 語句 從而確保對(duì)數(shù)據(jù)的處理必須符合由這些SQL 語句所定義的規(guī)則
觸發(fā)器是特定事件出現(xiàn)的時(shí)候 自動(dòng)執(zhí)行的代碼塊 類似于存儲(chǔ)過程 但是用戶不能直接調(diào)用他們
觸發(fā)器功能
允許/限制對(duì)表的修改
自動(dòng)生成派生列 比如自增字段
強(qiáng)制數(shù)據(jù)一致性
提供審計(jì)和日志記錄
防止無效的事務(wù)處理
啟用復(fù)雜的業(yè)務(wù)邏輯
觸發(fā)器種類
觸發(fā)器的種類可劃分為 種 數(shù)據(jù)操縱語言(DML)觸發(fā)器 替代(INSTEAD OF)觸發(fā)器 數(shù)據(jù)定義語言(DDL)觸發(fā)器 數(shù)據(jù)庫事件觸發(fā)器
數(shù)據(jù)操縱語言(DML)觸發(fā)器 簡稱DML觸發(fā)器 是定義在表上的觸發(fā)器 創(chuàng)建在表上 由DML事件引發(fā)的觸發(fā)器 編寫DML觸發(fā)器時(shí)的兩點(diǎn)要素是 確定觸發(fā)的表 即在其上定義觸發(fā)器的表 確定觸發(fā)的事件 DML觸發(fā)器的觸發(fā)事件有INSERT UPDATE和DELETE三種;替代觸發(fā)器 簡稱INSTEAD OF觸發(fā)器 創(chuàng)建在視圖上 用來替換對(duì)視圖進(jìn)行的刪除 插入和修改操作; 數(shù)據(jù)定義語言(DDL)觸發(fā)器 簡稱DDL觸發(fā)器 定義在模式上 觸發(fā)事件是數(shù)據(jù)對(duì)象的創(chuàng)建和修改;數(shù)據(jù)庫事件觸發(fā)器 定義在整個(gè)數(shù)據(jù)庫或模式上 觸發(fā)事件是數(shù)據(jù)庫事件
ORACLE產(chǎn)生數(shù)據(jù)庫觸發(fā)器的語法為
CREATE [OR REPLACE] TRIGGER 觸發(fā)器名
{BEFORE|AFTER|INSTEAD OF} 觸發(fā)事件 [OR 觸發(fā)事件 ]
ON 表名
WHEN 觸發(fā)條件
[FOR EACH ROW]
DECLARE
聲明部分
BEGIN
主體部分
END;
其中
觸發(fā)器名 觸發(fā)器對(duì)象的名稱 由于觸發(fā)器是數(shù)據(jù)庫自動(dòng)執(zhí)行的 因此該名稱只是一個(gè)名稱 沒有實(shí)質(zhì)的用途 一個(gè)觸發(fā)器可由多個(gè)不同的數(shù)據(jù)操縱語言操作觸發(fā) 在觸發(fā)器中 可用INSERTING DELETING UPDATING謂詞來區(qū)別不同的數(shù)據(jù)操縱語言操作 這些謂詞可以在IF分支條件語句中作為判斷條件來使用
觸發(fā)時(shí)間 指明觸發(fā)器何時(shí)執(zhí)行 該值可取 觸發(fā)的時(shí)間有BEFORE和AFTER兩種 分別表示觸發(fā)動(dòng)作發(fā)生在DML語句執(zhí)行之前和語句執(zhí)行之后 確定觸發(fā)級(jí)別 有語句級(jí)觸發(fā)器和行級(jí)觸發(fā)器兩種 語句級(jí)觸發(fā)器表示SQL語句只觸發(fā)一次觸發(fā)器 行級(jí)觸發(fā)器表示SQL語句影響的每一行都要觸發(fā)一次
Before 表示在數(shù)據(jù)庫動(dòng)作之前觸發(fā)器執(zhí)行;在SQL語句的執(zhí)行過程中 如果存在行級(jí)BEFORE觸發(fā)器 則SQL語句在對(duì)每一行操作之前 都要先執(zhí)行一次行級(jí)BEFORE觸發(fā)器 然后才對(duì)行進(jìn)行操作 如果存在行級(jí)AFTER觸發(fā)器 則SQL語句在對(duì)每一行操作之后 都要再執(zhí)行一次行級(jí)AFTER觸發(fā)器
after 表示在數(shù)據(jù)庫動(dòng)作之后出發(fā)器執(zhí)行 如果存在語句級(jí)AFTER觸發(fā)器 則在SQL語句執(zhí)行完畢后 要最后執(zhí)行一次語句級(jí)AFTER觸發(fā)器
觸發(fā)事件 指明哪些數(shù)據(jù)庫動(dòng)作會(huì)觸發(fā)此觸發(fā)器 指INSERT DELETE或UPDATE事件 事件可以并行出現(xiàn) 中間用OR連接;
insert 數(shù)據(jù)庫插入會(huì)觸發(fā)此觸發(fā)器;
update 數(shù)據(jù)庫修改會(huì)觸發(fā)此觸發(fā)器;
delete 數(shù)據(jù)庫刪除會(huì)觸發(fā)此觸發(fā)器
表 名 數(shù)據(jù)庫觸發(fā)器所在的表
for each row 表示觸發(fā)器為行級(jí)觸發(fā)器 省略則為語句級(jí)觸發(fā)器 對(duì)表的每一行觸發(fā)器執(zhí)行一次
觸發(fā)器的創(chuàng)建者或具有DROP ANY TIRGGER系統(tǒng)權(quán)限的人才能刪除觸發(fā)器 刪除觸發(fā)器的語法如下
DROP TIRGGER 觸發(fā)器名
可以通過命令設(shè)置觸發(fā)器的可用狀態(tài) 使其暫時(shí)關(guān)閉或重新打開 即當(dāng)觸發(fā)器暫時(shí)不用時(shí) 可以將其置成無效狀態(tài) 在使用時(shí)重新打開 該命令語法如下
ALTER TRIGGER 觸發(fā)器名 {DISABLE|ENABLE}
其中 DISABLE表示使觸發(fā)器失效 ENABLE表示使觸發(fā)器生效
同存儲(chǔ)過程類似 觸發(fā)器可以用SHOW ERRORS 檢查編譯錯(cuò)誤
如果有多個(gè)觸發(fā)器被定義成為相同時(shí)間 相同事件觸發(fā) 且最后定義的觸發(fā)器是有效的 則最后定義的觸發(fā)器被觸發(fā) 其他觸發(fā)器不執(zhí)行 觸發(fā)器體內(nèi)禁止使用MIT ROLLBACK SAVEPOINT語句 也禁止直接或間接地調(diào)用含有上述語句的存儲(chǔ)過程 定義一個(gè)觸發(fā)器時(shí)要考慮上述多種情況 并根據(jù)具體的需要來決定觸發(fā)器的種類
觸發(fā)器的作用
觸發(fā)器的主要作用就是其能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性 除此之外 觸發(fā)器還有其它許多不同的功能
( ) 強(qiáng)化約束(Enforce restriction)
觸發(fā)器能夠?qū)崿F(xiàn)比CHECK 語句更為復(fù)雜的約束
( ) 跟蹤變化Auditing changes
觸發(fā)器可以偵測數(shù)據(jù)庫內(nèi)的操作 從而不允許數(shù)據(jù)庫中未經(jīng)許可的指定更新和變化
( ) 級(jí)聯(lián)運(yùn)行(Cascaded operation)
觸發(fā)器可以偵測數(shù)據(jù)庫內(nèi)的操作 并自動(dòng)地級(jí)聯(lián)影響整個(gè)數(shù)據(jù)庫的各項(xiàng)內(nèi)容 例如 某個(gè)表上的觸發(fā)器中包含有對(duì)另外一個(gè)表的數(shù)據(jù)操作(如刪除 更新 插入)而該操作又導(dǎo)致該表上觸發(fā)器被觸發(fā)
( ) 存儲(chǔ)過程的調(diào)用(Stored procedure invocation)
為了響應(yīng)數(shù)據(jù)庫更新觸 發(fā)器可以調(diào)用一個(gè)或多個(gè)存儲(chǔ)過程 甚至可以通過外部過程的調(diào)用而在DBMS( 數(shù)據(jù)庫管理系統(tǒng))本身之外進(jìn)行操作
由此可見 觸發(fā)器可以解決高級(jí)形式的業(yè)務(wù)規(guī)則或復(fù)雜行為限制以及實(shí)現(xiàn)定制記錄等一些方面的問題 例如 觸發(fā)器能夠找出某一表在數(shù)據(jù)修改前后狀態(tài)發(fā)生的差異 并根據(jù)這種差異執(zhí)行一定的處理 此外一個(gè)表的同一類型(INSERT UPDATE DELETE)的多個(gè)觸發(fā)器能夠?qū)ν环N數(shù)據(jù)操作采取多種不同的處理
總體而言 觸發(fā)器性能通常比較低
lishixinzhi/Article/program/Oracle/201311/18340
create or replace trigger jilu_date_end
before update of shenpi on jilu
for each row
declare
etime date;
begin
select sysdate into etime from dual;
//這里用update語句進(jìn)行那個(gè)時(shí)間更新即可
end jilu_date_end;
create or replace trigger emergency
after
insert or update of p_time
on tableA
for each row
Begin
if p_code = '9999' then
update tableB set p_time = :new.p_time where id = :new.id
end if;
end;