この記事では、PL/SQLで文字列を分割するために主に使用する関数の例を示します。特に、区切りファイルをインポートするプログラムを作成しているとき。その関数とその使用例を次に示します。
文字列を分割するPL/SQL関数
この関数は4つのパラメーターを取り、これらのパラメーターの詳細は以下のとおりです。
- Source_String :分割する文字列
- Field_Position :区切り文字の位置
- 未終了 :デフォルトではFalseですが、Trueを渡すと、指定された区切り文字が文字列の最後に追加されます。
- 区切り文字 :デフォルトはカンマ'、'で、他の区切り文字を渡すことができます。
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プログラム