13 Cursores PDF
13 Cursores PDF
13 Cursores PDF
CURSORES
Yes
NOTFOUND?
DECLARE OPEN FETCH (vacío)
CLOSE
Abre el cursor
Pointer
(Puntero
o Indicador)
Fetch (recuperación) Cursor
de una fila por el
cursor
Puntero
Cursor
Continúa hasta que el
archivo esté vacío
Puntero
Cursor
DECLARE
DECLARE
CURSOR nombre_cursor IS
CURSOR nombre_cursor IS
Sentencia_select;
Sentencia_select;
DECLARE
V_ID_VENTA B_DETALLE_vENTAS.Id_Venta%TYPE := 1;
V_ID B_ARTICULOS.ID%TYPE;
V_NOMBRE B_ARTICULOS.NOMBRE%TYPE;
V_CANTIDAD B_DETALLE_VENTAS.CANTIDAD%TYPE;
CURSOR C_VENTAS IS
SELECT v.id_articulo, a.nombre, v.cantidad
FROM b_Detalle_ventas v, b_articulos a
WHERE a.id = v.id_articulo AND
v. id_venta = v_id_venta;
…….
OPEN
OPEN nombre_cursor;
nombre_cursor;
OPEN C_VENTAS;
FETCH
FETCH C_VENTAS
C_VENTAS INTO
INTO V_ID,
V_ID, V_NOMBRE,
V_NOMBRE, V_CANTIDAD;
V_CANTIDAD;
CLOSE
CLOSE nombre_cursor;
nombre_cursor;
IF nombre_cursor%NOTFOUND
IF
IF C_VENTAS%ISOPEN
C_VENTAS%ISOPEN THEN
THEN
FETCH
FETCH C_VENTAS
C_VENTAS INTO
INTO V_ID,
V_ID, V_NOMBRE,
V_NOMBRE, V_CANTIDAD;
V_CANTIDAD;
ELSE
ELSE
OPEN
OPEN C_VENTAS;
C_VENTAS;
END
END IF;
IF;
LOOP
LOOP
FETCH
FETCH C_VENTAS
C_VENTAS INTO
INTO V_ID,
V_ID, V_NOMBRE,
V_NOMBRE, V_CANTIDAD;
V_CANTIDAD;
EXIT
EXIT WHEN
WHEN C_VENTAS%ROWCOUNT
C_VENTAS%ROWCOUNT >> 55
OR
OR C_VENTAS%NOTFOUND;
C_VENTAS%NOTFOUND;
END
END LOOP;
LOOP;
BEGIN
BEGIN
OPEN
OPEN C_VENTAS;
C_VENTAS;
LOOP
LOOP
FETCH
FETCH C_VENTAS
C_VENTAS INTO
INTO R_VENTAS;
R_VENTAS;
EXIT
EXIT WHEN
WHEN C_VENTAS%ROWCOUNT
C_VENTAS%ROWCOUNT >> 55
OR
OR C_VENTAS%NOTFOUND;
C_VENTAS%NOTFOUND;
END LOOP;
END LOOP;
CLOSE
CLOSE C_VENTAS;
C_VENTAS;
END;
END;
CURSOR
CURSOR nombre_cursor
nombre_cursor
[(nombre_parametro tipo_dato, ...)]
[(nombre_parametro tipo_dato, ...)]
IS
IS
sentencia_select;
sentencia_select;
DECLARE
DECLARE
CURSOR
CURSOR C_VENTAS(P_ID
C_VENTAS(P_ID NUMBER)
NUMBER) IS
IS
SELECT
SELECT v.id_articulo,
v.id_articulo, a.nombre,
a.nombre, v.cantidad
v.cantidad
FROM
FROM b_Detalle_ventas
b_Detalle_ventas v,v, b_articulos
b_articulos aa
WHERE
WHERE a.id
a.id == v.id_articulo
v.id_articulo AND
AND
v.
v. id_venta
id_venta == P_ID;
P_ID;
R_VENTAS
R_VENTAS C_VENTAS%ROWTYPE;
C_VENTAS%ROWTYPE;
BEGIN
BEGIN
OPEN
OPEN C_VENTAS(1);
C_VENTAS(1);
FOR nombre_registro IN
FOR nombre_registro nombre_cursor LOOP
IN nombre_cursor LOOP
sentencia1;
sentencia1;
sentencia2;
sentencia2;
.. .. ..
END
END LOOP;
LOOP;
FOR
FOR rec_item
rec_item IN
IN (select
(select id,
id, nombre
nombre from
from b_articulos
b_articulos
where
where stock_actual
stock_actual << stock_minimo)
stock_minimo) LOOP
LOOP
END
END LOOP;
LOOP; --
-- CLOSE
CLOSE implícito
implícito
SELECT...FROM...FOR
SELECT...FROM...FOR UPDATE
UPDATE [OF columna ][NOWAIT]
[OF columna ][NOWAIT]
DECLARE
DECLARE
……
CURSOR
CURSOR C_ARTICULOS
C_ARTICULOS ISIS
SELECT
SELECT ** FROM
FROM B_ARTICULOS
B_ARTICULOS FOR
FOR UPDATE;
UPDATE;
BEGIN
BEGIN
FOR
FOR REC_ART
REC_ART IN
IN C_ARTICULOS
C_ARTICULOS LOOOP
LOOOP
UPDATE
UPDATE B_ARTICULOS
B_ARTICULOS
SET
SET PRECIO
PRECIO :=
:= ROUND(PRECIO
ROUND(PRECIO ** 1,03)
1,03)
WHERE
WHERE CURRENT
CURRENT OFOF C_ARTICULOS;
C_ARTICULOS;
END
END LOOP;
LOOP;
COMMIT;
COMMIT;
END;
END;