Dentro de las muchas consultas que me hacen, recibí una que me parece interesante de tratar aquí, y es ¿cómo se puede “subir” archivos al sistema de archivos del servidor?
El procedimiento requiere primeramente que creemos un directorio Oracle, que apunte a una ubicación física en el disco del servidor, por ejemplo “C:\Oracle\Archivos” si nuestro servidor es Windows, o bien, “/home/oracle/archivos” si el servidor es Unix/Linux.
Para crear el directorio utilizamos la sentencia:
En Windows:
create directory MisArchivos as ‘C:\Oracle\Archivos’;
En Unix/Linux:
create directory MisArchivos as ‘/home/oracle/archivos’;
Luego debemos asignar los permisos pertinentes al nuevo directorio creado:
grant read, write on directory MisArchivos to mi_usuario;
donde “mi_usuario” corresponde al usuario con los permisos para leer o escribir en el directorio que creamos.
Si no tienes los permisos necesarios para ejecutar las tareas anteriores, debes solicitar a tu DBA que lo haga por tí.
La segunda parte del procedimiento, está relacionado con Apex y lo que debes hacer es:
- Crear una nueva página en blanco, en la aplicación en la que quieres habilitar esta funcionalidad. Supongamos que es la página 35.
- Crea una región tipo HTML dentro de la nueva página creada en el punto anterior.
- En el encabezado de la región, agregar el siguiente código:
<script>
function f_AsignaNombre ()
{ $x(‘P35_ARCHIVO’).value = $x(‘P35_NOMBRE’).value}
</script>
- Ahora agrega un campo tipo “Exploración de Archivos”. Para el ejemplo lo vamos a nombrar “P35_ARCHIVO”.
- Este campo debe ser del tipo de almacenamiento “Tabla wwv_flow_files”.
- En el campo “Atributos de Elementos de Pantalla HTML” agregar el siguiente código:
onChange=”javascript:f_AsignaNombre()”;
- Ahora crea un campo del tipo “Oculto” y llámalo: “P35_NOMBRE”.
- Crea otro campo “Oculto” al que llamarás: “P35_ARCHIVO_ID”.
- El paso siguiente es crear un botón, con el cual vamos a ejecutar el procedimiento, le puedes poner el nombre que quieras, como valor a mostrar puedes ponerle “Cargar”.
- Crea una Validación a nivel de elemento para el campo P35_ARCHIVO
- Selecciona el tipo “Elemento No Nulo”
- Finalice el ayudante para agregar la validación.
- Ahora cree un Proceso de Página que se ejecute al hacer clic en el botón “”Cargar” creado en el paso 9, después de cálculos y validaciones y que contenga el siguiente código:
if :P35_ARCHIVO is not null then
select id
into :P35_ARCHIVO_ID
from wwv_flow_files
where name = :P35_NOMBRE;
carga_blob_a_bfile(&P35_ARCHIVO_ID,’MisArchivos’);
delete from wwv_flow_files
where id = :P35_ARCHIVO_ID;
end if;
- El código del procedimiento utilizado en el código anterior lo puedes descargar de aquí. Para no tener problemas al crear este procedimiento, debe tener permisos de lectura sobre la tabla WWV_FLOW_FILES.
- Cree un sinónimo público para el procedimiento “carga_blob_a_bfile”.
create public synonym carga_blob_a_bfile for esquema.carga_blob_a_bfile;
- De permisos de ejecución sobre el objeto “carga_blob_a_bfile” al usuario PUBLIC.
grant execute on carga_blob_a_bfile to public;
Y eso es todo, ahora debería poder “subir” archivos al directorio “MisArchivos” dentro de su servidor.
Espero que les sea de utilidad.