oracle定義常用函數(shù)的過程
1 函數(shù)的創(chuàng)建、調(diào)用和權(quán)限
1.1 創(chuàng)建函數(shù)
create or replace function 函數(shù)名(參數(shù)1 模式 數(shù)據(jù)類型,......) return 數(shù)據(jù)類型 as -- 定義局部變量。 變量1 數(shù)據(jù)類型; ...... begin -- 實(shí)現(xiàn)函數(shù)功能的PL/SQL代碼。 ...... exception -- 異常處理的PL/SQL代碼。 ...... end;
說明:
1)參數(shù)的模式有三種:
in:只讀模式,在函數(shù)中,參數(shù)只能被引用/讀取,不能改變它的值;
out:只寫模式,參數(shù)只能被賦值,不能被引用/讀取;
in out:可讀可寫。
注:參數(shù)的模式可以不寫,缺省為in,out和in out兩種模式極少使用。
2)as/is二選一,在這里沒有區(qū)別;
3)可以不定義局部變量;
4)可以沒有異常(exception)處理代碼段;
--示例,創(chuàng)建自定義函數(shù)maxvalue,用于比較兩個(gè)數(shù)字的大小,返回較大值; create or replace function maxvalue(val1 number,val2 number) return number as val number; -- 定義局部變量,存放返回值。 begin if (val1>val2) then -- 判斷傳入?yún)?shù)的大小。 val:=val1; -- 賦值是":=",不是"="。 else val:=val2; end if; return val; -- 返回 end;
1.2 函數(shù)的調(diào)用
自定義函數(shù)的調(diào)用與Oracle數(shù)據(jù)庫自帶的函數(shù)調(diào)用的方法相同。
select maxvalue(10, 20) from dual;
1.3 函數(shù)的權(quán)限
自定義函數(shù)是數(shù)據(jù)庫對象,oracle對它權(quán)限管理方式與其他數(shù)據(jù)庫對象相同;
如果maxvalue函數(shù)是用戶scott用戶創(chuàng)建的,其他用戶調(diào)用時(shí)需要加scott用戶名前綴,并且具備相應(yīng)的權(quán)限,否則會出現(xiàn)“ ORA-00904:"MAXVALUE": 標(biāo)識符無效
”的錯(cuò)誤;
1.4 刪除自定義函數(shù)
drop function 函數(shù)名; --eg: drop function maxvalue;
2 MD5加密函數(shù)
create or replace function md5(passwd in varchar2) return varchar2 is retval varchar2(32); begin retval := utl_raw.cast_to_raw(dbms_obfuscation_toolkit.md5(input_string => passwd)); return retval; end;
注:復(fù)制該語句,直接在plsql的SQL窗口中執(zhí)行即可完成創(chuàng)建;
使用:
select lower(用戶.md5('1234')) as 密文 from dual;
3 獲取漢字首字母拼音的函數(shù)
create or replace function fgetpy(v_str varchar2) return varchar2 as v_strlen int; v_return varchar2(500); v_ii int; v_n int; v_c varchar2(2); v_chn varchar2(2); v_rc varchar2(500); /************************************************************************* 生成漢字拼音碼的函數(shù)。 2009-06-21 **************************************************************************/ begin --dbms_output.put_line(v_str); v_rc := v_str; v_strlen := length(v_rc); v_return := ''; v_ii := 0; while v_ii < v_strlen loop v_ii := v_ii + 1; v_n := 63; select substr(v_rc, v_ii, 1) into v_chn from dual; select v_n + max(rowsf) into v_n from (select chn, rownum rowsf from (select chn from (select '吖' chn from dual union select '八' from dual union all select '嚓' from dual union all select '咑' from dual union all select '妸' from dual union all select '發(fā)' from dual union all select '旮' from dual union all select '鉿' from dual union all select '丌' from dual --because have no 'i' union all select '丌' from dual union all select '咔' from dual union all select '垃' from dual union all select '嘸' from dual union all select '拏' from dual union all select '噢' from dual union all select '妑' from dual union all select '七' from dual union all select '呥' from dual union all select '仨' from dual union all select '他' from dual union all select '屲' from dual union all select '屲' from dual union all select '屲' from dual union all select '夕' from dual union all select '丫' from dual union all select '帀' from dual union all select v_chn from dual) a order by nlssort(chn, 'NLS_SORT=SCHINESE_PINYIN_M')) c) b where chn = v_chn; v_c := chr(v_n); if chr(v_n) = '@' then --英文直接返回 v_c := v_chn; end if; v_return := v_return || v_c; v_return := lower(v_return); end loop; return v_return; end fgetpy;
注:復(fù)制該語句,直接在plsql的SQL窗口中執(zhí)行即可完成創(chuàng)建;
使用:
select fgetpy('張三,李四,ww') from dual;
到此這篇關(guān)于oracle定義常用函數(shù)的文章就介紹到這了,更多相關(guān)oracle定義函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows10 x64安裝、配置Oracle 11g過程記錄(圖文教程)
這篇文章主要介紹了Windows10 x64安裝、配置Oracle 11g過程記錄(圖文教程),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03Oracle8i和Microsoft SQL Server比較
Oracle8i和Microsoft SQL Server比較...2007-03-03Oracle數(shù)據(jù)庫正則表達(dá)式純數(shù)字例子
正則表達(dá)式已經(jīng)在很多軟件中得到廣泛的應(yīng)用,包括*nix(Linux, Unix等),HP等操作系統(tǒng),PHP,C#,Java等開發(fā)環(huán)境,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫正則表達(dá)式純數(shù)字的相關(guān)資料,需要的朋友可以參考下2024-08-08