Auch die umgekehrte Funktionalität wäre wünschenswert: die Möglichkeit, einen einzelnen kommagetrennten Wert wie eine Spalte einer Tabelle zu verwenden. Hierfür kann man einfach auf die TABLE SQL-Funktion und PL/SQL-Funktionstabellen zurückgreifen. Zuerst muss man jedoch den Ergebnistyp als TABLE des größtmöglichen Strings definieren.
Mit dieser Funktion kann man zum Beispiel die folgende Abfrage ausführen:
Die PL/SQL-Prozedur parst ihre Argumente und gibt jeden Teil über eine PIPELINE aus. Die TABLE-Funktion ermöglicht ihre Verwendung im FROM-Ausdruck, so dass sie für SQL als eine Tabelle mit einer Spalte und drei Zeilen erscheint. (Die ausgegebene Spalte hat den Namen COLUMN_VALUE. Daran sollte man denken, falls man den Wert noch an anderer Stelle benutzen will.)
Hier ein Beispiel für eine Abfrage, die eine dynamische IN-Bedingung in einer Abfrage verwendet. Die split-Funktion generiert eine Tabelle von Werten, die Zeile für Zeile verwendet werden können.
Die entsprechende Ausgabe ist in Tabelle B enthalten.
Wenn man will, kann man eine Spalte zusammenfügen und dann wieder aufsplitten:
Man kann mit dieser Methode auch Datensätze zusammenführen:
Dies sind nur ein paar einfache Beispielfunktionen. Man könnte die join-Funktion auch so erweitern, dass auch Werte in Anführungszeichen zulässig sind, wobei Anführungszeichen innerhalb der Werte escaped werden müssen. Außerdem kann man die split-Funktion so ergänzen, dass statt eines einzelnen VARCHAR2 auch ein REF CURSOR als Parameter zulässig ist, wodurch auch mehrere Spalten aufgesplittet werden können.
Neueste Kommentare
Noch keine Kommentare zu Join- und split-Funktionen mit SQL
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.