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

[SOLUCIONADO] Pl/SQL de mysql, copiar contenido de tabla en otra

Estas en el tema de Pl/SQL de mysql, copiar contenido de tabla en otra en el foro de Mysql en Foros del Web. Necesito en un pl/SQL de Mysql (trigger) coger todos los valores de una tabla e insertarlos en otra exactamente igual (excepto por el nombre de ...
  #1 (permalink)  
Antiguo 15/06/2013, 15:40
 
Fecha de Ingreso: mayo-2013
Mensajes: 68
Antigüedad: 10 años, 11 meses
Puntos: 0
Pl/SQL de mysql, copiar contenido de tabla en otra

Necesito en un pl/SQL de Mysql (trigger) coger todos los valores de una tabla e insertarlos en otra exactamente igual (excepto por el nombre de tabla).

He visto googleando que hay formas de hacer backup pero no de PL/sql parece, me preguntaba si alguien sabe alguna forma rápida de pasar los datos de una tabla(y no a un archivo) a otra en vez de hacer cursores e ir pasando datos

Un saludo
  #2 (permalink)  
Antiguo 15/06/2013, 15:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Pl/SQL de mysql, copiar contenido de tabla en otra

@NeoAres: No somos un repositorio de códigos, ni una fuente libre de recursos. Es un foro para ayudar a resolver problemas, pero eso significa que el problema lo resuelves tu mismo.
Postea le código que harías tu, y veremos lo que realmente te servirá.

Por otro lado, te aconsejo enfáticamente que no uses de una forma tan indiscriminada los trigger para resolver cualquier cosa (ya estuvimos viendo entre nos un tema de triggers previamente contigo, por eso lo destaco). No es esa su función.
El sentido de los triggers es hacer tareas que sólo se requieran bajo ciertas condiciones:
1) Sólo deben dispararse cuando se realice una insercion, una actualización o un borrado en una tabla dada.
2) Puede afectar a otras tablas si y sólo si las otras tablas no generan un efecto en cascada con sus propios triggers, o no generen una operación circular contra la tabla del trigger.
3) No intenten operaciones contra la propia tabla.
4) No se trate de procesos que requieran lecturas masivas o recursivas de datos de la propia tabla o de otras.
5) Como son disparados por un evento de un sólo registro, no es conveniente hacer procesos a menos que sea para todo registro de esa tabla. Es decir, si tienes que evaluar el dato entrante para saber si hay que hacer o no una tarea, entonces no necesitas un trigger sino un stored procedure.
Y muy importante: son procesos que deben hacerse con los propios datos entrantes de la tabla. Usar un trigger para colectar cosas de otras y que no vayan a ser parte del registro que dispara el trigger, es una pérdida de tiempo, recursos y un serio problema de performance a futuro.

En resumen: Los triggers son muy poderosos, pero no se deben usar por que sí o porque son bonitos. Sólo si son estrictamente necesarios.
__________________
¿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 16/06/2013, 03:47
 
Fecha de Ingreso: mayo-2013
Mensajes: 68
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Pl/SQL de mysql, copiar contenido de tabla en otra

