欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

oracle定義常用函數(shù)的過程

 更新時(shí)間:2023年08月14日 15:09:29   作者:DAYTOY-105  
這篇文章主要介紹了oracle定義常用函數(shù)的過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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)文章

最新評論