我需要一个存储过程,可以把我输入的 字符串按特定的分隔符拆分谁知道怎么写。例如 :输入参数为abcdefg$abbbbbb$
拆分后为abcdefg 和 abbbbbb两个。
拆分后为abcdefg 和 abbbbbb两个。
解决方案 »
- Oracle存储过程 在PL/SQL中如何给%rowtype传参?
- 求助一个关于oracle的语句
- 请教程序员学oralce,买什么书好呢?
- 请教 String 和 StringBuffer的区别
- 高手指教:写个脚本,把coder下的每个表授权给mem用户(select,references权限)。
- 为什么在PL/SQLdeveloper上插入的数据在OEM里看不到?
- 数据库启动不了怎办?
- 将oracle 8i 数据库 test 直接拷贝,在 oracle 9i 下面打不开,寻解决办法!
- procedure中,如何判断当前日期是否出于13:00-14:00之间?
- Oracle行转列的问题,年汇总列、年-月汇总列同时存在,求解答
- 请问这个功能如何在oracle中实现.解决后马上给分
- 怎么通过ADO把Oracle里的记录导出为excel或者文本文件?
s varchar2(1000);
idx int;
begin
s:='abcdefg$abbbbbb$';
idx:=instr(s,'$',1);
while idx>0 loop
dbms_output.put_line( substr(s,1,idx-1 ) );
s:=substr(s,idx+1,length( s ) );
idx:=instr(s,'$',1);
end loop;
end;
/
CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
str_split ty_str_split := ty_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) := 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) := str;
END IF;
END LOOP; RETURN str_split;
END fn_split;
/
--测试
DECLARE
CURSOR c
IS
SELECT *
FROM TABLE (CAST (fn_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;
--输出结果
1
12
123
1234
12345
declare
s varchar2(1000);
idx int;
begin
s:='abcdefg$abbbbbb$';
idx:=instr(s,'$',1);
while idx>0 loop
dbms_output.put_line( substr(s,1,idx-1 ) );
s:=substr(s,idx+1,length( s ) );
idx:=instr(s,'$',1);
end loop;
end;
支持ing!