Wie teilt man am besten CSV-Strings in Oracle 9i?

7

Ich möchte csv-Strings in Oracle 9i aufteilen können

Ich habe den folgenden Artikel gelesen Ссылка

Aber ich habe nicht verstanden, wie das funktioniert. Hier sind einige meiner Fragen dazu

  1. Würde das in Oracle 9i funktionieren, wenn nicht, warum nicht?
  2. Gibt es einen besseren Weg, um CSV-Strings zu spalten als die oben dargestellte Lösung?
  3. Muss ich einen neuen Typ erstellen? Wenn ja, brauche ich dafür bestimmte Privilegien?
  4. Kann ich den Typ in der Funktion angeben?
Joyce 06.07.2009, 22:31
quelle

5 Antworten

8

Hier ist ein String-Tokenizer für Oracle, der etwas einfacher ist als diese Seite, aber keine Ahnung, ob er so schnell ist:

%Vor%

Sie können es wie folgt verwenden:

%Vor%     
Michael Sofaer 07.07.2009, 06:11
quelle
15

Joyce,

Hier sind drei Beispiele:

1) Verwenden von dbms_utility.comma_to_table. Dies ist keine allgemeine Routine, da die Elemente gültige Bezeichner sein sollten. Mit einigen schmutzigen Tricks können wir es universeller arbeiten lassen:

%Vor%

2) Verwenden von SQL connect by level. Wenn Sie mit 10g oder höher arbeiten, können Sie den connect-by-level-Ansatz in Kombination mit regulären Ausdrücken verwenden:

%Vor%

3) Wieder mit SQL connect by level, aber jetzt in Kombination mit einem guten alten SUBSTR / INSTR, falls Sie Version 9 haben, wie Sie es sind:

%Vor%

Sie können in diesem Blogpost weitere Techniken wie diese sehen: Ссылка

Hoffe, das hilft.

Grüße, Rob.

Um Ihren Kommentar zu adressieren:

Ein Beispiel für das Einfügen der getrennten Werte in eine normalisierte Tabelle.

Erstellen Sie zuerst die Tabellen:

%Vor%

Da Sie sich für den Ansatz dbms_utility.comma_to_table interessieren, erwähne ich ihn hier. Allerdings empfehle ich diese Variante aufgrund der Bezeichnerquirks und wegen der langsamen zeilenweisen Verarbeitung sicherlich nicht.

%Vor%

Ich empfehle diese einzelne SQL-Variante:

%Vor%

Grüße, Rob.

    
Rob van Wijk 07.07.2009 13:29
quelle
2
___ qstnhdr ___ Wie teilt man am besten CSV-Strings in Oracle 9i? ___ antwort1090450 ___

Sie möchten vielleicht ein bisschen klarer darüber sein, was Sie tun möchten, dann können wir Ihnen eine spezifische Antwort geben. Es ist immer hilfreich, etwas von deinem Code zu zeigen:)

Wenn Sie Parameter verwenden, um eine Kette von CSV-Nummern zu teilen (zB: 1,2,3,4), dann verwenden Sie diese in einer IN -Anweisung. Schauen Sie sich die Funktion str2tbl() in Frage 670922 . Mit ein paar Änderungen könntest du es in VARCHAR2 ändern oder was immer du brauchst.

Im folgenden könnten Sie :sMyCatagories gleich '1,2,3,4'

setzen %Vor%

und benutze es in einer Select-Anweisung ....

%Vor%

Das ist wirklich nur nützlich, wenn Sie Parameter verwenden. Wenn Sie SQL in Ihrer Anwendung zusammenbringen, dann verwenden Sie einfach eine normale IN-Anweisung.

%Vor%     
___ qstntxt ___

Ich möchte csv-Strings in Oracle 9i aufteilen können

Ich habe den folgenden Artikel gelesen Ссылка

Aber ich habe nicht verstanden, wie das funktioniert. Hier sind einige meiner Fragen dazu

  1. Würde das in Oracle 9i funktionieren, wenn nicht, warum nicht?
  2. Gibt es einen besseren Weg, um CSV-Strings zu spalten als die oben dargestellte Lösung?
  3. Muss ich einen neuen Typ erstellen? Wenn ja, brauche ich dafür bestimmte Privilegien?
  4. Kann ich den Typ in der Funktion angeben?
