PLSQL之Split截取字符串

10 篇文章 0 订阅

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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值