You are on page 1of 3

Procedimientos almacenados

Cursores execpciones y control de transacciones.

Cursor

Se utiliza para manejar instrucciones sql plsql estos son segmentos de memoria existen 2 tipos
de cursores: implicitos y explicitos.

Cursores Implicitos

Se utilizan cuando una sentencai devuelve unicamente un valor

ejemplo

DECLARE
lsalario EMPLEADOS.SALARIO%type;
lid EMPLEADOS.ID%type;

BEGIN

SELECT SALARIO, ID
FROM EMPLEADOS
WHERE NOMBRE ='JUAN
AND APELLIDO='RODRIGUEZ';
END

Cursores Explicitos

Se utilizan cuando una sentencia devuelve mas de un valor (se ejecuta varias veces). Debe ser
prevbiamente definido (muy parecido a una variable).

Ejemplo 1:

DECLARE
CURSOR CEMP is --// se define el cursos y luego de 'is' el contenido
SELECT salario, id
FROM empleados;
C1_REC CEMP%type; --// de define una variable de tipo cursor
BEGIN
FOR C1_REC IN CEMP --// se recorre el cursor
LOPP
DEMS_OUT.PUT_LINE (C1.REC.id || ' ' || C1_REC.salario);
END LOOP;
END;

Ejemplo 2: Cursor con parametro

DECLARE
CURSOR CEMP (PNOMBRE in VARCHAR2) is
SELECT salario, id
FROM empleado;
C1_REC CEMP%type;
VNOMBRE VARCHAR(20);
BEGIN
VNOMBRE::='juan';
DBMS.OUT.PUT_LINE('Sueldo de empleados con nopmbre: '|| VNOMBRE);
for C1.REC in CEMP(VNOMBRE) --// Busca
todas los registros que coinciden para el criterio ya asignado arriba (juan)
LOOP
DBMS.OUT.PUT_LINE(C1_REC.id || ' ' || C1.REC.salario);
END LOOP;
END;

Instrucciones

OPEN: identifica al cursos que se debe utilizar


FETCH: coloca registro a registro los valores devueltos por el cursor
CLOSE: cierra el cursor y libera la memoria

Ejemplo:

DECLARE
CURSOR CEMP (PNOMBRE in VARCHAR) is
SELECT salario, id
FROM empleados
WHERE nombre = PNOMBRE;
C1_REC CEMP%type;
VNOMBRE VARCHAR(20);
BEGIN
VNOMBRE:='juan';
DBMS.OUT.PUT_LINE ('Sueldo de empleados por nombre: ' || VNOMBRE);
OPEN CEMP(VNOMBRE)
LOOP
FETCH CEMP into C1_REC;
DBMS.OUT.PUT_LINE(C1_REC.id || ' ' || C1_REC.salario);
EXIT WHEN CEMP%notfound;
END LOOP
DBMS.OUT.PUT_LINE('Numero de Empleados: ' || ' ' || CEMP%rowcount);
CLOSE CEMP;
END;
%isopen: Devuelve true si el cursor esta abierto.
%found: Devuelve true si el registro fue procesado.
%notfound: Devuelve true si el registro no fue procesado.
%rowcount: Devuelve el numero de registros procesados.

Investigar: solo leer control y manejo de excepciones para proximo miercoles 23 3 2011

export ORACLE_HOME=“/usr/lib/oracle/11.2/client”

sudo ln -s /usr/lib/oracle/11.2/client $ORACLE_HOME/include

You might also like