2 Stimmen

LONG RAW mit cx_Oracle lesen

Ich habe eine Legacy-Datenbank mit LONG RAW-Spalten. Die in diesen Spalten gespeicherten Daten sind ca. 100KB groß. Ich versuche, mit cx_Oracle auf diese Binärdaten zuzugreifen.

Es funktioniert, aber die maximale Größe, die ich extrahieren konnte, ist ~41KB !

Hier ist mein Code (aus http://dbaportal.eu/?q=node/147 )

cursor = db.cursor()    
cursor.arraysize = 1
cursor.setoutputsize(1200000000)

cursor.execute("select data from mytable")
print cursor.description
for row in cursor:
    data = row[0]
    f = open("/tmp/data",'wb')
    f.write(data)
    f.close()
    # Only first line
    break

Die Ausgabe sieht folgendermaßen aus:

$ python oracle.py
[('GRIB', <type 'cx_Oracle.LONG_BINARY'>, -1, 0, 0, 0, 1)]
$ ls -lh /tmp/data
41186 2011-01-20 12:42 /tmp/pygrib

Ich weiß LONG RAW sind nicht leicht zu bewältigen. Einige Methoden besagen, dass man eine neue Tabelle mit BLOB Spalte. Aber ich kann es mir nicht leisten, weil ich bereits Gigas von Daten in diesem Format habe...

Irgendeine Idee?

0voto

mik Punkte 3076

Sie können eine globale temporäre Tabelle mit einer BLOB Spalte, und dann kurz vor dem Erhalt der LONG RAW Wert in diese Tabelle einfügen mit TO_LOB Konvertierungsfunktion. Dann können Sie die BLOB Wert aus der temporären Tabelle.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X