Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

exportar a .txt con nombres de archivo dinámicos

Estas en el tema de exportar a .txt con nombres de archivo dinámicos en el foro de Mysql en Foros del Web. Hola a todos y gracias de antemano. Lo que estoy buscando es cómo crear distintos archivos de texto desde el mismo comando. La cosa es, ...
  #1 (permalink)  
Antiguo 03/02/2016, 08:00
 
Fecha de Ingreso: enero-2016
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 1
exportar a .txt con nombres de archivo dinámicos

Hola a todos y gracias de antemano.

Lo que estoy buscando es cómo crear distintos archivos de texto desde el mismo comando.
La cosa es, tengo un trigger que se ejecuta cada vez que se inserta una linea en la tabla t1. Necesito que cada vez que se ejecute ese trigger, cree un archivo de texto plano en una carpeta especifica, con el nombre de la hora de su creación (Ej: 123045.txt se habría creado a las 12:30:45) y guardando 4 valores de la tabla.

Intenté con
SELECT .. INTO OUTFILE CONCAT("C:/Archivos de programa/carpeta/", now()+0, '.txt')
dentro del trigger, pero como ya descubrí no te deja ejecutar instrucciones dinámicas en triggers ni funciones.

Alguna idea de cómo hacerlo?
Gracias de nuevo!!!
  #2 (permalink)  
Antiguo 03/02/2016, 08:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: exportar a .txt con nombres de archivo dinámicos

Primero: MySQL no te permite crear o leer archivos desde rutinas almacenadas, por cuestiones de seguridad.
Segundo: Para crear o leer archivos, se requiere que el usuario que se loguea en MySQL tenga permisos de FILE, permisos que no se dan implícitamente y que sólo se pueden otorgar manualmente por parte del administrador del servidor MySQL.
Tercero: Ese tipo de cosas no es conveniente relegarlas a la base por varias razones: Exceso de acoplamiento entre aplicación y base, performance, uso de recursos de servidor, etc.
¿No sería mejor que generases una tarea programada o servicio que realice eso?
Sería mucho mas sencillo y performante. Además de poder manejar un muy buen control de errores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/02/2016, 08:17
 
Fecha de Ingreso: enero-2016
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: exportar a .txt con nombres de archivo dinámicos

Hola gnzsoloyo!
Gracias por tu ayuda. Probaré lo que me sugieres. En cuanto tenga nuevas os comento.
  #4 (permalink)  
Antiguo 12/02/2016, 08:12
 
Fecha de Ingreso: enero-2016
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: exportar a .txt con nombres de archivo dinámicos

Hola de nuevo,

tras lo que me dijiste logré hacer que me funcionara mediante un .bat y una tarea programada. Me funcionó a la perfección. Pero ahora resulta que no quieren que sea automático, que cree los archivos al pulsar un botón en una aplicación java que ya hice. Realice un procedure con 'into outFile' y funcionó de forma correcta.

PROBLEMA: Solo me funciona cuando creo el archivo en mi unidad C:/ y tengo que guardarlo en una carpeta compartida en la unidad Z:/. En esa carpeta tengo permisos y me deja guardar en ella archivos desde la consola de windows. La pregunta es ¿Mysql se puede enlazar directamente o creo en otro .bat para guardar los archivos?

Gracias de nuevo
  #5 (permalink)  
Antiguo 12/02/2016, 08:19
 
Fecha de Ingreso: enero-2016
Mensajes: 16
Antigüedad: 8 años, 10 meses
Puntos: 1
Respuesta: exportar a .txt con nombres de archivo dinámicos

Dejo la solución al problema anterior por si alguien lo necesita:

Lo primero cree un .bat con el código:

Código BASH:
Ver original
  1. @echo off
  2. set mysql= "C:\Archivos de programa\Mysql\Mysql Server 6.0\bin"
  3. set TN="C:\Documents and Settings\...\Scrips\"
  4. cd %mysql%
  5. mysql -uuser -ppass < %TN%mysqlOutFile.sql
  6. exit

TN es la dirección donde tengo guardado otro archivo .sql con el código:
Código MySQL:
Ver original
  1. use 'miBD'
  2. SET @sql_text = CONCAT ( "SELECT ... into outfile 'C:/Archivos de programa/carpeta/",  
  3.                                             DATE_FORMAT( NOW(), '%Y%m%d%H%i%s'), ".txt'",
  4.                                 " FIELDs terminated by ';' ", " LINES terminated by '\r\n'",  
  5.                                             " FROM `tabla`"
  6. );
  7. PREPARE s1 FROM @sql_text;
  8. EXECUTE s1;
  9. DROP PREPARE s1;

El archivo .bat lo convertí en .exe y cree una tarea programada desde windows que lo ejecutara cada "x" tiempo.

Última edición por gnzsoloyo; 12/02/2016 a las 09:24

Etiquetas: nombres, select, tabla, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:48.