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のデモです

    そしてここに別のデモがあります アグリゲーターにそれぞれ3つの値を含む22行があります。最初のクエリと2番目のクエリの違いを確認してください。



    1. Mysqlはキーの2つのテーブルを結合します

    2. SQL:INTERVALタイプのフィールドをSUM()することは可能ですか?

    3. SQLServerでIF...THENロジックを使用する方法

    4. JDBCでスクロール可能で更新可能なResultSetオブジェクトを作成する方法