PLSQL’de string ifadenin array’a çevrilmesi

PL/SQL’de parametre olarak string, belirtilen ayırac ile bölen fonksiyon. Eğer hiç ayırac kullanılmamışsa parametre olarak geçilen değer döner. Ayıraç birden fazla karakterden oluşabilir.

[sql]
create or replace function str2array(pStr in varchar2, pDelim in varchar2 ) return dbms_utility.uncl_array is
  Result dbms_utility.uncl_array;
  i number;
  j number;
  lastpos number;
  iCount number;
  bFound boolean;
begin
  i:=1;
  lastpos:=1;
  iCount:=1;
  
  while i<=length(pStr) 
  loop          
     bFound:=false;
     
     if  substr(pStr,i,1)=substr(pDelim,1,1) then 
         
         bFound:=true;
         
         for j in 1..length(pDelim)
         loop
            if substr(pStr,i+j,1)<>substr(pDelim,j+1,1)then
                bFound:=false;
            end if;                 
         end loop;
         
         if bFound then           
            Result(iCount):=substr(pStr,lastpos,i-lastpos);
            iCount:=iCount+1;            
            i:=i+length(pDelim);
            lastpos:=i; 
         end if;
         
     end if;
     
     i:=i+1;
  end loop;
  
  if substr(pStr,lastpos,length(pStr)-lastpos+1)<>pDelim then 
    Result(iCount):=substr(pStr,lastpos,length(pStr)-lastpos+1);
  end if;
   
  
  return(Result);
end;
[/sql]

Örnek kullanım :

[sql]
declare 
 arr dbms_utility.uncl_array;
 i number;
begin
  arr:= str2array('abc,d,ef',',');
  for i in 1..arr.count
  loop
     dbms_output.put_line( arr(i) );
  end loop;
end;
[/sql]