轉載,原文網址:http://www.mincoder.com/oracle/1383.shtmlhtml
用戶自定義函數是存儲在數據庫中的代碼塊,能夠把值返回到調用程序。函數的參數有3種類型:數據庫
(1)in參數類型:表示輸入給函數的參數,該參數只能用於傳值,不能被賦值。express
(2)out參數類型:表示參數在函數中被賦值,能夠傳給函數調用程序,該參數只能用於賦值,不能用於傳值。oracle
(3)in out參數類型:表示參數既能夠傳值,也能夠被賦值。函數
1.函數的建立spa
語法格式:code
Sql代碼 orm
create [or replace] function functionName htm
( it
parameterName1 mode1 dataType1,
parameterName2 mode2 dataType2,
...
)
return returnDataType
is/as
begin
function_body
return expression
end functionName; -- 結束函數的聲明,也能夠直接寫end不加函數名。
--其中mode一、mode2表示參數類型,dataType表示參數的數據類型。returnDataType表示返回值類型。
示例1:
Sql代碼
create or replace function explainParameter -- 定義一個名爲explainParameter的函數
(
inParam in char, -- 定義該參數類型爲in參數類型,只能用於賦值
outParam out char, -- out參數類型,只能用於傳值
inAndOutParam in out char -- in out參數類型,既能賦值,又能傳值
)
return char -- 表示函數的返回類型爲char類型
as -- 表示函數體部分
returnChar char; -- 聲明零時變量,這是無關緊要的,這裏聲明返回變量爲char類型的returnChar變量。
begin
inParam := 'Hello World'; -- 這是錯誤的,in類型的參數只能用來傳值,不能賦值
outParam := 'Hello World'; -- 這是正確的,out類型的參數能夠用來被賦值
inAndOutParam := 'Hello World'; -- 這是正確的,in out參數既能夠用來傳值,又能夠被賦值
inAndOutParam := outParam; -- 這是錯誤的,out參數不能用來傳值
return(returnChar); -- 返回returnChar,也能夠不要括號,直接寫return returnChar。
end explainParameter; -- 結束explainParameter函數,表示explainParameter函數聲明結束,也能夠直接寫end,不加函數名。
示例2:
Sql代碼
CREATE OR REPLACE
FUNCTION testFunc (num1 IN NUMBER, num2 IN NUMBER)
RETURN NUMBER
AS
num3 number;
num4 number;
num5 number;
BEGIN
num3 := num1 + num2;
num4 := num1 * num2;
num5 := num3 * num4;
RETURN num5;
END;
2.函數的調用
自定義函數的調用方法跟系統內置函數的調用方法相同,能夠直接在select語句中調用,也能夠在函數中調用,以下:
select testFunc(1,2) from tableName;
num := testFunc(1,2);
3.函數的刪除
自定義函數的刪除方法相似於表的刪除,語法格式以下:
drop function [schema.]functionName;