觸發器 函式或儲存過程

2021-09-01 15:00:09 字數 2026 閱讀 5587

觸發器是一種特殊型別的儲存過程,主要是通過事件進行觸發被自動呼叫執行的。而普通儲存過程可以通過儲存過程的名稱被呼叫。觸發器對錶進行插入、更新、刪除的時候會自動執行的特殊儲存過程。觸發器一般用在check約束更加複雜的約束上面。觸發器和普通的儲存過程的區別是:觸發器是當對某乙個表進行操作。諸如:update、insert、delete這些操作的時候,系統會自動呼叫執行該錶上對應的觸發器。普通儲存過程可能對應多個表。觸發器經常用於加強資料的完整性約束和業務規則等。

一般觸發器可以分為兩類:dml觸發器和ddl觸發器,其中ddl觸發器它們會影響多種資料定義語言語句而激發,這些語句有create、alter、drop語句。

dml觸發器分為:

1、 after觸發器(之後觸發)

a、 insert觸發器

b、 update觸發器

c、 delete觸發器 

2、 before 觸發器 (之前觸發)

其中after觸發器要求只有執行某一操作insert、update、delete之後觸發器才被觸發,且只能定義在表上。而before 觸發器表示並不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。既可以在表上定義before 觸發器,也可以在檢視上定義。

create trigger ``.``

< [ before | after ] > < [ insert | update | delete ]觸發事件 >

on [dbo]//dbo代表該錶的所有者

for each

[ when < 觸發條件》 ] < 觸發動作體 >

for each 行級觸發器(多少行觸發多少次) | 語句級觸發器(觸發一次)

用drop進行刪除觸發器。

儲存過程:

將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來, 那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。

講到這裡,可能有人要問:這麼說儲存過程就是一堆sql語句而已啊?

microsoft公司為什麼還要新增這個技術呢?

那麼儲存過程與一般的sql語句有什麼區別呢?

儲存過程的優點:

1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。

3.儲存過程可以重複使用,可減少資料庫開發人員的工作量

4.安全性高,可設定只有某此使用者才具有對指定儲存過程的使用權

缺點

1:除錯麻煩,但是用 pl/sql developer 除錯很方便!彌補這個缺點。

3:重新編譯問題,因為後端**是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。

4: 如果在乙個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。

儲存過程的種類:

1.系統儲存過程:以sp_開頭,用來進行系統的各項設定.取得資訊.相關管理工作,如 sp_help就是取得指定物件的相關資訊

2.擴充套件儲存過程 以xp_開頭,用來呼叫作業系統提供的功能

3.使用者自定義的儲存過程,這是我們所指的儲存過程

常用格式

create procedure procedue_name

[@parameter data_type][output]

[with]

asql_statement

解釋:output:表示此引數是可傳回的

with

recompile:表示每次執行此儲存過程時都重新編譯一次

encryption:所建立的儲存過程的內容會被加密

觸發器,儲存過程,函式區別

觸發器是特殊的儲存過程,儲存過程需要程式呼叫,而觸發器會自動執行 你所說的函式是自定義函式吧,函式是根據輸入產生輸出,自定義只不過輸入輸出的關係由使用者來定義。在什麼時候用觸發器?要求系統根據某些操作自動完成相關任務,比如,根據買掉的產品的輸入數量自動扣除該產品的庫存量。什麼時候用儲存過程?儲存過程...

Oracle儲存過程,函式,觸發器

一 儲存過程的定義 1 過程 多次編譯 多次執行 過程實現計算器 declare p1 number 1 p2 number 2 sign varchar2 3 begin if sign then syso p1 p2 elsif sign then syso p1 p2 elsif sign t...

MYSQL函式 儲存過程 觸發器

自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區別 可以使用 create function 語句建立自定義函式。語法格式如下 create funct...