Wie erhalten Sie die Größe einer CLOB-Spalte in Oracle in Bytes?
Wie bekomme ich die Größe in bytes einer CLOB
Spalte in Oracle?
LENGTH()
und DBMS_LOB.getLength()
beide geben die Anzahl der Zeichen, die in der CLOB
aber ich muss wissen, wie viele bytes verwendet werden (ich bin im Umgang mit multibyte-Zeichensätze).
Kommentar zu dem Problem - Öffnen
Warum sind Sie besorgt, mit der Größe in bytes der CLOB?
Nicht die OP, aber in meinem Fall war ich abrufen CLOBS über einen DB-link und hatte, Sie zu schneiden, in 4000-byte-Blöcken, und ich wollte wissen, wie viele Stücke, die ich brauchte, für meine Daten.
das ist verrückt, ich will zu squeeze chinesischen clob in varchar2 und kann es nicht, weil ich nicht bestimmen kann, die Größe
InformationsquelleAutor der Frage rag | 2009-11-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach einiger überlegung kam ich auf diese Lösung:
SUBSTR
gibt nur die ersten 4000 Zeichen (max string-Größe)TO_CHAR
konvertiert vonCLOB
zuVARCHAR2
LENGTHB
gibt die Länge in Bytes der Zeichenfolge.InformationsquelleAutor der Antwort rag
Ich hinzufüge, mein Kommentar als eine Antwort, denn er löst das ursprüngliche problem, für ein breiteres Spektrum von Fällen als die akzeptierte Antwort. Hinweis: Sie müssen noch wissen, die maximale Länge und der Ungefähre Anteil an multi-byte-Zeichen, dass Ihre Daten haben.
Wenn Sie ein CLOB größer als 4000 bytes, die Sie verwenden müssen, DBMS_LOB.SUBSTR eher als SUBSTR. Beachten Sie, dass die Menge und offset Parameter sind Umgekehrt in DBMS_LOB.SUBSTR.
Anschließend müssen Sie möglicherweise einen substring einer Menge von weniger als 4000, da dieser parameter die Anzahl der Zeichen, und wenn Sie multi-byte-Zeichen 4000 Zeichen werden mehr als 4000 bytes lange, und du wirst
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
weil die substring-Ergebnis muss passen in ein VARCHAR2, die einen 4000-byte-Grenze. Genau, wie viele Zeichen ein, die Sie abrufen können, hängt von der durchschnittlichen Anzahl der bytes pro Zeichen in Ihren Daten.Also meine Antwort ist:
wo Sie hinzufügen, wie viele Stücke, wie Sie benötigen zur Abdeckung Ihrer längsten CLOB, und passen Sie die chunk-Größe entsprechend der durchschnittlichen bytes pro Zeichen Ihrer Daten.
InformationsquelleAutor der Antwort Andrew Spencer
Versuchen, diese für die CLOB-Größen größer als VARCHAR2:
Wir haben die Spaltung des CLOB in teilen der "VARCHAR2 kompatibel" Größen, führen lengthb durch jeden Teil des CLOB-Daten und fassen alle Ergebnisse.
InformationsquelleAutor der Antwort TobiK
NVL(Länge(clob_col_name),0) funktioniert bei mir.
InformationsquelleAutor der Antwort user5534142
Überprüfen Sie die LOB-Segmentname von dba_lobs mit dem Tabellen-Namen.
Nun das segment Namen zu finden, die bytes dba_segments.
InformationsquelleAutor der Antwort Nalla Krishna
Die einfache Lösung ist die Besetzung CLOB, BLOB und fordern Sie anschließend die Länge der BLOB !
Das problem ist, dass Oracle nicht über eine Funktion, die Besetzung CLOB, BLOB, sondern wir definieren Sie einfach eine Funktion zu tun, die
Den SQL-Befehl zum abrufen der Anzahl von bytes ist
oder
Habe ich getestet auf Oracle 10g, ohne die Verwendung von Unicode(UTF-8).
Aber ich denke, dass diese Lösung muss richtig sein, mit Unicode(UTF-8) Oracle-Instanz 🙂
Will ich Rendern Dank Nashev, der gepostet hat, eine Lösung zu konvertieren clob, blob Wie konvertieren CLOB, BLOB in Oracle? und um diesen Beitrag in Deutsch geschrieben (der code ist in PL/SQL) 13ter.info.blog , geben Sie zusätzlich eine Funktion zum konvertieren von blob, clob !
Kann jemand testen, der 2 Befehle in Unicode(UTF-8) CLOB also ich bin mir sicher, dass dies funktioniert mit Unicode ?
InformationsquelleAutor der Antwort schlebe
Funktioniert es nur bis 4000 byte, Was ist, wenn der clob ist größer als 4000 bytes, dann verwenden wir diese
oder
InformationsquelleAutor der Antwort Imran