在Oracle數據庫中,爲了實現特定的功能,可以自定義函數,就像C/C++語言,除了系統的庫函數,程序員還會編寫很多自定義的函數。
一、函數的創建、調用和權限
1、創建函數
create or replace function 函數名(參數1 模式 數據類型,......) return 數據類型
as
-- 定義局部變量。
變量1 數據類型;
......
begin
-- 實現函數功能的PL/SQL代碼。
......
exception
-- 異常處理的PL/SQL代碼。
......
end;
/
1)參數的模式有三種:
in:只讀模式,在函數中,參數只能被引用/讀取,不能改變它的值。
out:只寫模式,參數只能被賦值,不能被引用/讀取。
in out:可讀可寫。
參數的模式可以不寫,缺省爲in,out和in out兩種模式極少使用。
2)as/is二選一,在這裏沒有區別。
3)可以不定義局部變量。
4)可以沒有異常(exception)處理代碼段。
示例,創建自定義函數maxvalue,用於比較兩個數字的大小,返回較大值:
create or replace function maxvalue(val1 number,val2 number) return number
as
val number; -- 定義局部變量,存放返回值。
begin
if (val1>val2) then -- 判斷傳入參數的大小。
val:=val1; -- 賦值是":=",不是"="。
else
val:=val2;
end if;
return val; -- 返回
end;
/
2、函數的調用
自定義函數的調用與Oracle數據庫自帶的函數調用的方法相同。
3、函數的權限
自定義函數是數據庫對象,Oracle對它權限管理方式與其它數據庫對象相同。
如果maxvalue函數是用scott用戶創建的,其它用戶調用時需要加scott用戶名前綴,並且具備相應的權限,否則會出現“ORA-00904:"MAXVALUE": 標識符無效
”的錯誤。
二、刪除自定義函數
drop function 函數名;
例如:
drop function maxvalue;
三、應用經驗
數據庫的自定義函數不會像編程語言的函數那樣廣泛的應用,和編程語言相比,數據庫的自定義函數實在太麻煩,很囉嗦,難以調試,數據庫自定義函數能做到的功能編程語言都能做到。
我使用自定義函數的目的只有一個,就是解決不同數據庫的兼容性問題,例如序列生成器,Oracle、MySQL和PostgreSQL的調用方法各不同,那麼我們可以編寫自定義函數,在不同的數據庫中,函數名和參數完全相同,函數體代碼不同,這樣就可以解決軟件的兼容性問題。
四、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!