ventana importar exportar dmp developer datos conexiones aparece sql oracle clob oracle-sqldeveloper

importar - Exportación de un CLOB a un archivo de texto usando Oracle SQL Developer



la ventana de conexiones de sql developer de oracle no aparece (4)

Estoy usando Oracle SQL Developer e intento exportar una tabla a un archivo CSV. Algunos de los campos son campos CLOB y, en muchos casos, las entradas se truncan cuando ocurre la exportación. Estoy buscando una manera de sacar todo esto, ya que mi objetivo final es no usar Oracle aquí (recibí un volcado de Oracle, que se cargó en un oráculo DB, pero estoy usando los datos en otro formato, así que voy a través de CSV como intermediario).

Si hay varias soluciones para esto, dado que es un procedimiento de una sola vez para mí, no me importa más las soluciones tipo hack-ish para las soluciones "do it right" más involucradas.


Aquí hay una secuencia de comandos corta pero general de Python que hace justamente esto: tablas de volcado (con campos CLOB, entre el resto) a un archivo csv plano: OraDump


Puede usar una secuencia de comandos de Python para encargarse de la exportación, los CLOB no se verán truncados:

from __future__ import print_function from __future__ import division import time import cx_Oracle def get_cursor(): '''''' Get a cursor to the database '''''' # https://.com/questions/24149138/cx-oracle-doesnt-connect-when-using-sid-instead-of-service-name-on-connection-s # http://www.oracle.com/technetwork/articles/dsl/prez-python-queries-101587.html ip = '''' # E.g. ''127.0.0.1'' port = '''' # e.g. ''3306'' sid = '''' dsnStr = cx_Oracle.makedsn(ip, port, sid) username = '''' # E.g. ''FRANCK'' password = '''' # E.g. ''123456'' db = cx_Oracle.connect(user=username, password=password, dsn=dsnStr) cursor = db.cursor() return cursor def read_sql(filename): '''''' Read an SQL file and return it as a string '''''' file = open(filename, ''r'') return '' ''.join(file.readlines()).replace('';'', '''') def execute_sql_file(filename, cursor, verbose = False, display_query = False): '''''' Execute an SQL file and return the results '''''' sql = read_sql(filename) if display_query: print(sql) start = time.time() if verbose: print(''SQL query started... '', end='''') cursor.execute(sql) if verbose: end = time.time() print(''SQL query done. (took {0} seconds)''.format(end - start)) return cursor def main(): '''''' This is the main function '''''' # Demo: cursor = get_cursor() sql_filename = ''your_query.sql'' # Write your query there cursor = execute_sql_file(sql_filename, cursor, True) result_filename = ''result.csv'' # Will export your query result there result_file = open(result_filename, ''w'') delimiter = '','' for row in cursor: for count, column in enumerate(row): if count > 0: result_file.write(delimiter) result_file.write(str(column)) result_file.write(''/n'') result_file.close() if __name__ == "__main__": main() #cProfile.run(''main()'') # if you want to do some profiling

FYI: Ayuda para instalar cx_Oracle


si tiene acceso al sistema de archivos en su cuadro de base de datos, puede hacer algo como esto:

CREATE OR REPLACE DIRECTORY documents AS ''C:/'; SET SERVEROUTPUT ON DECLARE l_file UTL_FILE.FILE_TYPE; l_clob CLOB; l_buffer VARCHAR2(32767); l_amount BINARY_INTEGER := 32767; l_pos INTEGER := 1; BEGIN SELECT col1 INTO l_clob FROM tab1 WHERE rownum = 1; l_file := UTL_FILE.fopen(''DOCUMENTS'', ''Sample2.txt'', ''w'', 32767); LOOP DBMS_LOB.read (l_clob, l_amount, l_pos, l_buffer); UTL_FILE.put(l_file, l_buffer); l_pos := l_pos + l_amount; END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line(SQLERRM); UTL_FILE.fclose(l_file); END; /

Que copié y pegué desde este sitio .

También puede encontrar útil esta pregunta previa sobre UTL_FILE . Se trata de exportar a CSV. Sin embargo, no tengo ni idea ni experiencia sobre cómo UTL_FILE maneja los CLOB.


suponiendo que un volcado de Oracle signifique un .dmp (ya sea de exportación o expdp), está viendo un archivo binario. Tendrá que importar el archivo de volcado en una base de datos Oracle y luego exportar los datos a texto plano usando UTL_FILE u otros medios.