Oracle 自定义split 函数实例详解

 更新时间:2017年01月05日 11:30:24   投稿:lqh  
这篇文章主要介绍了Oracle 自定义split 函数实例详解的相关资料,需要的朋友可以参考下

Oracle 自定义split 函数

Oracle没有提供split函数,但可以自己建立一个函数实现此功能。比如“abc defg  hijkl   nmopqr     stuvw  xyz”,分隔符是空格,但空格个数不定。

源代码:

CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);

CREATE OR REPLACE FUNCTION fn_var_split (
  p_str IN VARCHAR2,
  p_delimiter IN VARCHAR2
)
  RETURN ty_str_split
IS
  j INT := 0;
  len INT := 0;
  str VARCHAR2 (4000);
  str_split ty_str_split := ty_str_split ();
  v_str VARCHAR2 (4000) := RTRIM (LTRIM (p_str, p_delimiter), p_delimiter);
BEGIN
  len := LENGTH (v_str);

  WHILE len > 0
  LOOP
    j := INSTR (v_str, p_delimiter, 1);

    IF j = 0
    THEN
      str := SUBSTR (v_str, 1);
      len := 0;
      str_split.EXTEND;
      str_split (str_split.COUNT) := str;
    ELSE
      str := SUBSTR (v_str, 1, j - 1);
      v_str := LTRIM (LTRIM (v_str, str), p_delimiter);
      len := LENGTH (v_str);
      str_split.EXTEND;
      str_split (str_split.COUNT) := str;
    END IF;
  END LOOP;

  RETURN str_split;
END fn_var_split;
/

测试:
结果:

1
12
123
1234
12345 

DECLARE
  CURSOR c
  IS
    SELECT * FROM TABLE (CAST (fn_var_split (';1;12;;123;;;1234;;;;12345;', ';') AS ty_str_split));
  r c%ROWTYPE;
BEGIN
  OPEN c;
  LOOP
    FETCH c INTO r;
    EXIT WHEN c%NOTFOUND;
    DBMS_OUTPUT.put_line (r.column_value);
  END LOOP;
  CLOSE c;
END;
/

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • oracle数据库超全的多表查询连接

    oracle数据库超全的多表查询连接

    这篇文章主要给大家介绍了关于oracle数据库超全的多表查询连接的相关资料,多表连接查询实际上是通过各个表之间公共字段的关键性来查询数据的,它是关系数据库查询的最主要的特征,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Oracle 11g2的监听器配置教程

    Oracle 11g2的监听器配置教程

    Oracle的监听器服务注册方式有两种,分别为动态和静态,本文将详细介绍这两种,需要的朋友可以参考下
    2012-11-11
  • Oracle数据库中的触发器详解

    Oracle数据库中的触发器详解

    这篇文章主要给大家介绍了关于Oracle数据库中触发器的相关资料,触发器也是保护数据完整性的一种重要方法,于存储过程不同的是,触发器是通过事件进行触发被执行,存储过程需要被调用执行,需要的朋友可以参考下
    2024-02-02
  • Oracle Sqlplus命令登录多种方式案例讲解

    Oracle Sqlplus命令登录多种方式案例讲解

    这篇文章主要介绍了Oracle Sqlplus命令登录多种方式案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • oracle误drop/update操作后的数据恢复测试

    oracle误drop/update操作后的数据恢复测试

    本人主要是对drop/update数据后,在允许有时间内进行数据恢复,操作性强,比较实用。不对理论进行讲诉,需要的朋友可以参考下
    2015-08-08
  • oracle 常见等待事件及处理方法

    oracle 常见等待事件及处理方法

    我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息
    2009-03-03
  • oracle索引介绍(图文详解)

    oracle索引介绍(图文详解)

    在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容
    2014-06-06
  • win10 oracle11g安装报错问题集合 附解决方法

    win10 oracle11g安装报错问题集合 附解决方法

    这篇文章主要为大家总结了win10 oracle11g安装报错问题的产生原因,和oracle安装报错的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 整理Oracle数据库中数据查询优化的一些关键点

    整理Oracle数据库中数据查询优化的一些关键点

    这篇文章主要介绍了Oracle数据库中数据查询优化的一些关键点的整理,包括多表和大表查询等情况的四个方面的讲解,需要的朋友可以参考下
    2016-01-01
  • Oracle试用到期如何删除注册表继续试用30天

    Oracle试用到期如何删除注册表继续试用30天

    这篇文章主要介绍了Oracle试用到期如何删除注册表继续试用30天,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04

最新评论