PLSQL之Split截取字符串

来源:互联网 发布:jbf_11sf编程 编辑:程序博客网 时间:2024/06/06 02:47

oracle中并没有截取字符串的函数,所以当我们需要提取字符串并进行截取的时候,就需要自己写一个split了。

  1. 首先我们需要定义一个table类型。
    CREATE OR REPLACE TYPE split_type IS TABLE OF VARCHAR2 (500);
    table()函数,这个还需要继续学习。可以自行百度。


  2. 创建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;



  3. 查询显示。
    select * from table(strsplit('"tom","jack","jerry","jobs","panda"'));



  4. 或者进行其他处理。进行其他处理的时候,我们涉及到从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;

0 0
原创粉丝点击