sql >> Databáze >  >> RDS >> Oracle

Jak rozdělit řetězec v PL/SQL?

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:

  1. Source_String :String to Split
  2. Field_Position :Poloha oddělovače
  3. 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č.
  4. 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
  1. Pomocí kroku Unpivot Step vytvořte tabulkovou tabulku z křížové tabulky

  2. Sloučit dva oddíly do jednoho v SQL Server (T-SQL)

  3. Jak odstranit duplikáty ze seznamu odděleného mezerou pomocí Oracle regexp_replace?

  4. Můžete vytvořit index v definici CREATE TABLE?