您的位置:首页 > 数据库

PLSQL之Split截取字符串

2015-10-20 16:53 260 查看
oracle中并没有截取字符串的函数,所以当我们需要提取字符串并进行截取的时候,就需要自己写一个split了。

首先我们需要定义一个table类型。

CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (500);
table()函数,这个还需要继续学习。可以自行百度。

创建function。

create or replace function strsplit(p_value varchar2,p_split varchar2 := ';')
return split_type
pipelined is
v_idx       integer;
v_str       varchar2(500);
v_strs_last varchar2(4000) := p_value;
--<span style="font-family: Arial, Helvetica, sans-serif;">p_split  分隔符号 </span>
begin
v_strs_last := REPLACE(v_strs_last , '","' , ';');--字符串转换。
v_strs_last := substr(v_strs_last,2,lengthb(v_strs_last)-2);--去掉开头结尾的引号 。
loop
v_idx := instr(v_strs_last, p_split);
exit when v_idx = 0;
v_str       := substr(v_strs_last, 1, v_idx - 1);
v_strs_last := substr(v_strs_last, v_idx + 1);
pipe row(v_str);
end loop;
pipe row(v_strs_last);
return;

end strsplit;


查询显示。

select * from table(strsplit('"tom","jack","jerry","jobs","panda"'));


或者进行其他处理。进行其他处理的时候,我们涉及到从table类型中取出结果,刚开始的时候使用varchar2类型进行接收数据,然后并不能行。

declare
TYPE split_type IS TABLE OF VARCHAR2 (4000);
attrvalues    split_type;
begin
select * into attrvalues from table(strsplit('"tom","jack","jerry","jobs","panda"')))
dbms_output.put_line('转换完成之后:'||attrvalues.column_value);
end;


后来采用了下面的方法

declare 
  TYPE split_type IS TABLE OF VARCHAR2 (4000);
  attrvalues    split_type;
begin
  for attrvalues in(select * from table(strsplit('"tom","jack","jerry","jobs","panda"')))
    loop
      dbms_output.put_line('转换完成之后:'||attrvalues.column_value);
      end loop;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: