Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1369956
  • 博文数量: 172
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3831
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 13:00
个人简介

About me:Oracle ACE pro,optimistic,passionate and harmonious. Focus on ORACLE,MySQL and other database programming,peformance tuning,db design, j2ee,Linux/AIX,Architecture tech,etc

文章分类

全部博文(172)

文章存档

2024年(27)

2023年(28)

2022年(43)

2020年(62)

2014年(3)

2013年(9)

分类: Oracle

2022-04-10 21:10:33

对lob处理还不太熟悉,看网上有人问就写了个,lob类型处理起来的确很麻烦

SQL> create or replace type varchar2_tt as table
  2       of varchar2 (1000);
  3  /

Type created

SQL> 
SQL> create or replace
  2       function in_list( p_string in  clob ,p_delimiter in varchar2 default ',',len in out number)
  3   return varchar2_tt
  4  
  5    as
  6  
  7          l_data          varchar2_tt := varchar2_tt();
  8          n               number;
  9          l_string clob:=p_string ;
10          l_delimiter clob:=to_clob(p_delimiter);
11          v_str varchar2(32767);
12      begin
13          dbms_lob.append(dest_lob => l_string,src_lob =>l_delimiter)  ;
14        loop
15           n :=  dbms_lob.instr(lob_loc => l_string,pattern => l_delimiter);
16           v_str:= trim(dbms_lob.substr(lob_loc => l_string,amount => n-1,offset => 1));
17         exit when v_str is null;
18           l_data.extend;
19           l_data(l_data.count) :=  v_str ;
20           len := length( l_data(l_data.count))+dbms_lob.getlength(l_delimiter)+len;
21          dbms_lob.erase(lob_loc => l_string,amount => len);
22      end loop;
23      return l_data;
24    end;
25  /

Function created
SQL>    declare
  2  lens number default 0;
  3   l_data          varchar2_tt := varchar2_tt();
  4   l_string clob:=to_clob('A,AA,AAA,AAAAAB,BB,BBB,BBBB');
  5  begin
  6   l_data := in_list(p_string => l_string,len => lens);
  7   for i in l_data.first .. l_data.last loop
  8     dbms_output.put_line(l_data(i));
  9   end loop;
10  end;
11  /

A
AA
AAA
AAAAAB
BB
BBB
BBBB

PL/SQL procedure successfully completed

SQL> 
SQL>  declare
  2  lens number default 0;
  3   l_data          varchar2_tt := varchar2_tt();
  4   l_string clob:=to_clob('A,AA,AAA,AAAAA@B,BB,BBB,BBBB@');
  5  begin
  6   l_data := in_list(p_string => l_string,p_delimiter =>'@',len => lens);
  7   for i in l_data.first .. l_data.last loop
  8     dbms_output.put_line(l_data(i));
  9   end loop;
10  end;
11  
12  /

A,AA,AAA,AAAAA
B,BB,BBB,BBBB

PL/SQL procedure successfully completed
阅读(389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~