bdaii_sesion6_cursores__12939__
Post on 16-Feb-2018
213 Views
Preview:
TRANSCRIPT
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
1/24
Sesin 7
Construccin de cursoresexplcitos
Profesor: Ing. Juan Deza Ari
Base de Datos II
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
2/24
!"eti#os de la Sesin
Definir que es un cursor y paraque sirve
Decidir cuando es convenienteel uso de cursores
Aplicar cursores para lamanipulacin masiva de datos
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
3/24
$e%as a tratar
Definicin de un cursor
Tipos de cursores. Definicinde un cursor explcito
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
4/24
Definicin de uncursor
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
5/24
Definicin de un cursor Un cursor permite procesar grupos de
datos que se obtienen como resultadode una consulta SQ que retorna una o
m!s filas. "l cursor se almacena en un !rea de
memoria.
#ermiten reali$ar operaciones con variosregistros.
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
6/24
Definicin de un cursor Un cursor es un puntero al !rea de
memoria que %&A'" utili$a paraprocesar una sentencia S""'T. "sta
!rea de memoria recibe el nombre derea de contexto
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
7/24
$ipos de cursores
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
8/24
$ipos de cursores
Cursores i%plcitos
os cursores implcitosson creados por%racle para mane(ar alguna instruccinSQ y no son declarados por elprogramador.
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
9/24
$ipos de cursores
Cursores explcitos
os cursores explcitosson aquellos quese declaran generalmente por medio deuna consulta SQ
Se utili$an generalmente para procesar
consultas que devuelvan m!s de unafila
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
10/24
Proceso de un cursor explcito
Declaracin del cursor )D"'A&"*
Abrir el cursor )%#"+*
#rocesar las filas ),"T'-* 'errar el cursor )'%S"*
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
11/24
Declaracin del Cursor
Se da un nombre al cursor y se asocia auna consulta especfica.
Un cursor puede recibir par!metros que
son usados en la consulta asociada.
Sintaxis
CURSORnombre_cursor[ (par1 [,par2]) ] IS instruccin_SELECT
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
12/24
A!rir el cursor
Al abrir un cursor se e(ecutainmediatamente la consulta e identificael con(unto resultado el que consiste de
todas las filas que concuerdan con elcriterio de seleccin de /ste.
Sintaxis
Opennombre_cursor[ (var1 [, var2])]
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
13/24
Procesar las filas Devuelve una fila del con(unto de
resultados. Despues de cada recuperacin el cursor
avan$a al siguiente registro
Sintaxis
Fetchcursor_name intolista_variables
orFetchcursor_name intoregistro_PL/SQL
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
14/24
Cerrar el cursor
'ierra el cursor y libera el con(unto deresultados.
Una ve$ que un cursor ya 0a sidocerrado es posible volverlo a abrir sintener que declararlo otra ve$.
Sintaxis
CLOSEnombre_cursor
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
15/24
Atri!utos de cursores 1,%U+D2 es un atributo booleano de forma que
si la 3ltima orden ,"T'- devuelve una fila nosdevuelve el valor T&U" si no nos devuelve,AS".
1+%T,%U+D2 se comporta de forma opuesta a1,%U+D.
14S%#"+2 es tambi/n un atributo booleano quese utili$a para asociar si el cursor asociado est!abierto o no.
1&%5'%U+T2 este atributo num/rico devuelveel n3mero de filas extradas por el cursor 0astaese momento.
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
16/24
Proceso de cursores Cursores implcitos
as rdenes D"'A&" %#"+ ,"T'- y
'%S" no son relevantes para este tipode cursores aunque si que permitenque se les asigne los atributos de cursormencionados.
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
17/24
Proceso de cursores Cursores explcitos
#or medio de ciclo %%#.
Debe tenerse cuidado de agregar unacondicin para salir del ciclo2
OPEN nombre_cursor;
LOOP
FETCH nombre_cursor INTO lista_variables;
EXIT WHEN nombre_cursor%notfoun;!" Procesamiento e los re#istros recu$eraos "!
EN LOOP;
CLO&E nombre_cursor;
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
18/24
Proceso de cursores Cursores explcitos
#or medio de un ciclo 5-4" %%#.
a instruccin ,"'T- aparece dos veces2
OPEN nombre_cursor;
FETCH nombre_cursor INTO lista_variables;
WHILE nombre_cursor%foun LOOP
!" Procesamiento e los re#istros recu$eraos "!
FETCH nombre_cursor INTO lista_variables;EN LOOP;
CLO&E nombre_cursor;
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
19/24
Proceso de cursores Cursores explcitos
#or medio de un ciclo ,%& %%#.
"s la forma m!s corta ya que implcitamente
se e(ecutan las instrucciones %#"+ ,"'T- y'%S".
FO' variable IN nombre_cursor LOOP!" Procesamiento e los re#istros recu$eraos "!
EN LOOP;
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
20/24
Cla&sulas FOR UPDATE
"s usado para bloquear registros de un cursorque van a ser actuali$ados o eliminados.
&ELECT ((( F'O) ((( FO' *P+TE ,OFcolumna_referencia- ,NOW+IT-
Donde columna6referencia es una columna o
listas de columnas de la tabla sobre la que sereali$a la consulta y se desea bloquear.
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
21/24
'"e%plo () *DPA$'
DECLARE
-- Este cursor bloquea las columnas dname, loc
CURSOR c_AllDepartments IS
SELECT * FROM dept
FOR UPDATE OF dname, loc
-- Este cursor bloquea todas las columnas
CURSOR c_AllEmpleados IS
SELECT * FROM emp
FOR UPDATE OF ename, o!
DECLARE
-- Este cursor bloquea las columnas dname, loc
CURSOR c_AllDepartments IS
SELECT * FROM dept
FOR UPDATE OF dname, loc
-- Este cursor bloquea todas las columnas
CURSOR c_AllEmpleados IS
SELECT * FROM emp
FOR UPDATE OF ename, o!
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
22/24
Cla&sulas WHERE CURRENT OF
Si se declara el cursor con la cla3sula ,%&U#DAT" se puede emplear la cla3sula 5-"&"
'U&&"+T %, en una orden U#DAT" o D""T"para 0acer referencia a la fila reci/n extradapor el cursor.
WHE'E C*''ENT OF cursor
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
23/24
'"e%plo +,')' C*))'-$ (
DECLARECURSOR c_salar"o IS
SELECT sal FROM emp #$ere deptno % &'FOR UPDATE (O)AIT
+EI(FOR emp_record I( c_salar"o LOOP
UPDATE empSET sal % emp_recordsal * ..')/ERE CURRE(T OF c_salar"o
E(D LOOP
COMMITE(D
DECLARECURSOR c_salar"o IS
SELECT sal FROM emp #$ere deptno % &'FOR UPDATE (O)AIT
+EI(FOR emp_record I( c_salar"o LOOPUPDATE empSET sal % emp_recordsal * ..')/ERE CURRE(T OF c_salar"o
E(D LOOP
COMMITE(D
-
7/23/2019 BDAII_Sesion6_Cursores__12939__
24/24
(inal
Alguna pregunta o alguna
ua!
"racias#
top related