Das Konvertieren von Daten in ein Zeichenfolgenformat zwischen verschiedenen Datentypen ist in Oracle normalerweise ein einfacher Prozess, aber einige Fälle sind etwas schwieriger als andere. Einer davon tritt auf, wenn Sie Oracle verwenden, um clob in varchar2 zu konvertieren, was schwierig ist, weil a varchar2-Spalte hat maximal 4.000 Zeichen, während clob riesige Mengen an Zeichen speichern kann Daten. Sie können Ihr Ziel dennoch erreichen, indem Sie entweder die Methode dbms_lob substr oder to_char verwenden und eine maximale Größe angeben.
CLOB und VARCHAR2 erklärt
CLOB (oder "clob" umgangssprachlich) ist ein Akronym für "Character Large Object" und kann bis zu 4 GB Daten speichern. Es wird von mehreren Datenbanksystemen verwendet, darunter DB2 und Oracle. CLOB ist nützlich, wenn Sie große Datenmengen speichern müssen, aber die Größe selbst kann in einigen Situationen zu Problemen führen. Aus diesem Grund ist die Konvertierung von einem Oracle-CLOB in ein Zeichenfolgenformat mit einer überschaubareren Größe oft ein guter Ansatz, bevor Operationen ausgeführt werden.
Video des Tages
Das VARCHAR2-Format speichert kleinere Datenmengen, normalerweise bis zu 4.000 Byte, es sei denn, Sie verwenden eine erweiterte maximale Zeichenfolgengröße, in diesem Fall kann sie bis zu 32.767 Byte betragen. Bei einem Einzelbyte-Zeichensatz können Sie normalerweise bis zu 4.000 Zeichen in einer Spalte enthalten. In der Diskrepanz zwischen den maximalen Größen dieser beiden Datenformate treten die Probleme bei der Konvertierung auf.
Die dbms_lob substr-Methode
Um einen Clob-String in varchar2 zu konvertieren, öffnen Sie Ihr SQL *Plus-Programm. Die Syntax für die auszuführende Konvertierung lautet:
SELECT dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte ) FROM table
Hier müssen Sie die Werte in Klammern ändern, sowie "Tabelle" am Ende. Diese entsprechen der Spalte ("clob_column") und der Tabelle, mit der Sie arbeiten. Mit "for_how_many_bytes" können Sie angeben, wie viele Datenbytes Sie konvertieren möchten, und mit "from_which_byte" können Sie einen Startpunkt angeben.
Wenn Sie also eine Tabelle namens "taxes" und ein Feld namens "net_pay" haben und davon ausgehen, dass Sie 4.000 Bytes beginnend mit dem ersten haben möchten, geben Sie Folgendes ein:
WÄHLEN SIE dbms_lob.substr (net_pay, 4000, 1) VON Steuern aus
Um den String in das varchar2-Format zu konvertieren.
Die TO_CHAR-Methode
Sie können auch den Befehl TO_CHAR mit einer sehr ähnlichen Syntax verwenden, um das gleiche Ziel zu erreichen:
SELECT TO_CHAR(SUBSTR (clob_column, 0,3999)) FROM Tabelle
Hier werden die Anfangs- und Endbytes als 0 und 3999 angegeben (für eine 4.000 Zeichen lange Zeichenkette beginnend von Anfang an), aber die Felder "clob_column" und "table" werden genauso verwendet wie Vor. Im selben Beispiel könnten Sie also Folgendes eingeben:
SELECT TO_CHAR(SUBSTR (net_pay, 0,3999)) FROM Steuern
Anstatt den Vorgang in einem einzigen Schritt abzuschließen, verwendet dies im Grunde den Befehl SUBSTR, um eine Teilzeichenfolge aus der größeren Zeichenfolge zu ziehen, und verwendet dann "to_char", um die Konvertierung durchzuführen. Wenn die betreffende Clob-Spalte weniger als 4.000 Byte Informationen enthält, können Sie den Namen der Spalte in Klammern hinter to_char eingeben, anstatt einen Teilstring anzugeben.