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-05-05
  • Oracle数据库opatch补丁操作流程

    Oracle数据库opatch补丁操作流程

    这篇文章主要介绍了Oracle数据库opatch补丁操作流程的相关资料,本文从升级前准备工作到安装补丁操作整理过程都介绍的非常详细,需要的朋友可以参考下
    2016-10-10
  • Oracle变量、输入输出、SELECT INTO、%TYPE与%ROWTYPE详解

    Oracle变量、输入输出、SELECT INTO、%TYPE与%ROWTYPE详解

    这篇文章主要介绍了Oracle变量、输入输出、SELECT INTO、%TYPE与%ROWTYPE,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • oracle设置密码复杂度及设置超时退出的功能

    oracle设置密码复杂度及设置超时退出的功能

    我们都知道密码策略加固的参数一般包括密码长度、复杂度检测、最大最小使用时间、过期警报时间、最大登录失败次数以及锁定时间等设置,下面这篇文章主要给大家介绍了关于oracle设置密码复杂度及设置超时退出功能的相关资料,需要的朋友可以参考下
    2022-06-06
  • Oracle之TO_DATE用法详解

    Oracle之TO_DATE用法详解

    这篇文章主要介绍了Oracle之TO_DATE用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 获取Oracle表大小的三种方法

    获取Oracle表大小的三种方法

    在 Oracle 数据库中,获取表的大小可以通过查询数据字典视图 DBA_SEGMENTS、USER_SEGMENTS 或 ALL_SEGMENTS,具体取决于你的权限范围和需求,本文通过代码示例介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Oracle最新面试题及答案整理大全

    Oracle最新面试题及答案整理大全

    好久没有给大家发面试题了,最近收集了一套Oracle的面试题,特地整理出来分享给大家,这篇文章主要给大家介绍了关于Oracle最新面试题及答案整理大全的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Oracle三种循环(For、While、Loop)实现九九乘法表

    Oracle三种循环(For、While、Loop)实现九九乘法表

    这篇文章主要为大家详细介绍了Oracle三种循环For、While、Loop实现九九乘法表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • oracle常用sql查询语句部分集合(图文)

    oracle常用sql查询语句部分集合(图文)

    这篇文章主要介绍了oracle常用sql查询语句部分,并用图文并茂的方式为大家进程实例说明,需要的朋友可以参考下
    2013-08-08
  • Oracle数据库数据丢失恢复的几种方法总结

    Oracle数据库数据丢失恢复的几种方法总结

    相信大家无论是开发、测试还是运维过程中,都可能会因为误操作、连错数据库、用错用户、语句条件有误等原因,导致错误删除、错误更新等问题。当你捶胸顿足或吓得腿软时,肯定希望有办法来恢复这些数据。oracle就提供了一些强大的方法或机制,可以帮到有需要的你。
    2016-12-12

最新评论