oracle的split函数

PL/SQL 中没有split函数,需要自己写。

  代码:



create or replace type type_split as table of varchar2(50);  --创建一个  type  ,如果为了使split函数具有通用性,请将其size 设大些。

--创建function

create or replace function split

(

   p_list varchar2,

   p_sep varchar2 := ','

)  return type_split pipelined

is

   l_idx  pls_integer;

   v_list  varchar2(50) := p_list;

begin

   loop

      l_idx := instr(v_list,p_sep);

      if l_idx > 0 then

          pipe row(substr(v_list,1,l_idx-1));

          v_list := substr(v_list,l_idx+length(p_sep));

      else

          pipe row(v_list);

          exit;

      end if;

   end loop;

   return;

end split;

测试:

create or replace type type_split as table of varchar2(500)
create or replace function split
(

   p_list varchar2,
   p_sep varchar2 := ','

)  return type_split pipelined
is
   l_idx  pls_integer;
   v_list  varchar2(500) := p_list;
begin
   loop
      l_idx := instr(v_list,p_sep);
      if l_idx > 0 then
          pipe row(substr(v_list,1,l_idx-1));
          v_list := substr(v_list,l_idx+length(p_sep));
      else
          pipe row(v_list);
          exit;
      end if;
   end loop;
   return;
end split;


SQL> select * from table(split('northsnow,塞北的雪',','));

COLUMN_VALUE

--------------------------------------------------

northsnow

塞北的雪

SQL>

--将字符串转换成表数据
select DISTINCT SITEID from WORKORDER where siteid in (select * from table(split((select DECODE('PG', 'PG', 'TQ,GX', 'GX')from dual),',')));
  

猜你喜欢

转载自awen7916.iteye.com/blog/2198380