Cita:
Iniciado por gnzsoloyo Ver Mensaje
@NeoAres: No somos un repositorio de códigos, ni una fuente libre de recursos. Es un foro para ayudar a resolver problemas, pero eso significa que el problema lo resuelves tu mismo.
Postea le código que harías tu, y veremos lo que realmente te servirá.
Mis disculpas, ante eso, lo postee porque me veía deseperado ya que debo entregar mañana la tarea y no acertaba
Cita:
Por otro lado, te aconsejo enfáticamente que no uses de una forma tan indiscriminada los trigger para resolver cualquier cosa (ya estuvimos viendo entre nos un tema de triggers previamente contigo, por eso lo destaco). No es esa su función.
El sentido de los triggers es hacer tareas que sólo se requieran bajo ciertas condiciones:
1) Sólo deben dispararse cuando se realice una insercion, una actualización o un borrado en una tabla dada.
2) Puede afectar a otras tablas si y sólo si las otras tablas no generan un efecto en cascada con sus propios triggers, o no generen una operación circular contra la tabla del trigger.
3) No intenten operaciones contra la propia tabla.
4) No se trate de procesos que requieran lecturas masivas o recursivas de datos de la propia tabla o de otras.
5) Como son disparados por un evento de un sólo registro, no es conveniente hacer procesos a menos que sea para todo registro de esa tabla. Es decir, si tienes que evaluar el dato entrante para saber si hay que hacer o no una tarea, entonces no necesitas un trigger sino un stored procedure.
Y muy importante: son procesos que deben hacerse con los propios datos entrantes de la tabla. Usar un trigger para colectar cosas de otras y que no vayan a ser parte del registro que dispara el trigger, es una pérdida de tiempo, recursos y un serio problema de performance a futuro.

En resumen: Los triggers son muy poderosos, pero no se deben usar por que sí o porque son bonitos. Sólo si son estrictamente necesarios.
El caso es que en la tarea del insti me piden trigger para ciertas cosas si o si
Gracias de nuevo
  #4 (permalink)  
Antiguo 16/06/2013, 09:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Pl/SQL de mysql, copiar contenido de tabla en otra

Bueno, a mi en la facultad los profesores me pedían los trabajos con un mínimo de lógica y coherencia de fundamentos, no para inventar tareas.
Nosotros teníamos que fundamentar el uso, y si no se justificaba, restaba nota.

Postea lo que supones que te serviría (y por favor, incluye la declaración, no solo el body), y veremos si estás bien orientado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/06/2013, 13:16
 
Fecha de Ingreso: mayo-2013
Mensajes: 68
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Pl/SQL de mysql, copiar contenido de tabla en otra

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, a mi en la facultad los profesores me pedían los trabajos con un mínimo de lógica y coherencia de fundamentos, no para inventar tareas.
Nosotros teníamos que fundamentar el uso, y si no se justificaba, restaba nota.

Postea lo que supones que te serviría (y por favor, incluye la declaración, no solo el body), y veremos si estás bien orientado.
Código SQL:
Ver original
  1. SET @OLDTMP_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  2. DELIMITER //
  3. CREATE TRIGGER `onUpdateBook` AFTER UPDATE ON `book` FOR EACH ROW BEGIN
  4. BEGIN
  5.  
  6.  DECLARE variablesCadena VARCHAR(50);
  7.  DECLARE variablesFecha DATE;
  8.  DECLARE variableHora TIME;
  9.  DECLARE variablesDouble DOUBLE;
  10.  DECLARE variablesInt INT;
  11.  
  12.  DECLARE done INT DEFAULT 0;
  13.  
  14.  DECLARE curGetBook CURSOR FOR SELECT * FROM book WHERE Book_code LIKE NEW.Book_code;
  15.  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  16.  
  17.   SET done=0;
  18.  
  19.     OPEN curGetBook;
  20.      REPEAT
  21.       FETCH curGetBook INTO  VARIABLES_DECLARADAS_ANTERIORMENTE_PARA_METER_VALOR_CONSULTA;
  22.       IF NOT done THEN
  23.        INSERT INTO backup_book VALUES(MISMAS_VARIABLES_DEL_RENGLÓN_DEL_FETCH);
  24.       END IF;
  25.      UNTIL done END REPEAT;
  26.     CLOSE curGetBook;
  27.  
  28.     SET done=0;
  29. END
No he podido responder antes, he estado ocupado, el proyecto está entregado
gracias de todas maneras, cuelgo el código por si a alguien le interesa el copy/pasteo
PD: El original es mas largo y vi que era mejor resumirlo un poco

Última edición por gnzsoloyo; 17/06/2013 a las 13:21 Razón: Etiquetado incorrecto. Usar HIGHLIGHT "SQL"

Etiquetas: contenido, insert, pl-sql, sql, tabla
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 12:08.