Holen Sie sich die LÄNGE einer LONG RAW
Ich habe eine Tabelle mit einer Spalte mit Daten geben LONG RAW
. Wie bestimme ich die Größe (in bytes) der Daten in dieser Spalte?
Wenn ich rufe, die LENGTH
Funktion auf, es wirft ORA-00932: inconsistent datatypes: expected NUMBER got LONG BINARY
.
Falls Sie jetzt denken: UTL_RAW.LENGTH
wirft ORA-00997: illegal use of LONG datatype
🙂
(Ja, ich weiß LONG RAW
ist veraltet - die Frage kam auf wegen einige alte software, die möglicherweise erfordern)
InformationsquelleAutor Jeffrey Kemp | 2011-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass es möglich ist, zu manipulieren, LANGE Raw Dateien mehr als 32k in PLSQL. Hier ist eine java-Prozedur, die gibt die Länge einer LONG RAW.
Zuerst das setup:
Der java-Klasse (mein java ist ein wenig eingerostet):
Nennen wir es:
Getestet hab ich die Funktion mit größer als 32k Felder und es scheint zu funktionieren.
vielen Dank für das Einhorn 🙂
Vielen Dank, das funktioniert für regelmäßige LANGE auch (natürlich).
InformationsquelleAutor Vincent Malgrat
Solange die Daten in der Spalte nicht überschreiten 16.383 bytes, lösen Sie dieses mit einem PL/SQL-Funktion, z.B.
Leider eine LONG RAW zu halten, kann bis zu 2GB...
Auch von diesen thread auf Asktom, es scheint, dass die Manipulation LONG RAW mehr als 32k in PLSQL, ist nicht möglich. Möglicherweise müssen Sie schreiben eine java-Funktion, um die Länge Ihrer raw.
machen Sie nicht bekommen
ORA-00997: illegal use of LONG datatype
? Das ist, was ich bekomme, wenn ich Anrufe, utl_raw.Länge auf einer LONG RAW (Oracle 11.2.0.1.0)nicht in PLSQL (da die LONG RAW wird übersetzt zu RAW(32767)): dies ist meine Funktion
CREATE OR REPLACE FUNCTION get_lr_length (p_id IN NUMBER) RETURN NUMBER IS raw_data LONG RAW; BEGIN SELECT my_long_raw_column INTO raw_data FROM my_table WHERE my_table.id = p_id; RETURN utl_raw.length(raw_data); END;
+1 Vincent - wenn Sie geliefert, die als eine Antwort, ich würde einen weiteren +1 - es ist besser als meine Lösung.
InformationsquelleAutor Jeffrey Kemp
Einen schmutzigen trick, der helfen könnte, wenn Sie spielen mit einem kleinen test-Datenbank: kopieren Sie alle Daten in eine Tabelle mit einer
BLOB
statt einerLONG RAW
.InformationsquelleAutor pascal