You are on page 1of 4

TECNOLOGIA DE BANCO DE DADOS Cursores

Um cursor pode ser visto como um arquivo temporrio que armazena e controla as linhas retornadas de um comando select , Em uma ambiente de programao tal como Plpgsql, C, C++, Java etc ! cursor encapsulando a consulta em um arquivo temporrio" pode ser um vetor de ponteiros#, para posteriormente ler as linhas do resultado da consulta de cada vez $sto evita o uso e%cessivo de mem&ria quando o resultado cont'm muitas linhas (o ambiente P)*pg+,) quando de-inimos um laos por meio do .!/ ' criado internamente um cursor para evitar problemas de mem&ria, automaticamente ! emprego deste recurso envolve0 1 2eclarao3 4 5bertura3 6 5tribuio dos valores 7s variveis3 8 .echamento DECLARAO +inta%e0 nome CU/+!/ 9 " argumentos # : .!/ comando3 obs0 !s argumentos, quando especi-icados,' -eito por meio de uma lista, onde cada elemento"nme do argumento e tipo de dado# ' separado por v;rgula e%emplo 2EC)5/E cursor1 re-cursor3 cursor4 CU/+!/ .!/ +E)EC< = ./!> -uncionario3 cursor6 CU/+!/ "tipo integer# .!/ +E)EC< = ./!> -uncionario ?@E/E categoria A tipo3 ABERTURA ! cursor deve ser aberto para uso por meio da instruo !PE( (a linguagem P)*pg+,) possui trBs -ormas para a instruo !PE(, duas das quais utilizam a varivel do cursor desligada, enquanto a terceira utiliza uma varivel cursor ligada Abertura para Select +inta%e0 !PE( nomeCcursor .!/ +E)EC< 3

Nota de Aula Prof. Sidney Vieira

5 varivel nomeCcursor deve tem sido declarada como re-cursor /ecebe a consulta especi-icada para e%ecutar ! cursor no pode estar aberto

E%emplo0 !PE( cursor1 .!/ +E)EC< = ./!> -uncionario ?@E/E tipo A %%%%3 Abertura para execuo +inta%e0 !PE( nomeCcursor .!/ EDECU<E cadeiaCdeCcaracteresCdaCconsulta3

5 varivel cursor ' aberta e recebe a consulta especi-icada para e%ecutar ! cursor no pode estar aberto, e deve ter sido declarado como varivel do tipo re-cursor 5 consulta ' especi-icada como uma e%presso cadeia de caracteres da mesma maneira que no comando EDECU<E

E%emplo0 !PE( curs1 .!/ EDECU<E E+E)EC< = ./!> E FF quoteCident"G1#3

Abertura e cursor l!"a o +inta%e0 !PE( cursorCligado 9 " valoresCdosCargumentos # :3

Esta -orma do !PE( ' utilizada para abrir uma varivel cursor cuHa consulta -oi ligada 7 mesma ao ser declarada ! cursor no pode estar aberto 2eve estar presente uma lista de e%pressIes com os valores dos argumentos se o mesmo -oi declarado como recebendo argumentos Estes valores so substitu;dos na consulta (este caso no h -orma EDECU<E equivalente

E%emplos0 !PE( curs43 !PE( curs6"84#3

Nota de Aula Prof. Sidney Vieira

Utilizao de cursores Uma vez que o cursor tenha sido aberto, este pode ser manipulado pelas instruIes descritas a seguir Para comear, no h necessidade destas manipulaIes estarem na mesma -uno que abriu o cursor Pode ser retornado pela -uno um valor re-cursor, e dei%ar por conta de quem chamou operar o cursor "$nternamente, o valor de re-cursor ' simplesmente uma cadeia de caracteres com o nome do to -alado portal que cont'm a consulta ativa para o cursor Este nome pode ser passado, atribu;do a outras variveis re-cursor, e por a; em diante, sem perturbar o portal# <odos os portais so -echados implicitamente ao t'rmino da transao Portanto, o valor de re-cursor pode ser utilizado para -azer re-erBncia a um cursor aberto at' o -im da transao

ATRIBUIO DE #ARI$#EIS +inta%e .E<C@ cursor $(<! destino3 5 instruo .E<C@ coloca a pr&%ima linha do cursor no destino, que pode ser uma varivel linha, uma varivel registro, ou uma lista separada por v;rgulas de variveis simples, da mesma maneira que no +E)EC< $(<! Como no +E)EC< $(<!, pode ser veri-icada a varivel especial .!U(2 para ver se -oi obtida uma linha, ou no E%emplos0 .E<C@ curs1 $(<! varivelClinha3 .E<C@ curs4 $(<! -oo, bar, baz3 %EC&A'ENTO +inta%e0 C)!+E cursor3 5 instruo C)!+E -echa o portal subHacente ao cursor aberto Pode ser utilizada para liberar recursos antes do -im da transao, ou para liberar a varivel cursor para que esta possa ser aberta novamente E%emplo0 C)!+E curs13

Nota de Aula Prof. Sidney Vieira

()*+*(*(* Retor,ar cursor 5s -unIes P)*pg+,) podem retornar cursores para quem -ez a chamada J Ktil para retornar vrias linhas ou colunas, especialmente em conHuntos de resultados muito grandes Para ser -eito, a -uno abre o cursor e retorna o nome do cursor para quem chamou "ou simplesmente abre o cursor utilizando o nome do portal especi-icado por, ou de outra -orma conhecido por, quem chamou# ,uem chamou poder ento ler as linhas usando o cursor ! cursor pode ser -echado por quem chamou, ou ser -echado automaticamente ao t'rmino da transao ! nome do portal utilizado para o cursor pode ser especi-icado pelo programador ou gerado automaticamente Para especi-icar o nome do portal deveLse, simplesmente, atribuir uma cadeia de caracteres 7 varivel re-cursor antes de abriLla ! valor cadeia de caracteres da varivel re-cursor ser utilizado pelo !PE( como o nome do portal subHacente Entretanto, quando a varivel re-cursor ' nula, o !PE( gera automaticamente um nome que no con-lita com nenhum portal e%istente, e atribui este nome 7 varivel re-cursor Nota- Uma varivel cursor ligada ' inicializada com o valor cadeia de caracteres que representa o seu nome e, portanto, o nome do portal ' o mesmo da varivel cursor, a menos que o programador mude este nome -azendo uma atribuio antes de abrir o cursor Por'm, uma varivel cursor desligada tem inicialmente o valor nulo por padro e, portanto, recebe um nome Knico gerado automaticamente, a menos que este seHa mudado E%emplo create -uncitio cursor)er5luno "varchar# returns te%t as GG declare c re-cursor3 mn aluno nomeMtNpe3 cur aluno curriculoMtNpe begin open c -or select nome, currriculo -rom aluno Ohere matricula A G13 -etch c into nm, cur3 close c3 return nm FFE,E cur3 end3 GG language EplpgsqlE3

Nota de Aula Prof. Sidney Vieira

You might also like