___ tag123oracle ___ Oracle Database ist ein Datenbankmanagementsystem mit mehreren Modellen, das von Oracle Corporation erstellt wurde. Verwenden Sie dieses Tag NICHT für andere Produkte von Oracle wie Java und MySQL. ___ answer1094315 ___

Ich habe das am Ende benutzt

%Vor% %Vor%     
___ answer1090106 ___

Es klingt, als ob Sie kein Schema (Typen, Funktionen) hinzufügen möchten. Eine einzige SQL-Methode zum Parsen des abgegrenzten Textes besteht darin, mit Instr- und Substr-Aufrufen "verrückt zu werden".

%Vor%

Wenn Sie eine Struktur formalisieren und den entsprechenden Anwendungscode (Funktionen, Ansichten, Typen usw.) hinzufügen möchten, würde ich Tom Kytes Schreiben zu diesem Thema Thema .

    
___ tag123tokenize ___ Tokenizing ist das Aufteilen einer Zeichenkette in diskrete Elemente, Token genannt. ___ tag123csv ___ Comma-Separated Values ​​oder Character-Separated Values ​​(CSV) ist ein standardmäßiges "Flat File Database" -Format zum Speichern tabellarischer Daten im Klartext, das aus einer optionalen Kopfzeile besteht, in der die durch Kommas, Tabulatoren oder andere Felder abgegrenzten Tabellenfelder aufgeführt sind Trennzeichen, gefolgt von einer oder mehreren Zeilen (durch Zeilentrennung getrennt), die die Tabellensätze als getrennte Listen der Werte darstellen. Newlines und Trennzeichen können in (zitierten) Feldern erscheinen. ___ answer1090634 ___

Hier ist ein String-Tokenizer für Oracle, der etwas einfacher ist als diese Seite, aber keine Ahnung, ob er so schnell ist:

%Vor%

Sie können es wie folgt verwenden:

%Vor%     
___ answer1092339 ___

Joyce,

Hier sind drei Beispiele:

1) Verwenden von dbms_utility.comma_to_table. Dies ist keine allgemeine Routine, da die Elemente gültige Bezeichner sein sollten. Mit einigen schmutzigen Tricks können wir es universeller arbeiten lassen:

%Vor%

2) Verwenden von SQL connect by level. Wenn Sie mit 10g oder höher arbeiten, können Sie den connect-by-level-Ansatz in Kombination mit regulären Ausdrücken verwenden:

%Vor%

3) Wieder mit SQL connect by level, aber jetzt in Kombination mit einem guten alten SUBSTR / INSTR, falls Sie Version 9 haben, wie Sie es sind:

%Vor%

Sie können in diesem Blogpost weitere Techniken wie diese sehen: Ссылка

Hoffe, das hilft.

Grüße, Rob.

Um Ihren Kommentar zu adressieren:

Ein Beispiel für das Einfügen der getrennten Werte in eine normalisierte Tabelle.

Erstellen Sie zuerst die Tabellen:

%Vor%

Da Sie sich für den Ansatz dbms_utility.comma_to_table interessieren, erwähne ich ihn hier. Allerdings empfehle ich diese Variante aufgrund der Bezeichnerquirks und wegen der langsamen zeilenweisen Verarbeitung sicherlich nicht.

%Vor%

Ich empfehle diese einzelne SQL-Variante:

%Vor%

Grüße, Rob.

    
___
Mark Nold 07.07.2009 05:10
quelle
2

Ich habe das am Ende benutzt

%Vor% %Vor%     
Joyce 07.07.2009 19:28
quelle
2

Es klingt, als ob Sie kein Schema (Typen, Funktionen) hinzufügen möchten. Eine einzige SQL-Methode zum Parsen des abgegrenzten Textes besteht darin, mit Instr- und Substr-Aufrufen "verrückt zu werden".

%Vor%

Wenn Sie eine Struktur formalisieren und den entsprechenden Anwendungscode (Funktionen, Ansichten, Typen usw.) hinzufügen möchten, würde ich Tom Kytes Schreiben zu diesem Thema Thema .

    
Brian Hart 07.07.2009 02:31
quelle

Tags und Links