Oracle自定義函數

在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)
作者:碼農有道

如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章