oracle定义常用函数的过程

 更新时间:2023年08月14日 15:09:29   作者:DAYTOY-105  
这篇文章主要介绍了oracle定义常用函数的过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1 函数的创建、调用和权限

1.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;

1.2 函数的调用

自定义函数的调用与Oracle数据库自带的函数调用的方法相同。

select maxvalue(10, 20) from dual;

1.3 函数的权限

自定义函数是数据库对象,oracle对它权限管理方式与其他数据库对象相同;

如果maxvalue函数是用户scott用户创建的,其他用户调用时需要加scott用户名前缀,并且具备相应的权限,否则会出现“ ORA-00904:"MAXVALUE": 标识符无效 ”的错误;

1.4 删除自定义函数

drop function 函数名;
--eg:
drop function maxvalue;

2 MD5加密函数

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;

注:复制该语句,直接在plsql的SQL窗口中执行即可完成创建;

使用:

select lower(用户.md5('1234')) as 密文 from dual;

3 获取汉字首字母拼音的函数

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);
  /************************************************************************* 
  生成汉字拼音码的函数。 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 '发'
                              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;

注:复制该语句,直接在plsql的SQL窗口中执行即可完成创建;

使用:

select fgetpy('张三,李四,ww') from dual;

到此这篇关于oracle定义常用函数的文章就介绍到这了,更多相关oracle定义函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle中如何把表和索引放在不同的表空间里

    Oracle中如何把表和索引放在不同的表空间里

    Oracle中并没有区分表空间里放的是表还是索引,所有当数据量比较小时,完全可以把表和索引放在同一个表空间里,但随着数据量的增大,最好还是把表和索引分开存储在不同的表空间里
    2013-07-07
  • ORACLE数据库逐步解决ORA-12541、ORA-01034和ORA-27101、ORA-00119和ORA00132的过程

    ORACLE数据库逐步解决ORA-12541、ORA-01034和ORA-27101、ORA-00119和ORA0013

    这篇文章主要介绍了ORACLE数据库逐步解决ORA-12541、ORA-01034和ORA-27101、ORA-00119和ORA00132过程的相关步骤,需要的朋友可以参考下
    2020-04-04
  • oracle通过行范围查询取4至10行

    oracle通过行范围查询取4至10行

    这篇文章主要介绍了oracle通过行范围查询取4至10行,以EMP表为范例,需要的朋友可以参考下
    2014-08-08
  • oracle中110个常用函数介绍

    oracle中110个常用函数介绍

    这篇文章主要介绍了oracle中110个常用函数,方便大家编写出更强大的sql语句,需要的朋友可以参考下
    2013-08-08
  • Oracle也有注入漏洞

    Oracle也有注入漏洞

    Oracle也有注入漏洞...
    2007-03-03
  • Oracle读取excel数据

    Oracle读取excel数据

    本文给大家介绍Oracle读取excel数据的相关知识,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-03-03
  • Oracle备库宕机启动的完美解决方案

    Oracle备库宕机启动的完美解决方案

    这篇文章主要给大家介绍了关于Oracle备库宕机启动的完美解决方案,文中通过示例代码介绍的非常详细,对大家学习或者使用Oracle具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • oracle多表简单查询实例代码

    oracle多表简单查询实例代码

    当查询的数据并不是来源一个表时,需要使用多表链接操作完成查询,下面这篇文章主要给大家介绍了关于oracle多表简单查询的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 在Oracle表中进行关键词搜索的过程

    在Oracle表中进行关键词搜索的过程

    这篇文章主要介绍了在Oracle表中进行关键词搜索的过程,我们可以通过Oracle SQL Developer或Toad运行PL/SQL块,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 浅析Oracle中sys、system和Scott用户下的数据库连接问题

    浅析Oracle中sys、system和Scott用户下的数据库连接问题

    这篇文章主要介绍了关于Oracle中sys、system和Scott用户下的数据库连接问题,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07

最新评论