sql >> Database >  >> RDS >> Oracle

Oracle-query traag met REGEXP_SUBSTR(AGGREGATOR,'[^;]+',1,LEVEL)

Soms kan een pijplijntabel sneller zijn, probeer dit:

create or replace type t is object(word varchar2(100), pk number);
/
create or replace type t_tab as table of t;
/

create or replace function split_string(del in varchar2) return t_tab
  pipelined is

  word    varchar2(4000);
  str_t   varchar2(4000) ;
  v_del_i number;
  iid     number;

  cursor c is
    select * from DUMMY_1; 

begin

  for r in c loop
    str_t := r.aggregator;
    iid   := r.row_id;

    while str_t is not null loop

      v_del_i := instr(str_t, del, 1, 1);

      if v_del_i = 0 then
        word  := str_t;
        str_t := '';
      else
        word  := substr(str_t, 1, v_del_i - 1);
        str_t := substr(str_t, v_del_i + 1);
      end if;

      pipe row(t(word, iid));

    end loop;

  end loop;

  return;
end split_string;

Hier is een sqlfiddle-demo

En hier is nog een demo met 22 rijen met elk 3 vals in aggregator - zie het verschil tussen de eerste en tweede zoekopdracht..



  1. Toon items die ik gemeen heb met een gebruiker, gescheiden door voorkeuren en antipathieën

  2. Hoe toon ik het schema van een tabel in een MySQL-database?

  3. MySql Spaanse karaktergegevens

  4. Hoe de array-sleutels in php te controleren om array-waarden op te slaan in mysql