V tomto článku uvádím příklad funkce, kterou většinou používám k rozdělení řetězce v PL/SQL. Zvláště, když píšu program pro import souboru s oddělovači. Zde je tato funkce a příklad jejího použití.
Funkce PL/SQL pro rozdělení řetězce
Tato funkce má čtyři parametry a podrobnosti o těchto parametrech jsou uvedeny níže:
- Source_String :String to Split
- Field_Position :Poloha oddělovače
- Neukončeno :Ve výchozím nastavení False, ale pokud předáte hodnotu True, přidá se na konec řetězce zadaný oddělovač.
- Oddělovač :Výchozí hodnota je čárka ',', můžete zadat jakýkoli jiný oddělovač.
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;
Příklad:Použijte tuto funkci v programu 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; /
Výstup:
Java .Net C Oracle PHP PL/SQL procedure successfully completed.
Viz také:
- Exportujte data do JSON pomocí PL/SQL v Oracle 11g
- Program PL/SQL pro tisk podrobností o zaměstnanci