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:
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.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
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;