Buenas tardes:
Quería ver si me podían ayudar un con un procedimiento almacenado.
En principio no me da error, pero al intentar 'cargarlo', me da un timeout, a pesar de ser en local.
He probado la carga por fichero y directamente copiándolo, pero nada.
El error que pone es:
Cita: Fatal error: Maximum execution time of 300 seconds exceeded in Z:\wamp\apps\phpmyadmin3.2.0.1\libraries\import\sq l.php on line 259
No sé si realmente ese es el problema, o no, ya que me extraña que siendo en local, tras 5 minutos, aprox, dé el error. Lo achaco más a una incoherencia, que no llega a devolver un error.
La versión de MySQL es 5.1.36
Pongo el procedimiento, por si alguien encuentra algo raro, o piensa que se puede hacer mejor de otra manera.
Muchas gracias.
Código:
DELIMITER $$
CREATE PROCEDURE sp_insertarPresupuesto (idCliente int, fechaAlta datetime)
-- iniciamos el Procedimiento
BEGIN
-- declaramos las variables
declare idPresupuesto int;
declare idCliente int;
declare Referencia varchar(25);
declare Detalle varchar(250);
declare IVA int;
declare PrecioUnitario decimal(5,2);
declare Cantidad int;
-- insertamos la cabecera del presupuesto
INSERT INTO LM_Presupuestos values ('',idCliente, FechaAlta);
-- recuperamos el idPresupuesto generado
SET idPresupuesto := LAST_INSERT_ID();
-- Comienza el cursor para insertar la tabla Detalle con los datos temporales
-- declaramos el cursor
DECLARE detallePrto CURSOR FOR
-- capturamos los datos de la tabla temporal
select
-- idPresupuesto,
idCliente,
Referencia,
Detalle,
IVA,
PrecioUnitario,
Cantidad
from LM_tmpPresupuestos;
-- iniciamos CURSOR
OPEN detallePrto
-- iniciamos el bucle
REPEAT
FETCH next FROM detallePrto;
INTO idPresupuesto, idCliente, Referencia, Detalle, IVA, PrecioUnitario, Cantidad
WHILE @@fetch_status = 0
INSERT INTO LM_detallePresupuesto values ('', idPresupuesto, idCliente, Referencia, Detalle, IVA, PrecioUnitario, Cantidad);
UNTIL done END REPEAT;
CLOSE detallePrto;
-- se vacía la tabla temporal
TRUNCATE TABLE LM_tmpPresupuestos;
-- finalizamos el Procedimiento
END
-- se usa el delimitador para indicar que se sale
$$
DELIMITER;