Saltar al contenido

Como Crear y Usar un Objeto DIRECTORY en PL-SQL Procedures en Oracle

PL-SQL Procedures en OracleSi aprendes a crear y utilizar un objeto DIRECTORY (directorio en español) en tus PL-SQL Procedures en Oracle podrás manipular fácilmente rutas de directorios o carpetas que están creadas dentro de tu servidor de Unix, en estas rutas puedes crear o leer todo tipo de archivos planos desde tus PL-SQL Procedures en Oracle utilizando la librería UTL_FILE.

Un objeto de Directorio o DIRECTORY permite comunicar rápidamente la Base de Datos Oracle con una ruta física creada por el Sistema Operativo Unix dentro de tu Servidor. Veamos como se crea un objeto DIRECTORY en los PL-SQL Procedures en Oracle de la Base de Datos Oracle:

/* PL-SQL Procedures en Oracle */

CREATE OR REPLACE DIRECTORY MI_RUTA AS ‘/home/sistema/test/’;

Con este comando se crea el objeto directorio MI_RUTA que esta apuntando o esta direccionado hacia la ruta /home/sistema/test/, se asume que esta ruta física ya se encuentra creada en el servidor de Unix. Revisemos un ejemplo práctico para que entiendas mejor como se usa un objeto DIRECTORY en tus PL-SQL Procedures en Oracle:

Ejemplo #1: Supone que debes crear un archivo plano de tipo Log para guardar el inicio y el término de un proceso, veamos como se hace:

/* PL-SQL Procedures en Oracle */

lfi_file utl_file.file_type;

Begin

— se crea el archivo para escritura.

lfi_file:= utl_file.fopen(‘MI_RUTA’, ‘mi_archivo.log’, ‘w’);

— se escriben datos en el archivo

utl_file.put_line(lfi_file, ’inicio de mi proceso: ’||to_char(sysdate));

— se ejecuta el proceso

Mi_proceso(123);

utl_file.put_line(lfi_file, ’termino de mi proceso: ’||to_char(sysdate));

— se cierra el archivo

utl_file.fclose(lfi_file);

End;

/* PL-SQL Procedures en Oracle */

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”

¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

En este ejemplo de PL-SQL Procedures en Oracle primero se define la variable lfi_file del tipo utl_file.file_type (variable de tipo archivo), después se crea el archivo mi_archivo.log con la función utl_file.fopen, esta función recibe como primer parámetro la ruta donde se debe crear el archivo y se utiliza la ruta creada anteriormente la que se debe pasar entre comillas, luego se pasa el nombre del archivo a crear y el modo de apertura del archivo plano en este caso ‘W’ (write) que abre el archivo en modo de escritura. A continuación en el PL-SQL Procedures en Oracle se escriben los datos en el archivo con la función utl_file.put_line y finalmente se cierra el archivo con la función utl_file.fclose.

Te propongo que pruebes de inmediato este ejemplo en tu Base de Datos con tus propios PL-SQL Procedures en Oracle y PL-SQL Function en Oracle, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL-SQL Procedures en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Procedures en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos

