Вы находитесь на странице: 1из 12

9

Conceptos Avanzados de
Cursores Explícitos

Copyright  Oracle Corporation, 1998. All rights reserved.


Objetivos

Al
Al final
final de
de esta
esta lecci ón podr
lección podrá:á:
•• Escribir
Escribir un
un cursor
cursor que
que utilice
utilice
parámetros
parámetros
•• Determinar
Determinar cuándo
cuándo se se necesita
necesita unauna
cláusula
cláusula FOR
FOR UPDATE
UPDATE en en un
un cursor
cursor
•• Determine
Determine cuándo
cuándo se se ha
ha de
de utilizar
utilizar la
la
clausula
clausula WHERE
WHERE CURRENT
CURRENT OF OF
•• Escribir
Escribir un
un cursor
cursor que
que utilice
utilice una
una
subconsulta
subconsulta
9-2 Copyright  Oracle Corporation, 1998. All rights reserved.
Cursores con Parámetros
Sintaxis
CURSOR
CURSOR cursor_name
cursor_name
[(parameter_name
[(parameter_name datatype,
datatype, ...)]
...)]
[RETURN
[RETURN return_type]
return_type] IS
IS
select_statement;
select_statement;

• Transfiera valores de parámetros a un


cursor cuando se abre el cursor y se
ejecuta la consulta.
• Abra un cursor explícito varias veces
con un juego activo distinto cada vez.

9-3 Copyright  Oracle Corporation, 1998. All rights reserved.


Cursores con Parámetros

Transfiera
Transfiera el
el n úmero de
número de departamento
departamento yy el
el
cargo
cargo aa la
la cl áusula WHERE.
cláusula WHERE.
Ejemplo
Ejemplo
CURSOR
CURSOR emp_cursor
emp_cursor
(v_deptno
(v_deptno NUMBER,
NUMBER, v_job
v_job VARCHAR2)
VARCHAR2) IS
IS
SELECT
SELECT ename,
ename, sal,
sal, hiredate
hiredate
FROM
FROM emp
emp
WHERE
WHERE deptno
deptno == v_deptno
v_deptno
AND
AND title
title == v_job;
v_job;

9-4 Copyright  Oracle Corporation, 1998. All rights reserved.


La Cláusula FOR UPDATE

Sintaxis
Sintaxis
SELECT
SELECT ...
...
FROM
FROM ...
...
FOR
FOR UPDATE
UPDATE [OF
[OF column_reference][NOWAIT]
column_reference][NOWAIT]

•• El
El bloqueo
bloqueo explícito
explícito le
le permite
permite denegar
denegar
el
el acceso
acceso mientras
mientras dura
dura una
una
transacción.
transacción.
•• Bloquee
Bloquee las
las filas
filas antes
antes de
de la
la
actualización
actualización o o supresión.
supresión.

9-5 Copyright  Oracle Corporation, 1998. All rights reserved.


La Cláusula FOR UPDATE
Recupere
Recupere los
los pedidos
pedidos de
de importes
importes
superiores
superiores aa 1000$
1000$ que
que se
se han
han procesado
procesado
hoy.
hoy.
Ejemplo
Ejemplo
DECLARE
DECLARE
CURSOR
CURSOR c1
c1 IS
IS
SELECT
SELECT custid,
custid,
ordid
ordid
FROM
FROM ord
ord
WHERE
WHERE orderdate
orderdate == SYSDATE
SYSDATE
AND
AND total
total >> 1000.00
1000.00
ORDER
ORDER BY
BY custid
custid
FOR
FOR UPDATE
UPDATE NOWAIT;
NOWAIT;
9-6 Copyright  Oracle Corporation, 1998. All rights reserved.
Cláusula WHERE CURRENT OF

Sintaxis
WHERE
WHERE CURRENT
CURRENT OF
OF cursor
cursor

• Utilice cursores para actualizar o


suprimir la fila actual.
• Incluya la cláusula FOR UPDATE en la
consulta del cursor para bloquear
primero las filas.
• Utilice la cláusula WHERE CURRENT OF
para hacer referencia a la fila actual
desde un cursor explícito.
9-7 Copyright  Oracle Corporation, 1998. All rights reserved.
Cláusula WHERE CURRENT OF
Ejemplo
Ejemplo
...
...
CURSOR
CURSOR emp_cursor
emp_cursor IS
IS
SELECT
SELECT ...
...
FOR
FOR UPDATE;
UPDATE;
BEGIN
BEGIN
...
...
FOR
FOR emp_record
emp_record IN
IN emp_cursor
emp_cursor LOOP
LOOP
UPDATE
UPDATE ...
...
WHERE
WHERE CURRENT
CURRENT OF
OF emp_cursor;
emp_cursor;
...
...
END
END LOOP;
LOOP;
COMMIT;
COMMIT;
END;
END;
9-8 Copyright  Oracle Corporation, 1998. All rights reserved.
Cursores con Subconsultas
Ejemplo
Ejemplo

DECLARE
DECLARE
CURSOR
CURSOR c1
c1 IS
IS
SELECT
SELECT t1.deptno,
t1.deptno, dname,
dname, “STAFF”
“STAFF”
FROM
FROM dept
dept t1,
t1, (SELECT
(SELECT deptno,
deptno,
count(*)
count(*) “STAFF”
“STAFF”
FROM
FROM emp
emp
GROUP
GROUP BY
BY deptno)
deptno) t2
t2
WHERE
WHERE t1.deptno
t1.deptno == t2.deptno
t2.deptno
AND
AND “STAFF”
“STAFF” >=
>= 5;
5;

9-9 Copyright  Oracle Corporation, 1998. All rights reserved.


Resumen

•• Devuelva
Devuelva distintos
distintos juegos
juegos dede resultados
resultados
utilizando
utilizando cursores
cursores con
con parámetros.
parámetros.
•• Utilice
Utilice parámetros
parámetros para
para abrir
abrir varias
varias
veces
veces unun cursor
cursor explícito
explícito en
en un
un bloque,
bloque,
devolviendo
devolviendo cada
cada vez
vez un
un juego
juego activo
activo
distinto.
distinto.
•• Defina
Defina cursores
cursores con
con subconsultas
subconsultas yy
subconsultas
subconsultas correlacionadas.
correlacionadas.

9-10 Copyright  Oracle Corporation, 1998. All rights reserved.


Resumen

•• Manipule
Manipule cursores
cursores explícitos
explícitos con
con
comandos:
comandos:
–– Cláusula
Cláusula FOR
FOR UPDATE.
UPDATE.
–– Cláusula
Cláusula WHERE
WHERE CURRENT
CURRENT OF.
OF.

9-11 Copyright  Oracle Corporation, 1998. All rights reserved.


Visión General de la Práctica

•• Declaración
Declaración yy utilización
utilización de
de cursores
cursores
explícitos
explícitos con
con parámetros
parámetros
•• Utilización
Utilización de
de un
un cursor
cursor FOR
FOR UPDATE
UPDATE

9-12 Copyright  Oracle Corporation, 1998. All rights reserved.

Вам также может понравиться