Hola,
Si necesitamos leer ficheros locales en nuestra interfaz, podemos hacerlo con un procedimiento en Java. Como sabemos, Oracle dispone de un motor java que permite ejecutar código y utilizarlo dentro de nuestras funciones o procedimientos PL/SQL.
Para poder leer el contenido de un directorio y obtener la lista de ficheros, debemos ejecutar lo siguiente:
CREATE OR REPLACE TYPE file_list AS TABLE OF VARCHAR2(255);
/
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "ListVirtualDirectory" AS
import java.io.*;
import java.security.AccessControlException;
import java.sql.*;
import oracle.sql.driver.*;
import oracle.sql.ArrayDescriptor;
import oracle.sql.ARRAY;
public class ListVirtualDirectory {
public static ARRAY getList(String path) throws SQLException, AccessControlException {
Connection conn = DriverManager.getConnection("jdbc:default:connection:");
File directory = new File(path);
ArrayDescriptor arrayDescriptor = new ArrayDescriptor("FILE_LIST",conn);
ARRAY listed = new ARRAY(arrayDescriptor,conn,((Object[])directory.list()));
return listed; }}
/
CREATE OR REPLACE FUNCTION list_files(path VARCHAR2) RETURN FILE_LIST IS
LANGUAGE JAVA
NAME 'ListVirtualDirectory.getList(java.lang.String) return oracle.sql.ARRAY';
Ahora asignaremos permisos al procedimiento java para que éste pueda leer el directorio local.
Lectura:
BEGIN
DBMS_JAVA.GRANT_PERMISSION('USUARIO' --USUARIO DE ESQUEMA
,'SYS:java.io.FilePermission'
,'C:\test' --DIR LOCAL
,'read'); --PERMISOS
END;
Escritura:
BEGIN
DBMS_JAVA.GRANT_PERMISSION('USUARIO' --USUARIO DE ESQUEMA
,'SYS:java.io.FilePermission'
,'C:\test' --DIR LOCAL
,'write'); --PERMISOS
END;
Asignamos permisos al usuario normal (no sys) para que pueda utilizar el procedimiento java:
GRANT EXECUTE ON list_files TO USUARIO;
Finalmente para obtener el contenido del directorio, utilizaremos la siguiente consulta:
SELECT column_value FROM TABLE(list_files('C:\test\'));
Código extraído de: https://community.oracle.com/thread/2399619
Espero que les haya resultado útil.
Salu2.
- Blogger Comment
Suscribirse a:
Enviar comentarios
(
Atom
)
0 comentarios:
Publicar un comentario