Tuesday, April 27, 2010

Q: Difference between oracle procedure, function and anonymous pl/sql block?

耶!! 前陣子的"回答oracle interview questions計畫"終於要開始惹!!
先簡單說明一下,基本上這些問題會用中文來回答,但是專有名詞的部分... 還是維持它原本的面貌... 因為我根本不知道他中文是要翻成什麼鬼=  =… 而且這些東西翻成中文感覺反而會失去原本的意思或被誤解。

[類別] PL/SQL
[問題] procedure, function還有anonymous pl/sql block間有什麼不同?

Answer
procedure跟function最大的差別在於function會有一個回傳值(a single value)。而anonymous pl/sql block如他字面上定義,是一段沒有名字的pl/sql,通常直接用在像SQL*PLUS這樣的工具裡,來叫用procedure, function或package。

喋喋不休版
procedure跟function兩者可以合稱為"subprogram",特色是具名、可以給予參數、可以有回傳值(only function);存在schema層級的subprogram又叫做standalone stored subprogram,而定義在package內的就叫package subprograms。

Anonymous blocks由三個部分組成: 宣告(declarative part)、執行(executable part)、例外處理(exception handlers),其中宣告與例外處理可有可無。特色是不具名(也就無法永久存於資料庫內),只做暫時之用(不像procedure跟function可以重複被叫用)。

比較表:

  Anonymous Blocks Subprograms
具名? N Y
每次使用時都進行編譯? N N
存於資料庫內? N Y
可被其他應用程式呼叫? N Y
可回傳bind variable值? Y Y
可回傳函數值? N Y
可接受參數? N Y

*bind variable就是"連結變數"... 就是我們sql語法裡為了效能考量寫成”column_value=:v”的這個:v

Comments

0 Responses to "Q: Difference between oracle procedure, function and anonymous pl/sql block?"

Post a Comment

Tags