sql >> データベース >  >> RDS >> Oracle

Oracleは、解析された文字列/clob行から複数​​のサブ文字列を返す方法を提供していますか?

    このようなものかもしれません:

    CREATE OR REPLACE FUNCTION explode(longline varchar)
      RETURN sys.dbms_debug_vc2coll PIPELINED
    IS  
      pos PLS_INTEGER;
      lastpos PLS_INTEGER;
      element varchar(2000);
    BEGIN
       lastpos := 1;
       pos := instr(longline, ',');
    
       while pos > 0 loop
          element := substr(longline, lastpos, pos - lastpos);
          lastpos := pos + 1;
          pos := instr(longline, ',', lastpos);
          pipe row(element);
       end loop;
    
       if lastpos <= length(longline) then
          pipe row (substr(longline, lastpos));
       end if;
    
       RETURN;
    END;  
    /
    

    これは次のように使用できます:

    SQL> select * from table(explode('1,2,3'));
    
    COLUMN_VALUE
    ---------------------------------------------
    1
    2
    3
    SQL>
    

    11.xを使用していない場合は、リターンタイプを自分で定義する必要があります。

    create type char_table as table of varchar(4000);
    

    関数宣言を次のように変更します。

    CREATE OR REPLACE FUNCTION explode(longline varchar)
      RETURN char_table pipelined
    .....
    



    1. mysqlからHbaseへの継続的なデータ移行

    2. SQL Server 2016:ストアドプロシージャを作成する

    3. スタースキーマ

    4. Oracleの日付にAD/BCインジケーターを追加する方法