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

Esta bien planteado este procedure? Se podria con triggers?

Estas en el tema de Esta bien planteado este procedure? Se podria con triggers? en el foro de Mysql en Foros del Web. Tengo dos tablas relacionadas con otra entidad que tiene las claves foraneas de cada una: files y portals asociadas por portalfiles. Lque quiero es que ...
  #1 (permalink)  
Antiguo 24/03/2013, 04:13
 
Fecha de Ingreso: diciembre-2012
Mensajes: 21
Antigüedad: 11 años, 4 meses
Puntos: 0
Esta bien planteado este procedure? Se podria con triggers?

Tengo dos tablas relacionadas con otra entidad que tiene las claves foraneas de cada una: files y portals asociadas por portalfiles. Lque quiero es que al subir un archivo, se meta automaticamente en el portal que le pida (el procedure funciona perfectamente). Mi pregunta es si esta bien planteado así, me da la sensación de que estoy forzando a la base de datos. Pero no he encontrado otra manera.


La verdad es que tambien queria saber si esto que hago se puede con triggers, pero un trigger no admite el parametro "portalID" para saber a que portal asociar...

Muchas gracias!


Código SQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE subeArchivoPortal (
  4.  
  5. IN Name VARCHAR(60),
  6.  
  7. IN Description  VARCHAR(50),
  8.  
  9. IN Path VARCHAR(60),
  10.  
  11. IN TYPE VARCHAR(15),
  12.  
  13. IN Premium VARCHAR(5),
  14.  
  15. IN Uploader INT,
  16.  
  17. IN Autor VARCHAR(50),
  18.  
  19. IN Url VARCHAR (5),
  20.  
  21. IN Level  VARCHAR(10),
  22.  
  23. IN Portal INT
  24.  
  25. ) BEGIN
  26.  
  27.  
  28. DECLARE idFile INT DEFAULT 0;
  29.  
  30.  
  31.                 SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbXXXXXXXXXX' AND TABLE_NAME = 'files' INTO idFile;
  32.  
  33.  
  34. INSERT INTO files  (fName ,fDescription ,fType,fDate, fPath ,fUploader,fAutor,fLevel,fUrl,fPremium) VALUES(Name ,Description ,TYPE,CURDATE(), Path ,Uploader,Autor,Level,Url,Premium);
  35.  
  36.  
  37. INSERT INTO portalfiles (pfPortalID, pfFileID ) VALUES (Portal, idFile);
  38. END$$
  39. DELIMITER ;
  #2 (permalink)  
Antiguo 24/03/2013, 07:25
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, 4 meses
Puntos: 2658
Respuesta: Esta bien planteado este procedure? Se podria con triggers?

¿Bien planteado?
No.

El auto_increment, usado de esa forma repetiría valores, porque ese campo contiene el último valor generado en un un INSERT sobre la tabla. Si lo lees sin afectarlo simplemente tomas el mismo valor para eso.

Por otro lado, hacer eso es total y absolutamente innecesario en el contexto que lo usas, ya que para eso existe una función específica (el manual de referencia tiene buenas explicaciones de este tipo de cosas).

Además estás usando palabras reservadas como nombres de variable en el prototipo, por lo que el resultado de esto es incierto, si es que compila.

Lo que necesitarías sería mas o menos:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE subeArchivoPortal (
  4.     IN vName VARCHAR(60),
  5.     IN vDescription  VARCHAR(50),
  6.     IN vPath VARCHAR(60),
  7.     IN vType VARCHAR(15),
  8.     IN vPremium VARCHAR(5),
  9.     IN vUploader INT,
  10.     IN vAutor varchar(50),
  11.     IN vUrl VARCHAR (5),
  12.     IN vLevel  VARCHAR(10),
  13.     IN vPortal INT
  14.     )
  15.     DECLARE idFile INT DEFAULT 0;
  16.    
  17.     INSERT INTO files (fName, fDescription, fType, fDate, fPath, fUploader, fAutor, fLevel, fUrl, fPremium)
  18.     VALUES(vName, vDescription, vType, CURDATE(), vPath, vUploader, vAutor, vLevel, vUrl, vPremium);
  19.    
  20.     SET idFiles = LAST_INSERT_ID();
  21.    
  22.     INSERT INTO portalfiles (pfPortalID, pfFileID )
  23.     VALUES (vPortal, idFile);
  24. END$$
  25. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: insert, procedure, select, 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 01:39.