oracle字符串处理(急)

anergl 2009-04-28 03:31:59
各位:请问如何将“盐田区|龙岗区|宝安区|南山区|福田区|罗湖区”
求出上面字符串出现|的个数
并把各个区分开
结果如下
盐田
龙岗
。。。
拜谢
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿三 2009-04-28
  • 打赏
  • 举报
回复
写成存储过程了
--iStr 输入的字符串,pStr 分隔符
create or replace procedure P_ListStr(iStr varchar2,pStr varchar2)
as
vStr varchar2(1000);
vStr1 varchar2(100);
begin
vStr := iStr;
if instr(vStr,pStr,1)>0 then
while instr(vStr,pStr,1)>0 loop
select substr(vStr,1,instr(vStr,pStr,1)-1),
substr(vStr,instr(vStr,pStr,1)+1,length(vStr)-instr(vStr,pStr,1)) into vStr1,vStr from dual;
dbms_output.put_line(vStr1);
end loop;
dbms_output.put_line(vStr);
else
dbms_output.put_line(vStr);
end if;
end;

执行结果:
zxf2@ORCL> exec p_listStr('盐田区|龙岗区|宝安区|南山区|福田区|罗湖区','|');
盐田区
龙岗区
宝安区
南山区
福田区
罗湖区

PL/SQL 过程已成功完成。
阿三 2009-04-28
  • 打赏
  • 举报
回复
写了个简单的,你可能要改改
declare
vStr varchar2(200);
vStr1 varchar2(100);
begin
vStr := '盐田区|龙岗区|宝安区|南山区|福田区|罗湖区';
if instr(vStr,'|',1)>0 then
while instr(vStr,'|',1)>0 loop
select substr(vStr,1,instr(vStr,'|',1)-1),
substr(vStr,instr(vStr,'|',1)+1,length(vStr)-instr(vStr,'|',1)) into vStr1,vStr from dual;
dbms_output.put_line(vStr1);
end loop;
dbms_output.put_line(vStr);
else
dbms_output.put_line(vStr);
end if;
end;
zcs_1 2009-04-28
  • 打赏
  • 举报
回复
Oracle10g,先写一个存储过程

CREATE OR REPLACE procedure show_string_info(p_str VARCHAR2) AS
l_tab DBMS_UTILITY.uncl_array;
l_tablen NUMBER;
l_list VARCHAR2 (1000);
BEGIN
l_list := p_str;
l_list := replace(p_str,'|',',');

DBMS_UTILITY.comma_to_table (l_list, l_tablen, l_tab);
DBMS_OUTPUT.PUT_LINE(l_tablen);

for i in 1..l_tablen loop
dbms_output.put_line(l_tab(i));
end loop;

END;
/


然后

exec show_string_info('盐田区|龙岗区|宝安区|南山区|福田区|罗湖区')


17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