Você está na página 1de 62

Por

Edson Almeida Junior


Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
Maro-2006
Ultima Atualia!o ""#0$#2006
1. INTRODUO
Introduo
Ao desen%ol%ermos um &ro'eto temos em mente algumas (uest)es &ara (ue o sistema im&lementando
satis*aa as nossas necessidades de neg+cio dentro das nossas limita)es de rela!o custo , bene*-cio.
Como Organiar a im&lementa!o de um sistema.
Como *aer &ara (ue sua Administrao se'a sim&les .
Como garantir um bom Desem!en"o .
/s recursos dis&on-%eis no 01M2S /racle "03 s!o *erramentas (ue4 com certea4 nos au,iliar!o a obter
nossos ob'eti%os. Tudo (ue ser5 a&rendido a(ui ser5 com&at-%el com o /racle 6i4 7i e "0g.
8L#S9L
Linguagem de &rocedimentos do /racle. Atra%:s dela &odemos criar di%ersas ;rotinas< de &rograma!o4 dentre elas4
8rocedimentos =8rocedures>4 3atil?os =Triggers> e @un)es =@unctions>.
1ACLA0A
-- Bari5%eis
-- Cursores
-- 8rocedures ou @un)es
2A3CD
-- 8rocessamento
AECA8TC/D
-- Tratamento de A,cess)es
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
2
Introduo
A &rimeira estrutura na (ual um S321 0elacional esta%a baseado traia o S9L &uro como Gnica *orma de
inter*ace com o banco.
/ &er*il de utilia!o dos bancos de dados relacionais *oi e%oluindo e essa estrutura4 com o &assar do tem&o4 '5
n!o res&ondia Hs necessidades. Agregou-se ent!o e,tens)es ao S9L (ue &retendiam res&onder Hs no%as necessidades
adicionando comandos &rocedurais a linguagem declarati%a do S9L. Do caso da /racle essa e,tens!o *oi c?amada de
8rocedural Language
= 8L#S9L>.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
I
Usu#rio RD$%&
S9L
1ados
Usu#rio RD$%&
1ados
S9LJ8L
Introduo
0ecentemente o &er*il de utilia!o e%oluiu no%amente e nos %emos diante de no%as necessidades. Astruturas
mais com&le,as como 2anco de 1ados 1istribu-dos4 grande (uantidade de in*orma!o4 custo de tr5*ego em rede e
Ar(uitetura Cliente-Ser%idor s!o algumas caracter-sticas desse no%o &er*il.
Da Ar(uitetura Cliente-Ser%idor4 &or e,em&lo4 : muito im&ortante manter o tr5*ego de rede a um m-nimo e
aumentar a &er*ormance do 012MS de modo (ue ele &ossa atender ra&idamente as *re(Kentes transa)es solicitadas
&elo usu5rio.
Com essas es&eci*ica)es4 organiar o &rocessamento tornando-se *undamental. 8or e,em&lo4 grandes blocos
8L#S9L circulando &ela rede e sendo com&ilados e otimiados &elo ser%idor4 a cada no%a e,ecu!o4 n!o : uma boa
solu!o. A mel?or id:ia : armaenar rotinas dentro do 012MS e acionar essas rotinas atra%:s de c?amadas. Am %e de
todo um bloco 8L#S9L temos circulando &ela rede a&enas o nome da rotina e seus &arLmetros. Al:m disso o /racle
&ode guardar a *orma com&ilada e otimiada dessas rotinas mel?orando o tem&o de e,ecu!o. Do /racleM ou /racle6
isto : um 8rocedimento Armaenado4 ou &TORED PRO'EDURE.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$
Introduo
Al:m das %antagens de &er*ormance4 o uso de Stored 8rocedures torna o sistema mais modular. As cl5ssicas
%antagens de um sistema estruturadoN rea&ro%eitamento de c+digo4 identi*ica!o dos &ontos cr-ticos do sistema e
*acilidade de manuten!o gan?am agora uma no%a abordagem.
Deste sentido se torna interessante (ue o 012MS su&orte mel?or o desen%ol%imento do (ue sim&lesmente
armaenar rotinas isoladas. O *re(Kentemente necess5rio (ue di%ersas rotinas com&artil?em as mesmas %ari5%eis globais
e (ue c?amam rotinas n!o diretamente dis&on-%eis &ara o usu5rio. Do /racleM isso : su&ortado &elo uso de 8acotes4 ou
PA'(A)E&.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
P
Usu#rio RD$%&
1ados
S9LJ8LJC?amadas a
rotinas armaenadas
Usu#rio
RD$%&
1ados
8rocedure A
8rocedure 2
Bari5%el
3lobal
Introduo
Uma e%olu!o natural nessa tecnologia : tornar o banco de dados mais inteligente. / 012MS tem o controle
de todas as o&era)es sobre os dados4 se adicionarmos o conceito de Stored 8rocedures *ica *5cil imaginar o banco de
dados monitorando determinados e%entos e acionando rotinas autom5ticas.
Assas rotinas autom5ticas ser%em n!o s+ &ara garantir a integridade do banco de dados mas tamb:m garantir as
regras inerentes ao neg+cio. Assim como temos uma c?a%e &rim5ria ou uma restri!o a um dom-nio = constraints
&rimarQ ReQ e c?ecR im&lementadas &elo 012MS >4 &odemos ter 4 no neg+cio 4 restri)es (ue limitem uma %enda a
uma determinada &orcentagem do esto(ue ou (ue determinem o limite de cr:dito de um cliente baseado no seu
%olume de neg+cio. At: ?o'e essas regras eram &rogramadas dentro da a&lica!o. / &rogramador tin?a (ue se &reocu&ar
com elas ao mesmo tem&o (ue cria%a as rotinas es&ec-*icas da a&lica!o. Csso torna%a o desen%ol%imento mais lento4 o
c+digo mais di*-cil de manter e aumenta%a a &ossibilidade de erros4 al:m disso uma mudana nas regras de neg+cio
im&lica%a *re(Kentemente na altera!o de %5rios &rogramas. As rotinas autom5ticas do /racleM ou /racle6 s!o
c?amadas de 3atil?os4 ou DATA$A&E TRI))ER&.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
6
Usu#rio
RD$%&
1ados
S9L Ta*elas
Triggers
+. &tored Pro,edures
'riando &tored Pro,edures
E-em!lo 1.
'REATE PRO'EDURE 80/CASSAMADT/
AS
2A3CD
CDSA0T CDT/ AU1CT/0CA = SSS1ATA4
TTermino Dormal do 8rocessamento T>N
C/MMCT U/0VF
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
M
'riando &tored Pro,edures
E-em!lo +.
C0AATA OR REP/A'E 80/CA1U0A 80/CASSAMADT/
CS
2A3CD
CDSA0T CDT/ AU1CT/0CA =SSS1ATA4
TTermino Dormal do 8rocessamento T>F
C/MMCT U/0VF
E0'EPTION
UWAD /TWA0S TWAD
C@ ..... TWAD
....
ALSA
0/LL2ACVF
AD1 C@F
END PRO'E&&A%ENTO1
E-e,utando &tored Pro,edures
No &2/P/U&.
S9LX E0E'UTE PRO'E&&A%ENTO1
No P/3&2/
1ACLA0A
= declara!o de %ari5%eis>
2A3CD
= Cnstru)es>
PRO'E&&A%ENTO1
=Cnstru)es>
AD1F
No &2/4OR%& 5 Dentro de um Trigger ou Pro,edure 6
C*N 2L/C/"0.U@ Y TCAT T?en
PRO'E&&A%ENTO1
Alse
0/LL2ACVF
And C*F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
6
Usando Par7metros
/s nomes e ti&os das %ari5%eis usadas como &arLmetros de%em ser declarados (uando a &rocedure : criada. Da
es&eci*ica!o do ti&o NO de%er5 constar o taman?o4 mas declara)es ZTS8A e Z0/UTS8A s!o &ermitidas.
/s %alores s!o substitu-dos em termo de c?amada da &rocedure4 %ariando assim a cada e,ecu!o.
/s &arLmetros &odem serN
A&enas de AntradaN
'REATE PRO'EDURE TE&TE 5 8ar1 IN 9ar,"ar+ 6
ou
'REATE PRO'EDURE TE&TE 5 8ar1 9ar,"ar+ 6
onde %ar" : uma %ari5%el de entrada de dados &ara a &rocedure. A
&assagem nesse caso : *eita &or %alor.
Asta : a modalidade De:ault.
A&enas de Sa-daN
'REATE PRO'EDURE TE&TE1 5 8ar+ OUT Num*er 6
onde %ar2 : uma %ari5%el de retorno de dados da &rocedure &ara o
ambiente c?amador.
1e Antrada e Sa-daN
'REATE PRO'EDURE TE&TE; 5 8ar; IN OUT Num*er 6
onde %arI : uma %ari5%el de com&artil?amento de dados entre a
&rocedure e o ambiente c?amador. A &assagem nesse caso : *eita
&or re*er[ncia.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
7
Usando Par7metros
/s di%ersos ti&os de &arLmetros &odem ser usados 'untos em (ual(uer combina!oN
/2SN Uma Stored 8rocedure nunca en,erga (ual(uer %ari5%el do ambiente c?amador. Toda a inter*ace entre o
c?amador e a Stored 8rocedure : *eita atra%:s de &arLmetros.
E-em!lo.
Cria!o
C0AATA 80/CA1U0A
Aumento = sal5rio CD /UT Dumber4
ta,a CD Dumber4
Status /UT Dumber >
AS
2A3CD
sal5rioN Y sal5rio \ ta,aF
C* sal5rio X P000 T?en
StatusN Y "F
Alse
StatusN Y 0F
And C*
AD1 AumentoF
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"0
Usando Par7metros
A,ecu!o a &artir de um bloco 8L#S9L
1ACLA0A
Cursor c" Cs
Select id4 salarQ
@rom Am&
*or U&date o* salarQF
sal Am&.salarQZTS8AF
2A3CD
@or rc" Cn c" Loo&
Sal NY rcl.salarQF
Aumento=Sal4"."0>F
C* sal ] "P00 t?en
U&date Am&
Set salarQ Y sal
U?ere Current o* c"F
And C*F
And Loo&F
AD1F
A,erc-cios
".Crie uma tabela com o seguinte comandoN
C0AATA TA2LA AU1CTA
= ti&o Barc?ar2 ="0>4
usu5rio Barc?ar2 ="0>4
data 1ate4
te,to Barc?ar2=60>F
Usando esta tabela crie a Stored 8rocedureN 8^Log = ti&o4 te,to >. 9ue inclu- uma lin?a na tabela de log usando a data e
usu5rio corrente.
2. Crie uma Stored 8rocedure (ue aumente os %alores do sal5rio do em&regado &assando o C1 do em&regado. A
&orcentagem de aumento de%e ser &assada como &arLmetro. = Use a 8^Log=>>
A,N 8^Aumento ="0>F
Log Y X = TAUMADT/T4 TALUD/"T4 0P-_UL-76T4TAumento determinado &ela dire!o da em&resaT>
I. Crie uma Stored 8rocedure (ue %eri*i(ue o sal5rio de cada Am&regado e os em&regados (ue ti%er o sal5rio menor
(ue 700 e o de&artamento DAMA Y T/&erationsT &romo%a um aumento de IPZ no sal5rio. 3erar na tabela AU1CTA o
log desta altera)es.
A,N 8^aumento"
Log YX = TAUMADT/T 4 TSC/TTT 4 T0P-_UL-76T 4
TAumento no de&artamento /&erations4 &or &roduti%idadeT>
/&cionalN
$> Criar uma &rocedure (ue altera em $PZ o sal5rio dos em&regados (ue s!o subordinados aos gerentes (ue n!o tem
comiss!o.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
""
;. 4un,tions
'riando 4un,tions
E-em!lo.
C0AATA /0 0A8LACA @UDCTC/D
Aumento = sal5rio Dumber >
0ATU0D DumberF
AS
au, DumberF
2A3CD
au,N Y salario \ "." F
return=au,>F
AD1F
'"amando 4un,tions
No &2/P/U&.
No : &oss-%el c?amar uma *un!o diretamente do &rom&t do S9L8LUS. Use um bloco 8L#S9L.
No P/3&2/
1ACLA0A
` declara!o de %ari5%eisa
2A3CD
` Cnstru)es a
no%osal N Y Aumento = sal^*unc>F
`Cnstru)es a
AD1F
No &2/4OR%& 5 Dentro de um Trigger ou Pro,edure6
C*N 2L/C/".CAM8/" Y TST T?en
N2L/C/"D/B/SALN Y
Aumento = N 2L/C/".SAL@UDC>F
Alse
0/LL2ACVF
And C*N
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"2
'om!arando 4un<es e Pro,edures
CriandoN
C0AATA 80/CA1U0A
Aumento = salent CD Dumber4 salsaida /UT Dumber >
AS
2A3CD
salsaidaN Y salent \ "."0F
AD1 AumentoF
A,ecutandoN
1ACLA0A
salini DumberF
salno% DumberF
2A3CD
` Cnstru)es a
Aumento = salini4salno%>F
` Cnstru)es a
AD1N
CriandoN
C0AATA @UDCTC/D
Aumento = salent CD Dumber >
0ATU0D Dumber
AS
au, DumberF
2A3CD
au, N Y salent \ "."0F
0eturn =au,>F
AD1 AumentoF
A,ecutandoN
1ACLA0A
salini DumberF
salno% DumberF
2A3CD
` Cnstru)es a
salno% N Y Aumento= salini>F
` Cnstru)es a
AD1N
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"I
E-er,=,ios
".> Crie uma *un!o (ue receba o nGmero do tele*one no *ormato 06"7722M$0" =111@one> e de%ol%a o nGmero no
*ormato =06">7722-M$0".
A,N 8^@one =06"7722M$0">
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"$
>. T?!i,os Es!e,iais em 4un,tions e &tored Pro,edures
Transa<es
As @unctions e Stored 8rocedures &odem incluir (ual(uer comando S9L ou 8L#S9L4 &or:m uma aten!o
es&ecial de%e ser dada aos comandos de controle de transa)es.
1[ &re*er[ncia a colocar os comandos de controle de transa)es = C/MMCT4 0/LL2ACV 4 SABA8/CDT >
no ambiente c?amador. Caso isto n!o se'a &oss-%el use dentro da Stored 8rocedure4 de &re*er[ncia4 a&enas comandos
SABA8/CDT e 0/LL2ACV T/ savepoint4 de modo (ue n!o inter*ira na transa!o iniciada no c?amador.
Um modo de lidar com esse &roblema : *aer a stored^&rocedure sinaliar uma e,ce&tion &ara o ambiente
c?amador. Csso &ode ser *eito *acilmente usando o comandoN
raise_application_error ( cdigo, mensagem )
/nde o c+digo do erro de%e ser um nGmero entre -20000 e -20777 e a mensagem de%er5 ser um te,to claro e
e,&licati%o da situa!o do erro.
Im!ortante. Caso o ambiente c?amador se'a um 1atabase Trigger4 uma transa!o distribu-da ou o
S9L\@/0MS4 as &rocedures NO &odem conter nen?um comando de controle de transa!o.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"P
Transa<es
A,em&lo de Controle de Transa!o no c?amadorN
C0AATA /0 0A8LACA 80/CA1U0A
Atualia = cod Cn Dumber4
aumento Cn Dumber4
status /UT Dumber >
AS 2A3CD
U&date tab Set %al Y %al \ aumento
U?ere c+digo Y codF
C* S9LZD/T@/UD1 T?en
8^&rocessamento = TABCS/T4
Tentati%a de altera!o - codigoT bb
to^ c?ar =cod>bbT ine,istente T>F
status N Y "F
Alse
status N Y 0F
And C*F
AD1 AtualiaF
1ACLA0A
status Dumber
2A3CD
` Cnstru)es a
atualia =C14"04status>
C* status ]X 0 T?em
0ollbacRF
And C*F
`Cnstru)es a
CommitF
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"6
&a=da de Dados
D!o e,istem comandos es&ec-*icos de entrada e sa-da de dados em blocos 8L#S9L.
Do entanto4 *oram criadas &rocedures (ue su&ortam sa-da de in*orma)es4 &ermitindo retornar &ara o %-deo os
resultados de selects ou %alores de %ari5%eis. Assas &rocedures en%iam in*orma)es &ara um bu**er acess-%el ao
S9L8LUS ou S9L12A (ue &or sua %e &odem en%i5-las &ara tela.
8ara ati%ar a leitura e im&ress!o desse bu**er nesses &rodutos digite o seguinte comandoN
&ET &ER9EROUTPUT ON
Utiliando essas &rocedures torna-se &oss-%el e,ecutar certas tare*as (ue em outro caso necessitariam do uso de uma
linguagem W/ST = A,N C4 Cobol etc>4 al:m disso &odemos utiliar o &rocesso de /UT8UT como um 1ebug
rudimentar.
Assas &rocedures s!oN
Nome Descrio
12MS^/UT8UT = te,to>F Cnsere o te,to &ara o bu**er de sa-da
12MS^/UT8UT.DAU^LCDA Coloca uma marca de *im de lin?a no bu**er
de sa-da.
12MS^/UT8UT.8UT^LCDA Cnsere o te,to e coloca a marca de *im de lin?a
no bu**er.

Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"M
&a=da de Dados
E-em!lo.
S9LX C0AATA /0 0A8LACA 80/CA1U0A
debuge = ta,a Dumber>F
AS
au, DumberF
2A3CD
12MS^/UT8UT.8UT^LCDA
= TComeo de A,ecu!oT>F
Select Sum = salarQ> Cnto au, @rom em&F
au,N Y au, \ta,aF
12MS^/UT8UT.8UT^LCDA = Balor de au, YXTbb
To^c?ar =au,>>F
12MS^/UT8UT.8UT^LCDA= T@im de A,ecu!oT>F
AECA8TC/D
U?en /t?ers T?en
12MS^/UT8UT.8UT^LCDA= TArro na A,ecu!oT>F
AD1F
S9LX #
S9LX SAT SA0BA0/UT8UT /D
S9LX AEACUTA 1eburgando =".I0>F
Eliminando Pro,edures e 4un,tions

XX ----------------10/8 80/CA1U0A-----------------nome-----------------------
-X
XX---------------10/8 @UDCTC/D ----------------------nome------------------------
-X
E-em!lo.
DROP PRO'EDURE &@!ro,essamanto1
DROP 4UN'TION aumento1
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"6
Administrando os O*Aetos B I
Ao criarmos (ual(uer ob'eto no banco de dados4 o /racle armaena-os em tabelas com %iews
associadas. Assas %iews s!o di%ididas em tr[s categorias = All4 1ba e User > e atra%:s delas obtemos in*orma)es deles.
Atra%:s da %iew USA0^S/U0CA : &oss-%el recu&erar o c+digo do ob'eto criadoN
USA0^S/U0CA = cont:m o c+digo do ob'eto criado >N
Dame Dome do ob'eto
TQ&e Ti&o de ob'etoN @unction 4 8rocedure4 8acRage4 e
8acRage 2odQ
Line Se(uencia do C+digo
Te,t Te,to do C+digo
E-em!lo.
8ara recu&erar o te,to original da 8rocessamento crie o scri&t source.s(l com o seguinte conteGdoN
set &agesie P00
set linesie 60
set *eedbacR o**
set ?eading o**
column te,t *ormat a60 trunc
Select Te,t
@rom User^Source
U?ere Dame Y T80/CASSAMADT/T
/rder 2Q LineF
S9LX S&ool 8roc.s(l
S9LX cSource
80/CA1U0A
&rocessamanto = %ti&o Cn Barc?ar24 %te,to Cn Barc?ar2 >
AS
2A3CD
Cnsert into audite Balues = %ti&o4 User4 SQsdate4 %te,to >
AECA8TC/D
U?en /t?ers T?en
0ollbacRF
And &rocessamanto
S9LX S&ool /**
/bsN A&esar de &odermos recu&erar o c+digo de uma &rocedure4 *unction ou &acRage atra%:s do dicion5rio de
dados4 : aconsel?5%el criarmos um ar(ui%o com seus res&ecti%os c+digos.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
"7
Administrando os O*Aetos B I
Atra%:s da Biew USA0^A00/0S : &oss-%el recu&erar (ue ti&o de erro ocorreu durante a cria!o do ob'etoN
USA0^A00/0S = cont:m os erros da Gltima com&ila!o >N
Dame Dome do /b'eto
TQ&e Ti&o do /b'etoN @unction 4 8rocedure4 8acRage4 e 8acRage 2odQ
Se(uence Se(uencia de Arros
Line Lin?as do c+digo com Arro
8osition 8osi!o do erro na Lin?a do C+digo
Te,t Te,to do Arro
E-em!lo.
Caso tentemos criar a &rocedure &rocessamento com o scri&tN
C0AATA /0 0A8LACA 80/CA1U0A
&rocessamento = %ti&o Cn Barc?ar24 %te,to Cn Barc?ar2>
AS
2A3CD
Cnsert into auditori Balues = %ti&o4 User4 SQsdate4 %te,to>
AECA8TC/D
U?en /t?ers T?en
0ollbacRF
And &rocessamentoF
/bteremos uma mensagem comoN
Message 22P not *oundF &roduct Y 8LUSI"F *acilitQ Y S8"
8or:m se usarmos os comandos a seguir obteremos uma in*orma!o bem mel?or sobre os errosN
set linesie "60
column 8/S
column 1ASC0Cde/ *ormat at "P0 T0UDC
set s&ace 2
select line bb T # T bb &osition 8/S4 te,t 1ASC0Cde/
*rom user^errorsF
8/S 1ASC0Cde/
----- ---------------------------------------------------------------
P#"M 8LS-0020"N identi*ier TAU1CT/0CT must be declared
P#P 8L#S9L Statement ignored
Do e,em&lo acima o nome correto do /b'eto : AU1CTA e n!o AU1CT/0C O*s. / comando &COD ERROR tem o
mesmo e*eito.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
20
'om!ilando
Ao ,riarmos uma 8rocedure ou @unction : *eita uma ,om!ilao desses ob'etos. Caso se'a identi*icado4 no momento
e,ecu!o4 (ue um determinado ob'eto re*erenciado so*reu alguma modi:i,ao4 o &rograma ser5 re,om!ilado e ent!o
e,ecutado.
Atra%:s de seu dicion5rio de dados o /racle %eri*ica as rela)es e,istentes entre seus ob'etos. 1essa *orma ele %eri*ica
os status desses ob'etos e submete a e,ecu!o ou recom&ila e e,ecuta.
Do entanto4 (uando o ob'eto re*erenciado *or uma !ro,edure ou :un,tion (ue este'a em um banco de dados remoto4
teremos um tratamento ligeiramente di*erente a&+s uma altera!o nesses ob'etos. A !rimeira 8e (ue tentarmos
e,ecutar a &rocedure local obteremos uma mensagem de erro4 mas na segunda tentati8a a re,om!ilao ser#
autom#ti,a.
Do caso de uma re*er[ncia a uma ta*ela ou outro ob'eto remoto (ue n!o uma *unction ou &rocedure NO ?a%er5
recom&ila!o autom5tica e ser5 necess5rio submeter as &rocedures ou *unctions 5 uma com&ila!o manual.
Im!ortante. Um ob'eto &ode ser re*erenciado direta ou indiretamente. Um ob'eto : re*erenciado diretamente
(uando uma &rocedure o cita em seu cor&o e indiretamente (uando a &rocedure se utilia de um terceiro ob'eto (ue o
mani&ula. Mesmo os ob'etos (ue acessam outros indiretamente necessitariam de uma no%a recom&ila!o caso ?ou%esse
altera!o em (ual(uer n-%el.
ALTA0 80/CA1U0A nome C/M8CLA
ALTA0 @UDCTC/D nome C/M8CLA
E-em!lo.
S9LX Alter 8rocedure &rocessamanto Com&ile
S9LX #
8rocedure Altered
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
2"
Administrando as Re:erEn,ias
Atra%:s da Biew USA0^1A8AD1ADCCAS : &oss-%el %eri*icar (uais s!o os ob'etos re*erenciadosN
USA0^1A8AD1ADCCAS = cont:m as re*er[ncias do ob'eto>N
Dame Dome do /b'eto
TQ&e Ti&o do /b'etoN @unction4
8rocedure4 8acRage e 8acRage 2odQ.
0e*erenced^/wner 1ono do /b'eto 0e*erenciado
0e*erenced^Dame Dome do /b'eto 0e*erenciado
0e*erenced^TQ&e Ti&o do /b'eto 0e*erenciado
E-em!lo.
".> Beri*icando os ob'etos diretamente re*erenciadosN
S9LX Select 0e*erenced^/wner AS9UAMA4
0e*erenced^Dame /2_AT/4
2 0e*erenced^TQ&e TC8/
I @rom User^1e&endencies
$ U?ere Dame Y T80/CASSAMADT/TF
2> Beri*icando os ob'etos indiretamente re*erenciados. 8odemos criar um scri&t c?amado List^0e*.s(l comN
1ro& Table 0e*erenciaF
C0AATA Table 0e*erencia AS Select \ @rom User^1e&endenciesF
column /b'eto *ormat a2P
column 0e*erenciado *ormat a2P
column Ti&o^0e*erenciado *ormat a20
Select L&ad =T T42 \ Le%el> bb Dame /b'eto4
0e*erenced^Dame 0e*erenciado4
0e*erenced^TQ&e Ti&o^0e*erenciado
@rom 0e*erencia
U?ere 0e*erenced^/wner not in = TSSST4 T8U2LCCT4 TSSSTAMT>
Connect bQ name Y &rior 0e*erenced^name
Start Uit? DAMA Y T80/CASSAMADT/TF
A,ecute o scri&t...
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
22
Administrando os O*Aetos B II
Atra%:s da Biew USA0^/2_ACTS conseguimos identi*icar (ual o status de um determinado ob'eto a&+s um
comando de 11LN
USA0^/2_ACTS= cont:m o status do comando de 11L>N
/b'ect^Dame Dome do /b'eto
/b'ect^Cd Cdenti*icador do /b'eto
/b'ect^TQ&e Ti&o do /b'eto
Created 1ata de Cria!o do /b'eto
Last^1dl^Time 1ata do Gltimo Comando de 11L
Time^Stam& Status do /b'etoN BALC14 CDBALC1
E-em!lo.
8odemos criar o scri&t /2_.s(l comN
Column /b'eto @ormat a20
Column Ti&o @ormat a20
Column Status @ormat a"0
Select /b'ect^Dame /b'eto4 /b'ect^TQ&e4 Status
@rom user^ob'ects
U?ere /b'ect^Dame Y T80/CASSAMADT/TF
S9LX c/b'
/2_AT/ /2_ACT^TS8A STATUS
---------- ------------------- -----------
80/CASSAMADT/ 80/CA1U0A BALC1
S9LX Alter Table AU1CTA Modi*Q = Usu5rio Barc?ar2 =I0>>F
Table altered
S9LX c/b'
/2_AT/ /2_ACT^TS8A STATUS
---------- ------------------- -----------
80/CASSAMADT/ 80/CA1U0A CDBALC1
S9LX Alter 8rocedure 80/CASSAMADT/ Com&ileF
8rocedure altered.
S9LX c/b'
/2_AT/ /2_ACT^TS8A STATUS
---------- ------------------- -----------
80/CASSAMADT/ 80/CA1U0A BALC1
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
2I
&inFnimos
8ara *aermos re*er[ncias a &rocedures4 *unctions e &acRages de *orma trans&arente con%:m criarmos
&inFnimos.
E-em!lo.
S9LX Connect usu5rio#sen?a
S9LX A,ecute &rocessamento = TA%isoT4 TA,em&lo de SinfnimoT>FendF
A00/0 at line"N
/0A-06PP0N line"4 columnMN
8LS-00I"IN T80/CASSAMADT/T not declared in t?is sco&e
/0A-06PP0N line"4 columnMN
8L#S9LN Statement ignored
S9LX C0AATA SQnonQn !ro,essamento @or SCWAMA.!ro,essamento1
SQnonQn created.
S9LX A,ecute !ro,essamento= TA%isoT4 TA,em&lo de SinfnimoT>F
8L#S9L &rocedure success*ullQ com&leted.
$ene:=,ios de Pro,edures e 4un,tions
'ontrole do a,esso aos o*Aetos do $an,o de Dados &ara usu5rios sem &ri%il:gio sobre eles. / usu5rio n!o
necessita &ossuir4 &or e,em&lo o &ri%il:gio de insert em uma tabela caso e,ista alguma &rocedure (ue insira registros
nela.
'ontrole da l?gi,a das transa<es do neg?,io e%itando (ue erros de &rograma!o a*etem a integridade e a
segurana do banco.
'ontrole de ,?digo em um Gni,o lugar.
E8itar o trabal?o do gerenciador &ara com&ilar blocos de comandos &ois estes '5 est!o com&ilados.
Rea!ro8eitamento do ,?digo em mem?ria e%itando &arses de um mesmo comando = ou bloco de > c?amado
&or %5rios usu5rios.
Reduo no nGmero de ,"amadas do gerenciador4 reduindo tr5*ego na rede.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
2$
H. Pa,Iages
Entendendo Pa,Iages
8acRage : um ob'eto do banco de dados (ue agru&a &rocedures4 *un)es4 %ari5%eis4 e,ce&tions e constantes (ue se
relacionam4 &ro&orcionando uma mel?or organia!o e %is!o dos a&licati%os (ue ir!o utiliar-se desses ob'etos.
Um PA'(A)E est5 di%idido em duas &artesN
-8ACVA3A S8ACC@CCATC/D = 1e*ini)es >
-8ACVA3A 2/1S = Cor&o >
Entendendo Pa,Iages
DE'/ARAO = 8acRage S&eci*ication >N
Cont:m somente as declara)es de &rocedures4 *un)es4 %ari5%eis4 constantes e e,ce&tions (ue ser!o
re*erenciadas &osteriormente &elos a&licati%os a*ins. Assas declara)es s!o &Gblicas. A &arte declarati%a : obrigat+ria4 e
atra%:s dela : *eita a inter*ace com os a&licati%os. Um &rogramador (ue utilie &rocedimentos do &acRage &recisa
unicamente das in*orma)es contidas nesta &arteF nen?um dado a res&eito de como as rotinas s!o im&lementadas :
necess5rio. Ale recebe in*orma)es como os nomes das %ari5%eis declaradas no &acRage ou (uais os &arLmetros (ue em
uma determinada *un!o recebe.
'ORPO = 8acRage 2odQ >N
Cont:m a de*ini!o = c+digo> das &rocedures4 *un)es4 cursores e e,ce&tions declaradas na &arte anterior
= declara)es &Gblicas > e (ual(uer outro ob'eto necess5rio &ara o desen%ol%imento do=s> sub&rograma=s> = declara)es
&ri%adas >. 8ara o desen%ol%imento de sistemas esta &arte n!o : obrigat+ria4 ou se'a durante o &ro'eto caso n!o se ten?a
certea de como ser5 o *lu,o de um &rograma mas tem-se a id:ia de seu ob'eti%o4 &odemos re*erenci5-lo a&esar do
&rograma n!o estar com&leto. 1essa *orma : &oss-%el criar outros ob'etos = &rocedures4 *unctions4 blocos 8L#S9L4 etc>
(ue utiliam in*orma)es (ue ser!o codi*icadas &osteriormente.

Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
2P
'riando Pa,Iages
C0AATA = /0 0A8LACA > 8ACVA3A nome CS =AS>
declara)es de &rocedures
declara)es de *un)es
declara)es de %ari5%eis
declara)es de cursores
declara)es de e,ce&tions
AD1 nome
C0AATA = /0 0A8LACA> 8ACVA3A 2/1S nome CS =AS>
&rocedures
*un)es
%ari5%eis
cursores
e,ce&tions
AD1 nome
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
26
'riando Pa,Iages
E-em!lo1 = somente a &arte declarati%a> N
C0AATA /0 0A8LACA 8ACVA3A MADTAM
AS
Usu5rio Barc?ar2 =20>N Y USA0F
8rocedure &rocessamento = Ti&o Cn Barc?ar24
Te,to Cn audite.Te,toZTS8A>F
AD1 MADTAMF
E-em!lo+ = &acRage somente com in*orma)es declarati%as >N
C0AATA /0 0A8LACA 8ACVA3A em&resa
AS
Usu5rioBarc?ar=20>N Y USA0F
TQ&e 0ecem& Cs 0AC/01 =
C+digo em&.idZTS8A4
Dome em&.*irst^name.ZTS8A>F
0egem& 0ecem&F
TQ&e 0ecde&t Cs 0ecord =
C+digo de&t.idZTS8A4
Dome de&t.nameZTS8A4
regiao de&t.regiao^idZTS8A>F
0egde&t 0ecde&tF
AD1 em&resaF
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
2M
'riando Pa,Iages
E-em!lo; = 8acRage com&leta>N
C0AATA /0 0A8LACA 8ACVA3A MADTAM
AS
Usu5rio Barc?ar2=20>N Y USA0F
8rocedure &rocessamento= Ti&o Cn Barc?ar24
Te,to Cn audite.Te,toZTS8A>F
AD1 MADTAMF
C0AATA /0 0A8LACA 8ACVA3A 2/1S MADTAM
CS
80/CA1U0A &rocessamento = %ti&o Cn Barc?ar24 %te,to Cn Barc?ar2>
AS
2A3CD
Sa%e&oint Sa*e^AddF
Cnsert into audite Balues =%ti&o4 Usu5rio4
SQsdate4 %te,to>N
AECA8TC/D
U?en /t?ers T?en
0ollbacR to Sa*e^Add
And 8rocessamentoF
AD1 MADTAMF
O$&. 8odemos criar se&aradamente cada &arte de um &acRage.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
26
Re:eren,iando o*Aetos da Pa,Iage
No &2/3P/U&.
S9LX AEACUTA MADTAM.&rocessamento=TABCS/T4 T8acRageT>F
No P/3&2/
1ACLA0A
` declara!o de %ari5%eisa
2A3CD
`Cnstru)esa
Select \ Cnto regem&
@rom em&F
` Cnstru)esa
%ANTE%.!ro,essamento = TABCS/T4 Tem&regados /VT>F
AD1F
No &2/4OR%& 5 Dentro de um trigger ou Pro,edure6
C* N 2L/C/".CAM8/" Y TST T?en
%ANTE%.!ro,essamento=TABCS/T4 Tem&regados /V T>F
Alse
0/LL2ACVF
And C*F
$ene:=,ios da Pa,Iage
8acRages &ro&orcionam um con'unto de bene*-cios tanto durante o desen%ol%imento de sistemas como em sua
manuten!o e e,ecu!o.
DURANTE O DE&EN9O/9I%ENTO.
%odularidade.
Com&reendendo os relacionamentos l+gicos e,istentes em um determinado sistema4 &odemos
enca&sul5-los atra%:s de um &acRage. 1essa *orma cada &acRage : de *5cil com&reens!o4 as inter*aces s!o sim&les4
claras e bem de*inidas.
Inde!endEn,ia de 'om!ilao.
8ara com&ilar um &rograma (ue use o &acRage basta (ue a es&eci*ica!o do &acRage este'a criada.
'ontrole do '?digo e O*Aetos.
As&eci*icando (uais ob'etos s!o &Gblicos = %is-%eis e acess-%eis> e (uais s!o &ri%ados = de*inidos e
utiliados internamente >.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
27
$ene:=,ios da Pa,Iage
DURANTE A %ANUTENO.
4#,il manuteno.
Ao se alterar o cor&o de um &acRage4 di*erentemente das &rocedures e *unctions 4 n!o : necess5rio a
recom&ila!o dos ob'etos (ue *aem re*er[ncia a &arte do &acRage bodQ alterada. Mas uma altera!o no &acRage
s&eci*ication necessitar5 de uma recom&ila!o.
DURANTE A E0E'UO.
Per:orman,e.
9uando um &rograma de*inido em um &acRage : c?amado4 todo o &acRage : carregado &ara a
mem+ria4 necessitando de menos C#/ nos &r+,imos acessos.
'ontrole em uma sesso.
Cada sess!o aberta tem seu &r+&rio set de constantes4 cursores e %ari5%eis. Astas &ossuem %alores null
na &rimeira %e (ue um &acRage : re*erenciado. Ao t:rmino de uma sess!o os %alores s!o &erdidos e TstartadosT com
%alores null numa no%a sess!o aberta.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
I0
Es,o!o da Pa,Iage
PA'(A)E
PJ$/I'O
PRI9ADO
PJ$/I'O
9ual(uer ob'eto declarado no PA'(A)E &PE'I4I'ATION ser5 PJ$/I'O &ara (ual(uer ambiente (ue o
re:eren,ie.
9ual(uer ob'eto declarado &O%ENTE no PA'(A)E $ODK ser5 PRI9ADOL NO &odendo ser re:eren,iado &or
outros ambientes. 8or:m4 internamente4 esses ob'etos s!o &Gblicos.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
I"
DE'/ARAME&
9ari#8el AU0
Pro,edure teste1
Pro,edure teste+
4un,tion 41
'NDI)O DO PA'(A)E
Pro,edure teste;
4un,tion 4+
9ari#8el
Pro,edure teste1
Pro,edure teste+
4un,tion 41
Pa,Iage
&!e,i:i,ation
Pa,Iage
$odO
Pro,edures %ultiBDatatO!e
Am certas situa)es : interessante (ue uma determinada *un!o &ossa receber mais de um ti&o de dado. Deste
caso criarmos no &acRage %5rias *un)es com o mesmo nome4 cada uma aceitando um ti&o de dado di*erente. Do
momento da c?amada o /racle determinar5 (ual *un!o de%er5 ser acionada.
E-em!lo.
Programa P/3&2/ 5Teste.sPl6.
SAT SA0BA0/UT8UT /D
2A3CD
#\ 8rograma c?ama a mesma &rocedure &assando ti&os di*erentes
\#
Multi^TQ&e.Teste =TTi&o CA0ACTA0T4 TUT>F
Multi^TQ&e.Teste = TTi&o DUMA0CC/T4 $>F
Multi^TQ&e.Teste = TTi&o 1ATAT4 SSS1ATA>F
AD1F
Resultado da E-e,uo.
S9LX cTeste
CWA0YX 8" Y Ti&o CA0ACTA0 82YU
DUMYX 8" Y Ti&o DUMA0CC/ 82Y$
1ATAYX 8" Y Ti&o 1ATA 82Y"$#06#7$
8L#S9L &rocedure success*ullQ com&leted.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
I2
Pro,edures %ultiBDatatO!e
Pa,Iages &!e,i:i,ation.
C0AATA /0 0A8LACA 8ACVA3A Multi^TQ&e
is
80/CA1U0A Teste = S CD CWA04 g CD DUM2A0>F
80/CA1U0A Teste = S CD CWA04 g CD CWA0>F
80/CA1U0A Teste = S CD CWA04 g CD 1ATA>F
AD1 Multi^TQ&eF
#
Pa,Iage $odO
C0AATA /0 0A8LACA 8ACVA3A 2/1S Multi^TQ&e
is
80/CA1U0A Teste = S CD CWA04 g CD DUM2A0> is
2A3CD
12MS^/UT8UT.8UT^LCDA =TDUM YX Tbb
T8" Y Tbb Sbb
T82 Y Tbb T/^CWA0=g>>F
AD1F
80/CA1U0A Teste = S CD CWA04 g CD CWA0 > is
2A3CD
12MS^/UT8UT.8UT^LCDA = TCWA0 YXTbb
T8" Y Tbb Sbb
T82 Y Tbb g>F
AD1F
80/CA1U0A Teste = S CD CWA04 g CD 1ATA > is
2A3CD
12MS^/UT8UT.8UT^LCDA=T 1ATA YX Tbb
T8" Y Tbb Sbb
T82 Y Tbb T/^CWA0=g4 T 11#MM#SST>>F
AD1F
AD1 Multi^TQ&eF
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
II
Eliminando Pa,Iages
E-em!lo.
10/8 8ACVA3A mantemF
10/8 8ACVA3A 2/1S mantemF
O*s. / comando 10/8 8ACVA3A elimina tanto a es&eci*ica!o (uanto o cor&o do 8acRage.
'om!ilando
8ara com&ilar um 8acRage manualmente e,ecute os seguintes comandosN
Alter Pa,Iage nome do &acRage 'om!ile
Asse comando recom&ilar5 todo o &acRage.
Alter Pa,Iage nome do &acRage 'om!ile &!e,i:i,ation
Asse comando recom&ilar5 o 8acRage S&eci*ication
Alter Pa,Iage nome do &acRage 'om!ile $odO
Asse comando recom&ilar5 o 8acRage 2odQ.
E-er,=,ios
">Crie um &acRage AM8^D/MA com uma *un)es (ue retornem os nomes do em&regado associado ao C1 &assados
como &arLmetro .
A,em&loN AM8^D/MA=20> YX TC?adT.
2>Crie um &acRage (ue mani&ule a tabela AU1CTA4 Cm&lemente como a seguir *un)esN
a>Usr^Log.Cnclue=ti&o4te,to> YX Semel?ante ao &rocessamento.
b>Usr^Log.Lista" =ti&o> YX Lista todas as entradas como ti&o es&eci*icado.
c>Usr^Log.Lista2 =date> YX Lista todas as datas a &artir da data es&eci*icada.
d>Usr^Log.Alimina =date> YX A&aga todas as entradas mais %el?as (ue a data e ?ora es&eci*icadas.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
I$
Q. Data*ase Triggers
'riando Data*ase Triggers
E-em!lo.
C0AATA /0 0A8LACA T0C33A0 Log^Altera!o
2A@/0A 1ALATA /0 U81ATA /D em&
@/0 AACW 0/U
UWAD = N new.salarQ X 2P00>
2A3CD
&rocessamento =TALTA0Ade/T4 user4 sQsdate4 Talterado sal5rialT>F
AECA8TC/D
U?en /t?ers
0aise^a&&lication^error = - 200004 T Trigger @ailureT>F
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
IP
Ati8ao de Triggers
Triggers s!o ti&os es&eciais de stored &rocedures (ue s!o ati%ados automaticamente como e*eito de um
comando de 1ML em uma tabela. LogoN
No : &oss-%el c?amar e,&licitamente um trigger.
No : &oss-%el &assar &arLmetros &ara um triggers.
No : &oss-%el associar um trigger a (ual(uer ob'eto (ue n!o se'a uma tabela = e,N %iews4 sQnonQms etc..>
Um trigger &ode ser ati%ado &or (ual(uer um dos comandos de 1ML.
A,em&loN
C0AATA T0C33A0 tr^ins A@TA0 CDSA0T /D tab
C0AATA T0C33A0 tr^del A@TA0 1ALATA /D tab
C0AATA T0C33A0 tr^u&d A@TA0 U81ATA /D tab
/u &or (ual(uer con'unto de e%entos.
E-em!lo.
C0AATA T0C33A0 tr^all
A@TA0 CDSA0T /0 1ALATA /0 U81ATA /D tab
Al:m disso se o trigger es&eci*icar um U81ATA como e%ento : &oss-%el incluir uma lista de colunas o&cional no
comando.
E-em!lo.
C0AATA T0C33A0 tr^col
A@TA0 CDSA0T /0 U81ATA /@ codsocio4 nomsocio /D tab.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
I6
'l#usulas $E4ORE3A4TER
9uanto ao momento de e,ecu!o os triggers &odem ser dis&aradosN
$E4ORE e8ento . / trigger : e,ecutado a&+s a submiss!o do comando mas antes da sua e,ecu!o. /s dados s!o lidos
e &assados &ara o trigger e caso o trigger se'a bem sucedido eles s!o lidos no%amente &ara a e,ecu!o da o&era!o.
Caso o trigger *al?e4 a o&era!o : sus&ensa sem alterar o banco.
Sugest!oN trigger^u&^date
A4TER e8ento. / trigger : e,ecutado a&+s a e,ecu!o do comando mas antes da sua libera!o &ara o usu5rio. /s
dados s!o lidos &ara a e,ecu!o da o&era!o e &assados &ara o trigger. Assim a &er*ormance : um &ouco mel"or do (ue
na o&!o 2A@/0A. Caso o trigger *al?e4 a o&era!o : des*eita no banco.
Triggers de /in"a ou de 'omando
/s triggers &odem ser ati%ados uma Gnica %e &or comando ou a cada lin?a mani&ulada. / de*ault : a ati%a!o &or
comando sendo a ati%a!o &or lin?a de*inida &ela cl5usula 4OR EA'CROD.
E-em!lo.
Da tabelaN
'od@so,io Nom@so,io
" 8edro
"Aliane
2Celso
ICQnt?ia
$Aduardo
/ comandoN 1ALATA tab UWA0A cod^socio X 2F
Ati%aria a&enas uma %e o triggerN
C0AATA T0C33A0 tr^com
2A@/0A 1ALATA /D tab
2A3CD
` comandoa
AD1F
Mas ati%aria trEs %ees o triggerN
C0AATA T0C33A0 tr^com
2A@/0A 1ALATA /D tab
@/0 AACW 0/U
2A3CD
` comandoa
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
IM
&ePuEn,ia de A,ionamento
Um e%ento &ode ser associado a at: $ triggers (ue ser!o e,ecutados na seguinte ordemN
-$E4ORE &or comando
-$E4ORE &or lin?a
-A4TER &or lin?a
-A4TER &or comando
E-em!lo.
/ comandoN 1ALATA Loca!o UWA0A cod^socio Y "F
8oderia acionarN
$E4ORE !or ,omando BR
2A@/0A &or lin?a -X = &ara cada lin?a >
A@TA0 &or lin?a -X = 8ara cada lin?a >
A4TER !or ,omando BR
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
I6
A,essando 9alores de 'olunas
O &oss-%el &es(uisar dentro de um trigger de lin?a4 os %alores das colunas antes e de&ois da e,ecu!o do comando
ati%ador atra%:s de duas %ari5%eis de registro.
. old BR cont:m os %alores antes da altera!o
. neS BRcont:m os %alores de&ois da altera!o
Seguindo a seguinte tabelaN
E8ento .neS .old
U81ATA no%a lin?a lin?a %el?a
1ALATA DULL lin?a %el?a
CDSA0T no%a lin?a DULL
E-em!lo.
C0AATA T0C33A0 tr^e,&l
2A@/0A U81ATA /D em&
@/0 AACW 0/U
2A3CD
I: 5.neS.salarO 3 . old.salarO 6 R 1.TU T"en
&rocessamento=TA00/T4 TAumento maior (ue 60ZT>F
AD1 C*F
AD1F
Alterando 9alores de 'olunas
O &oss-%el os %alores de (ula(uer coluna4 de todas as lin?as a*etadas &elo e%ento ati%ador4 dentro de um trigger do ti&o
2A@/0A. 8ara isso basta alterar os %alores ligados a %ari5%el N new.
E-em!lo.
A%ento c?amadorN U81ATA em&regados
SAT salario Y "000F
TriggerN
C0AATA T0C33A0 Acerta^Salario
$E4ORE U81ATA /D em&
4OR EA'C ROD
2A3CD
# \ 3arante (ue n!o ?a%er5 aumentos de mais (ue 60Z \ #
. neS.salarO . Y MCD = N new.salarQ4 N old.salarQ \ ".6>F
C* Nnew.manager^id is null T?en
#\ Calcula a comiss!o da 8residencia \ #
. neS.,ommission@!,t N Y Nnew.salarQ \ Nold.commission^&ctF
END I:F
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
I7
'l#usula DCEN
/&cionalmente4 uma restri!o &ode ser inclu-da na de*ini!o do trigger es&eci*icando a cl5usula UWAD com
uma e,&ress!o booleana. Assa e,&ress!o : a%aliada cada %e (ue o trigger : acionado. Caso ela receba o %alor T0UA o
cor&o do trigger : e,ecutado normalmente4 entretanto caso o %alor da e,&ress!o se'a @ALSA ou DULL est!o o trigger
n!o e,ecutado.
9uando a cl5usula UWAD : es&eci*icada : obrigat+rio a inclus!o da cl5usula @/0 AACW 0/U. Csto :4 a
restri!o do UWAD s+ : %5lida &ara triggers de lin?a e : a%aliada indi%idualmente &ara cada lin?a a*etada &elo
comando dis&arador do trigger.
E-em!lo.
C0AATA T0C33A0 tr^e,&l
2A@/0A U81ATA /D em&
@/0 AACW 0/U
DCEN = = Nnew.salarQ # Nold.salarQ > X ".60 >
2A3CD
&rocessamento =TA00/T4 TAumento maior (ue 60ZT>F
AD1F
Des,o*rindo o E8ento '"amador
Se um trigger trata mais de um ti&o de e%ento4 : &oss-%el descobrir (ual *oi o e%ento c?amador testando certas
condi)es es&eciaisN
-IN&ERTIN)
-DE/ETIN)
-UPDATE ou UPDATIN) 5 Vnome da ,olunaV6
E-em!lo
C0AATA T0C33A0 tr^e,&l
2A@/0A 1ALATA
/0 U81ATA /@ cod^socio4 nom^socio
/D tab
@/0 AACW 0/U
2A3CD
C* DE/ETIN) T?en
s&^addlog= TABCS/T4 T1eletando o socio T bb to^c?ar=Nold4cod^socio>>F
AD1 C*F
C* UPDATIN) = TC/1^S/CC/T> T?en
s&^addlog= TABCS/T4 TAlterando o socio T bb to^c?ar= N new.cod^socio>>F
And C*F
C* UPDATIN) = TD/M^S/CC/T> T?en
s&^addlog= TABCS/T4 TAlterando o nome do socioTbb Nold.nom^sociobbT&ara TbbNnew.nom^socio>F
And C*F
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$0
Administrando Triggers B I
XX------ALTA0 T0C33A0------nome---------1CSA2LA--------------------------------
XX------ALTA0 T0C33A0------nome---------ADA2LA--------------------------------
XX------10/8 T0C33A0------nome-------------------------------------------------------
XX------ALTA0 TA2LA -------nome---------1CSA2LA ALL T0C33A0S----------
XX------ALTA0 TA2LA--------nome---------ADA2LA ALL T0C33A0S-----------
9uando um trigger : criado ele : automaticamente ?abilitado. Dormalmente a &e(uena &erda de &er*ormance
de%ido o acionamento do trigger : bem tolerada4 mas e,istem certas ati%idades em (ue seu *uncionamento n!o :
dese'5%el4 &or e,em&loN
1urante um Insert as &ele,t ou uma carga com I%P ou &2/W/oader em (ue o usu5rio ten?a certea de (ue
nen"um dado entrado na tabela 8iolar# (ual(uer restri!o de integridade testado &elo trigger.
1urante uma manuten!o no banco de dados em (ue o usu5rio ten?a a ,ertea de (ue o trigger :al"ar#L &ois a
integridade '5 est5 com&rometida.
1urante (ual(uer e%ento (ue dei,e ob'etos re*ernciados &elo trigger n!o dis&on-%eis. Csso &ode ocorre de%ido a
uma *al?a de rede = no caso de ob'etos remotos> ou a uma tables&ace colocada ;o**-line<.
8ara desabilitar tem&orariamente um trigger use o comando ALTA0 T0C33A0 com a o&!o 1CSA2LA. 8ara
reabilit5-lo use a o&!o ADA2LA. 8ara destruir um trigger use o comando 10/8 T0C33A0.
8ara desabilitar tem&orariamente todos os triggers associados a uma determinada tabela use o comando ALTA0
TA2LA com a o&!o 1CSA2LA ALL T0C33A0S. 8ara reabilit5-los4 use a o&!o ADA2LA ALL T0C33A0S. /
comando 10/8 TA2LA automaticamente destr+i todos os triggers associados a tabela destru-da.
E-em!lo.
ALTA0 T0C33A0 tr^e,&l 1CSA2LAF
ALTA0 T0C33A0 tr^e,&l ADA2LAF
10/8 T0C33A0 tr^e,&lF
ALTA0 TA2LA loca!o 1CSA2LA ALL T0C33A0F
ALTA0 TA2LA loca!o ADA2LA ALL T0C33A0F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$"
Triggers em 'as,ata
Um trigger ati%ado &or uma altera!o em uma tabela &ode4 e%entualmente4 *aer uma altera!o em outra tabela. Se esta
segunda tabela tamb:m &ossuir um trigger ele tamb:m ser5 dis&arado. 9uando isso acontece : dito (ue os dois triggers
est!o em cascata.
/ nGmero de triggers (ue &odem *icar em cascata : limitado &ela con*igura!o do /racle. Caso ocorram &roblemas4
&arLmetros como /8AD^CU0S/0S de%em ser alterados.
E-em!lo.
C0AATA T0C33A0 acerta^loca!o
2A@/0A CDSA0T /D item^loca!o
@/0 AACW 0/U
2A3CD
U&date lo,ao
Set %al^total Y %al^total J Nnew.%al^loca!o
U?ere num^loca!o Y Nnew.num^loca!oF
AD1F
C0AATA T0C33A0 loga^loca!o
2A@/0A U81ATA /D lo,ao
@/0 AACW 0/U
2A3CD
&rocessamento = TABCS/T4 TAlterando o %alor total da loca!oN T bb
to^c?ar = Nnew.num^loca!o>F
AD1F
E-er,=,ios
">Crie uma tabela com o seguinte comandoN
C0AATA TA2LA AM8L/3
= USUA0C/ BA0CWA02=20>4
/L1SALA0S DUM2A0="042>4
DAUSALA0S DUM2A0="042>4
1ATAALTA0ACA/ 1ATA>F
Crie uma trigger na tabela AM8 &ara (ue (ual(uer altera!o *eita na table AM8 no cam&o SALA0S se'5
registrada na tabela AM8L/34 o usu5rio (ue alterou4 o sal5rio antigo e o no%o e a data da altera!o.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$2
'omandos 9#lidos em um Trigger
O &oss-%el utiliar dentro do cor&o de um trigger os seguintes ti&os de comandoN
-9ual(uer comando ou estrutura do 8L#S9L 2.0
-SALACT = desde (ue SALACT CDT/ ou cursor >
-U81ATA4 1ALATA ou CDSA0T
No s!o &ermitidos os seguinte ti&os de comandoN
-9ual(uer comando de 11L = C0AATA4 10/84 etc...>
-0/LL2ACV4 C/MMCT ou SABA8/CDT
-9ual(uer &rocedure (ue conten?a um dos comandos acima
9uando ?ou%er uma condi!o em (ue e,ista a necessidade de e%itar o sucesso do comando c?amador sinalie uma
e,ce&tion com a &rocedure raise@a!!li,ation@error.
E-em!lo.
C0AATA T0C33A0 tr^e,&l
2A@/0A U81ATA /D em&
@/0 AACW 0/U
2A3CD
C* = Nnew.salarQ # Nold.salarQ > X ".60 T?en
Cnsert into em&log %alues =user4 Nold.salarQ4 Nnew.salarQ4sQsdate>F
raise@a!!li,ation@error = -200004 T Trigger@ailureT>F
And C*F
AD1F
Outras Restri<es
Do caso de um trigger de lin?a e,istem tr[s conceitos adicionais (ue de%em ser analisadosN
Ta*elas %utantes. Tabelas alteradas &elo e%ento c?amador ou alteradas atra%:s de uma o&!o CASCA1A de
uma restri!o de integridade re*erencial.
Ta*elas de Restrio. Tabelas (ue re*erenciam tabelas mutantes atra%:s de uma declara!o de restri!o de
integridade re*erencial.
Ta*elas Inde!endentesN Tabelas (ue n!o se relacionam a n-%el de integridade re*erencial a nen?uma tabela
a*etada &elo e%ento dis&arador.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$I
Outras Restri<es
Com rela!o a tabelas mutantes temos a seguinte regraN
No : &ermitido e,ecutar 4 no cor&o do trigger de lin?a4 (ual(uer comando de 1ML = SALACT4 CDSA0T4
1ALATA ou U81ATA> sobre as tabelas mutantes.
E-em!lo.
C0AATA T0C33A0 Arrol
A@TA0 1ALATA /D Titulo
@/0 AACW 0/U
1ACLA0A
Contador DumberF
2A3CD
#\ A00/ de%ido a acesso na tabela mutante @ita \#
U&date @ita
Set cod^titulo Y 0
U?ere cod^titulo Y Nold.cod^tituloF
#\ A00/ de%ido a acesso na tabela mutante Titulo \ #
Select count =\>
Cnto contador
@rom TituloF
AD1F
Com rela!o a tabela de restri!o temos a seguinte regraN
No : &ermitido e,ecutar4 no cor&o de trigger de lin?a4 um comando (ue altere uma coluna declarada em um
80CMA0S VAS4 @/0ACD3 ou UDC9UA de uma tabela de restri!o.
E-em!lo.
C0AATA T0C33A0 Arro2
A@TA0 1ALATA /D Titulo
@/0 AACW 0/U
2A3CD
# \ A00/ de%ido a altera!o da coluna @/0ACD3 VAS
cod^titulo na tabela de restri!o @ita \ #
C* U&dating = TC/1^TCTUL/T> T?en
U&date @ita \ #
set cod^titulo Y Nnew.cod^titulo
w?ere cod^titulo Y Nold.cod^tituloF
And C*F
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$$
Permiss<es e Triggers
1o &onto de %ista das &ermiss)es de acesso4 um trigger : e,ecutado tomando como re*er[ncia o criador do
trigger. Assim todos os ob'etos re*erenciados &elo trigger na sua de*ini!o de%er!o ser acess-%eis ao usu5rio criador do
trigger na :&oca de seu acionamento &or &arte de (ual(uer usu5rio. Se o criador do trigger &erder os acessos necess5rios
&ara sua e,ecu!o4 o trigger *al?ar5 mesmo (ue o usu5rio acionador ten?a esses acessos.
Do e,em&lo a seguir temos duas situa)esN
-/ usu5rio de desen%ol%imento cria um trigger (ue acessa uma tabela de log do sistema na (ual ele tem
&ermiss!o de escrita. Um usu5rio comum &ode inserir dados na tabela de *ita e conse(uentemente acionar o
trigger sem &roblemas.
- / usu5rio SQstem erradamente retira os &ri%il:gios de escrita do usu5rio de
desen%ol%imento e libera esses &ri%il:gios &ara o usu5rio comum. Deste
caso o trigger *al?a.
Permiss<es e Triggers
S9LX Connect SQstem#Manager
S9LX 3rant All /n E%P/O) To usu5rioF
S9LXConnect aluno"#aluno"F
S9LXC0AATA trigger add^log 2e*ore U&date /n AM8
2egin
Cnsert Cnto &K&TE%.E%P/O)
Balues =user4....4...>F
AndF
S9LX 3rant U&date /n em& To Usu5rioF
S9LX Connect Usu5rio#Usu5rio
S9LX U&date em& Set salarQ Y "P00 U?ere id Y "0F
S9LX 0em O Update tem sucesso e o log e gerado
S9LX Connect SQstem#Manager
S9LX 3rant All /n E%P/O) To Usu5rioF
S9LX 0e%oRe All /n E%P/O) @rom aluno"F
S9LXConnect Usu5rio#Uus5rio
S9LX U&date em& Set salarQ Y "P00 U?ere id Y "0F
S9LX 0em O Update Falha
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$P
E-em!los de Uso de Trigger
Da cria!o de logs o uso de triggers &ossibilita uma grande *le,ibilidade. Do e,em&lo abai,o o usu5rio :
*orado a registrar em uma %ari5%el do &acRage AU1CT c?amada M/TCB/4 (ual o moti%o da altera!o *eita.
E-em!lo.
C0AATA T0C33A0 gra%a^log
2A@/0A 1ALATA /D em&
Au, DumberF
2A3CD
C* Audit.Moti%o is Dull T?en
0aise^A&lication^Arror= - 200004 TTrigger @ailureT>F
Alse
&rocessamento= TABCS/T4 SocioTbb
To^C?ar=cod^socio> bb TdeletadoT>F
&rocessamento=TM/TCB/T4 Audit.Moti%o>F
And C*
AD1F
----------------------------------------------------------
O &oss-%el mel?orar a segurana de maneira n!o &ro%ida &elos recursos normais do /racle.
E-em!lo.
C0AATA T0C33A0 im&ro%e^sec
2A@/0A CDSA0T /0 1ALATA /0 U81ATA /D em&
Au, DumberF
2A3CD
Au, N Y To^Dumber= SQsdate4 TWW2$T>
C* au, Dot 2etween 7 And "6 T?en
&rocessamento= TABCS/T4 Tentati%a de acesso as T
bb To^C?ar=au,> bbT?orasT>
0aise^A&lication^Arror=-20004 TTrigger @ailureT>F
And C*F
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$6
E-em!los de Uso de Trigger
O @re(uentemente Gtil criar de*aults %ari5%eis &ara cam&os o&cionais. Do e,em&lo abai,o a *ita s+ : inclu-da
como ati%a durante a &rimeira semana do m[s.
E-em!lo.
C0AATA T0C33A0 seta^de*aults
2A@/0A CDSA0T /D *ita
@/U AACW 0/U
2A3CD
C*Nnew.ind^ati%a is Dull
And To^Dumbers=SQsdate4 T11T>] Y M T?en
Nnew.ind^ati%a N Y TSTF
Alse
Nnew.ind^ati%a N Y TDTF
And C*F
C*Nnew.ind^locada is Dull T?en
Nnew.ind^locada N Y TDTF
And C*F
AD1F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$M
Administrando Triggers X II
Assim como no caso de Stored 8rocedures : &oss-%el &es(uisar in*orma)es
sobre um trigger criado &elo usu5rio no dicion5rio de dados. Csto : *eito atra%:s
de (ueries nas %iew USA0^T0C33A0S e USA0^T0C33A0^C/LS.
A User^Triggers mostraN
Trigger@Name Dome do Trigger
Trigger@TO!e Ti&o= 2e*ore#A*ter & Comando#Lin?a>
Triggering@E8ent A%entos 1is&aradores
=CDSA0T#1ALATA#U81ATA>
Ta*le@Name 1ono da tabela associada ao trigger
Re:eren,ing@names Domes atuais das %ari5%eis new e old
Ta*le@Name Dome da tabela associada ao trigger
D"en 'lause Condi!o es&eci*icada no U?en
&tatus Cndica se o trigger est5 ?abilitado ou n!o
Des,ri!tion Te,to com o cabeal?o do trigger
Trigger@$odO Te,to com o cor&o do trigger
E-em!lo.
8ara gerar um ar(ui%o com o comando de cria!o do trigger 3era^LogN
S9LX S&ool cria^trg
S9LX SelectTC0AATA T0C33A0T4 descri&tion4 trigger^bodQ
@rom User^Triggers
U?ere Trigger^Dame Y T3A0A^L/3TF
S9LX S&ool /**
O*s. Assim como nos &acRages e stored &rocedures4 : aconsel?5%el guardar os scri&ts S9L de cria!o dos triggers.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$6
Administrando Triggers X II
A User^trigger^Cols armaena in*orma)es sobre o uso de colunas no trigger. A
User^Trigger^Cols mostraN
Trigger@OSner 1ono do Trigger=geralmente igual a Table^/wner>
Ta*le@Name Dome do Trigger
Ta*le@OSner 1ono da tabela associada ao trigger
Ta*le@Name Dome da tabela associada ao trigger
'olumn@/ist Cndica se a coluna a&arece na cl5usula
U&date=S#D>
'olumn@Usage Cndica o ti&o de uso
E-em!lo.
C0AATA T0C33A0 Teste
2A@/0A U81ATA /@ ind^ati%a /D @ita @/0 AACW 0/U
2A3CD
C*Nold.ind^ati%a Y TST And Nnew.ind^ati%a Y TDT
And Nold.ind^locada Y TST
Nnew.ind^ati%a N Y T8TF
And C*F
AD1F
TeremosN
'olumn@Name'olumn@/ist 'olumn@Usage
Cnd^Ati%a SAS DAU CD /UT /L1 CD
Cnd^Locada D/ /L1 CD
Cndicando (ue Cnd^Ati%a *oi declarada na lista do e%ento U&date e (ue seu %alor DAU *oi usado &ara ler e alterar o
%alor do cam&o e seu %alor /L1 *oi usado &ara leitura. A coluna Cnd^Locada tem seu %alor /L1 lido &elo trigger.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
$7
E-er,=,ios
" > Crie um con'unto de triggers (ue controle o&era)es de 1ML nesta tabela4 seguindo as seguintes regras de neg+cioN
a>1e%ido ao e,cesso de demiss!o de *uncion5rios4 a e,clus!o do banco s+ &ode ocorrer nas Se,ta *eiras..
b>Todas as o&era)es de Cnsert4 1elete ou U&date na tabela de AM8 de%em ser registradas em uma tabela de
log.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
P0
9ari#8eis do Ti!o 'ursor
A %ers!o 2.I do 8L#S9L4 dis&on-%el a &artir do /racle Ser%er Bers!o M.I4 &ermite (ue se crie e utilie %ari5%eis
do ti&o cursor. 1a mesma *orma (ue o cursor con%encional4 a %ari5%el do ti&o cursor a&onta &ara a lin?a corrente no
con'unto de resultados de uma consulta (ue retorne mGlti&las lin?as4 mas ao contr5rio do cursor est5tico4 (ue est5
%inculado H uma Gnica consulta4 as %ari5%eis cursor &odem ser associadas a %5rias consultas4 at: mesmo dentro de um
mesmo &rograma. Bari5%eis do ti&o cursor s!o %erdadeiras %ari5%eis 8L#S9L4 %oc[ &ode associar no%os %alores a ela e
&assa-la como argumento a sub&rogramas.
Uma %ari5%el do ti&o cursor : como um &onteiro nas linguagens C e 8ascal4 ela guarda a &osi!o na mem+ria
=endereo> de um ob'eto ao in%:s de guardar o &r+&rio ob'eto. 8ortanto (uando %oc[ declara uma %ari5%el do ti&o cursor
%oc[ est5 criando um &onteiro e n!o um ob'eto.
/ &rinci&al bene*-cio da %ari5%el do ti&o cursor : (ue ela &ro%[ um mecanismo &ara se &assar resultados de consultas
entre di*erentes &rogramas 8L#S9L4 ou ainda entre &rograma 8L#S9L cliente e &rograma ser%idor. Am um ambiente
cliente#ser%idor4 &or e,em&lo4 um &rograma do lado cliente &oderia abrir a %ari5%el do ti&o cursor e comear a e,trair
seus dados4 e ent!o &assar essa %ari5%el como argumento a uma &rocedure armaenada no ser%idor. Aste &rograma
&oderia ent!o continuar a e,trair seus dados e &assar a %ari5%el de %olta ao cliente &ara (ue este *ec?e o cursor.

Caracter-sticas das %ari5%eis cursor
As %ari5%eis do ti&o cursor &ermitem (ue %oc[N
Associe uma %ari5%el do ti&o cursor com di*erentes consultas em tem&os di*erentes durante a e,ecu!o de seu
&rograma. Uma %ari5%el do ti&o cursor &ode ser usada &ara e,trair dados de di*erentes con'untos de resultados.
8asse uma %ari5%el do ti&o cursor como argumento a um &rocedimento ou *un!o. Boc[ &ode com&artil?ar o resultado
de uma consulta com outros &rocedimentos.
Am&regue toda a *uncionalidade de cursores est5ticos. Boc[ &ode utiliar as declara)es /8AD4 @ATCW e CL/SA e
re*erenciar os atributos ZCS/8AD4 Z@/UD14 ZD/T@/UD1 e Z0/UC/UDT em %ari5%eis do ti&o cursor.
Associar o conteGdo de uma %ari5%el do ti&o cursor =inclusi%e seu con'unto de resultados> a outra %ari5%el do ti&o
cursor.

Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
P"
1eclarando o ti&o 0A@ CU0S/0 e a %ari5%el do ti&o cursor
A cria!o de %ari5%eis do ti&o cursor : *eita em duas eta&asN &rimeiro %oc[ de*ine um ti&o 0A@ CU0S/0 e ent!o
declara a %ari5%el como sendo da(uele ti&o.
A sinta,e &ara se criar um ti&o de re*er[ncia a cursor : a seguinteN
TS8A nome^ti&o^cursor CS 0A@ CU0S/0 h0ATU0D ti&o^retornadoiF
/nde nome^ti&o^cursor : o nome do ti&o e ti&o^retornado : a es&eci*ica!o do dado retornado &elo ti&o cursor. /
ti&o^retornado &ode ser (ual(uer estrutura %5lida &ara uma clausula 0ATU0D de um cursor normal4 de*inida usando o
atributo Z0/UTS8A ou re*erenciando um registro =record> &re%iamente de*inido.
A clausula 0ATU0D : o&cional4 e (uando usada4 o ti&o : dito j*ortej &ois *ica atado a um ti&o record4 ou ti&o row.
9ual(uer %ari5%el do ti&o cursor declarada de um ti&o j*ortej &ode a&enas ser utiliada com declara)es S9L (ue
retornem dados do mesmo ti&o da declara!o usada na clausula 0ATU0D.
8or outro lado4 o ti&o cursor (ue n!o &ossui a clausula 0ATU0D : dito j*racoj e &ode ser utiliado de *ormas muito
mais *le,-%eis4 isto :4 &ode ser utiliado com consultas (ue retornem (ual(uer estrutura de dados.
Uma %e declarado o ti&o 0A@ CU0S/0 %oc[ &ode declarar a %ari5%el da(uele ti&o4 como mostrado no seguinte
e,em&loN
1ACLA0A
-- Criando o ti&o
TS8A 1e&tCurTQ& CS 0A@ CU0S/0 0ATU0D de&tZ0/UTS8AF
-- Criando a %ari5%el
de&t^c% 1e&tCurTQ&F
2A3CD
...
AD1F
O im&ortante lembrar (ue a declara!o de uma %ari5%el do ti&o cursor n!o cria um ob'eto cursor. 8ara (ue isto ocorra :
necess5rio usar a sinta,e /8AD @/04 (ue cria um no%o ob'eto cursor e o associa H %ari5%el.
/utra obser%a!o im&ortante : (ue %ari5%eis cursor n!o &ossuem &ersist[ncia de estado &or serem a&enas &onteiros4 n!o
&odendo &ortanto serem re*erenciadas a&+s o *im da e,ecu!o do &rocedimento (ue abriu o cursor.
Abrindo uma %ari5%el do ti&o cursor =/8AD - @/0>
A declara!o /8AD - @/0 associa o cursor com uma consulta (ue retorne mGlti&las lin?as4 e,ecuta a consulta e
identi*ica o con'unto de res&ostas. A sinta,e &ara a declara!o :N
/8AD `nome^%ari5%el^cursor b N%ari5%el^cursor^de^ambientea @/0 declara!o^s(lF
onde %ari5%el^cursor^de^ambiente : uma %ari5%el declarada em um ambiente 8L#S9L como o S9L\8lus ou &rograma
8ro\C4 e declara!o^s(l : (ual(uer declara!o SALACT (ue n!o &ossua a clausula @/0 U81ATA.
/utras declara)es /8AD - @/0 &odem abrir a mesma %ari5%el do ti&o cursor &ara di*erentes consultas4 n!o sendo
necess5rio &ara isto *ec?a-lo antes.
A,traindo dados da %ari5%el do ti&o cursor =@ATCW>
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
P2
Assim como com cursores est5ticos4 &ara se obter o resultado da consulta : utiliada a declara!o @ATCW (ue e,trai as
lin?as uma a uma da %ari5%el do ti&o cursor4 e &ossui a seguinte sinta,eN
@ATCW `nome^%ari5%el^cursor b N%ari5%el^cursor^de^ambientea CDT/ registroF
@ATCW `nome^%ari5%el^cursor b N%ari5%el^cursor^de^ambientea CDT/ %ari5%el" h4%ari5%el2 ...iF
9uando a %ari5%el do ti&o cursor *oi declarada como sendo de um ti&o j*ortej4 o com&ilador 8L#S9L %eri*ica se a
estrutura dos dados a&+s a clausula CDT/ s!o com&at-%eis com a estrutura da consulta associada H %ari5%el do ti&o
cursor4 %eri*ica tamb:m se o nGmero de %ari5%eis : corres&ondente ao nGmero de colunas retornadas &ela consulta. Caso
contr5rio ser5 gerado um erro.
/ erro ir5 ocorrer em tem&o de com&ila!o se a %ari5%el *or de um ti&o j*ortej e em tem&o de e,ecu!o se a %ari5%el *or
de um ti&o j*racoj. Am tem&o de e,ecu!o4 a 8L#S9L e%oca a e,ce&tion 0/UTS8A^MCSMATCW.
@ec?ando uma %ari5%el do ti&o cursor =CL/SA>
A declara!o CL/SA desabilita a %ari5%el do ti&o cursor. 1e&ois disto o con'unto de resultados associado : inde*inido.
A sinta,e : a seguinteN
CL/SA `nome^%ari5%el^cursor b N%ari5%el^cursor^de^ambienteaF
--------------------------------------------------------------------------------
A,em&los de %ari5%eis cursor

A,em&lo "
Aste e,em&lo cria uma &acRage c?amada L/_A com a &rocedure 80/1UT/ (ue retorna os dados re*erentes ao
&roduto &assado como argumento. Asta &rocedure utilia uma %ari5%el do ti&o cursor &ara *aer a consulta de&endendo
do ti&o do &roduto4 se o &roduto *or um li%ro =c+digo "> o cursor ser5 associado a uma consulta H tabela LCB0/S4 caso
o &roduto se'a um disco =c+digo 2> o cursor ser5 associado a uma consulta H tabela 1CSC/S.
-- YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
-- 8ACVA3A AS8ACC@CCATC/D
-- YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
C0AATA /0 0A8LACA 8ACVA3A L/_A CS
80/CA1U0A 80/1UT/=t-tulo^in CD BA0CWA02>F
AD1 L/_AF
#
-- YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
-- 8ACVA3A 2/1S
-- YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
C0AATA /0 0A8LACA 8ACVA3A 2/1S L/_A CS
@UDCTC/D 9UAL^C/1C3/=t-tulo^in CD BA0CWA02> 0ATU0D DUM2A0 CS
c+digo^&roduto DUM2A0F
2A3CD
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
PI
SALACT codigo CDT/ c+digo^&roduto
@0/M TCTUL/S
UWA0A TCTUL/ Y t-tulo^inF
0ATU0D c+digo^&rodutoF
AECA8TC/D
UWAD D/^1ATA^@/UD1 TWAD
0ATU0D DULLF
AD1 9UAL^C/1C3/F
80/CA1U0A 80/1UT/=t-tulo^in CD BA0CWA02> CS
TS8A ti&o^cursor CS 0A@ CU0S/0F -- Ti&o cursor =um ti&o j*racoj>
%ar^cursor ti&o^cursorF -- A %ari5%el cursor
c+digo^&roduto DUM2A0F
li%ros^rec LCB0/SZ0/UTS8AF -- Um record
discos^rec 1CSC/SZ0/UTS8AF -- Um record
2A3CD
c+digo^&roduto NY 9UAL^C/1C3/=t-tulo^in>F
C@ c+digo^&roduto CS DULL TWAD
12MS^/UT8UT.8UT^LCDA=T8roduto n!o cadastrado.T>F
ALSA
C@ c+digo^&roduto Y " TWAD
/8AD %ar^cursor @/0 SALACT \ @0/M LCB0/S UWA0A TCTUL/ Y t-tulo^inF
@ATCW %ar^cursor CDT/ li%ros^recF
12MS^/UT8UT.8UT^LCDA=TTkTUL/ N Tbbli%ros^rec.titulo>F
12MS^/UT8UT.8UT^LCDA=TA1CT/0A N Tbbli%ros^rec.editora>F
12MS^/UT8UT.8UT^LCDA=T80Ad/ N Tbbli%ros^rec.&reo>F
ALSA
/8AD %ar^cursor @/0 SALACT \ @0/M 1CSC/S UWA0A TCTUL/ Y t-tulo^inF
@ATCW %ar^cursor CDT/ discos^recF
12MS^/UT8UT.8UT^LCDA=TTkTUL/ N Tbbdiscos^rec.titulo>F
12MS^/UT8UT.8UT^LCDA=T80Ad/ N Tbbdiscos^rec.&reo>F
AD1 C@F
CL/SA %ar^cursorF
AD1 C@F
AD1 80/1UT/F
AD1 L/_AF
#
A &acRage &ode ser criada4 su&ondo-se (ue o c+digo este'a no ar(ui%o L/_A.S9L e (ue o ambiente utiliando se'a o
S9L\8lus4 da seguinte *ormaN
S9LX cL/_A.S9L
A sua utilia!o : da *ormaN
S9LX AEACUTA L/_A.80/1UT/=T/0ACLA 8L#S9L 80/30AMMCD3T>F
(ue retornariaN
TkTUL/ N /0ACLA 8L#S9L 80/30AMMCD3
A1CT/0A N /T0ACLLS & ASS/CCATAS4 CDC.
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
P$
80Ad/ N "2
8L#S9L &rocedure success*ullQ com&leted.
--------------------------------------------------------------------------------
A,em&lo 2
Uma outra *orma de utilia!o de %ari5%eis do ti&o cursor : mostrada neste segundo e,em&lo. O criada uma &acRage
com declara)es de ti&os &ara %ari5%eis cursor e &rocedimentos &ara abrir o cursor e &ara e,trair seus dados.
--YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
-- 8ACVA3A AS8ACC@CCATC/D
--YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
C0AATA /0 0A8LACA 8ACVA3A em&^data AS
TS8A em&^%al^c%^tQ&e CS 0A@ CU0S/0 0ATU0D em&Z0/UTS8AF
80/CA1U0A o&en^em&^c% =em&^c% CD /UT em&^%al^c%^tQ&e4de&t^number CD CDTA3A0>F
80/CA1U0A *etc?^em&^data =em&^c% CD em&^%al^c%^tQ&e4 em&^row /UT em&Z0/UTS8A>F
AD1 em&^dataF
#
--YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
-- 8ACVA3A 2/1S
--YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
C0AATA /0 0A8LACA 8ACVA3A 2/1S em&^data AS
--YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
80/CA1U0A o&en^em&^c% =em&^c% CD /UT em&^%al^c%^tQ&e4 de&t^number CD CDTA3A0> CS
2A3CD
/8AD em&^c% @/0 SALACT \ @0/M em& UWA0A de&tno Y de&t^numberF
AD1 o&en^em&^c%F
--YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
80/CA1U0A *etc?^em&^data =em&^c% CD em&^%al^c%^tQ&e4 em&^row /UT em&Z0/UTS8A> CS
2A3CD
@ATCW em&^c% CDT/ em&^rowF
AD1 *etc?^em&^dataF
AD1 em&^dataF
#
Agora um bloco 8L#S9L (ue utilia as &rocedures da &acRage &ara realiar consultas.
1ACLA0A
-- 1eclara uma %ari5%el cursor do ti&o de*inido na &acRage
em&^curs em&^data.em&^%al^c%^tQ&eF
de&t^number de&t.de&tnoZTS8AF
em&^row em&Z0/UTS8AF
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
PP
2A3CD
de&t^number NY 20F
-- jAbrej o cursor usando uma %ari5%el
em&^data.o&en^em&^c%=em&^curs4 de&t^number>F
-- A,trai os dados e os e,ibe
L//8
em&^data.*etc?^em&^data=em&^curs4 em&^row>F
AECT UWAD em&^cursZD/T@/UD1F
12MS^/UT8UT.8UT=em&^row.ename bb T T>F
12MS^/UT8UT.8UT^LCDA=em&^row.sal>F
AD1 L//8F
AD1F
#
Asta *orma de im&lementa!o &ermite a reutilia!o do c+digo da &acRage em %5rios outros blocos e &rocedures sem a
necessidade de se saber como est5 de*inida a consulta. 1esta *orma4 se ?ou%er a necessidade de se alterar4 &or e,em&lo4
a clausula UWA0A da consulta associada ao cursor4 a&enas o c+digo da &acRage necessita ser alterado4 os blocos e
&rocedures (ue utiliarem esta &acRage n!o &recisam so*rer altera!o.
A,em&loI
/ e,em&lo seguinte mostra a &assagem de %ari5%eis do ti&o cursor como &arLmetro H &rocedures. O criada uma
&acRage4 contendo a&enas os ti&os cursores4 e duas &rocedures. A &rimeira &rocedure recebe como &arLmetro uma
%ari5%el do ti&o cursor e a (uantidade de lin?as a serem e,traidas e e,ibe o nome do *uncion5rio e seu sal5rio4 a segunda
&rocedure (ue aceita os mesmos &arLmetros da &rimeira e,ibe o nome4 a *un!o e o sal5rio.
C0AATA /0 0A8LACA 8ACVA3A TC8/S AS
TS8A em&^ti&o^cur CS 0A@ CU0S/0 0ATU0D AM8Z0/UTS8AF
TS8A de&t^ti&o^cur CS 0A@ CU0S/0 0ATU0D 1A8TZ0/UTS8AF
AD1 TC8/SF
#
C0AATA /0 0A8LACA 80/CA1U0A AEC2A^SALA0C/ =em&^%cursor^in CD ti&os.em&^ti&o^cur4
(uant^in CD DUM2A0> CS
em&^rec AM8Z0/UTS8AF
2A3CD
@/0 indice CD " .. (uant^in L//8
@ATCW em&^%cursor^in CDT/ em&^recF
AECT UWAD em&^%cursor^inZD/T@/UD1F
12MS^/UT8UT.8UT^LCDA=em&^rec.enamebbT Tbbem&^rec.sal>F
AD1 L//8F
AD1 AEC2A^SALA0C/F
#
C0AATA /0 0A8LACA 80/CA1U0A AEC2A^C/M8LAT/=em&^%cursor^in CD ti&os.em&^ti&o^cur4
(uant^in CD DUM2A0> CS
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
P6
em&^rec AM8Z0/UTS8AF
2A3CD
@/0 indice CD " .. (uant^in L//8
@ATCW em&^%cursor^in CDT/ em&^recF
AECT UWAD em&^%cursor^inZD/T@/UD1F
12MS^/UT8UT.8UT^LCDA=em&^rec.enamebbT Tbbem&^rec.'obbbT Tbbem&^rec.sal>F
AD1 L//8F
AD1 AEC2A^C/M8LAT/F
#
1e&ois de criadas a &acRage e as &rocedures =usando cnome^ar(ui%o> o e,em&lo &ode ser testado com o seguinte
bloco 8L#S9LN
1ACLA0A
em&^cursor ti&os.em&^ti&o^curF
2A3CD
/8AD em&^cursor @/0 SALACT \ @0/M AM8 /01A0 2S SAL 1ASCF
AEC2A^SALA0C/=em&^cursor4$>F
AEC2A^C/M8LAT/=em&^cursor4P>F
CL/SA em&^cursorF
AD1F
9uando a segunda &rocedure comea a e,trair os dados4 ela comea a &artir do &onto onde a &rimeira &rocedure &arou.
/ mesmo aconteceria com (ual(uer &rocedure se o bloco 8L#S9L '5 ti%esse e,tra-do algum dado antes de c?ama-la.
Pa,Iage UT/@4I/E

A &acRage UTL^@CLA &ermite (ue &rogramas 8L#S9L acessem ar(ui%os do sistema o&eracional &ara leitura e escrita.
A &acRage &ode ser utiliada tanto em &rogramas armaenados no banco de dados (uanto em a&lica)es do lado cliente4
tais como as escritas com o /racle @orms. 1esta *orma : &oss-%el interagir com os ar(ui%os da esta!o de trabal?o e ao
mesmo tem&o com os ar(ui%os do disco do ser%idor.
A &acRage UTL^@CLA est5 dis&on-%el com o 8L#S9L a &artir da %ers!o 2.I
/ Ti&o @CLA^TS8A
9uando %oc[ abre um ar(ui%o4 o 8L#S9L retorna um ?andle (ue ser5 utiliado em seu &rograma. Aste ?andle : do ti&o
@CLA^TS8A.
@CLA^TS8A : um registro 8L#S9L cu'os cam&os &ossuem todas as in*orma)es necess5rias ao UTL^@CLA4 tais como o
nome do ar(ui%o4 sua localia!o e o modo &ara o (ual ele *oi aberto.
Uma declara!o de um ?andle : da seguinte *ormaN
1ACLA0A
*ile^?andle UTL^@CLA.@CLA^TS8AF
2A3CD
...
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
PM
/ acesso as ar(ui%os do sistema : restrito a a(ueles situados em diret+rios es&ec-*icos. Uma lista de diret+rios
acess-%eis est5 armaenada na *orma de um &arLmetro do ar(ui%o init.ora / acesso n!o : recursi%o aos subdiret+rios.

A 8rocedure @CL/SA
@CL/SA : usada &ara *ec?ar um ar(ui%o aberto4 sua es&eci*ica!o :N
80/CA1U0A @CL/SA=@CLA^CD CD UTL^@CLA.@CLA^TS8A>F
A 8rocedure @CL/SA^ALL
Asta &rocedure *ec?a todos os ar(ui%os abertos. A es&eci*ica!o &ara ela :N
80/CA1U0A @CL/SA^ALLF
A &rocedure @CL/SA^ALL ser5 Gtil (uando %oc[ ti%er aberto %5rios ar(ui%os e dese'ar ter certea de (ue todos *oram
*ec?ados antes de terminar o &rograma.
/utra utilia!o da &rocedure @CL/SA^ALL : no tratamento de e,ce&tions4 garantindo (ue os ar(ui%os se'am *ec?ados
mesmo (ue o &rograma termine de uma *orma irregular.
A 8rocedure @@LUSW
A &rocedure @@LUSW re&assa o conteGdo do bu**er UTL^@CLA &ara o ar(ui%o es&eci*icado. Aste &rocedimento garante
(ue todas as in*orma)es do bu**er se'am escritas no ar(ui%o antes (ue se *aa uma leitura. Sua es&eci*ica!o :N
80/CA1U0A @@LUSW =@CLA^CD CD UTL^@CLA.@CLA^TS8A>F
A @un!o @/8AD
A *un!o @/8AD abre o ar(ui%o es&eci*icado e retorna um ?andle (ue de%e ser utiliado &ara mani&ular o ar(ui%o. A
es&eci*ica!o &ara a *un!o :N
@UDCTC/D @/8AD
=L/CATC/D CD BA0CWA024
@CLA^DAMA CD BA0CWA024
@CLA^M/1A CD BA0CWA02>
0ATU0D UTL^@CLA.@CLA^TS8AF
/ &arLmetro jL/CATC/Dj : uma string (ue es&eci*ica o diret+rio onde se encontra o ar(ui%o.
- 8ara o 1/S # UindowsN
TCNlC/MM/Dl1A2U3T
- 8ara o Uni,N
T#usr#adminT
/ &arLmetro j@CLA^DAMAj es&eci*ica o nome do ar(ui%o a ser aberto
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
P6
/ &arLmetro j@CLA^M/1Aj4 (ue es&eci*ica o modo de abertura do ar(ui%o4 &ode ser um dos tr[s seguintesN
0 - Abre o ar(ui%o somente &ara leituraF
U - Abre o ar(ui%o &ara leitura e sobrescri!o4 neste modo todas as lin?as s!o remo%idasF
A - Abre um ar(ui%o &ara leitura e adi!o. As no%as lin?as s!o adicionadas no *inal ao ar(ui%o.
A 8rocedure 3AT^LCDA
Asta &rocedure l[ uma lin?a de dados do ar(ui%o es&eci*icado. /s dados lidos s!o armaenados na %ari5%el *ornecida
como &arLmetro. A es&eci*ica!o &ara a &rocedure :N
80/CA1U0A 3AT^LCDA
=@CLA^CD CD UTL^@CLA.@CLA^TS8A4
LCDA /UT BA0CWA02>F
/ &arLmetro jLCDAj de%e ser grande o su*iciente &ara receber todos os dados at: o &rimeiro sinal de retorno de carro
=carriage return>ou de *im de ar(ui%o4 caso contr5rio ser5 gerada a e,ce&tion jBALUA^A00/0j.
Se a &rocedure tentar ler de&ois do *im do ar(ui%o ser5 gerada a e,ce&tion jD/^1ATA^@/UD1j.
A @un!o CS^/8AD
A *un!o CS^/8AD retorna T0UA se o ar(ui%o es&eci*icado esti%er aberto e @ALSA caso contr5rio. Sua es&eci*ica!o
:N
@UDCTC/D CS^/8AD =@CLA^CD CD UTL^@CLA.@CLA^TS8A>
0ATU0D 2//LAADF
8rocedure DAU^LCDA
Asta &rocedure insere um ou mais caracteres de no%a lin?a no ar(ui%o es&eci*icado4 sua es&eci*ica!o :N
80/CA1U0A DAU^LCDA =@CLA^CD CD UTL^@CLA.@CLA^TS8A4
DUM^LCDAS CD 8LS.CDTA3A0 NY ">F
onde jDUM^LCDASj : o nGmero de lin?as a serem inseridas no ar(ui%o4 seu %alor de*ault : um.
A 8rocedure 8UT
A &rocedure 8UT coloca dados no ar(ui%o es&eci*icado. Sua es&eci*ica!o :N
80/CA1U0A 8UT =@CLA^CD CD UTL^@CLA.@CLA^TS8A4
CTAM^CD CD BA0CWA02>F
80/CA1U0A 8UT =@CLA^CD CD UTL^@CLA.@CLA^TS8A4
CTAM^CD CD 1ATA>F
80/CA1U0A 8UT =@CLA^CD CD UTL^@CLA.@CLA^TS8A4
CTAM^CD CD DUM2A0>F
80/CA1U0A 8UT =@CLA^CD CD UTL^@CLA.@CLA^TS8A4
CTAM^CD CD 8LS^CDTA3A0>F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
P7
A &rocedure 8UT adiciona os dados H lin?a corrente do bu**er UTL^@CLA. Boc[ de%e utiliar a &rocedure DAU^LCDA
&ara *orar (ue os dados se'am escritos na &r+,ima lin?a.
A 8rocedure 8UT@
A &rocedure 8UT@ coloca dados no ar(ui%o es&eci*icado4 mas ela usa um *ormato &ara os dados &ara inter&retar os
di*erentes elementos a serem escritos &ara o ar(ui%o. Boc[ &ode &assar at: cinco elementos di*erentes &ara a &rocedure
8UT@. Sua es&eci*ica!o :N
80/CA1U0A 8UT@ =@CLA^CD CD UTL^@CLA.@CLA^TS8A4
@/0MAT^CD CD BA0CWA024
CTAM"^CD CD BA0CWA02
h4 CTAM2^CD CD BA0CWA02 ... CTAMP^CD CD BA0CWA02i
>F
onde @/0MAT^CD : uma string (ue es&eci*ica o *ormato dos itens no ar(ui%o. Al:m de te,to4 o &arLmetro
@/0MAT^CD &ode &ossuir os seguintes modelosN
Zs - coloca o item corres&ondente no ar(ui%o. Boc[ &ode utiliar at: P modelos Zs na string de *ormata!o.
ln - coloca um caracter de no%a lin?a no ar(ui%o. D!o ?5 limites &ara o uso deste modelo na string de *ormata!o.
A &rocedure aceita a&enas itens do ti&o BA0CWA024 se %oc[ dese'ar utiliar ti&os di*erentes ser5 necess5rio utiliar a
&rocedure T/^CWA0 &ara con%erte-los antes.
A 8rocedure 8UT^LCDA
Asta &rocedure escre%e dados &ara um ar(ui%o e adiciona imediatamente ao *inal dos dados um caracter de no%a lin?a.
Sua es&eci*ica!o :N
80/CA1U0A 8UT^LCDA =@CLA^CD CD UTL^@CLA.@CLA^TS8A4
CTAM^CD CD BA0CWA02>F
A &rocedure 8UT^LCDA s+ aceita dados no *ormato ST0CD34 caso %oc[ dese'e escre%er outros ti&os de dados ser5
necess5rio utiliar a &rocedure T/^CWA0 &ara con%erter os dados.
Tratando e,ce)es de C#/
A &acRage UTL^@CLA o*erece um con'unto de e,ce&tions (ue s!o es&ec-*icas &ara a &acRage. /utras e,ce&tions4 como
D/^1ATA^@/UD14 tamb:m de%em ser utiliadas.
Um e,em&lo de tratamento de erros :N
AECA8TC/D
UWAD D/^1ATA^@/UD1 TWAD
12MS^/UT8UT.8UT^LCDA=TLeitura de&ois do *im do ar(ui%o.T>F
UWAD UTL^@CLA.CDBALC1^/8A0ATC/D TWAD
12MS^/UT8UT.8UT^LCDA=TD!o : &oss-%el escre%er em ar(ui%o
de a&enas leitura.T>F
AD1F
Uma lista das e,ce&tions (ue &odem ser utiliadas4 com suas descri)es : dada a seguirN
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
60
D/^1ATA^@/UD1 A &rocedure 3AT^LCDA tentou ler al:m do *im do ar(ui%o.
UTL^@CLA.CDTA0DAL^A00/0 /correu um erro interno. A o&era!o n!o *oi com&letada.
UTL^@CLA.CDBALC1^@CLAWAD1LA / *ile?andle es&eci*icado n!o : %5lido ou n!o *oi aberto.
UTL^@CLA.CDBALC1^M/1A / modo *ornecido em @/8AD n!o : %5lido.
UTL^@CLA.CDBALC1^/8A0ATC/D /&era!o in%5lida &ois o ar(ui%o n!o e,iste ou a o&era!o n!o : com&at-%el ao
modo &ara o (ual o ar(ui%o *oi aberto.
UTL^@CLA.CDBALC1^8ATW / camin?o *ornecido n!o : acess-%el.
UTL^@CLA.0AA1^A00/0 Arro es&ec-*ico do sistema o&eracional na leitura do ar(ui%o.
UTL^@CLA.U0CTA^A00/0 Arro es&ec-*ico do sistema o&eracional na tentati%a de se escre%er &ara o ar(ui%o.
BALUA^A00/0 / te,to lido com 3AT^LCDA : grande demais &ara caber no bu**er es&eci*icado.
A,em&lo de utilia!o da &acRage UTL^@CLA
1ACLA0A
*ile^?andle UTL^@CLA.@CLA^TS8AF
nome BA0CWA02=I0> F
retrie%ed^bu**er BA0CWA02="00>F
2A3CD
-- abre o ar(ui%o &ara escrita
-- o ar(ui%o init.ora de%e ter o &arametro utl^*ile^dir Y CNlTAM8
*ile^?andle NY UTL^@CLA.@/8AD=TcNltem&T4Tteste.t,tT4TUT>F
-- insere uma lin?a no ar(ui%o de*inido &or *ile^?andle
UTL^@CLA.8UT^LCDA=*ile^?andle4 TLin?a " =um> T>F
SALACT 3L/2AL^DAMA CDT/ nome @0/M 3L/2AL^DAMAF
-- insere outra lin?a no ar(ui%o de*inido &or *ile^?andle
UTL^@CLA.8UT@ =*ile^?andle4TColuna Dome tem o %alor Zs lnT4 nome>F
-- *ec?a o ar(ui%o
UTL^@CLA.@CL/SA=*ile^?andle>F
-- abre o ar(ui%o &ara leitura
*ile^?andle NY UTL^@CLA.@/8AD=TcNltem&T4Tteste.t,tT4T0T>F
-- inicio de um bloco &ara leitura
2A3CD
L//8
-- le uma lin?a do ar(ui%o de*inido em *ile^?andle e a e,ibe
UTL^@CLA.3AT^LCDA =*ile^?andle4 retrie%ed^bu**er>F
12MS^/UT8UT.8UT^LCDA=retrie%ed^bu**er>F
AD1 L//8F
AECA8TC/D
-- (uando *or *im do ar(ui%o
UWAD D/^1ATA^@/UD1 TWAD
-- *ec?a o ar(ui%o
UTL^@CLA.@CL/SA=*ile^?andle>F
Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
6"
AD1F
AECA8TC/D
UWAD UTL^@CLA.CDBALC1^8ATW TWAD
12MS^/UT8UT.8UT^LCDA=TCamin?o in%5lido.T>F
UTL^@CLA.@CL/SA=*ile^?andle>F
UWAD UTL^@CLA.0AA1^A00/0 TWAD
12MS^/UT8UT.8UT^LCDA=TArro durante a leitura.T>F
UTL^@CLA.@CL/SA=*ile^?andle>F
UWAD UTL^@CLA.U0CTA^A00/0 TWAD
12MS^/UT8UT.8UT^LCDA=TArro durante a escrita.T>F
UTL^@CLA.@CL/SA=*ile^?andle>F
UWAD /TWA0S TWAD
12MS^/UT8UT.8UT^LCDA=TArrommT>F
UTL^@CLA.@CL/SA=*ile^?andle>F
AD1F
/utro A,em&lo
set ser%erout&ut onF
declare
%Lin?a^detal?e BA0CWA02=I2M6M>F
%Lin?a^Cabecal?o BA0CWA02=600>F
id UTL^@CLA.@CLA^TS8AF
%Ar(ui%o BA0CWA02=20> NY TmQ^*ileTF
err BA0CWA02="00>F
num DUM2A0F
2A3CD
id NY UTL^@CLA.@/8AD=T#CL12awbT4Tacumer&awb.t,tT4 T0T4 ;+YQY >F
UTL^@CLA.@CL/SA=id>F
%Lin?a^Cabecal?o NY TTASTA 1A A09UCB/TF
--
%Ar(ui%o NY Tteste.t,tTF
id NY UTL^@CLA.@/8AD=T#CL12awbT4%Ar(ui%o4 TUT4 I2M6M >F
UTL^@CLA.8UT^LCDA=id4%Lin?a^Cabecal?o>F
UTL^@CLA.@CL/SA=id>F
--
AECA8TC/D
UWAD /TWA0S TWAD
err NY S9LA00MF
num NY S9LC/1AF
12MS^/UT8UT.8UT^LCDA=err>F
12MS^/UT8UT.8UT^LCDA=num>F
UTL^@CLA.@CL/SA=id>F
AD1F
#

Consulting Tecnologia & Sistemas Ltda
www.consulting.com.br
62

Você também pode gostar