wie csv in Oracle in Tabelle konvertieren

7

Wie kann ich ein Paket erstellen, das Ergebnisse in Tabellenform zurückgibt, wenn es in CSV-Werten übergeben wird.

%Vor%

sollte zurückgeben

%Vor%

Ich habe etwas aus frage tom aber das funktioniert nur mit SQL-Typen.

Ich benutze Orakel 11g. Ist etwas eingebaut?

    
Mehur 29.06.2010, 16:22
quelle

5 Antworten

10

Folgendes funktioniert Rufen Sie es als auf Wählen Sie * aus der Tabelle (Splitter ('a, b, c, d'))

%Vor%     
josephj1989 29.06.2010, 17:01
quelle
4

Leider müssen wir in 11g noch unsere eigenen PL / SQL-Tokenizer mit SQL-Typen abwickeln. In 11gR2 gab uns Oracle eine Aggregationsfunktion, um Ergebnisse in eine CSV-Zeichenkette zu verketten, so dass sie in 12i möglicherweise die umgekehrte Möglichkeit bieten.

Wenn Sie insbesondere keinen SQL-Typ erstellen möchten, können Sie die integrierte SYS.DBMS_DEBUG_VC2COLL wie folgt verwenden:

%Vor%

Hier ist es in Aktion:

%Vor%

Danksagung: Dieser Code ist eine Variante von ein Code, den ich in Tanel Poders Blog gefunden habe .

    
APC 29.06.2010 16:42
quelle
3

Hier ist eine andere Lösung mit einem regulären Ausdruck Matcher vollständig in SQL.

%Vor%     
Shailesh 05.12.2012 04:47
quelle
2

Um eine optimale Leistung zu erzielen, sollten Sie keine hierarchischen Abfragen (CONNECT BY) in der Splitter-Funktion verwenden.

Die folgende Splitter-Funktion wird bei größeren Datenvolumes deutlich besser ausgeführt

%Vor%

Dieser Leistungsunterschied kann unten beobachtet werden (Ich habe den Funktionsteiler verwendet, wie zuvor in dieser Diskussion angegeben).

%Vor%     
Bobby Kenny 07.07.2014 13:46
quelle
0

Ich habe keine 11g installiert, um damit zu spielen, aber es gibt eine PIVOT- und UNPIVOT-Operation zum Konvertieren von Spalten in Zeilen / Zeilen in Spalten, was ein guter Ausgangspunkt sein kann.

Ссылка

(Nachdem wir tatsächlich weitere Untersuchungen durchgeführt haben, sieht dies für diesen Fall nicht geeignet aus - es arbeitet mit tatsächlichen Zeilen / Spalten, aber nicht mit Datensätzen in einer Spalte).

Es gibt auch DBMS_UTILITY.comma_to_table und table_to_comma zum Konvertieren von CSV-Listen in PL / SQL-Tabellen. Es gibt einige Einschränkungen (Umgang mit Zeilenumbrüchen usw.), aber es kann ein guter Ausgangspunkt sein.

Meine Neigung wäre, den TYPE-Ansatz zu verwenden, mit einer einfachen Funktion, die comma_to_table ausführt, dann PIPE ROW für jeden Eintrag im Ergebnis von comma_to_table (DBMS_UTILITY.comma_to_table ist leider eine Prozedur, die von SQL aus nicht aufgerufen werden kann).

    
JulesLt 29.06.2010 17:14
quelle

Tags und Links