程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 存儲過程和觸發器

存儲過程和觸發器

編輯:關於SqlServer
1:什麼叫存儲過程?
在Oracle中,可以在數據庫中定義子程序,這種程序塊叫存儲過程(procedure),它存放在數據字典中,可以在不同用戶和應用程序中共享,並可以實現程序的優化和重用。

2:存儲過程的有點?
?    過程運行在服務器端,執行速度快
?    過程執行一次後代碼就駐留在高速緩存中,在以後的操作中,直接調用緩存數據。
?    確保數據庫的安全性,可以不授權用戶直接訪問應用程序中的一些表,而是授權用戶執行訪問數據庫的過程。
?    自動完成需要預先執行的任務,過程可以在系統啟動時自動運行。、


3:存儲過程的創建和執行
用戶存儲過程只能定義在當前數據庫中,可以使用sql語句或OEM創建。
默認情況下,用戶創建的存儲過程歸登錄數據庫的用戶所擁有,DBA可以把許可授權給其他用戶。
Sql命令創建存儲過程
CREATE     procedure         過程名
【(parameter parameter_mode date_type,….n)】
IS| AS
BEGIN
    SQL_STATEMENT
END 過程名
其中
Parameter表示過程的參數。
parameter_mode:參數的類型,過程參數和函數參數一樣,有三種類型IN,OUT,IN OUT
IN    表示參數是輸入給過程的。
OUT表示采納數載過程中被賦值,可以傳給過程的外部。
IN OUT表示可以傳內,可以傳外。

調用存儲過程
直接輸入存儲過程的名字可以執行一個已經定義的存儲過程。
EXECUTE     Procedure_name【parameter,,, , , , n】
create procedure count_grade
(zym int char, person_num out number)
as
begin
 select count(zym) into person_num from announce 
end count_grade;



從XSCJ數據庫的XS表中查詢某人的總學分,根據學分寫評語。

Create or replace procedure  update_info
(xm in char)
As
    X f number;            ------定義變量
Begin
    Select zxf
    Into xf
    From xs
    Where xm =xm
If xm > 60 then
    Update xs set bz =”三好學生”
        Where xm = xm
End if
If xf < 35 then
    Update xs set bz =“學分沒修滿”
        Where xm = xm
End if
End update_info.

Update_info的執行過程。
EXEC update_info(“丁吉祥”);



存儲過程的編輯修改
修改存儲過程雖然可以和修改視圖一樣,用ALTER procedure,但是他是用來重新編譯和驗證用的,如果要修改過程定義,建議還是用create  or replace。


存儲過程的刪除
當某個過程不再需要的時候,應該將其從內存中刪除,以釋放它占用的資源。
Drop procedure  存儲過程名。
Drop procedure update_info.


觸發器
觸發器(trigger)是一些過程,與表聯系緊密,用於保護表中的數據,當一個基表被修改時,觸發器自動就會執行。例如出入其可以實現多個表間數據的一致性和完整性。
一般情況下,對表數據的操作有增刪查改,維護數據的觸發器也可以分為多種,每張基表最多可以建立12個觸發器。
1:Before     insert        2:before insert fo each row;        3:after inert
4:after insert for each row     5:before update    6:before update for each row
7:after update     8:after update for each row;        9:before delete;
10:before delete for each     row        11:after delete     12:after delete for each row.

利用sql語句創建觸發器
語法規則
Create or replace    trigger    觸發器名
{before|    after|     instead of}
{delete     【or insert】【or update】【of column ….n 】}
On     表名|視圖名
【for each row 】[]where condition]]
Sql_statement[,,,n]

參數說明
Instead of :指定在創建替代觸發器。
Of column 指定在哪些列上進行觸發。。。
創建觸發器的限制
1:觸發器中有效的語句可以包括DML語句,但是不能包括DDL,rollback,commit
,savepoint都不適用。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved