Oracle過程和函數相信大家都比較了解,下面就為您詳細介紹Oracle過程和函數二者之間的區別,希望可以讓您對Oracle過程和函數有更深的認識。
Oracle過程和函數都以編譯後的形式存放在數據庫中,函數可以沒有參數也可以有多個參數並有一個返回值。過程有零個或多個參數,沒有返回值。函數和過程都可以通過參數列表接收或返回零個或多個值,函數和過程的主要區別不在於返回值,而在於他們的調用方式。Oracle過程是作為一個獨立執行語句調用的:
pay_involume(invoice_nbr,30,due_date);
函數以合法的表達式的方式調用:
order_volumn:=open_orders(SYSDATE,30);
創建過程的語法如下:
CREATE [ OR REPLACE] PROCEDURE [schema.]procedure_name [parameter_lister] {AS|IS} declaration_section BEGIN executable_section [EXCEPTION exception_section] END [procedure_name]
每個參數的語法如下:
paramter_name mode datatype [(:=|DEFAULT) value]
mode有三種形式:IN、OUT、INOUT。
IN表示在調用過程的時候,實際參數的取值被傳遞給該過程,形式參數被認為是只讀的,當過程結束時,控制會返回控制環境,實際參數的值不會改變。
OUT在調用過程時實際參數的取值都將被忽略,在過程內部形式參數只能是被賦值,而不能從中讀取數據,在過程結束後形式參數的內容將被賦予實際參數。
INOUT這種模式是IN和OUT的組合;在Oracle過程內部實際參數的值會傳遞給形式參數,形勢參數的值可讀也可寫,過程結束後,形勢參數的值將賦予實際參數。
創建函數的語法和過程的語法基本相同,唯一的區別在於函數有RETUREN子句
CREATE [ OR REPLACE] FINCTION [schema.]function_name [parameter_list] RETURN returning_datatype {AS|IS} declaration_section BEGIN executable_section [EXCEPTION] exception_section END [procedure_name]
在執行部分函數必須有喲個或多個return語句。
在創建函數中可以調用單行函數和組函數,例如:
CREATE OR REPLACE FUNCTION my_sin(DegreesIn IN NUMBER) RETURN NUMBER IS pi NUMBER=ACOS(-1); RadiansPerDegree NUMBER; BEGIN RadiansPerDegree=pi/180; RETURN(SIN(DegreesIn*RadiansPerDegree)); END
1. 返回值的區別,函數有1個返回值,而存儲過程是通過參數返回的,可以有多個或者沒有
2.調用的區別,函數可以在查詢語句中直接調用,而存儲過程必須單獨調用.
函數一般情況下是用來計算並返回一個計算結果而存儲過程一般是用來完成特定的數據操作(比如修改、插入數據庫表或執行某些DDL語句等等)
函數有返回值,而過程沒有,
簡單點就是
function test_f (parameter in varchar2) return varchar2;
procdrue test_p (parameter in varchar2);
declare
result varchar2;
begin
result := test_f; --函數有返回值 必須用變量去裝載
test_p; --過程沒有可直接調用.
end;