20 comentarios en «Como Crear y Usar un Objeto DIRECTORY en PL-SQL Procedures en Oracle»

  1. Hola.

    Los archivos que se deben modificar en el servidor con esta nueva ruta es el init.ora y cual otro.
    Esa ruta debe ser en el mismo servidor donde esta la base de datos Oracle o puee ser otro servidor de archivos diferente?
    Gracias.

    1. Hola Juan, gracias por leer mi blog, respecto de tus preguntas, cuando se crea un directorio no es necesario modificar ningun archivo de oracle, lo importante es que el usuario de la base de datos tenga acceso al directorio físico. Las rutas físicas se deben crear siempre en el mismo servidor de la base de datos.

      ¡Siempre para ayudarte!

      Saludos
      Roberto Vicencio

  2. Hola,
    tengo un problema, el administrador de la red no quiere que el usuario tenga acceso al servidor de base de datos. Buscamos una manera de crear una unidad de red en el servidor de BD (Unidad Z) apuntando a otro servidor (file server), pero sale un error. ¿Necesariamente tiene que ser la ruta fisica de los discos del servidor de base de datos?

    Gracias

    Eduardo

    1. Hola Eduardo, gracias por comunicarte, en mi experiencia siempre he creado las rutas físicas en el mismo servidor de la base de datos, no he tenido la oportunidad de probarlo si funciona apuntando a otro servidor u otra unidad de red, pero para salir de dudas solo hay que probarlo tal como lo estas haciendo, por eso me gustaría que compartieras con nosotros como fue tu experiencia al tratar de acceder a rutas en otro servidor, si pudiste lograrlo y como lo hiciste o si realmente no es posible, gracias.

      PD: Ya obtuviste mi libro-reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aún no lo tienes puedes descargarlo desde aquí:
      https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  3. Buenos Tardes.

    He seguido tus pasos al pie de la letra y he creado un directorio y ejecuto el procedimiento desde mi base de datos y me da el siguiente error> ORA-20100; Error INVALID_PATHORA ORA-29280; ruta de acceso del directorio no valida ORA-06512: en linea 141

    1. Hola Richie, gracias por comunicarte, este error puede ocurrir por una de las siguientes razones:
      1. La ruta física que estas accesando no existe en el servidor unix.
      2. La ruta física no tiene permisos de lectura y escritura para el usuario.
      3. El nombre del directorio se debe escribir en mayúsculas, es decir, en vez de ‘mi_ruta’ debes escribir ‘MI_RUTA’.

      PD: Ya obtuviste mi libro-reporte gratuito sobre “Cómo Construir un SELECT Eficiente en Oracle en solo 7 Pasos”, si aun no tienes puedes obtenerlo haciendo clic en el siguiente enlace:
      https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  4. Hola;

    Quisiera saber como encuentro el alias de del direcctorio del UTL_file, ya tengo la ruta pero necesito el alias para colocarla en Toad para correr un cursor hacia la base de datos

    Espero que me puedas ayudar

    Saludos

    1. Hola Jose Luis, gracias por comunicarte y por tu comentario, para ver esa información debes hacer un ‘Select * from all_directories;’, esta consulta muestra los directorios del usuario actual, en la tabla encontrarás el campo DIRECTORY_NAME con el alias o nombre del directorio y el campo DIRECTORY_PATH con la ruta física del directorio, gracias.

      PD: Ya obtuviste mi libro-reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oralce en Solo 7 Pasos’, si aún no lo tienes puedes obtenerlo desde el siguiente enlace: https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  5. Hola Roberto,
    te comento que en nuestro caso, el cliente migró a Oracle 11 y 12, y separó físicamente las máquinas de aplicación batch del motor de BD e incluso de los archivos de datos (que quedaron en Datacenter).
    Lo que debimos hacer para que siguiera funcionando el utl_file fue mapear algunas carpetas del servidor de app (batch) para que se vieran desde el servidor de BD, y luego crear los objetos Directory.
    Finalmente, es un trabajo a nivel de Linux porque para la BD es transparente, siempre que pueda encontrar el directorio definido.
    Saludos!

    1. Hola Odeleon, gracias por comunicarte y por compartir tu experiencia con la comunidad de oracle, es un muy buen aporte, si te ha gustado este blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar esta información, gracias.

      PD: Ya obtuviste mi libro-reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aún no lo tienes puedes obtenerlo desde aquí: https://dominatuspackagesen0racle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  6. Buenas tardes:
    alguien me puede dar un ejemplo de como cargar un archivo (.cvs) a una tabla oracle, por medio de un procedimiento almacenado, utilizando UTL_FILE. De antemano muchas gracias. Saludos

    1. Hola Magali, gracias por comunicarte, para cargar un archivo a una tabla primero debes abrir el archivo en modo de lectura y usar get_line para leerlo, algo como lo siguiente:
      — Abrir el archivo —
      lfi_file:= utl_file.fopen(‘MI_RUTA’, ‘mi_archivo.csv’, ‘R’);
      — Leo del archivo —
      UTL_FILE.GET_LINE(lfi_file,cadena,32767);
      — Cierro archivo —
      UTL_FILE.FCLOSE(Vfile);
      — Muestro por partalla la linea —
      dbms_output.put_line(cadena);

      PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar ver esta información, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  7. Hola.
    Al momento de acceder al archivo me sale este error: ORA-29280: ruta de acceso del directorio no válida
    Cabe destacar que la ruta están en la misma maquina donde esta la BD, y lo ejecuto como usuario System. es necesario modificar un archivo .ora? no se que me puede estar faltando.

    1. Hola William, gracias por comunicarte, no se debe modificar ningún archivo ora, debes verificar que la ruta física sea la misma que tiene el objeto directory, es decir, debe estar escrito con los mismos caracteres mayúsculas y/o minúsculas, ademas el usuario debe tener permiso sobre esa ruta.

      PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar ver esta información, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  8. Buenas tardes,
    Quisiera saber como colocar desde forms los archivos a ese directorio creado, ya que ellos no están en el servidor sino en una carpeta en la pc

  9. El Directorio puede apuntar a una ruta física de Windows??
    Lo que necesito es cargar un CSV a Oracle, pero que sea de manera dinámica. Cualquier archivo .CSV.
    Se que existe la opción de importar, pero primero debo crear la estructura de la tabla, y esto no me es funcional para mi caso.

    1. Hola Verónica, gracias por comunicarte, no puedes apuntar a una ruta de windows solo puedes apuntar a una ruta del servidor de la base de datos, eso puedes solicitarlo al dba, para subir el archivo puedes usar sql-louder o utl_file.

      PD: Si te ha gustado lo que has visto del blog y quieres saber mucho mas, te invito a enrolarte gratis a mi nuevo curso para dominar el Lenguaje PL/SQL, has clic en el siguiente enlace:
      https://dominatuspackagesen0racle.com/tiwgnecu

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.