Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/01/2008, 14:10
jc3000
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
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.