![]() |
No veo el error en el procedimiento HOla vereis, tengo que hacer urgentement una serie de procedimientos almacenados. Ya he escrito varios mensajes ( a lo mejor habeis leido alguno..) Bueno finalmente buscando y buscando, leyendo y leyendo he conseguido hacer algo parecido a un procedimiento almacenado pero evidentemente no me funciona (tal y como me esperaba) Me da errores de que ha encontrado la palabra "end" y si comento la línea me da el error en otra y así... Os pego el código a ver si me podeis hechar un cable ok? CREATE OR REPLACE PROCEDURE completaEstadisticos(identAlmacen IN varchar2,producto IN varchar2,cantidad IN varchar2,fecha IN Date) as cant number; cantiActual number; cursor c1 IS select cantidad from pedidosEstadisticos where idProducto=producto and fechacaducidadProducto>fecha; BEGIN cantiActual:=cantidad; open c1; LOOP Fetch c1 into cant; if c1%notfound then cant := 9999; else if cant<cantidad then insert into copias (nombre,fecha) values('HOLA¡','ADIOS'); cantiActual=cantiActual-cant; end if end if END LOOP commit; close c1; Si lo cierto es que el procedimiento es sencillo pero como es elp rimero que hago... Espero que me podais ayudar. Gracias!!! |
Re: No veo el error en el procedimiento Hola, Código: SQL> CREATE OR REPLACE PROCEDURE completaEstadisticosSaludos |
Re: No veo el error en el procedimiento Uf muchísimas gracias, ojala me funcione me daria la vida!!! De todods modos por que lo ves infinito??? Se supone que el loop hace que se recorran todas las filas que me devuelve el select no?? La verdad es que no tengo mucha idea de esto...:neurotico Voy a probarlo ahora mismo y ya te digo. Gracias:) |
Re: No veo el error en el procedimiento Me compila perfectamente muchas gracias! |
Re: No veo el error en el procedimiento Matanga tiene toda la razón del mundo, si el procedure no casca antes por la inserción , segmentos de rollback , etc etc, te estará rulando por tiempo indefinido, mira : -- Abres el cursor -- Abres el loop -- Haces el fetch, insertas, etc etc -- Cierras el loop -- Cierras el cursor ¿ No te falta nada ?, efectivamente, te falta un EXIT WHEN. Si a Matanga no le importa, modifico el pl-sql que ha puesto y te lo hago mas facil : SQL> CREATE OR REPLACE PROCEDURE completaEstadisticos 2 ( 3 identAlmacen IN varchar2, 4 producto IN varchar2, 5 cantidad IN varchar2, 6 fecha IN Date 7 ) 8 AS 9 cant number; 10 cantiActual number; 11 cursor c1 IS SELECT cantidad 12 FROM pedidosEstadisticos 13 WHERE idProducto = producto AND 14 fechacaducidadProducto > fecha; 15 BEGIN 16 cantiActual := cantidad; 17 FOR REG IN C1 LOOP 18 -- LOOP 19 CANT := REG.CANTIDAD; 20 -- IF c1%notfound THEN 21 -- cant := 9999; 22 -- ELSE 23 IF cant < cantidad THEN 24 INSERT INTO copias (nombre,fecha) VALUES ('HOLA','ADIOS'); 25 cantiActual := cantiActual - cant; 26 END IF; 27 -- END IF; 28 END LOOP; 29 COMMIT; 30 -- CLOSE c1; 31 END; 32 / Lo de la linea 17 hace que mientras el cursor te recupere datos, te ejecutará lo que hay entre el LOOP y el END LOOP y en el momento en que ya no haya mas registros para que te los devuelva el cursor, automaticamente te sale del loop y te hace un CLOSE del cursor. |
Re: No veo el error en el procedimiento Hola, Cita:
Saludos |
Re: No veo el error en el procedimiento Eres un Crack, Matanga. Ojala hubiera en este foro mas personas como tu. Un saludo |
| La zona horaria es GMT -6. Ahora son las 05:14. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.