bdaii_sesion6_cursores__12939__

Upload: remynumi-liaa-umnaa

Post on 16-Feb-2018

213 views

Category:

Documents


0 download

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#