sql >> Base de Datos >  >> RDS >> Oracle

Copiar datos de un archivo a un CLOB en Oracle

Copiar datos de un archivo a un CLOB en Oracle

El siguiente procedimiento copy_file_data_to_clob() muestra cómo leer texto de un archivo y
almacenarlo en un CLOB:
CREATE PROCEDURE copy_file_data_to_clob(
p_clob_id INTEGER,
p_directory VARCHAR2,
p_file_name VARCHAR2
) AS
v_file UTL_FILE.FILE_TYPE;
v_chars_read INTEGER;
v_dest_clob CLOB;
v_amount INTEGER :=32767;
v_char_buffer VARCHAR2(32767 );
COMENZAR
-- insertar un CLOB vacío
INSERTAR EN clob_content(
id, clob_column
) VALORES (
p_clob_id, EMPTY_CLOB()
);
-- obtenga el localizador LOB del CLOB
SELECCIONE clob_column
EN v_dest_clob
DESDE clob_content
DONDE id =p_clob_id
PARA ACTUALIZAR;
-- abre el archivo para leer el texto (hasta v_cantidad de caracteres por línea)
v_file :=UTL_FILE.FOPEN(p_directory, p_file_name, 'r', v_amount);
-- copiar los datos del archivo en v_dest_clob una línea a la vez
LOOP
BEGIN
-- leer una línea del archivo en v_char_buffer;
-- G ET_LINE() no copia el carácter de nueva línea en
-- v_char_buffer
UTL_FILE.GET_LINE(v_file, v_char_buffer);
v_chars_read :=LENGTH(v_char_buffer);
-- agregar el línea a v_dest_clob
DBMS_LOB.WRITEAPPEND(v_dest_clob, v_chars_read, v_char_buffer);
-- agregue una nueva línea a v_dest_clob porque v_char_buffer;
-- el valor ASCII para la nueva línea es 10, entonces CHR(10 ) devuelve nueva línea
DBMS_LOB.WRITEAPPEND(v_dest_clob, 1, CHR(10));
EXCEPTION
-- cuando no hay más datos en el archivo, entonces salga
CUANDO NO SE ENCUENTREN_DATOS ENTONCES
SALIR;
FIN;
FIN DEL BUCLE;
-- cerrar el archivo
UTL_FILE.FCLOSE(v_file);
DBMS_OUTPUT.PUT_LINE('Copiar correctamente completado.');
END copy_file_data_to_clob;
/