pl/sql中实现字符串分割
2012-05-22 14:49
267 查看
在网上找了很久,看到有几种实现方法,其中以下面的这种方法最为适合,
/**
用pipe函数实现字符串分割
**/
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (20);
/
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
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);
PIPE ROW (str);
IF i >= len THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
PIPE ROW (str);
END IF;
END LOOP;
RETURN;
END fn_split;
/
--测试:
--1直接在sql中调用
SELECT fn_split ('1;;12;;123;;1234;;12345', ';;') FROM dual;
--2生成table
SELECT * FROM TABLE (fn_split ('1;;12;;123;;1234;;12345', ';;'));
--3在存储过程中使用的方法
create or replace procedure test(str varchar2,splitchar varchar2)
is
cstr ty_str_split;
I number;
begin
select fn_split (str,splitchar) into cstr from dual;
for I in cstr.first()..cstr.last() loop
dbms_output.put_line(cstr(I));
end loop;
end;
/
exec test('fadsffadsf','a')
/**
用pipe函数实现字符串分割
**/
CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (20);
/
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
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);
PIPE ROW (str);
IF i >= len THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
PIPE ROW (str);
END IF;
END LOOP;
RETURN;
END fn_split;
/
--测试:
--1直接在sql中调用
SELECT fn_split ('1;;12;;123;;1234;;12345', ';;') FROM dual;
--2生成table
SELECT * FROM TABLE (fn_split ('1;;12;;123;;1234;;12345', ';;'));
--3在存储过程中使用的方法
create or replace procedure test(str varchar2,splitchar varchar2)
is
cstr ty_str_split;
I number;
begin
select fn_split (str,splitchar) into cstr from dual;
for I in cstr.first()..cstr.last() loop
dbms_output.put_line(cstr(I));
end loop;
end;
/
exec test('fadsffadsf','a')
相关文章推荐
- SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
- PL/SQL中字符串变量的分割转化
- 用递归实现字符串分割(Split)[SQL 2005]
- SQL语句实现分割字符串
- ORACLE(PL/SQL) 根据字符分割(SPLIT)字符串返回数组
- 2、Oracle PL/SQL字符串分割截取
- [SQL]实现按照指定分割分分割字符串
- SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
- SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
- SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
- 在PL/SQL中如何分割字符串(Split String)
- SQL语句实现分割字符串
- sql用特定字符分割字符串,实现split功能
- 在sql中实现字符串分割(函数)
- SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
- C语言实现字符串分割(类似vb中split函数)
- SQL语句做字符串分割
- SQL实现字符串Split方法
- strtok函数实现字符串分割
- SQLServer 存储过程中不拼接SQL字符串实现多条件查询