Oracle中的Split函数
2022/4/1 19:19:38
本文主要是介绍Oracle中的Split函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
首先需要定义 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',',')) select to_char(strvalue) as Value from 表 table(fn_split(表.字段,'$')) --------------------------------------------------- ***************************************** 方法2: ---------------------------------------------------- CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)
代码 create or replace function split(p_list varchar2,p_sep varchar2 := ',') return type_split pipelined
IS
l_idx pls_integer;
v_list varchar2(4000) := 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;
return;
end split; 原文:https://www.cnblogs.com/march3/archive/2009/07/23/1529442.html 实际测试过方法一
这篇关于Oracle中的Split函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享