Sie sind auf Seite 1von 5

Em alguns SGDB possvel a abertura de cursores de dados desde o prprio ambiente de trabalho, para isso se utilizam, normalmente procedimentos

s armazenados. A sinta e para de!inir um cursor a seguinte" DE#$A%E nome&cursor '(% especi!icacao&consulta )(%DE% B*+ ,or e emplo" DE#$A%E -eu.#ursor '(% SE$E#/ num.emp, nome, posto, salario '%(- empregados 01E%E num.dept 2 3in!ormatica3 Este comando meramente declarativo, simplesmente especi!ica as !ilas e colunas 4ue iremos recuperar. A consulta se e ecuta 4uando se abre ou se ativa o cursor. A cl5usula )(%DE% B*+ opcional e especi!ica uma ordena67o para as !ilas do cursor8 se n7o se especi!ica, a ordena67o das !ilas de!inida pelo gerenciador de SGBD. ,ara abrir ou ativar um cursor se utiliza o comando (,E9 do S:$, a sinta e a seguinte" (,E9 nome&cursor );S<9G lista&variaveis+ Ao abrir o cursor, avalia&se a consulta 4ue aparece em sua de!ini67o, utilizando os valores atuais de 4ual4uer par=metro re!erenciado na consulta, para produzir uma cole67o de !ilas. ( ponteiro se posiciona diante da primeira !ila de dados >registro atual?, esta senten6a n7o recupera nenhuma !ila. ;ma vez aberto o cursor, utiliza&se a cl5usula 'E/#1 para recuperar as !ilas do cursor, a sinta e a seguinte" 'E/#1 nome&cursor <9/( lista&variaveis $ista & variaveis s7o as vari5veis 4ue v7o conter os dados recuperados da

!ila do cursor, na de!ini67o devem ir separadas por vrgulas. 9a lista de vari5veis, deve&se de!inir tantas vari5veis como colunas 4uantas tiver a !ila a recuperar. ,ara !echar um cursor, utiliza&se o comando #$(SE, este comando !az desaparecer o ponteiro sobre o registro atual. A sinta e " #$(SE nome&cursor ,or @ltimo, e para eliminar o cursor, utiliza&se o comando D%(, #;%S(%. Sua sinta e a seguinte" D%(, #;%S(% nome&cursor E emplo >sobre S:$&SE%AE%?" Abrir um cursor e percorr-lo DE#$A%E EmploBee.#ursor #;%S(% '(% SE$E#/ $ast9ame, 'irst9ame '%(- 9orthCind.dbo.EmploBees 01E%E $ast9ame liDe 3BE3 (,E9 EmploBee.#ursor 'E/#1 9EF/ '%(- EmploBee.#ursor 01<$E GG'E/#1.S/A/;S 2 H BEG<9 'E/#1 9EF/ '%(- EmploBee.#ursor E9D #$(SE EmploBee.#ursor DEA$$(#A/E EmploBee.#ursor Abrir um cursor e imprimir seu contedo SE/ 9(#(;9/ (9 DE#$A%E Gau.id varchar>II?, Gau.!name varchar>JH?, Gau.lname varchar>KH?, Gmessage varchar>LH?, Gtitle varchar>LH?

,%<9/ M&&&&&&&& ;tah Authors report &&&&&&&&M DE#$A%E authors.cursor #;%S(% '(% SE$E#/ au.id, au.!name, au.lname '%(- authors 01E%E state 2 M;/M (%DE% B* au.id (,E9 authors.cursor 'E/#1 9EF/ '%(- authors.cursor <9/( Gau.id, Gau.!name, Gau.lname 01<$E GG'E/#1.S/A/;S 2 H BEG<9 ,%<9/ M M SE$E#/ Gmessage 2 M&&&&& BooDs bB Author" M N Gau.!name N M M N Gau.lname ,%<9/ Gmessage DE#$A%E titles.cursor #;%S(% '(% SE$E#/ t.title '%(- titleauthor ta, titles t 01E%E ta.title.id 2 t.title.id A9D ta.au.id 2 au.id (,E9 titles.cursor 'E/#1 9EF/ '%(- titles.cursor <9/( Gtitle <' GG'E/#1.S/A/;S OP H ,%<9/ M OO9o BooDsPPM 01<$E GG'E/#1.S/A/;S 2 H BEG<9 SE$E#/ Gmessage 2 M M N Gtitle

,%<9/ Gmessage 'E/#1 9EF/ '%(- titles.cursor <9/( Gtitle E9D #$(SE titles.cursor DEA$$(#A/E titles.cursor 'E/#1 9EF/ '%(- authors.cursor <9/( Gau.id, Gau.!name, Gau.lname E9D #$(SE authors.cursor DEA$$(#A/E authors.cursor G( Percorrer um cursor ;SE pubs G( DE#$A%E authors.cursor #;%S(% '(% SE$E#/ au.lname '%(- authors 01E%E au.lname $<QE MBEM (%DE% B* au.lname (,E9 authors.cursor 'E/#1 9EF/ '%(- authors.cursor 01<$E GG'E/#1.S/A/;S 2 H BEG<9 'E/#1 9EF/ '%(- authors.cursor E9D #$(SE authors.cursor DEA$$(#A/E authors.cursor Percorrer um cursor salvando os valores em variveis ;SE pubs G( DE#$A%E Gau.lname varchar>KH? DE#$A%E Gau.!name varchar>JH? DE#$A%E authors.cursor #;%S(% '(%

SE$E#/au.lname, au.!name '%(- authors 01E%E au.lname $<QE MBEM (%DE% B* au.lname, au.!name (,E9 authors.cursor 'E/#1 9EF/ '%(- authors.cursor <9/( Gau.lname, Gau.!name 01<$E GG'E/#1.S/A/;S 2 H BEG<9 ,%<9/ MAuthor" M N Gau.!name N M M N Gau.lname 'E/#1 9EF/ '%(- authors.cursor <9/( Gau.lname, Gau.!name E9D #$(SE authors.cursor DEA$$(#A/E authors.cursor

Das könnte Ihnen auch gefallen