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

Importación de archivos en Oracle Apex mediante wwv_flow_files

Suponga que desea importar el contenido de un archivo csv con un procedimiento de base de datos personalizado en Oracle Apex mediante el elemento de la página de exploración de archivos. Siga estos pasos:Cree un elemento de página de exploración de archivos en Apex y elija la opción wwv_flow_files para almacenar el archivo. Luego, cree el proceso de página y elija después de enviar y ejecutar la opción de validación y la opción de código plsql para el proceso. En el área plsql, escriba el siguiente código para exportar el archivo csv de la base de datos (vista wwv_flow_files) a la unidad del servidor y luego llame a su procedimiento personalizado para importar el contenido de ese archivo a una tabla. DECLARE
v_upl_blob BLOB;
vstart Number :=1;
bytelen Número :=32000;
len Número;
my_vr Raw (32000);
x Número;
l_output Utl_file.file_type;
erout varchar2(1000);
COMENZAR
SELECCIONE blob_content
EN v_upl_blob
DESDE wwv_flow_files
WHERE name =:P25_FB;
-- :p25_fb es el elemento de exploración de archivos en la página
>LEN :=Dbms_lob.getlength(V_UPL_BLOB);
l_output :=Utl_File.fopen ('MIS_ARCHIVOS', :P25_FB, 'wb', 32760);
vstart :=1;
bytelen :=32000;
IF len <32760
Entonces
Utl_File.put_raw (l_output, V_UPL_BLOB);
Utl_File.fflush (l_output);
Si no -- escribir en partes
vstart :=1;

WHILE vstart 0
LOOP
Dbms_lob.Read (V_UPL_BLOB, bytelen, vstart, my_vr);
Utl_File.put_raw (l_output, my_vr);
Utl_File.fflush (l_output);
-- establece la posición inicial para el próximo corte
vstart :=vstart + bytelen;
-- establece la posición final si es menor a 32000 bytes
x :=x - bytelen;

IF x <32000
Entonces
bytelen :=x;
END IF;
END LOOP;
END IF;

Utl_File.fclose (l_salida);

DELETE FROM wwv_flow_files
WHERE nombre =:P25_FB;
COMMIT;
--- llame a su procedimiento de base de datos personalizado para importar...
suprocedimientopersonalizado(:P25_FB);
EXCEPCIÓN Cuando Otros
Entonces
IF Utl_File.is_Open(l_output) Entonces
Utl_File.fclose (L_OUTPUT);
END IF;
raise;
END;