PL/SQL Function To Split String Into Array

von Tobias Redmann

Im Standard PL/SQL Funktionsumfang gibt es keine Function die mir einen beliebigen String mit konfigurierbaren Delimiter in Teilstrings – vorzugsweise in einem ARRAY (z.B. Nested Table) – splittet.
Ich wollte eine reine PL/SQL Implementierung, welche aber auch in SQL benutzbar ist und eine beliebiges Trennzeichen zulässt.

Sourcecode der PL/SQL Function – f_split_string_into_array

Es muss eine TYPE in der Datenbank angelegt werden, damit die Function auch in einem SQL-Statement verwendet werden kann. Beispiele findet ihr weiter unten in diesem Artikel.

Setup Test

Zum Demonstrieren der PL/SQL Function f_split_string_into_array benötige ich eine Tabelle mit Testdaten.

Example – f_split_string_into_array in SQL

Example – f_split_string_into_array in PL/SQL

Konstruktives Feedback ist ausdrücklich gewünscht.

6 KOMMENTARE

avatar placeholder
16
.
10
.
2015
 von  Reimzak
erfüllt das nicht den gleichen Zweck...und ist auch noch einfacher SELECT REGEXP_SUBSTR ('nase,katze,haus', '[^,]+', 1, LEVEL) TXT FROM DUAL CONNECT BY REGEXP_SUBSTR ('nase,katze,haus', '[^,]+', 1, LEVEL) is not null
avatar placeholder
19
.
11
.
2015
 von  Karsten Besserdich
Danke für den Tipp. Ist ne tolle Sache!!!!
avatar placeholder
18
.
01
.
2017
 von  srkg
I tried this for single character input string like "Y", it is going in infinite loop and causing hung threads
avatar placeholder
22
.
09
.
2017
 von  Jürgen Gremmels
Wenn in Zeile 53 (IF lv_result = 0 AND lv_position < LENGTH(pi_str) THEN) das '<' durch ein '<=' ersetzt wird, funktioniert es auch mit Listen aus einzelnen Zeichen. Hinweis: die Variable 'lv_length NUMBER;' wird nicht (mehr) gebraucht.
avatar placeholder
23
.
05
.
2018
 von  Karsten Besserdich
Danke für den Hinweis. Ich habe den Code aktualisiert :-)
avatar placeholder
17
.
10
.
2019
 von  Thomas
Ich habe eine weitere Anforderung: Wenn mein String in "Gänsefüschen" steht, soll er den "Strichpunkt" ignorieren. (z.B. csv Datei) Beispiel: 'a;b;"Text von c mit; Strickpunkt";d' Als Ergebnis sollen folgende Teilstrings erzeugt werden: a b "Text von c mit; Strickpunkt" d Eine Idee, wie man das noch implementieren kann?

SCHREIBEN SIE EINEN KOMMENTAR