??
字號:
作者:瀟湘劍公子
email: libin_hailang@china.com
日期:2001-4-23 15:47:23
存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化后存儲在數據庫服務器中,使用時只要調用即可。在ORACLE中,若干個有聯系的過程可以組合在一起構成程序包。
使用存儲過程有以下的優點:
* 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的運算。
* 可保證數據的安全性和完整性。
* 通過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從而保證數據的安全。
* 通過存儲過程可以使相關的動作在一起發生,從而可以維護數據庫的完整性。
* 再運行存儲過程前,數據庫已對其進行了語法和句法分析,并給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。由于執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執行。
* 可以降低網絡的通信量。
* 使體現企業規則的運算程序放入數據庫服務器中,以便:
* 集中控制。
* 當企業規則發生變化時在服務器中改變存儲過程即可,無須修改任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可以了,應用程序無須任何變化。
不同數據庫存儲過程的寫法不一,在后面的講座中將分別介紹ORACLE和SYBASE存儲過程的用法。
二 ORACLE 的存儲過程
ORACLE 創建存儲過程的語法為:
create [or replace] procedure 過程名
參數1 [in|out|in out] 數據類型
[,參數2 [in|out|in out] 數據類型]...
{is|as} pl/sql 語句
下面舉例說明ORACLE數據庫存儲過程的寫法和用法。可以建立一個存儲過程,每當用戶修改數據庫的重要數據時,即把用戶的用戶名、日期和操作類型記錄下來:
create procedure update_log is
begin
insert into update_log_tab(use_name,update_date,operation)
values(user,sysdate,'update'
end;
可以在恰當的位置調用這個存儲過程來記錄用戶對表的修改。例如下面在表sal_comm上建立一個修改觸發器,每當用戶修改此表后,用戶的名稱、修改時間和操作即被記錄在了表update_log_tab中:
create trigger audit_update
after update on sal_comm
for each row
begin
update_log
end
三 Sybase的存儲過程
盡管Sybase存儲過程的功能和寫法與ORACLE類似,但他們之間還是有一定的差別。下面講述SYBASE的存儲過程。
SYBASE可以用CREATE PROCedure命令生成存儲過程:
CREATE PROCedure 存儲過程名 [;number]
[[(] @parameter_name datatype [=default] [OUTput]
[, @parameter_name datatype [=default] [OUTput]]...[)]]
[WITH RECOMPILE]
AS SQL_statements
下面是一個查詢作者編碼、名稱和生日的存儲過程:
create proc p_auths @author_code varchar(10)
as
select author_code, name, birthdate
from auths
where author_code=@author_code
下面執行過程p_auths:
p_auths @author_code=A00001
在CREATE PROC語句中,可以為參數賦缺省值,該值可以是任何常量。當用戶不提供參數值時,該值便作為參數值提供給過程。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -