Professional Documents
Culture Documents
Los tipos de datos de los parámetros son los mismos que los de las
variables escalares, pero no se especifica el tamaño. Los nombres de los
parámetros los usaremos en la expresión de consulta del cursor como ya
hemos comentado.
Veamos un ejemplo:
DECLARE
v_departamento DEPARTAMENTOS.codigo%TYPE ;
Pág 1 de 6
Curso de PL/SQL
DECLARE
CURSOR c_depart IS
SELECT codigo FROM departamentos ;
END LOOP ;
...
END;
DECLARE
v_departamento DEPARTAMENTOS.codigo%TYPE ;
v_salario EMPLEADOS.salario%TYPE ;
v_fec_anti DATE ;
Pág 2 de 6
Curso de PL/SQL
Sintaxis:
SELECT .... FROM ....
FOR UPDATE [OF lista_de_columnas] [NOWAIT]
NOWAIT: hace que se nos devuelva un error inmediatamente si las filas han
sido bloqueadas por otra sesión.
Ejemplo:
Ejemplo:
Pág 3 de 6
Curso de PL/SQL
Sintaxis:
DECLARE
BEGIN
FOR nombre_reg IN nombre_cursor LOOP
END LOOP ;
COMMIT;
END;
Pág 4 de 6
Curso de PL/SQL
DECLARE
CURSOR c_emple IS SELECT codigo, nombre, salario
FROM empleados
WHERE salario <= 1000 FOR UPDATE ;
BEGIN
FOR emple_reg IN c_emple LOOP
.....
.....
-- Si el empleado gana 1000 euros,
-- actualizamos la fila actual del cursor
-- subiendo el salario un 2%
IF emple_reg.salario=1000 THEN
UPDATE empleados set salario=salario*1.02
WHERE CURRENT OF c_emple ;
END IF;
-- grabamos los cambios
COMMIT ;
.....
END LOOP ;
END;
DECLARE
CURSOR c_emple IS SELECT codigo, nombre, salario
FROM empleados
WHERE salario < 1000 FOR UPDATE ;
BEGIN
FOR emple_reg IN c_emple LOOP
.....
.....
-- Si el empleado gana 1000 euros,
-- actualizamos la fila actual del cursor
-- subiendo el salario un 2%
IF emple_reg.salario=1000 THEN
UPDATE empleados set salario=salario*1.02
WHERE CURRENT OF c_emple ;
END IF;
.....
END LOOP ;
-- grabamos los cambios
COMMIT ;
END;
Pág 5 de 6
Curso de PL/SQL
Pág 6 de 6