___ 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
- Würde das in Oracle 9i funktionieren, wenn nicht, warum nicht?
- Gibt es einen besseren Weg, um CSV-Strings zu spalten als die oben dargestellte Lösung?
- Muss ich einen neuen Typ erstellen? Wenn ja, brauche ich dafür bestimmte Privilegien?
- 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.
___