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

PL / SQLで文字列を分割する方法は?

    この記事では、PL/SQLで文字列を分割するために主に使用する関数の例を示します。特に、区切りファイルをインポートするプログラムを作成しているとき。その関数とその使用例を次に示します。

    文字列を分割するPL/SQL関数

    この関数は4つのパラメーターを取り、これらのパラメーターの詳細は以下のとおりです。

    1. Source_String :分割する文字列
    2. Field_Position :区切り文字の位置
    3. 未終了 :デフォルトではFalseですが、Trueを渡すと、指定された区切り文字が文字列の最後に追加されます。
    4. 区切り文字 :デフォルトはカンマ'、'で、他の区切り文字を渡すことができます。
    CREATE OR REPLACE FUNCTION GetString (
    Source_string IN VARCHAR2,
    Field_position IN NUMBER,
    UnTerminated IN BOOLEAN DEFAULT FALSE,
    Delimiter IN VARCHAR2 DEFAULT ',')
    RETURN VARCHAR2
    IS
    iPtrEnd PLS_INTEGER := 0;
    iPtrStart PLS_INTEGER := 0;
    vcSourceStrCopy VARCHAR2 (4000) := Source_string;
    BEGIN
    IF UnTerminated
    THEN
    vcSourceStrCopy := vcSourceStrCopy || Delimiter;
    END IF;
    
    IF Field_Position > 1
    THEN
    iPtrStart :=
    INSTR (vcSourceStrCopy,
    Delimiter,
    1,
    Field_Position - 1)
    + LENGTH (Delimiter);
    ELSE
    iPtrStart := 1;
    END IF;
    
    iPtrEnd :=
    INSTR (vcSourceStrCopy,
    Delimiter,
    1,
    Field_Position);
    RETURN SUBSTR (vcSourceStrCopy, iPtrStart, (iPtrEnd - iPtrStart));
    END GetString;

    例:PL/SQLプログラムでこの関数を使用する

    SET SERVEROUTPUT ON;
    
    DECLARE
       v_string      VARCHAR2 (1000) := 'Java|.Net|C|Oracle|PHP';
    
       TYPE t_string IS TABLE OF VARCHAR2 (1000)
                           INDEX BY BINARY_INTEGER;
    
       t_str_array   t_string;
    BEGIN
       FOR i IN 1 .. 5
       LOOP
          t_str_array (i) :=
             getstring (v_string,
                        i,
                        TRUE,
                        '|');
       END LOOP;
    
       FOR j IN t_str_array.FIRST .. t_str_array.LAST
       LOOP
          DBMS_OUTPUT.put_Line (t_str_array (j));
       END LOOP;
    END;
    /

    出力:

    Java
    .Net
    C
    Oracle
    PHP
    PL/SQL procedure successfully completed.

    関連項目:

    • Oracle11gでPL/SQLを使用してデータをJSONにエクスポートする
    • 従業員の詳細を印刷するPL/SQLプログラム
    1. パート2:MariaDBサーバーとTensorFlowを使用した画像分類–チュートリアル

    2. DISTINCTを使用して可能なパーティション関数COUNT()OVER

    3. mysqlはレコード作成タイムスタンプを自動的に保存します

    4. 変数を使用したSQL使用ステートメント