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.