Oracle
 sql >> Baza danych >  >> RDS >> Oracle

zapytanie Oracle wolno z REGEXP_SUBSTR(AGGREGATOR,'[^;]+',1,POZIOM)

Czasami tabela potokowa może być szybsza, spróbuj tego:

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;

Oto demo sqlfiddle

A oto kolejne demo z 22 wierszami zawierającymi 3 wartości w agregatorze każdy - zobacz różnicę między pierwszym a drugim zapytaniem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja SUBSTR() w Oracle

  2. błąd nadsubskrypcji drzewa literału/długości podczas tworzenia bazy danych

  3. Spring Boot Actuator/punkt końcowy kondycji nie wyświetla informacji o bazie danych ani systemie plików

  4. lokalne typy kolekcji nie są dozwolone w instrukcjach SQL

  5. Jak dodać ojdbc7 do aplikacji webowej Java autorstwa Gradle?