Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle заявка бавна с REGEXP_SUBSTR(AGGREGATOR,'[^;]+',1,LEVEL)

Понякога конвейерната таблица може да бъде по-бърза, опитайте това:

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;

Ето демонстрация на sqlfiddle

И ето още една демонстрация с 22 реда, съдържащи 3 стойности в агрегатора всеки - вижте разликата между първата и втората заявка..



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да прехвърлите масив от низове от C# към съхранена процедура на Oracle

  2. Връзката не може да бъде прехвърлена към oracle.jdbc.OracleConnection

  3. Използване на свързващи променливи с динамична клауза SELECT INTO в PL/SQL

  4. Python-Разбор на SQL с помощта на pyparsing

  5. Изпълнете функция на Oracle, която връща референтен курсор в C#