PL SQL程式設計入門之一

2021-04-17 01:29:49 字數 2550 閱讀 6919

關於儲存過程、包

儲存過程是儲存在資料庫中的使用者自定義的程式通俗叫法。

根據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...