儲存過程是Oracle開發者在資料轉換或查詢報表時經常使用的方式之一。它就是想程式語言一樣一旦執行成功,就可以被使用者隨時呼叫,這種方式極大的節省了使用者的時間,也提高了程式的執行效率。儲存過程在資料庫開發中使用比較頻繁,它有著普通SQL語句不可替代的作用。所謂儲存過程,就是一段儲存在資料庫中執行某種功能的程式。其中包含一條或多條SQL語句,但是它的定義方式和PL/SQL中的塊、包等有所區別。儲存過程可以通俗地理解為是儲存在資料庫伺服器中的封裝了一段或多段SQL語句的PL/SQL程式碼塊。在資料庫中有一些是系統預設的儲存過程,那麼可以直接通過儲存過程的名稱進行呼叫。另外,儲存過程還可以在程式語言中呼叫,如Java、C#等。
儲存過程的作用
儲存過程編寫相對複雜,但還是有很多人在用儲存過程,因為它有著一系列的優點:
- 簡化複雜的操作。儲存過程可以把需要執行的多條SQL語句封裝到一個獨立單元中,使用者只需呼叫這個單元就能達到目的。這樣就實現了一人編寫多人呼叫。
- 增加資料獨立性。與檢視的效果相似,利用儲存過程可以把資料庫基礎資料和程式(或使用者)隔離開來,當基礎資料的結構發生變化時,可以修改儲存過程,這樣對程式來說基礎資料的變化是不可見的,也就不需要修改程式程式碼了。
- 提高安全性。使用儲存過程有效降低了錯誤出現的機率。如果不使用儲存過程要實現某項操作可能需要執行多條單獨的SQL語句,而過多的執行步驟很可能造成更高的出現錯誤機率。
- 提高效能。完成一項複雜的功能可能需要多條SQL語句,同時SQL每次執行都需要編譯,而儲存過程可以包含多條SQL語句,而且建立後只需要編譯一次,以後就可以直接呼叫。
儲存過程的語法
儲存過程的建立和檢視相比稍微複雜,但也有固定模式。
create or replace procedure procedure_name [parameter-name in datatype := default expression,......] { IS | AS} BODY;
其中,各項引數的含義:
or replace :表示如果指定的過程存在,則覆蓋同名的儲存過程。
procedure_name :建立儲存過程的名稱
parameter_name:表示儲存過程中的引數名稱
IN datatype := default expression :表示輸入引數的資料型別和預設值
IS|AS :連線詞
BODY :表示函式體,是儲存過程的具體操作部分,通常在begin...end中。