sql >> Databasteknik >  >> RDS >> Oracle

Hur delar man en sträng i PL/SQL?

I den här artikeln ger jag ett exempel på en funktion som jag mest använder för att dela en sträng i PL/SQL. Speciellt när jag skriver ett program för att importera en avgränsad fil. Här är den funktionen och ett exempel på hur man använder den.

PL/SQL-funktion för att dela en sträng

Denna funktion tar fyra parametrar, och detaljerna för dessa parametrar är som under:

  1. Källsträng :Sträng för att dela
  2. Field_Position :Avgränsningsposition
  3. Ouppsägad :Falskt som standard, men om du godkänner True, kommer det att lägga till den angivna avgränsaren i slutet av strängen.
  4. Avgränsare :Standard är kommatecken ',', du kan skicka vilken annan avgränsare som helst.
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;

Exempel:Använd den här funktionen i PL/SQL-programmet

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;
/

Utdata:

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

Se även:

  • Exportera data till JSON med PL/SQL i Oracle 11g
  • PL/SQL-program för att skriva ut personaldetaljer
  1. Hur man installerar SQL Server på en Mac

  2. Importera databas till MySQL eller MariaDB

  3. Lägga till en frågetips när du anropar tabellvärderad funktion

  4. En översikt över ProxySQL-klustring i ClusterControl