2009-07-25 10 views
4

Lorsque j'essaie de lire les données d'un champ lob en utilisant cx_Oralce, je reçois "exceptions.MemoryError". Ce code a fonctionné, ce champ de lob semble être trop grand.cx_Oracle MemoryError lors de la lecture de lob

Example: 
xml_cursor = ora_connection.cursor() 
xml_cursor.arraysize = 2000 
try: 
    xml_cursor.execute(“select xml_data from xmlTable where id = 1”) 
    for row_data in xml_cursor.fetchall(): 
     str_xml = str(row_data[0]) #this throws “exceptions.MemoryError” 

Répondre

5

Eh oui, si Python donne MemoryError cela signifie que ce seul champ de ce qu'une seule ligne prend plus de mémoire que vous avez (tout à fait possible avec un LOB bien sûr). Vous devrez le découper en tranches (avec select dbms_lob.substr(xml_data, ... de manière répétée) et le transmettre à un analyseur XML incrémentiel (ou l'écrire dans un fichier, ou quoi que ce soit que vous essayez de faire avec ce multi- GB LOB). DBMS_LOB est un package fourni par Oracle et bien documenté, et vous pouvez trouver ses documents dans de nombreux endroits, par ex. here.

Questions connexes