Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

truy vấn oracle chậm với REGEXP_SUBSTR (AGGREGATOR, '[^;] +', 1, LEVEL)

Đôi khi một bảng pipelined có thể nhanh hơn, hãy thử cách này:

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;

Đây là bản trình diễn sqlfiddle

Và đây là một bản trình diễn khác với 22 hàng chứa 3 vals trong bộ tổng hợp mỗi hàng - hãy xem sự khác biệt giữa truy vấn thứ nhất và thứ hai ..



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tài liệu Oracle

  2. Oracle PLSQL thiết lập con trỏ từ một biến

  3. Tại sao việc triển khai ODP.NET 11 xcopy không hoạt động trên máy đã cài đặt Oracle DB 10?

  4. gặp lỗi khi tạo bảng dưới dạng ORA-00904::mã định danh không hợp lệ trong sql cơ sở dữ liệu oracle

  5. Kerberos trên kết nối C # Oracle Managed