Oracle過程和函數(shù)的區(qū)別
Oracle過程和函數(shù)相信大家都比較了解,下面就為您詳細(xì)介紹Oracle過程和函數(shù)二者之間的區(qū)別,希望可以讓您對Oracle過程和函數(shù)有更深的認(rèn)識。
Oracle過程和函數(shù)都以編譯后的形式存放在數(shù)據(jù)庫中,函數(shù)可以沒有參數(shù)也可以有多個參數(shù)并有一個返回值。過程有零個或多個參數(shù),沒有返回值。函數(shù)和過程都可以通過參數(shù)列表接收或返回零個或多個值,函數(shù)和過程的主要區(qū)別不在于返回值,而在于他們的調(diào)用方式。Oracle過程是作為一個獨(dú)立執(zhí)行語句調(diào)用的:
- pay_involume(invoice_nbr,30,due_date);
函數(shù)以合法的表達(dá)式的方式調(diào)用:
- order_volumn:=open_orders(SYSDATE,30);
創(chuàng)建過程的語法如下:
- CREATE [ OR REPLACE] PROCEDURE [schema.]procedure_name
- [parameter_lister]
- {AS|IS}
- declaration_section
- BEGIN
- executable_section
- [EXCEPTION
- exception_section]
- END [procedure_name]
每個參數(shù)的語法如下:
- paramter_name mode datatype [(:=|DEFAULT) value]
mode有三種形式:IN、OUT、INOUT。
IN表示在調(diào)用過程的時候,實際參數(shù)的取值被傳遞給該過程,形式參數(shù)被認(rèn)為是只讀的,當(dāng)過程結(jié)束時,控制會返回控制環(huán)境,實際參數(shù)的值不會改變。
OUT在調(diào)用過程時實際參數(shù)的取值都將被忽略,在過程內(nèi)部形式參數(shù)只能是被賦值,而不能從中讀取數(shù)據(jù),在過程結(jié)束后形式參數(shù)的內(nèi)容將被賦予實際參數(shù)。
INOUT這種模式是IN和OUT的組合;在Oracle過程內(nèi)部實際參數(shù)的值會傳遞給形式參數(shù),形勢參數(shù)的值可讀也可寫,過程結(jié)束后,形勢參數(shù)的值將賦予實際參數(shù)。
創(chuàng)建函數(shù)的語法和過程的語法基本相同,唯一的區(qū)別在于函數(shù)有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]
在執(zhí)行部分函數(shù)必須有喲個或多個return語句。
在創(chuàng)建函數(shù)中可以調(diào)用單行函數(shù)和組函數(shù),例如:
- 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
【編輯推薦】



















