Split und Schleifenverarbeitung über varchar Index Variable

declare 
type t_array is table of varchar2(100);
v_array t_array;
type t_collection is table of number index by varchar2(30);
v_pliste t_collection;
v_key varchar2(30);

-- Funktion innerhalb des anonymen Blocks
function split_string(p_string varchar2, p_delimiter varchar2) return t_array is
  v_array t_array := t_array();
  v_start_pos number := 1;
  v_end_pos number;
begin
  loop
    v_end_pos := instr(p_string, p_delimiter, v_start_pos);
    exit when v_end_pos = 0;
    
    v_array.extend;
    v_array(v_array.count) := substr(p_string, v_start_pos, v_end_pos - v_start_pos);
    
    v_start_pos := v_end_pos + 1;
  end loop;
  
  v_array.extend;
  v_array(v_array.count) := substr(p_string, v_start_pos);
  
  return v_array;
end;

begin
  for c in (
    SELECT table_name FROM all_tables where owner = 'STAGE'
    and table_name like 'STG_%' order by 1
  ) loop
    v_array := split_string(c.table_name,'_');
    --zweites Element herauskopieren und in Collection speichern:
    if not v_pliste.exists(v_array(2)) then 
      v_pliste(v_array(2)) := 1;
    end if;
    
  end loop;
  
  --Erstes Element speichern:
  v_key := v_pliste.first;
  
  --Liste ausgeben:
  while v_key is not null loop
    dbms_output.put_line(v_key);
    v_key := v_pliste.NEXT(v_key);
  end loop;
  
end;
/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert