關於儲存過程、包
儲存過程是儲存在資料庫中的使用者自定義的程式通俗叫法。
根據oracle
的操作手冊,與sql/p**
相似的功能可以分為以下三個部分,
·pl/sql procedure / stored procedure (create procedure~)
·pl/sql function / stored function (create function~)
·pl/sql package / stored package (create package~ & create package body~)
都以stored subprogram
稱呼,另外,stored procedure
和stored function
都定義為standalone subprogram 。
關於stored subprogram(stored procedure)
oracle
所謂的stored procedure
就是pl/sql
中以oracle
獨自「手續型」語言記述的具有名字的功能模組。
隨便舉個例子:
1. 接收入口引數
2. 訪問資料庫中的資料
3. 利用內部變數計算,處理
4. 對資料庫的訪問,更新,增加,刪除等
5. 返回返回值
編寫執行這樣的一連串的處理的程式,然後
1. 把編寫的源**,或者是不太有把握的源**存到資料庫中
2. 把程式設為手動編譯,或者是可以oracle
自動再編譯的狀態
3. 把編譯完的程式在資料庫伺服器上執行
4. 把執行結果返回給客戶端
這種能被oracle dbms
儲存並且執行的模組。
在oracle
資料庫中,嵌入了pl/sql
的源**編譯器以及pl/sql
的執行引擎。最新的版本中帶條件的編譯器(oracle 10g r2
)和非中間**native
編譯環境(oracle 9i
)也都具備了。
stored procedure和stored function
的區別function
包括procedure
的功能,
可以說有了返回值的procedure
就是function
。與擁有返回值的procedure
不同的地方就是select expr from tablename
中的expr
的寫法,如果把procedure
寫入select
的話,如下,
sql> select func_dummy() from dual; --
可以呼叫
function
func_dummy()
------------
1sql> select proc_dummy() from dual; --
不能識別
procedure
select proc_dummy() from dual
*
1行出現錯誤。:
ora-00904: "proc_dummy": 無效的標記。
procedure
自身沒有返回值,但是能夠給呼叫返回乙個返回值,不是以返回值的形式,而是以設定成out
引數的形式,通過這個out
屬性的引數或者in out
屬性的引數來返回結果值。
standalone subprogram和stored package
的差別stored package
是stored procedure
和stored function
的集合,但是package
裡面不僅僅有這兩種東西,它是各個模組的共同住宅,高階公寓一樣的東西。
package
與procedure
集合相比較明顯的優點是:
·有可以共同利用的空間
·可以定義在package
內共有而外部不可訪問的變數,型別,procedure, function,
使用者子定義的例外等。
·可以宣告同一session
的package
和procedure
公開的public
變數,procedure
使用者定義例外等。
·可以對package內的subprogram使用overload
·為了package不被從共有池裡擠出來,可以在dbms_shared_pool package設定keep。
·有了package,簡化了模組間的依存關係(對系統和對人的管理都簡化了)
·與standalone subprogram相比,不容易發生共有池的溢位和再裝載。同時還可以防止共有記憶體碎片化。
並不是只有這個可以設定package
為單位,程式中也可以宣告,package
並不是具有了所有的優點。在很多情況下,package
的可維護性良好是使用pl/sql
專案的基礎。
PL SQL程式設計入門之二
pl sql 的異常處理 根據exception 來進行異常處理 pl sql 的begin 和end 之間發生的異常通過在這個塊中定義的 exception 來處理。同一塊中沒有異常處理定義的情況下,則引用上層的意外處理。例如雖然捕捉了異常,但是在異常處理部分什麼也沒寫的情況下什麼也不會發生。但是...
Nginx入門之一
對於nginx早已耳聞,也已看好好多人對此元件的誇讚,效能是如何如何的好 但是一直沒有去看這方面的資料。今天興致來了,就研究了一番,不過並沒有什麼測試資料,只是在本地跑通了而已,因為我家只有乙個電腦也沒有裝虛擬機器,所以就出來了下面的配置檔案。今天算是乙個入門,接下來會詳細了解一下。以下是我本地的n...
Opencv 入門之 一
include include using namespace std using namespace cv int main int argc,char argv namedwindow display image window autosize 建立視窗 imshow display image...