Sql语句最好依次执行创建

/**************************************
 * name:        split
 * author:      sean zhang.
 * date:        2012-09-03.
 * function:    返回字符串被指定字符分割后的表类型。
 * parameters:  p_list: 待分割的字符串。
                p_sep: 分隔符,默认逗号,也可以指定字符或字符串。
 * example:    select * from users where u_id in (select column_value from table (split ('1,2')))
                返回u_id为1和2的两行数据。
 **************************************/
/* 创建一个表类型 */
create or replace type tabletype as table of varchar2(32676)

/* 创建 split 函数 */
create or replace function split (p_list clob, p_sep varchar2 := ',')
  return tabletype
  pipelined

is
  l_idx    pls_integer;
  v_list  varchar2 (32676) := p_list;
begin
  loop
      l_idx  := instr (v_list, p_sep);

if l_idx > 0
      then
        pipe row (substr (v_list, 1, l_idx - 1));
        v_list  := substr (v_list, l_idx + length (p_sep));
      else
        pipe row (v_list);
        exit;
      end if;
  end loop;
end;

/**************************************
 * name:        splitstr
 * author:      sean zhang.
 * date:        2012-09-03.
 * function:    返回字符串被指定字符分割后的指定节点字符串。
 * parameters:  str: 待分割的字符串。
                i: 返回第几个节点。当i为0返回str中的所有字符,当i 超过可被分割的个数时返回空。
                sep: 分隔符,默认逗号,也可以指定字符或字符串。当指定的分隔符不存在于str中时返回sep中的字符。
 * example:    select splitstr('abc,def', 1) as str from dual;  得到 abc
                select splitstr('abc,def', 3) as str from dual;  得到 空
 **************************************/
/* 创建 splitstr 函数 */
create or replace function splitstr(str in clob,
                                    i  in number := 0,
                                    sep in varchar2 := ',') return varchar2 is
  t_i    number;
  t_count number;
  t_str  varchar2(4000);
begin
  if i = 0 then
    t_str := str;
  elsif instr(str, sep) = 0 then
    t_str := sep;
  else
    select count(*) into t_count from table(split(str, sep));
    if i <= t_count then
      select str
        into t_str
        from (select rownum as item, column_value as str
                from table(split(str, sep)))
      where item = i;
    end if;
  end if;

return t_str;
end;

示例:split(字符串,标识)

select  split('a,b,c,e,d,f,g')  arrData  from  dual;

默认使用逗号分割,可以自定义修改,如:select split('X-rapido & Lemon','&') arrData from dual;

点开集合

默认使用逗号分割,可以自定义修改,如:select split('X-rapido & Lemon','&') arrData from dual;

示例:splitstr(字符串,获取的节点下标,分隔符)

select splitstr('X-rapido&Lemon&Jennifer', 1, '&') word from dual;  -- X-rapido
select splitstr('X-rapido&Lemon&Jennifer', 2, '&') word from dual;  -- Lemon
select splitstr('X-rapido&Lemon&Jennifer', 3, '&') word from dual;  -- Jennifer
select splitstr('X-rapido&Lemon&Jennifer', 4, '&') word from dual;  -- 空字符串

Oracle 创建 split 和 splitstr 函数相关推荐

  1. splitstr oracle,Oracle 创建 split 和 splitstr 函数

    Sql语句最好依次执行创建/************************************** * name:        split * author:      sean zhang. ...

  2. java oracle 流水号_Oracle生成流水号函数

    一.参考 1:日期范围上 smalldatetime的有效时间范围1900/1/1~2079/6/6 datetime的有效时间范围1753/1/1~9999/12/31 2:精准度上 smallda ...

  3. Oracle 创建函数的权限

    Oracle 创建函数时提示 ORA-01031: insufficient privileges 错误,需管理员用户给当前用户增加创建 procedure 的权限,function 跟 proced ...

  4. oracle创建包 和调用,oracle创建函数和调用存储过程和调用函数的例子(区别)...

    创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; ...

  5. (2)存储过程中可以调用其他存储过程吗?_详解Oracle创建存储过程、创建函数、创建包及实例演示...

    概述 说句实在的,平时工作基本上不会去背啥创建存储过程.创建函数.创建包之类的语法,但是相信大家面试啥的却基本会笔试这些,所以就对存储过程.函数和包的语法做下总结,也做个备忘!这里面语法大家理解就可以 ...

  6. oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包

    认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命 ...

  7. oracle中split的使用方法,Oracle 自定义split 函数实例详解

    Oracle 自定义split 函数 Oracle没有提供split函数,但可以自己建立一个函数实现此功能.比如"abc defg  hijkl   nmopqr     stuvw  xy ...

  8. oracle创建索引index,【学习笔记】Oracle索引 创建含sysdate的函数index案例

    天萃荷净 分享一篇运维DBA需求,创建含sysdate的函数index案例 1.模拟Oracle数据库环境 创建表插入数据库 [oracle@node1 ~]$ sqlplus chf/oraclep ...

  9. oracle构建函数,Oracle创建函数

    Oracle创建函数 Oracle创建函数是通过PL/SQL自定义编写的,通过关键字function按照自己的需求把复杂的业务逻辑封装进PL/SQL函数中,函数提供一个返回值,返回给使用者.这样使用者 ...

最新文章

  1. 利用CMake编译内核模块
  2. 获取上传图片路径方法(新旧方法)
  3. 论文浅尝 | 知识库问答中关系检测的学习表示映射
  4. Android之canvas详解
  5. 初识Spring Security
  6. DSB2017第一名代码尝试运行(记录自用)(五)
  7. oracle11g导入导出
  8. 解决windows 您没有权限访问\\192.168.1.X(局域网) 请与网络管理员联系请求访问权限
  9. 系统集成项目管理工程师考试题型
  10. 如何修改hosts文件权限
  11. 代理服务器-贪心算法
  12. Spring Cloud微服务技术栈学习(导读)
  13. 计算机二级考试word论文,office二级考试之word
  14. HTML项目立项,作为承建方,其项目立项的第一步工作是()。A.编制立项申请书B.项目论证C.项目 - 信管网...
  15. 使用Arduino IED配合Blinker为ESP8266-01s烧写程序
  16. 使用大白菜装win10系统的常见问题解决方案
  17. 简单的卷积神经网络,实现手写英文字母识别
  18. chromium - DISALLOW_IMPLICIT_CONSTRUCTORS
  19. gitee教程(超全,超详细,超长)
  20. Testin云测荣获5G应用企业服务优秀平台奖

热门文章

  1. C语言从已排序的链表中删除重复项(附完整源码)
  2. C语言数组元素总和最大的连续子序列的算法(附完整源码)
  3. C语言实现词典编排算法(附完整源码)
  4. 经典C语言程序100例之五零
  5. java只有值传递_面试官:为什么 Java 中只有值传递?
  6. HDP安全之集成kerberos/LDAP、ranger;安装部署kerberos;安装Knox;安装LDAP;启动LDAP;验证Knox网关
  7. ANT不完全总结,包含各种命令,ant例子等,转自:http://lavasoft.blog.51cto.com/62575/87306
  8. Oracle创建和管理表
  9. arcgis伪节点检查_arcgis建立拓扑分析(检验矢量图)
  10. fastjson list转json字符串_程序员:JSON、JSONObject 与 JSONArray 简单讲解