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

Problema con procedimiento

Estas en el tema de Problema con procedimiento en el foro de Mysql en Foros del Web. Hola, tengo que crear un procedimiento para dar de alta una nueva reparación para un vehículo y un cliente que no tenemos registrado usando, entre ...
  #1 (permalink)  
Antiguo 26/05/2015, 15:53
 
Fecha de Ingreso: mayo-2015
Mensajes: 18
Antigüedad: 8 años, 10 meses
Puntos: 0
Problema con procedimiento

Hola,

tengo que crear un procedimiento para dar de alta una nueva reparación para un vehículo y un cliente que no tenemos registrado usando, entre otras, estas tablas:

Código MySQL:
Ver original
  1. CREATE TABLE CLIENTES (
  2. CodCliente VARCHAR(5) NOT NULL,
  3. DNI VARCHAR(10) NOT NULL,
  4. Apellidos VARCHAR(50),
  5. Nombre VARCHAR(25),
  6. Direccion VARCHAR(50),
  7. Telefono VARCHAR(9),
  8. PRIMARY KEY (CodCliente)
  9.  
  10. CREATE TABLE VEHICULOS (
  11. Matricula VARCHAR(8) NOT NULL,
  12. Marca VARCHAR(25),
  13. Modelo VARCHAR(50),
  14. Color VARCHAR(5),
  15. FechaMatriculacion DATE,
  16. CodCliente  VARCHAR(5),
  17. PRIMARY KEY(Matricula)
  18.  
  19. CREATE TABLE REPARACIONES (
  20. Matricula VARCHAR(8) NOT NULL,
  21. FechaEntrada DATE,
  22. Km DECIMAL(8,2),
  23. Avería VARCHAR(200),
  24. FechaSalida DATE,
  25. Reparado  TINYINT(1),
  26. Observaciones VARCHAR(250),
  27. PRIMARY KEY(IdReparacion)

Este es el procedimiento que he intentado. Me muestra las columnas pero no consigo introducir los datos:

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS ReparacionClienteNuevo;
  2. DELIMITER $$
  3. CREATE PROCEDURE ReparacionClienteNuevo (IN Nrep INT(11), IN Nmat VARCHAR(8), IN Ncli VARCHAR(5))
  4. SELECT * FROM Vehiculos WHERE Matricula=Nmat;
  5. SELECT * FROM Reparaciones WHERE IdReparacion=Nrep;
  6. SELECT * FROM Clientes WHERE CodCliente=Ncli;
  7. INSERT INTO Vehiculos VALUES ('', NULL, NULL, NULL, NULL, NULL);
  8. INSERT INTO Reparaciones VALUES (NULL , '', NULL, NULL, NULL, NULL, NULL, NULL);
  9. INSERT INTO Clientes VALUES ('', '', NULL, NULL, NULL, NULL);
  10. END $$
  11. DELIMITER ;


CALL ReparacionClienteNuevo('11', '3131 FGH', '00011')

¿Alguna idea de por dónde pueden ir los tiros?
Gracias.

Un saludo. :)

Última edición por Laurilerendi; 26/05/2015 a las 15:55 Razón: Se perdió una parte del mensaje
  #2 (permalink)  
Antiguo 26/05/2015, 16:29
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Problema con procedimiento

y que vas a insertar si tus sentencias estan vacias????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 26/05/2015, 18:42
 
Fecha de Ingreso: mayo-2015
Mensajes: 18
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Problema con procedimiento

Disculpa mi ignorancia Libras pero no te entiendo.

Trato de hacer un procedimiento que me dé de alta una nueva reparación para un vehículo y un cliente que no está registrado.
El problema es que no sé si los valores de las columnas de las tablas los tengo que dejar con 'Null', con ' ' o con cualquier otra cosa, no sé si te refieres a eso.
Quiero decir, consigo que me aparezcan las columnas de las tablas pero no consigo que se introduzcan automáticamente los datos cuando llamo al procedimiento:

CALL ReparacionClienteNuevo('11', '3131 FGH', '00011')

Por otra parte, la columna IdReparacion es autoincrement y creo que no es necesario introducir su número al llamar al procedimiento, pero me dá "error 1366 incorrect integer" si no lo hago.
  #4 (permalink)  
Antiguo 27/05/2015, 08:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Problema con procedimiento

ahi es donde te digo que no estas mandando nada

Código MySQL:
Ver original
  1. INSERT INTO Vehiculos VALUES ('', NULL, NULL, NULL, NULL, NULL);
  2. INSERT INTO Reparaciones VALUES (NULL , '', NULL, NULL, NULL, NULL, NULL, NULL);
  3. INSERT INTO Clientes VALUES ('', '', NULL, NULL, NULL, NULL);

ahi insertarias un renglon con valores vacios, a lo que entiendo que quieres hacer el codigo seria muy diferente, tendrias que obtener los valores de cada tabla e insertarlos donde corresponda, y eso no se hace haciendo un select y despues un insert, podrias intentar con un

Código MySQL:
Ver original
  1. insert into tabla
  2. select * form tabla
no como tu lo tienes....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 27/05/2015, 09:48
 
Fecha de Ingreso: mayo-2015
Mensajes: 18
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Problema con procedimiento

Hummm... a ver que te parece esto Libras:

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS ReparacionClienteNuevo;
  2. DELIMITER $$
  3. CREATE PROCEDURE ReparacionClienteNuevo (IN Nrep INT(11), IN Nmat VARCHAR(8), IN Ncli VARCHAR(5))
  4.  
  5. INSERT INTO Clientes VALUES (Ncli, '', NULL, NULL, NULL, NULL);
  6. INSERT INTO Vehiculos VALUES (Nmat, NULL, NULL, NULL, NULL, Ncli);
  7. INSERT INTO Reparaciones VALUES (NULL , Nmat, NULL, NULL, NULL, NULL, NULL, NULL);
  8. SELECT * FROM Vehiculos WHERE Matricula=Nmat;
  9. SELECT * FROM Reparaciones WHERE IdReparacion=Nrep;
  10. SELECT * FROM Clientes WHERE CodCliente=Ncli;
  11.  
  12. END $$
  13. DELIMITER ;
  14.  
  15. CALL ReparacionClienteNuevo('11', '3131 FGH', '00011')


Creo que está bien ¿no?
Ahora, cuando llamo al procedimiento me aparecen los datos.
  #6 (permalink)  
Antiguo 29/05/2015, 15:06
 
Fecha de Ingreso: mayo-2015
Mensajes: 18
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Problema con procedimiento

Creo que he dado con una posible solución. Introducir variables para todos los datos que necesito:

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS ReparacionClienteNuevo;
  2. DELIMITER $$
  3.  
  4. CREATE PROCEDURE ReparacionClienteNuevo (IN Ncli VARCHAR(5), IN Ndni VARCHAR(10), IN Nape VARCHAR(50), IN Nnom VARCHAR(25),
  5. IN Ndir VARCHAR(50), IN NTlf VARCHAR(9), IN Nmat VARCHAR(8), IN Nmar VARCHAR(25), IN Nmod VARCHAR (50), IN Ncol VARCHAR(25), IN Nfecmat DATE,
  6. IN Nfecent DATE, IN Nkms DECIMAL(8,2), IN Nave VARCHAR(200), IN Nfecsal DATE, IN Nrep TINYINT(1), IN Nobs VARCHAR(250))
  7.  
  8.  
  9. INSERT INTO Clientes VALUES (Ncli, Ndni, Nape, Nnom, Ndir, NTlf);
  10. INSERT INTO Vehiculos VALUES (Nmat, Nmar, Nmod, Ncol, Nfecmat, Ncli);
  11. INSERT INTO Reparaciones (Matricula, FechaEntrada, km, Avería, FechaSalida, Reparado, Observaciones) VALUES (Nmat, Nfecent, Nkms, Nave, Nfecsal,
  12. Nrep, Nobs);
  13.  
  14. END $$
  15. DELIMITER ;

Etiquetas: fecha, procedimiento, 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 09:27.