首先需要定义 2 个类型

1. Row 类型

CREATE OR REPLACE TYPE ty_row_str_split as object (strValue VARCHAR2 (4000))

2. Table 类型

CREATE OR REPLACE TYPE ty_tbl_str_split IS TABLE OF ty_row_str_split

创建函数:

CREATE OR REPLACE FUNCTION fn_split(p_str IN VARCHAR2,

p_delimiter IN VARCHAR2)

RETURN ty_tbl_str_split IS

j INT := 0;

i INT := 1;

len INT := 0;

len1 INT := 0;

str VARCHAR2(4000);

str_split ty_tbl_str_split := ty_tbl_str_split();

BEGIN

len := LENGTH(p_str);

len1 := LENGTH(p_delimiter);

WHILE j < len LOOP

j := INSTR(p_str, p_delimiter, i);

IF j = 0 THEN

j := len;

str := SUBSTR(p_str, i);

str_split.EXTEND;

str_split(str_split.COUNT) := ty_row_str_split(strValue => str);

IF i >= len THEN

EXIT;

END IF;

ELSE

str := SUBSTR(p_str, i, j - i);

i := j + len1;

str_split.EXTEND;

str_split(str_split.COUNT) := ty_row_str_split(strValue => str);

END IF;

END LOOP;

RETURN str_split;

END fn_split;

使用样例:

select to_number(strvalue) as Value from table(fn_split('1,2,3',','))

select to_char(strvalue) as Value from table(fn_split('aa,bb,cc',','))

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

写function或procedure来分隔。

首先声明一个数组类型:

-- 字符串集合

TYPE Typ_Tab_Str IS TABLE OF VARCHAR(150) INDEX BY BINARY_INTEGER;

-- 写一个函数

CREATE OR REPLACE FUNCTION Fun_Stringtoarrary(P_Sourcestr IN VARCHAR2, -- 源字符串

P_Separator IN VARCHAR2, -- 分隔符

P_Arrary OUT Typ_Tab_Str -- 拆分后得到的数组

) RETURN NUMBER IS

n_Count NUMBER(6); -- 分隔符的个数

n_Posb NUMBER(6); -- 初始位置

n_Pose NUMBER(6); -- 分隔符的位置

BEGIN

-- 初始化

n_Count := 0;

n_Posb := 1;

-- 非空校验

IF Prm_Sourcestr IS NULL OR Prm_Separator IS NULL THEN

RETURN - 1;

END IF;

LOOP n_Pose := Instr(Prm_Sourcestr, Prm_Separator, n_Posb, 1);

n_Count := n_Count + 1;

IF n_Pose = 0 THEN

Prm_Arrary(n_Count) := Substr(Prm_Sourcestr, n_Posb, Length(Prm_Sourcestr) - n_Posb + 1);

EXIT;

END IF;

Prm_Arrary(n_Count) := Rtrim(Ltrim(Substr(Prm_Sourcestr, n_Posb, n_Pose - n_Posb))); n_Posb := n_Pose + Length(Prm_Separator);

END LOOP;

RETURN n_Count;

EXCEPTION

WHEN OTHERS THEN

RETURN - 1;

END Fun_Stringtoarrary;

备注:Oracle没有内置的split函数,只提供了,inner,substr等等简单操作的函数,因为oracle本身就没有数组类型,我们是通过索引表来模拟数组,其实就是一个仿数组的结构。上面的函数完全正确,属于常用自定义功能函数。

oracle中的分隔函数,Oracle中的split字符串分割函数相关推荐

  1. Split字符串分割函数

    非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg"Dim arrTest arrT ...

  2. Perl split字符串分割函数用法指南

    本文和大家重点讨论一下Perl split函数的用法,Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中.这个Perl split函数使用规则表达式( ...

  3. c语言中字符切割函数split,c 语言 指针 C语言字符串分割函数split实现

    c语言也有类似其他语言的split字符串分割函数,就是strtok使用方法如下://用逗号做分隔符,读出内容//char s[] = "123-sldkf-123ls-343434-dfjd ...

  4. PHP字符串分割函数explode,strtok,str_spli的用法

    PHP字符串函数在PHP网站开发中广泛使用,比如使用PHP字符串函数对字符串分割.截取.匹配.替换等处理.PHP字符串函数对于PHP入门学习者来说必不可少,本文将主要介绍PHP字符串分割函数处理心得, ...

  5. php中的分割字符串函数,关于PHP中两款字符串分割函数explode,str_split

    关于PHP中两款字符串分割函数explode,str_split 2019.02.19 4140 将一个字符串分割成数组在日常的微信公众号开发中的应用应该是很多的.如果指定分割符,可以使用explod ...

  6. c语言将字符串按空格分割_如何在c++中实现字符串分割函数split详解

    前言 在学习c++中string相关基本用法的时候,发现了sstream的istringstream[1]可以将字符串类似于控制台的方式进行输入,而实质上这个行为等同于利用空格将一个字符串进行了分割, ...

  7. C++中string如何实现字符串分割函数split()——4种方法

    如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = ...

  8. php字符串分隔函数,php字符串分割函数的简单示例

    这篇文章主要为大家详细介绍了php字符串分割函数的简单示例,具有一定的参考价值,可以用来参考一下. 对php字符串分割函数感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! php中 exp ...

  9. freemarker中的split字符串分割

    freemarker中的split字符串分割 1.简易说明 split分割:用来根据另外一个字符串的出现将原字符串分割成字符串序列 2.举例说明 <#--freemarker中的split字符串 ...

最新文章

  1. 远程更新FPGA配置的热启动地址(WBSTAR)的格式?
  2. centos7 docker升级到最新稳定版本
  3. Java性能优化推荐书!RocketMQ消息丢失场景及解决办法
  4. input 正则验证(摘)
  5. php 发送会议邮件,php – 为什么Outlook想删除以编程方式发送的当前会议邀请?...
  6. Bootstrap3 静态模态对话框
  7. json session cookie介绍和使用
  8. 通过一个模拟程序让你明白ASP.NET MVC是如何运行的
  9. Kickstart+HTTP+DHCP+TFTP全自动批量安装部署Linux系统
  10. CUDA安装失败,及解决方案
  11. linux 如何把文件夹压缩文件,如何在Ubuntu桌面中将文件/文件夹压缩为.zip,tar.xz和7z格式...
  12. 高德地图纠偏 php,驾车轨迹纠偏-轨迹纠偏-示例中心-JS API 示例 | 高德地图API
  13. Java基础03:数据类型讲解
  14. 【转】为什么SPSS的日期要以1582年10月14日为基准
  15. 计算机专业简历教育背景怎么写,简历中教育背景怎么写?填写教育背景注意事项...
  16. 聚合支付行业的基本情况
  17. [转]商业模式新生代
  18. 利用Arduino uno控制24BYJ-48电机正反转停止( 不使用步进库实现方法三)
  19. C语言单向链表的逆序输出
  20. Android HVGA,QVGA等的英文全拼简介

热门文章

  1. 职教云python题和答案_智慧职教云课堂2020Python程序设计题目及答案
  2. 国外LEAD联盟固定IP的一些办法
  3. element 日期控件设置默认时间
  4. php使用ffmpeg转录网络直播流,使用FFmpeg转录网络直播流(示例代码)
  5. 熄屏(待机)状态下打开相机失败的解决
  6. android avm灰色,说说一个6岁小朋友AVM的经历吧
  7. 上班族饮食十大“夺命”恶习
  8. python去重和排序
  9. Android 邮箱APP体验
  10. mysql 的新建查询怎么弄_在Navicat中如何新建数据库和表并做查询