Escolar Documentos
Profissional Documentos
Cultura Documentos
br
ORACLE 9i
PARA DESENVOLVEDORES
ORACLE DEVELOPER 6i
CURSO COMPLETO
Lcia Fernandes
DO DIREITO AUTORAL.
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
CRDITOS
PRODUO
Alexandre Ramires
Carlos Alberto S Ferreira
REVISO
Sandro Gomes dos Santos
ARTE E DIAGRAMAO
Ingo Bertelli
SUPERVISOR DE PRODUO
Carlos Alberto S Ferreira
CAPA
Ingo Bertelli
EDITORA DE PRODUO
Gisella Narcisi
EDITOR RESPONSVEL
Ricardo Reinprecht
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
III
DEDICATRIA
minha famlia, que me acompanha a cada dia, no desenvolvimento deste trabalho, e me encoraja a prosseguir,
principalmente nos momentos de desnimo. Dedico este livro, portanto, aos meus filhos Davi, Daniel e Gabriel,
ao meu esposo Dilson e aos meus pais Lourdes e Milton (em memria). E, tambm, a uma amiga muito especial,
que foi uma grande admiradora do meu trabalho, Lucianita (em memria).
AGRADECIMENTOS
A todos os que me apoiaram antes e durante o desenvolvimento deste trabalho.
A todo o pessoal da Axcel Books, especialmente a Alexandre Ramires, Romero Portela Rodrigues e Ricardo Reinprecht.
Ao amigo Max Guyer, por mais uma vez realizar a reviso do contedo tcnico de todo o material.
SOBRE A AUTORA
Lcia Fernandes arquiteta formada pela Universidade Federal do Rio de Janeiro. Na rea de informtica, sua
atuao foi toda voltada para a rea de suporte, especialmente banco de dados. Ministrou diversos treinamentos
associados a bancos de dados e linguagens de programao, principalmente relacionados com o ambiente Oracle.
Atualmente Diretora de Suporte e Tecnologia da Relacional Consultoria e Sistemas Ltda.
IV
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
PREFCIO
Este material foi construdo para o desenvolvedor Oracle, ou seja, aquele profissional que deseja se tornar (ou j )
desenvolvedor de sistemas no ambiente Oracle.
O livro foi dividido em trs partes:
Fundamentos onde encontramos a parte bsica, a interface com o banco de dados atravs das linguagens SQL
e PL/SQL.
Developer onde encontramos o estudo das ferramentas de desenvolvimento de sistemas Form Builder e Report Builder.
Referncia onde encontramos a sintaxe das linguagens estudadas na parte Fundamentos e lista de propriedades,
de menus, de triggers, de rotinas, de parmetros, etc. das ferramentas estudadas na parte Developer.
Este livro segue a mesma linha do anterior em que, inicialmente, estudamos a linguagem SQL em seguida passando
ao desenvolvimento de lgicas de programao com o PL/SQL. Consideramos que o estudo sobre objetos no
banco de dados merecia uma ateno maior, e por este motivo dedicamos o Captulo 4 ao estudo de objetos tanto
em SQL quanto em PL/SQL.
Assim, se voc no conhece Oracle ( o seu primeiro contato), deve comear o estudo no Captulo 2 com a linguagem
SQL, passando ento para o Captulo 3, que contm a linguagem PL/SQL (para construo de aplicaes em batch).
De posse desse conhecimento, voc poder avaliar o que a verso 9i trouxe de novidades para o desenvolvedor.
Se, por outro lado, voc j conhece Oracle 8i, no deixe de estudar os Captulos 2 e 3, pois voc perceber que
muitas implementaes foram feitas no SQL. A quantidade de funes cresceu tremendamente, a sintaxe dos
comandos de DML ganhou acrscimos para aceitar o padro ANSI. A PL/SQL tambm ganhou novos pacotes e
implementou todas as alteraes realizadas para o SQL.
A parte (tanto da SQL quanto da PL/SQL) relativa a uso de objetos no banco de dados tambm foi incrementada
com o conceito de herana e polimorfismo. No Captulo 4 fazemos um estudo especfico sobre objetos, tanto do
ponto de vista conceitual quanto do uso no ORACLE.
No Captulo 5 o desenvolvedor encontrar alguns tpicos gerais relativos ao banco de dados, que podem ser teis
no emprego mais eficiente no software; muitas vezes, porm, no diretamente ligados ao seu dia-a-dia, por exemplo,
particionamento de tabelas, views materializadas, performance do SQL, dentre outros.
A parte Fundamentos conta com um conjunto de aproximadamente 250 exerccios e mais de 600 exemplos.
Certamente voc encontrar muita coisa interessante para estudar, independente do seu nvel de conhecimento
atual. Na parte Referncia, voc encontrar a sintaxe de SQL9i, de PL/SQL9i alm da sintaxe de SQL*Plus.
Para facilitar o estudo daqueles que j conhecem o Oracle8i criamos um ndice exclusivo com as novidades. Neste
ndice incluiremos, apenas, aqueles tpicos que sofreram modificaes na verso 9i ou que ainda no havamos
estudado no livro anterior.
Se voc pretende se utilizar das ferramentas de desenvolvimento da Oracle, seu estudo ainda no acabou: devemos
passar segunda parte (Developer), onde esto os captulos referentes s ferramentas de desenvolvimento.
Iniciamos o estudo das ferramentas com a instalao, no Captulo 6, e passamos ento ao Form Builder 6i (Captulo
7) e Report Builder 6i (Captulo 8). O Captulo 9 dedicado ao estudo das ferramentas em ambiente Web.
Se voc no conhece as ferramentas de desenvolvimento da Oracle, seu estudo comea no Captulo 7, onde voc
conhecer a filosofia da ferramenta (Form Builder), sua utilizao passo a passo e dicas diversas. Em seguida, voc
deve passar ao Captulo 8, para que possamos estudar juntos a confeco de relatrios com a ferramenta Report
Builder. Quando voc estiver bem experiente nas duas ferramentas, passe ao Captulo 9 e verifique como utilizar o
mesmo programa que voc desenvolveu para ambiente cliente-servidor na Web (Internet ou Intranet).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Dentro de cada captulo veremos trechos das sintaxes, pois estaremos analisando individualmente os assuntos;
porm, na parte de anexos, teremos a sintaxe completa com a explicao especfica sobre cada opo.
Como recomendao ao leitor interessado em se tornar um desenvolvedor, sugiro que no se atenha apenas leitura
do material. Praticar traz dvidas que a leitura no traz; portanto refaa todos os testes apresentados, faa outros
testes complementares com opes no exemplificadas e tente realizar todos os exerccios de fixao. Duvide e teste!
Dessa forma, voc ter condies de tirar suas prprias concluses sobre as ferramentas apresentadas. Se, aps este
estudo, voc tiver dvidas, escreva para o e-mail da Editora, a fim de entrar em contato comigo para novas explicaes.
No deixe, tambm, de obter todos os scripts e aplicativos presentes no livro para que seu estudo seja mais gil.
Faa download em www.axcel.com.br.
Bom estudo!
Lcia.
VI
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Sumrio
PARTE I FUNDAMENTOS ................................................................................................................................ 1
CAPTULO 1 INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000 .................................................................. 3
Fundamentos em: Instalao do Produto ............................................................................................ 4
Requerimentos Para Instalao ............................................................................................................................ 4
Acompanhando a Instalao ............................................................................................................................... 4
Localizao dos Arquivos ..................................................................................................................................... 5
Produtos Disponveis ........................................................................................................................................... 5
Tipos de Instalao ............................................................................................................................................... 6
Configurao do Banco de Dados ........................................................................................................................ 7
Identificao do Banco de Dados ......................................................................................................................... 7
Local do Arquivo do Banco de Dados .................................................................................................................. 8
Conjunto de Caracteres de Banco de Dados ........................................................................................................ 8
Resumo ................................................................................................................................................................. 9
Fundamentos em: Substituio da Linguagem .................................................................................. 10
Executando o Regedit ......................................................................................................................................... 10
O N Oracle ........................................................................................................................................................ 10
Fundamentos em: Criao de um Usurio-Padro com o SQL*Plus ................................................. 12
Fundamentos em: Criao da Base Relacional ................................................................................... 13
Modelo de Dados ............................................................................................................................................... 13
Gerando a Base de Dados ................................................................................................................................... 14
Criando o Atalho Para o SQL*Plus ..................................................................................................................... 20
Sobre a Base de Dados Objeto-Relacional .......................................................................................................... 20
CAPTULO 2 SQL E SQL*PLUS ................................................................................................................... 21
Fundamentos em: Linguagem SQL ...................................................................................................... 22
Dados Histricos ................................................................................................................................................ 22
O Oracle e o SQL ................................................................................................................................................ 22
Banco de Dados Relacional ................................................................................................................................ 22
A Abrangncia da Linguagem ............................................................................................................................ 23
Linguagem de Manipulao dos Dados (Data Manipulation Language DML) .......................................... 23
Linguagem de Definio dos Dados (Data Definition Language DDL) ...................................................... 23
Linguagem de Controle dos Dados (Data Control Language DCL) ........................................................... 23
Fundamentos em: Ferramenta SQL*Plus ............................................................................................ 24
Abrindo uma Sesso ........................................................................................................................................... 24
O SQL Buffer ....................................................................................................................................................... 24
Os Comandos do SQL*Plus ................................................................................................................................ 25
Digitando no SQL*Plus ...................................................................................................................................... 25
Comandos de Edio .......................................................................................................................................... 26
List .................................................................................................................................................................. 26
Append ........................................................................................................................................................... 27
Change ........................................................................................................................................................... 27
Del .................................................................................................................................................................. 28
Input .............................................................................................................................................................. 29
Edit ................................................................................................................................................................. 29
Comandos de Execuo e de Encerramento ...................................................................................................... 31
Run ................................................................................................................................................................. 31
/ (Barra) .......................................................................................................................................................... 32
Exit / Quit ...................................................................................................................................................... 32
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
VII
VIII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Regr_Avgx ...................................................................................................................................................... 61
Regr_Avgy ...................................................................................................................................................... 61
Regr_Count .................................................................................................................................................... 61
Regr_Intercept ................................................................................................................................................ 61
Regr_R2 .......................................................................................................................................................... 61
Regr_Slope ...................................................................................................................................................... 61
Regr_Sxx ......................................................................................................................................................... 61
Regr_Sxy ......................................................................................................................................................... 61
Regr_Syy ......................................................................................................................................................... 61
Stddev ............................................................................................................................................................ 62
Stddev_Pop .................................................................................................................................................... 62
Stddev_Samp .................................................................................................................................................. 62
Sum ................................................................................................................................................................ 62
Var_Pop .......................................................................................................................................................... 62
Var_Samp ....................................................................................................................................................... 62
Variance ......................................................................................................................................................... 63
Grupando as Linhas Selecionadas ...................................................................................................................... 63
Regra .............................................................................................................................................................. 64
A Clusula Having .............................................................................................................................................. 64
As Expresses Rollup e Cube .............................................................................................................................. 65
Rollup ............................................................................................................................................................. 65
Cube ............................................................................................................................................................... 66
Identificando as Linhas com as Funes Group ............................................................................................ 67
Exerccios ............................................................................................................................................................ 68
Fundamentos em: Modificao do Resultado com Funes ............................................................. 69
Introduo .......................................................................................................................................................... 69
Numricas Simples ............................................................................................................................................. 70
Abs ................................................................................................................................................................. 70
Bitand ............................................................................................................................................................. 70
Ceil ................................................................................................................................................................. 70
Exp ................................................................................................................................................................. 71
Floor ............................................................................................................................................................... 71
Ln ................................................................................................................................................................... 71
Log ................................................................................................................................................................. 71
Mod ................................................................................................................................................................ 71
Power ............................................................................................................................................................. 71
Round ............................................................................................................................................................. 72
Sign ................................................................................................................................................................ 72
Sqrt ................................................................................................................................................................. 72
Trunc .............................................................................................................................................................. 72
Width_Bucket ................................................................................................................................................ 72
Trigonomtricas ................................................................................................................................................. 73
Acos ................................................................................................................................................................ 73
Asin ................................................................................................................................................................ 74
Atan ................................................................................................................................................................ 74
Atan2 .............................................................................................................................................................. 74
Cos ................................................................................................................................................................. 74
Cosh ............................................................................................................................................................... 74
Sin .................................................................................................................................................................. 75
Sinh ................................................................................................................................................................ 75
Tan ................................................................................................................................................................. 75
Tanh ............................................................................................................................................................... 75
Alfanumricas ..................................................................................................................................................... 75
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
IX
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Numtodsinterval ............................................................................................................................................ 90
Numtoyminterval .......................................................................................................................................... 90
RawToHex, RawToNhex ................................................................................................................................. 90
RowidToChar, RowidToNchar ....................................................................................................................... 91
To_Char .......................................................................................................................................................... 91
To_Char .......................................................................................................................................................... 91
To_Clob .......................................................................................................................................................... 92
To_Date .......................................................................................................................................................... 92
To_Dsinterval ................................................................................................................................................. 94
To_Lob ............................................................................................................................................................ 94
To_Multi_Byte ................................................................................................................................................ 95
To_Nchar ........................................................................................................................................................ 95
To_Nchar ........................................................................................................................................................ 95
To_Nchar ........................................................................................................................................................ 95
To_Nclob ........................................................................................................................................................ 95
To_Number .................................................................................................................................................... 95
To_Single_Byte ............................................................................................................................................... 96
To_Timestamp ................................................................................................................................................ 96
To_Timestamp_TZ .......................................................................................................................................... 96
To_Yminterval ................................................................................................................................................ 96
Translate Using .............................................................................................................................................. 96
Unistr ............................................................................................................................................................. 96
Outras ................................................................................................................................................................. 96
Bfilename ....................................................................................................................................................... 96
Coalesce ......................................................................................................................................................... 97
Decode ........................................................................................................................................................... 97
Dump ............................................................................................................................................................. 97
Empty_Blob ou Empty_Clob ......................................................................................................................... 98
ExistsNode ..................................................................................................................................................... 98
Extract ............................................................................................................................................................ 99
Greatest .......................................................................................................................................................... 99
Least ............................................................................................................................................................... 99
Nls_Charset _Decl_Len .................................................................................................................................. 99
Nls_Charset _Id ............................................................................................................................................ 100
Nls_Charset _Name ...................................................................................................................................... 100
NullIf ............................................................................................................................................................ 100
Nvl ................................................................................................................................................................ 100
Nvl2 .............................................................................................................................................................. 100
Sys_Connect_By_Path .................................................................................................................................. 100
Sys_Context ................................................................................................................................................. 101
Sys_DbUriGen .............................................................................................................................................. 102
Sys_Guid ...................................................................................................................................................... 102
Sys_Typeid .................................................................................................................................................... 102
Sys_XmlGen ................................................................................................................................................. 102
Sys_XmlAgg ................................................................................................................................................. 103
Uid ............................................................................................................................................................... 103
User .............................................................................................................................................................. 103
Userenv ........................................................................................................................................................ 103
Vsize ............................................................................................................................................................. 103
Exerccios .......................................................................................................................................................... 104
Fundamentos em: Funes Analticas ............................................................................................... 104
Introduo ........................................................................................................................................................ 105
Funes Somente Analticas ............................................................................................................................. 105
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XI
XII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Editar ............................................................................................................................................................ 143
Procurar ........................................................................................................................................................ 143
Opes ......................................................................................................................................................... 143
Ajuda ............................................................................................................................................................ 143
Exerccios .......................................................................................................................................................... 143
Fundamentos em: Consultas Complexas .......................................................................................... 145
Outer Join ......................................................................................................................................................... 145
Exists ................................................................................................................................................................. 147
Hierarquia ......................................................................................................................................................... 147
Subselects Correlacionados .............................................................................................................................. 150
Views Relacionais ............................................................................................................................................. 151
Uso de Subquery na Clusula From ................................................................................................................. 153
Em Selects .................................................................................................................................................... 153
Em Updates .................................................................................................................................................. 154
Em Inserts .................................................................................................................................................... 155
Em Deletes ................................................................................................................................................... 155
O Comando Merge ........................................................................................................................................... 155
Incluso Simultnea em Diversas Tabelas ........................................................................................................ 156
Usos Incomuns do Comando Select ................................................................................................................ 157
Uso de Case no Select ....................................................................................................................................... 158
Exerccios .......................................................................................................................................................... 158
Fundamentos em: O Dicionrio de Dados do Oracle ....................................................................... 159
Introduo ........................................................................................................................................................ 159
User_Objects ..................................................................................................................................................... 160
User_Tables ....................................................................................................................................................... 161
User_Tab_Columns .......................................................................................................................................... 161
User_Tab_Partitions .......................................................................................................................................... 162
User_Indexes .................................................................................................................................................... 162
User_Ind_Columns ........................................................................................................................................... 163
User_Ind_Partitions .......................................................................................................................................... 163
User_Constraints .............................................................................................................................................. 164
User_Cons_Columns ........................................................................................................................................ 164
User_Sequences ................................................................................................................................................ 164
User_Synonyms ................................................................................................................................................ 164
User_Users ........................................................................................................................................................ 165
User_Views ....................................................................................................................................................... 165
User_Updatable_Columns ................................................................................................................................ 165
User_Types ........................................................................................................................................................ 166
User_Type_Attrs ................................................................................................................................................ 166
User_Type_Methods ......................................................................................................................................... 166
User_Nested_Tables .......................................................................................................................................... 167
User_Object_Tables .......................................................................................................................................... 167
User_Lobs ......................................................................................................................................................... 167
User_Method_Params ....................................................................................................................................... 168
User_Method_Results ....................................................................................................................................... 168
Exerccios .......................................................................................................................................................... 168
Fundamentos em: Uso da Data Control Language .......................................................................... 168
Comandos Para Controle da Transao ........................................................................................................... 169
Transaction .................................................................................................................................................. 169
Commit ........................................................................................................................................................ 169
Savepoint ..................................................................................................................................................... 172
Rollback ....................................................................................................................................................... 173
Read Consistency ......................................................................................................................................... 173
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XIII
XIV
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Create Role ....................................................................................................................................................... 212
Create Directory ............................................................................................................................................... 213
Create View ...................................................................................................................................................... 214
Create User ....................................................................................................................................................... 214
Alter <objeto> ................................................................................................................................................... 214
Drop <objeto> .................................................................................................................................................. 215
Truncate Table .................................................................................................................................................. 215
Rename ............................................................................................................................................................. 216
Grant ................................................................................................................................................................ 216
Grant Para os <objetos> ............................................................................................................................... 216
Grant <privilgios de sistema> .................................................................................................................... 217
Revoke .............................................................................................................................................................. 218
Revoke Para os <objetos> ............................................................................................................................. 218
Revoke <privilgios de sistema> .................................................................................................................. 219
Exerccios .......................................................................................................................................................... 219
Resoluo dos Exerccios Propostos ................................................................................................................. 220
CAPTULO 3 PL/SQL ............................................................................................................................. 249
Fundamentos em: Linguagem de Programao .............................................................................. 250
Introduo ........................................................................................................................................................ 250
Estrutura ........................................................................................................................................................... 250
Modularidade ................................................................................................................................................... 250
Arquitetura ....................................................................................................................................................... 251
Vantagens da PL/SQL ....................................................................................................................................... 251
Suporte Para SQL ......................................................................................................................................... 251
Suporte Para Programao Orientada a Objeto ........................................................................................... 251
Performance ................................................................................................................................................. 251
Portabilidade ................................................................................................................................................ 251
Produtividade ............................................................................................................................................... 252
Integrao com o Oracle .............................................................................................................................. 252
Fundamentos em: Caractersticas da Linguagem ............................................................................ 252
Identificadores .................................................................................................................................................. 252
Palavras Reservadas .......................................................................................................................................... 253
Literais .............................................................................................................................................................. 253
Nmero ........................................................................................................................................................ 254
Caracter ........................................................................................................................................................ 254
String ............................................................................................................................................................ 254
Boleano ........................................................................................................................................................ 254
Comentrios ..................................................................................................................................................... 254
Fim de Linha .................................................................................................................................................... 254
Fundamentos em: Tipos de Dados ..................................................................................................... 255
Escalares ............................................................................................................................................................ 255
Binary_Integer .............................................................................................................................................. 255
Number ........................................................................................................................................................ 255
Pls_Integer .................................................................................................................................................... 257
Char ............................................................................................................................................................. 257
Varchar2 ....................................................................................................................................................... 258
Long ............................................................................................................................................................. 258
Raw ............................................................................................................................................................... 259
Long Raw ..................................................................................................................................................... 259
Rowid ........................................................................................................................................................... 259
Urowid ......................................................................................................................................................... 260
Nchar ........................................................................................................................................................... 260
Nvarchar2 .................................................................................................................................................... 260
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XV
XVI
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
While ................................................................................................................................................................ 288
For Loop ........................................................................................................................................................... 289
Cursor Loop ...................................................................................................................................................... 290
Exerccios .......................................................................................................................................................... 291
Fundamentos em: Tratamento de Erro ............................................................................................. 292
Introduo ........................................................................................................................................................ 293
Vantagens das Exceptions ................................................................................................................................ 293
Definindo Exceptions ...................................................................................................................................... 294
Exceptions Predefinidas ................................................................................................................................... 294
Causando uma Exception ................................................................................................................................ 296
O Verbo Raise ............................................................................................................................................... 296
Exception_Init ............................................................................................................................................. 297
A Procedure Raise_Application_Error .............................................................................................................. 298
Propagao da Exceo .................................................................................................................................... 299
As Funes Sqlcode e SqlErrm .......................................................................................................................... 300
When Others .................................................................................................................................................... 300
Exceptions Adquiridas na Declarao ......................................................................................................... 301
Exerccios .......................................................................................................................................................... 301
Fundamentos em: Index-By Tables e Registros ................................................................................ 303
Introduo ........................................................................................................................................................ 303
Index-By Tables ................................................................................................................................................ 303
Declarao e Atribuio ............................................................................................................................... 304
Manipulando Index-By Tables ..................................................................................................................... 305
Mtodos ............................................................................................................................................................ 305
Exists ............................................................................................................................................................ 306
Count ........................................................................................................................................................... 307
Limit ............................................................................................................................................................. 307
First e Last .................................................................................................................................................... 307
Prior e Next .................................................................................................................................................. 308
Extend .......................................................................................................................................................... 309
Trim .............................................................................................................................................................. 309
Delete ........................................................................................................................................................... 309
Exceptions Para Colees ................................................................................................................................. 309
Criando Matrizes .............................................................................................................................................. 310
Registros ........................................................................................................................................................... 311
Declaraes .................................................................................................................................................. 311
Referenciando Registros ............................................................................................................................... 312
Manipulando Registros ................................................................................................................................ 314
Exerccios .......................................................................................................................................................... 315
Fundamentos em: Bulk Binds ............................................................................................................ 316
Conceitos .......................................................................................................................................................... 316
O Comando ForAll ....................................................................................................................................... 317
A Clusula Bulk Collect ............................................................................................................................... 318
O atributo %Bulk_RowCount ...................................................................................................................... 319
O atributo %Bulk_Exceptions ...................................................................................................................... 320
Os Demais Atributos .................................................................................................................................... 321
Caractersticas ou Restries ........................................................................................................................ 321
Exerccios .......................................................................................................................................................... 322
Fundamentos em: Subprogramas ...................................................................................................... 322
Conceito ........................................................................................................................................................... 322
Caractersticas dos Subprogramas .................................................................................................................... 322
Parmetros ........................................................................................................................................................ 324
Modos dos Parmetros ................................................................................................................................. 324
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XVII
XVIII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Exemplo Usando Outro Programa ................................................................................................................... 358
Exerccios .......................................................................................................................................................... 358
Fundamentos em: O Pacote Utl_File .................................................................................................. 359
Conceito ........................................................................................................................................................... 359
Fopen ................................................................................................................................................................ 361
Fopen_Nchar .................................................................................................................................................... 362
Is_Open ............................................................................................................................................................ 362
Fclose ................................................................................................................................................................ 362
Fclose_All .......................................................................................................................................................... 363
Get_Line ........................................................................................................................................................... 364
Get_Line_Nchar ............................................................................................................................................... 365
Put .................................................................................................................................................................... 365
Put_Nchar ......................................................................................................................................................... 366
New_Line .......................................................................................................................................................... 366
Put_Line ........................................................................................................................................................... 366
Put_Line_Nchar ................................................................................................................................................ 367
Fflush ................................................................................................................................................................ 367
Putf ................................................................................................................................................................... 368
Putf_Nchar ....................................................................................................................................................... 369
Um Exemplo de Leitura ................................................................................................................................... 369
Um Exemplo de Gravao ............................................................................................................................... 370
Exerccios .......................................................................................................................................................... 371
Fundamentos em: O Pacote Dbms_Pipe ............................................................................................ 371
Introduo ........................................................................................................................................................ 372
Pipes Pblicos .............................................................................................................................................. 372
Pipes Privativos ................................................................................................................................................ 372
Funcionamento do Pacote ............................................................................................................................... 372
Create_Pipe ....................................................................................................................................................... 373
Pack_Message ................................................................................................................................................... 375
Send_Message ................................................................................................................................................... 376
Receive_Message ............................................................................................................................................... 377
Next_Item_Type ............................................................................................................................................... 378
Unpack_Message .............................................................................................................................................. 378
Remove_Pipe .................................................................................................................................................... 379
Purge ................................................................................................................................................................. 379
Reset_Buffer ...................................................................................................................................................... 380
Unique_Session_Name ..................................................................................................................................... 380
Enviando Dados Para o Pipe ............................................................................................................................ 380
Recebendo Dados do Pipe ................................................................................................................................ 381
Exerccios .......................................................................................................................................................... 382
Fundamentos em: O Pacote Dbms_Rowid ........................................................................................ 382
Rowid ................................................................................................................................................................ 382
O Pacote ........................................................................................................................................................... 383
Rowid_Create ................................................................................................................................................... 384
Rowid_Info ....................................................................................................................................................... 384
Rowid_Type ...................................................................................................................................................... 385
Rowid_Object ................................................................................................................................................... 385
Rowid_Relative_Fno ......................................................................................................................................... 385
Rowid_Block_Number ...................................................................................................................................... 385
Rowid_Row_Number ........................................................................................................................................ 385
Rowid_To_Absolute_Fno .................................................................................................................................. 385
Rowid_To_Extended ......................................................................................................................................... 385
Rowid_To_Restricted ........................................................................................................................................ 386
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XIX
XX
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Fundamentos em: External Procedures ............................................................................................ 415
Introduo ........................................................................................................................................................ 415
Criando a Interface .......................................................................................................................................... 415
Definindo a Biblioteca ................................................................................................................................. 415
Registrando Cada Rotina ............................................................................................................................. 416
Parmetros ........................................................................................................................................................ 417
Caractersticas das Linguagens .................................................................................................................... 417
Lista de Compatibilidade C e PL/SQL ......................................................................................................... 418
A Clusula Parameters ...................................................................................................................................... 419
Propriedades ................................................................................................................................................. 419
Indicator ...................................................................................................................................................... 420
Length e MaxLen ......................................................................................................................................... 420
CharSetId e CharSetForm ............................................................................................................................ 420
Self ................................................................................................................................................................ 420
Tipos das Propriedades ................................................................................................................................ 420
Especificando os Tipos das Propriedades ......................................................................................................... 421
Posicionamento dos Parmetros .................................................................................................................. 422
Passando Parmetros por Referncia ........................................................................................................... 422
Restries Relativas a Parmetros ................................................................................................................ 422
A Clusula With Context ................................................................................................................................. 423
Usando Rotinas Externas ................................................................................................................................. 423
Como a PL/SQL Aciona uma Rotina Externa .................................................................................................. 424
Usando Rotinas de Servio ............................................................................................................................... 424
OCIExtProcAllocCallMemory ...................................................................................................................... 424
OCIExtProcRaiseExcp .................................................................................................................................. 425
OCIExtProcRaiseExcpWithMsg ................................................................................................................... 425
Exerccios .......................................................................................................................................................... 425
Fundamentos em: Variveis Cursor ................................................................................................... 425
Conceito ........................................................................................................................................................... 425
Vantagens ......................................................................................................................................................... 426
Definio .......................................................................................................................................................... 426
Manipulando Variveis Cursor ........................................................................................................................ 426
Restries Para Variveis Cursor ....................................................................................................................... 429
Expresses Cursor ............................................................................................................................................. 430
Restries Relativas a Expresses Cursor ..................................................................................................... 431
Exerccios .......................................................................................................................................................... 432
Fundamentos em: SQL Dinmico em PL/SQL .................................................................................. 432
Conceito ........................................................................................................................................................... 433
Usando SQL Dinmico ..................................................................................................................................... 433
O Comando Execute Immediate ................................................................................................................. 433
Os Comandos Open-For, Fetch e Close ....................................................................................................... 435
Passando um Argumento Null ..................................................................................................................... 437
Bulk Dinmico ............................................................................................................................................. 438
Exerccios .......................................................................................................................................................... 440
Fundamentos em: Triggers ................................................................................................................. 440
Conceito ........................................................................................................................................................... 440
Evento .............................................................................................................................................................. 441
Os Eventos de DDL e Database .................................................................................................................... 441
Tipo .................................................................................................................................................................. 444
Comando ..................................................................................................................................................... 444
Linha ............................................................................................................................................................ 444
Ao .................................................................................................................................................................. 446
Predicados Condicionais ............................................................................................................................. 446
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXI
XXII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Um Tipo Vrias Tabelas .................................................................................................................................... 543
Relacionamentos .............................................................................................................................................. 544
Ref ................................................................................................................................................................ 544
Dangling ...................................................................................................................................................... 546
Garantindo a Integridade Referencial ......................................................................................................... 546
Usando Referncias em PL/SQL ....................................................................................................................... 549
Deref ............................................................................................................................................................. 550
Exerccios .......................................................................................................................................................... 551
Fundamentos em: Herana ................................................................................................................ 551
Introduo ........................................................................................................................................................ 551
Composio ...................................................................................................................................................... 552
Herana ............................................................................................................................................................ 554
Conceituando Herana ................................................................................................................................ 555
Final Para Tipo ............................................................................................................................................. 556
Instantiable Para Tipo .................................................................................................................................. 556
Final Para Mtodo ........................................................................................................................................ 559
Overriding .................................................................................................................................................... 559
Instantiable Para Mtodos ........................................................................................................................... 559
Static ............................................................................................................................................................ 560
Upcasting ......................................................................................................................................................... 560
Treat .................................................................................................................................................................. 560
Testando o Tipo de Objeto ............................................................................................................................... 561
Polimorfismo .................................................................................................................................................... 561
Exerccios .......................................................................................................................................................... 562
Fundamentos em: Funes e Views ................................................................................................... 562
Funes Relacionadas a Objetos ...................................................................................................................... 562
Deref ............................................................................................................................................................. 563
Ref ................................................................................................................................................................ 563
RefToHex ...................................................................................................................................................... 564
Value ............................................................................................................................................................ 564
Make_Ref ...................................................................................................................................................... 564
Object Views ..................................................................................................................................................... 565
Criando a Object View ................................................................................................................................. 566
Incluso de Linhas Atravs da Object View ................................................................................................. 567
Exerccios .......................................................................................................................................................... 568
Fundamentos em: Colees ................................................................................................................ 568
O que so Colees? ......................................................................................................................................... 569
Como Implementar Colees no Oracle ..................................................................................................... 569
Varray Type ...................................................................................................................................................... 569
Quando Usar Varrays ................................................................................................................................... 571
Usando Varrays em PL/SQL ......................................................................................................................... 571
Nested Table Type ............................................................................................................................................ 572
Quando Usar Nested Tables ......................................................................................................................... 574
Usando Cast ..................................................................................................................................................... 575
Exerccios .......................................................................................................................................................... 577
Fundamentos em: Montagem da Base de Dados Objeto .................................................................. 578
Modelo Objeto ................................................................................................................................................. 578
Gerando a Base de Dados ................................................................................................................................. 579
Resoluo dos Exerccios Propostos ................................................................................................................. 582
CAPTULO 5 CONHECENDO O BANCO DE DADOS ............................................................................................ 599
Fundamentos em: Table Functions ................................................................................................... 600
Conceito ........................................................................................................................................................... 600
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXIII
XXIV
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Influenciando a Escolha do Otimizador ...................................................................................................... 619
Visualizando o Caminho de Acesso Escolhido ................................................................................................ 620
Explain Plan ................................................................................................................................................. 620
Lendo o Resultado de um Plano de Execuo ............................................................................................. 621
O Autotrace do SQL*Plus ............................................................................................................................. 622
Entendendo o Caminho de Acesso Escolhido ............................................................................................. 623
Gerando Dados Para o Otimizador .................................................................................................................. 626
Uso de ndices .................................................................................................................................................. 626
Os ndices B*Tree ......................................................................................................................................... 626
Os ndices Bitmap ........................................................................................................................................ 626
Conceituando ndices Bitmap ..................................................................................................................... 626
Usando Hints ................................................................................................................................................... 627
Sintaxe Para Especificao de Hints ............................................................................................................. 627
Exerccios .......................................................................................................................................................... 628
Fundamentos em: Views Materializadas .......................................................................................... 629
Conceitos Gerais .............................................................................................................................................. 629
A Atualizao das Views Materializadas ...................................................................................................... 630
Exemplos .......................................................................................................................................................... 630
Query Rewrite, uma Anlise ............................................................................................................................. 631
Mtodos ....................................................................................................................................................... 632
Nveis de Integridade ................................................................................................................................... 632
Exerccios .......................................................................................................................................................... 633
Fundamentos em: Particionamento de Tabelas ............................................................................... 633
Uma Viso Geral .............................................................................................................................................. 633
Mtodos de Particionamento ........................................................................................................................... 633
Range ........................................................................................................................................................... 633
Hash ............................................................................................................................................................. 634
Composite .................................................................................................................................................... 634
Caractersticas e Restries .......................................................................................................................... 634
Usando Tabelas Particionadas .......................................................................................................................... 634
Movimentao de Linhas ................................................................................................................................. 635
Particionamento de ndices ............................................................................................................................. 636
ndices Globais ............................................................................................................................................. 636
ndices Locais ............................................................................................................................................... 636
Exerccios .......................................................................................................................................................... 637
Resoluo dos Exerccios Propostos ................................................................................................................. 637
CAPTULO 6 INSTALANDO O ORACLE DEVELOPER 6I NO WINDOWS ................................................................... 655
Consideraes Iniciais ...................................................................................................................................... 656
Fundamentos em: Instalao do Produto ........................................................................................ 656
Iniciando a instalao do Forms6i ................................................................................................................... 656
Idioma .............................................................................................................................................................. 656
Tools Options ................................................................................................................................................... 657
Oracle Forms Developer .............................................................................................................................. 657
Oracle Forms Server ..................................................................................................................................... 657
Oracle Reports Developer ............................................................................................................................ 658
Oracle Reports Server ................................................................................................................................... 658
Installation Options ......................................................................................................................................... 658
Test Forms Server .............................................................................................................................................. 658
Process Startup ................................................................................................................................................. 659
Iniciando a Instalao do Reports6i ................................................................................................................. 661
Configurando o TnsNames.Ora ....................................................................................................................... 662
PARTE 2 DEVELOPER ............................................................................................................................... 665
CAPTULO 7 O FORM BUILDER R6I ............................................................................................................ 667
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXV
XXVI
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Hierarquia Visual .............................................................................................................................................. 704
Itens .................................................................................................................................................................. 705
Propriedades Comuns .................................................................................................................................. 706
Item de Texto (Text Item) ............................................................................................................................ 709
Item da Lista (List Item) ............................................................................................................................... 710
Item de Exibio (Display Item) .................................................................................................................. 711
Grupo de Opes (Radio Group) ................................................................................................................. 711
Boto de Opo (Radio Button) ................................................................................................................... 711
Imagem (Image) ........................................................................................................................................... 711
Tecla (Push Button) ...................................................................................................................................... 712
Caixa de Seleo (Check Box) ...................................................................................................................... 713
Definindo Prompts ...................................................................................................................................... 713
Exerccios .......................................................................................................................................................... 715
Developer com: Canvas e Windows ................................................................................................... 717
Introduo ........................................................................................................................................................ 717
Janelas (Windows) ............................................................................................................................................ 718
Canvas .............................................................................................................................................................. 720
Canvas de Contedo (Content) .................................................................................................................. 721
Canvas Barra de Ferramentas (Toolbar) ....................................................................................................... 722
Canvas Empilhado (Stack) ........................................................................................................................... 722
Canvas Tab (Tab) .......................................................................................................................................... 723
Exerccios .......................................................................................................................................................... 723
Developer com: O Editor de Layout .................................................................................................. 725
Introduo ........................................................................................................................................................ 725
Quadro (Frame) ................................................................................................................................................ 725
A Janela do Editor de Layout ........................................................................................................................... 728
Workspace .................................................................................................................................................... 728
Barra de Ttulo (Title bar) ............................................................................................................................. 728
Rguas (Rulers) ............................................................................................................................................. 728
Guias ............................................................................................................................................................ 728
Grid .............................................................................................................................................................. 728
Linha Indicativa de Situao (Status line) ................................................................................................... 729
As Barras de Ferramentas .................................................................................................................................. 729
A Barra de Ferramentas Horizontal Superior ............................................................................................... 729
A Barra de Ferramentas Horizontal Inferior ................................................................................................ 729
A Barra de Ferramentas Vertical ou Paleta de Ferramentas ......................................................................... 731
Manipulando uma Canvas no Editor de Layout ............................................................................................. 734
Mostrar ou Esconder a Canvas .................................................................................................................... 734
Redimensionar a Canvas ............................................................................................................................. 734
Mudar os Atributos Visuais da Canvas ........................................................................................................ 734
Mostrar ou Esconder o Viewport ................................................................................................................. 734
Mover o Viewport ........................................................................................................................................ 735
Posicionar uma Canvas do Tipo Empilhado ou do Tipo Tab Sobre uma Canvas de Contedo ................. 735
Manipulando Itens no Editor de Layout ......................................................................................................... 735
Criando Itens ............................................................................................................................................... 735
Marcando o Contexto Para um Bloco ......................................................................................................... 735
Mover Itens .................................................................................................................................................. 736
Redimensionando Objetos na Canvas ........................................................................................................ 736
Alinhando Objetos na Canvas ..................................................................................................................... 736
Obter as Propriedades de um Item .............................................................................................................. 737
Manipulando Boilerplates no Editor de Layout ............................................................................................... 737
Boilerplate de Texto ..................................................................................................................................... 737
Boilerplate Grfico ....................................................................................................................................... 737
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXVII
XXVIII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Rotinas .............................................................................................................................................................. 772
Rotinas Locais .............................................................................................................................................. 772
Rotinas Armazenadas no Banco de Dados .................................................................................................. 773
O Assistente Para a Criao de Tipos (Type Wizard) ................................................................................... 774
Rotinas Armazenadas em Bibliotecas (Libraries) ......................................................................................... 776
Empacotamento da Lgica .......................................................................................................................... 776
Variveis ........................................................................................................................................................... 777
Variveis Locais ............................................................................................................................................ 777
Itens Fora de Canvas .................................................................................................................................... 778
Variveis de Pacote no Form ........................................................................................................................ 778
Parmetros ................................................................................................................................................... 779
Variveis Globais .......................................................................................................................................... 780
Comparando as Variveis ............................................................................................................................ 780
Variveis de Sistema ..................................................................................................................................... 781
Database Triggers .............................................................................................................................................. 782
Exerccios .......................................................................................................................................................... 783
Developer com: Alertas, Atributos Visuais e Editores ..................................................................... 784
Alertas (Alerts) .................................................................................................................................................. 784
Atributos Visuais (Visual Attributes) ................................................................................................................ 786
Editor ................................................................................................................................................................ 787
Exerccios .......................................................................................................................................................... 789
Developer com: Lovs e Record Groups .............................................................................................. 790
Lista de Valores (List of Values) - Lovs ............................................................................................................. 790
Criando uma Lov ......................................................................................................................................... 791
Propriedades da Lov ..................................................................................................................................... 793
Associando a Lov a um Item ........................................................................................................................ 794
Mapeando na Lov as Colunas do Record Group ......................................................................................... 794
Testando a Lov Criada ................................................................................................................................. 795
Controlando a Apresentao da Lov ........................................................................................................... 796
Recomendaes a Respeito de Lovs ............................................................................................................. 796
A Coluna de Pesquisa ................................................................................................................................... 796
Record Groups .................................................................................................................................................. 797
Query Record Group .................................................................................................................................... 797
Static Record Group ..................................................................................................................................... 798
Criando Lovs a Partir dos Record Groups .................................................................................................... 799
Non-Query Record Group ........................................................................................................................... 800
Exerccios .......................................................................................................................................................... 800
Developer com: A Depurao do PL/SQL .......................................................................................... 801
Descrio .......................................................................................................................................................... 801
A Janela de Depurao ..................................................................................................................................... 802
Marcando um Ponto de Interrupo ............................................................................................................... 803
BreakPoint .................................................................................................................................................... 803
Trigger .......................................................................................................................................................... 804
Acompanhando uma Depurao ..................................................................................................................... 805
Depurando com um Ponto de Interrupo ................................................................................................. 805
Depurando com um Trigger ........................................................................................................................ 806
Criando uma Interrupo Esttica ................................................................................................................... 806
Exerccios .......................................................................................................................................................... 807
Developer com: Pacotes, VBX, OCX e OLE ........................................................................................ 808
VBX ,OCX e OLE .............................................................................................................................................. 808
OLE, OCX e VBX no Form Builder .............................................................................................................. 809
VBX .............................................................................................................................................................. 809
OLE Container ............................................................................................................................................. 810
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXIX
XXX
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Cpia ............................................................................................................................................................ 840
Grupo de Objetos (Object Group) ................................................................................................................... 840
Concluses ....................................................................................................................................................... 840
Exerccios .......................................................................................................................................................... 841
Developer com: O Mdulo Library .................................................................................................... 842
Conceituao .................................................................................................................................................... 842
Criando uma Biblioteca (Library) .................................................................................................................... 842
Associando uma Biblioteca a uma Aplicao ................................................................................................... 843
Uso de Variveis em Bibliotecas ....................................................................................................................... 844
Consideraes Sobre Armazenamento ............................................................................................................. 844
Exerccios .......................................................................................................................................................... 845
Developer com: O Mdulo Menu ....................................................................................................... 845
Descrio .......................................................................................................................................................... 845
Objetos de um Mdulo Menu .......................................................................................................................... 846
Criando Itens de Menu via Navegador ............................................................................................................ 846
Propriedades dos Itens de Menu ...................................................................................................................... 847
Criando Itens de Menu via Editor .................................................................................................................... 848
Associando um Mdulo de Menu a um Form ................................................................................................. 850
Demais Propriedades Relativas a Menu ....................................................................................................... 850
Call_Form X New_Form .............................................................................................................................. 851
Caractersticas Particulares de Alguns Itens de Menu ...................................................................................... 852
Check Menu Items ....................................................................................................................................... 852
Radio Menu Items ........................................................................................................................................ 852
Restrio ....................................................................................................................................................... 852
Propriedades de um Menu ............................................................................................................................... 852
Propriedades do Mdulo Menu ....................................................................................................................... 852
Parmetros Para Menu ..................................................................................................................................... 853
Parmetros Predefinidos .............................................................................................................................. 853
Parmetros do Usurio ................................................................................................................................. 853
Exerccios .......................................................................................................................................................... 854
Relatrios (Reports) .......................................................................................................................................... 854
Developer com: Tipos do Banco de Dados ........................................................................................ 855
Os Tipos de Dado do Banco de Dados ............................................................................................................. 855
Suporte a Large Objetcs (Lobs) ......................................................................................................................... 855
Tlob .............................................................................................................................................................. 855
Restries ..................................................................................................................................................... 857
Suporte a Objetos do Banco de Dados ............................................................................................................. 857
Performance ..................................................................................................................................................... 859
Suporte ao PL/SQL ............................................................................................................................................ 859
Exerccios .......................................................................................................................................................... 860
Resoluo dos Exerccios Propostos ................................................................................................................. 860
CAPTULO 8 O REPORT BUILDER R6I ........................................................................................................ 947
Developer com: Reports Developer R6i ............................................................................................ 948
Sobre o Pacote .................................................................................................................................................. 948
Sobre a Ferramenta ........................................................................................................................................... 949
Sobre o Estudo .................................................................................................................................................. 949
Developer com: A Ferramenta Report Builder ................................................................................ 949
Conceitos Iniciais ............................................................................................................................................. 950
Ativando o Report Builder ........................................................................................................................... 950
O Navegador de Objetos (Object Navigator) ................................................................................................... 951
Expandir ou Contrair ................................................................................................................................... 952
Criar ou Deletar ........................................................................................................................................... 952
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXI
XXXII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Conceituao .................................................................................................................................................... 985
Parmetros de Sistema ...................................................................................................................................... 986
Background .................................................................................................................................................. 986
Copies .......................................................................................................................................................... 986
Currency ...................................................................................................................................................... 986
Decimal ........................................................................................................................................................ 986
Desformat .................................................................................................................................................... 986
Desname ...................................................................................................................................................... 987
Destype ........................................................................................................................................................ 987
Mode ............................................................................................................................................................ 987
Orientation .................................................................................................................................................. 987
PrintJob ........................................................................................................................................................ 988
Thousands .................................................................................................................................................... 988
Parmetros de Usurio ..................................................................................................................................... 988
Bind Reference ............................................................................................................................................. 988
Lista de Valores ............................................................................................................................................ 989
Lexical Reference ......................................................................................................................................... 991
Criando uma Tela de Parmetros ..................................................................................................................... 992
Usando um Criador Automtico ................................................................................................................. 992
Exerccios .......................................................................................................................................................... 993
Developer com: Os Primeiros Objetos do Layout ............................................................................. 994
Introduo ........................................................................................................................................................ 995
Quadros de Repetio (Repeating Frames) ....................................................................................................... 995
Campos (Fields) ................................................................................................................................................ 998
Boilerplates ....................................................................................................................................................... 999
Camadas de Impresso ................................................................................................................................... 1001
Freqncia de Impresso ................................................................................................................................ 1002
Elasticidade ..................................................................................................................................................... 1004
Exerccios ........................................................................................................................................................ 1007
Developer com: O Editor do Layout Model .................................................................................... 1008
A Janela do Editor de Layout ......................................................................................................................... 1008
Workspace .................................................................................................................................................. 1008
Barra de Ttulo (Title bar) ........................................................................................................................... 1008
Rguas (Rulers) ........................................................................................................................................... 1008
Guias .......................................................................................................................................................... 1008
Grid ............................................................................................................................................................ 1009
Linha Indicativa de Situao (Status Line) ................................................................................................ 1009
As Barras de Ferramentas ................................................................................................................................ 1009
A Barra de Ferramentas Horizontal Superior ............................................................................................. 1009
A Barra de Ferramentas Horizontal Inferior (Barra de Estilo) .................................................................... 1010
A Barra de Ferramentas Vertical ou Paleta de Ferramentas ....................................................................... 1011
Manipulando Objetos no Editor de Layout ................................................................................................... 1013
Criando Objetos ......................................................................................................................................... 1013
Mover Objetos ........................................................................................................................................... 1014
Redimensionando um Objeto ................................................................................................................... 1014
Redimensionando Diversos Objetos .......................................................................................................... 1014
Alinhando Objetos .................................................................................................................................... 1014
Obter as Propriedades de um Objeto ......................................................................................................... 1015
Manipulando Boilerplates no Editor de Layout ............................................................................................. 1015
Boilerplate de Texto ................................................................................................................................... 1015
Boilerplate Grfico ..................................................................................................................................... 1015
Aes Comuns aos Objetos de Layout ........................................................................................................... 1015
Atribuindo Fonte ....................................................................................................................................... 1016
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXIII
XXXIV
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Text_IO ........................................................................................................................................................... 1046
Tool_Env ......................................................................................................................................................... 1046
Tool_Res .......................................................................................................................................................... 1046
Tool_Err .......................................................................................................................................................... 1047
StProc .............................................................................................................................................................. 1047
List .................................................................................................................................................................. 1047
Debug ............................................................................................................................................................. 1047
Standard ......................................................................................................................................................... 1047
Obtendo a Sintaxe dos Pacotes ...................................................................................................................... 1047
Developer com: Variveis no Report Builder ................................................................................. 1048
Introduo ...................................................................................................................................................... 1048
Variveis Locais .............................................................................................................................................. 1048
Coluna de Espao Reservado (PlaceHolder) ................................................................................................... 1049
Variveis de Pacote ......................................................................................................................................... 1050
Parmetros ...................................................................................................................................................... 1051
Exerccios ........................................................................................................................................................ 1051
Developer com: Formatao Dinmica ........................................................................................... 1052
Conceitos Iniciais ........................................................................................................................................... 1052
Formatao Condicional ................................................................................................................................ 1052
Rotinas ............................................................................................................................................................ 1054
Valores ............................................................................................................................................................ 1054
Exerccios ........................................................................................................................................................ 1055
Developer com: Caractersticas Gerais ........................................................................................... 1055
Preferncias .................................................................................................................................................... 1056
Pasta Geral ................................................................................................................................................. 1056
Pasta Acessar .............................................................................................................................................. 1057
Pasta Assistentes ......................................................................................................................................... 1057
Pasta Valores de Runtime ........................................................................................................................... 1058
Pasta Definies de Runtime ..................................................................................................................... 1058
Estudando o Mdulo ...................................................................................................................................... 1059
Relatrio (Report) ....................................................................................................................................... 1059
Janela de Form de Parmetros (Parameter Form Window) ....................................................................... 1059
Escapes de Relatrio (Report Escapes) ....................................................................................................... 1060
Definies XML (XML Definitions) ........................................................................................................... 1061
Modo Caracter (Character Mode) .............................................................................................................. 1061
Exerccios ........................................................................................................................................................ 1062
Developer com: Relatrios Matriciais ............................................................................................. 1062
Conceitos ........................................................................................................................................................ 1063
Simple Matrix com uma Query ...................................................................................................................... 1063
Simple Matrix com Trs Queries .................................................................................................................... 1066
Concluso .................................................................................................................................................. 1067
Simple Matrix com Sumrio .......................................................................................................................... 1067
Nested Matrix ................................................................................................................................................. 1069
Modelo de Dados ....................................................................................................................................... 1069
Layout ........................................................................................................................................................ 1069
Cross Product Master/Detail .......................................................................................................................... 1069
Modelo de Dados ....................................................................................................................................... 1069
Layout ........................................................................................................................................................ 1070
Matrix Break ................................................................................................................................................... 1070
Modelo de Dados ....................................................................................................................................... 1070
Layout ........................................................................................................................................................ 1071
Exerccios ........................................................................................................................................................ 1071
Developer com: O Mdulo Library .................................................................................................. 1071
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXV
XXXVI
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
HTML Page Streaming .................................................................................................................................... 1095
Navegao .................................................................................................................................................. 1096
Formato dos Arquivos Gerados ................................................................................................................. 1096
Parmetro ................................................................................................................................................... 1096
Exemplo Usando Script Default ................................................................................................................ 1096
Exemplo Usando Nosso Script ................................................................................................................... 1097
Outras Rotinas do Pacote SRW .................................................................................................................. 1098
Exerccios ........................................................................................................................................................ 1098
Usando o Report Builder a Partir do Form Builder ........................................................................................ 1099
Acionando um Report a Partir do Form ......................................................................................................... 1099
Exerccios ........................................................................................................................................................ 1099
Developer com: Objetos do Banco de Dados ................................................................................... 1099
Suporte a Large Objects (Lobs) ....................................................................................................................... 1100
Suporte a Objetos do Oracle8 ........................................................................................................................ 1100
Exerccios ........................................................................................................................................................ 1102
Resoluo dos Exerccios ................................................................................................................................ 1102
CAPTULO 9 O FORMS NA WEB ............................................................................................................... 1165
Developer em: O Ambiente de Trs Camadas ................................................................................. 1166
O Ambiente de Duas Camadas ...................................................................................................................... 1166
O Ambiente de Trs Camadas ........................................................................................................................ 1166
Developer em: Estudando o Forms Server ...................................................................................... 1167
Os Componentes ............................................................................................................................................ 1167
Os Componentes do Forms Services ......................................................................................................... 1167
O Fluxo de Processamento do Forms Server .............................................................................................. 1168
Developer em: Configurando o Forms Server ................................................................................ 1168
Consideraes Iniciais .................................................................................................................................... 1168
Quanto Conexo ..................................................................................................................................... 1168
Quanto Configurao do Browser .......................................................................................................... 1169
Quanto Quantidade de Servidores .......................................................................................................... 1169
Quanto Forma de Implementao .......................................................................................................... 1169
Customizando o Produto ............................................................................................................................... 1170
Configurando o Servidor Web ................................................................................................................... 1170
Configurando as Variveis de Ambiente ................................................................................................... 1170
Parmetros Para o Servio .......................................................................................................................... 1171
Customizando os Arquivos de Configurao ............................................................................................ 1172
Consideraes Referentes ao Desenho das Aplicaes .................................................................................. 1175
Consideraes Gerais ................................................................................................................................. 1176
Consideraes Sobre Aplicaes Forms ..................................................................................................... 1176
Coletando Informaes Sobre Desempenho ............................................................................................. 1178
Restries Para Aplicaes Forms na Web ................................................................................................. 1178
Localizao de cones e Imagens ............................................................................................................... 1178
Acionando Relatrio Atravs do Forms ..................................................................................................... 1179
Exerccios ................................................................................................................................................... 1180
Developer em: Estudando o Reports Server ................................................................................... 1180
Consideraes Iniciais .................................................................................................................................... 1180
Quanto Arquitetura ................................................................................................................................. 1180
O Fluxo de Processamento do Reports Services Web .............................................................................. 1181
O Fluxo de Processamento do Reports Services no Web ...................................................................... 1181
Quanto Forma de Implementao .......................................................................................................... 1181
Quanto Quantidade de Equipamentos ................................................................................................... 1182
Quanto Quantidade de Servidores .......................................................................................................... 1182
Quanto aos Softwares Envolvidos ............................................................................................................. 1182
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXVII
XXXVIII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Alfanumricas que Retornam Valores Numricos ..................................................................................... 1227
Datas .......................................................................................................................................................... 1228
Converso .................................................................................................................................................. 1229
Outras ......................................................................................................................................................... 1230
Funes de Grupo .......................................................................................................................................... 1231
Funes Analticas .......................................................................................................................................... 1233
Funes Relacionadas a Objetos .................................................................................................................... 1234
Grant .............................................................................................................................................................. 1234
Grant Para os Objetos ................................................................................................................................ 1234
Grant <privilgios de sistema> .................................................................................................................. 1235
Insert .............................................................................................................................................................. 1236
Merge .............................................................................................................................................................. 1237
<Returning> .................................................................................................................................................... 1238
Bulk Collect ................................................................................................................................................ 1238
Revoke ............................................................................................................................................................ 1238
Revoke Para os <objetos> ........................................................................................................................... 1238
Revoke <privilgios de sistema> ................................................................................................................ 1239
Rollback .......................................................................................................................................................... 1240
Savepoint ........................................................................................................................................................ 1240
Select .............................................................................................................................................................. 1240
Set Constraint ................................................................................................................................................. 1241
Set Role ........................................................................................................................................................... 1241
Set Transaction ............................................................................................................................................... 1242
<subquery> ..................................................................................................................................................... 1243
Update ............................................................................................................................................................ 1245
CAPTULO 11 GUIA DE REFERNCIA DO SQL*PLUS ................................................................................... 1247
Sobre o SQL*Plus ............................................................................................................................... 1248
Abrindo uma Sesso ....................................................................................................................................... 1248
O SQL Buffer ................................................................................................................................................... 1249
Os Comandos do SQL*Plus ............................................................................................................................ 1249
Digitando no SQL*Plus .................................................................................................................................. 1249
Acionando o SQL*Plus em Batch ................................................................................................................... 1250
Os Arquivos Login.sql e Glogin.sql ................................................................................................................ 1252
Comandos .......................................................................................................................................... 1252
@ e @@ ............................................................................................................................................................ 1252
/ ...................................................................................................................................................................... 1252
Accept ............................................................................................................................................................. 1252
Append ........................................................................................................................................................... 1253
Archive Log .................................................................................................................................................... 1253
Attribute ......................................................................................................................................................... 1253
Break ............................................................................................................................................................... 1253
BTitle .............................................................................................................................................................. 1254
Change ........................................................................................................................................................... 1254
Clear ............................................................................................................................................................... 1255
Column .......................................................................................................................................................... 1255
Compute ......................................................................................................................................................... 1256
Connect/Disconnect ...................................................................................................................................... 1257
Copy ............................................................................................................................................................... 1258
Define ............................................................................................................................................................. 1258
Del .................................................................................................................................................................. 1258
Describe .......................................................................................................................................................... 1258
Disconnect ..................................................................................................................................................... 1259
Edit ................................................................................................................................................................. 1259
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXIX
XL
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
%Rowtype .................................................................................................................................................. 1280
Atributo %Found ....................................................................................................................................... 1280
Atributo %Isopen ....................................................................................................................................... 1280
Atributo %NotFound ................................................................................................................................. 1280
Atributo %Rowcount ................................................................................................................................. 1280
Atributo %Bulk_Rowcount ........................................................................................................................ 1280
Atributo %Bulk_Exceptions ....................................................................................................................... 1281
Close Cursor ............................................................................................................................................... 1281
Cursor Loop ............................................................................................................................................... 1281
Declarao de Cursor ................................................................................................................................. 1282
Delete Para Cursor ..................................................................................................................................... 1282
Fetch Cursor ............................................................................................................................................... 1283
Open Cursor .............................................................................................................................................. 1283
Update Para Cursor .................................................................................................................................... 1283
Tratamento de Erro ........................................................................................................................................ 1284
Pragma Exception_Init .............................................................................................................................. 1284
Exception ................................................................................................................................................... 1284
Raise ........................................................................................................................................................... 1285
Raise_Application_Error ............................................................................................................................. 1285
When Others ............................................................................................................................................. 1285
Iteraes ......................................................................................................................................................... 1286
Exit ............................................................................................................................................................. 1286
ForAll .......................................................................................................................................................... 1286
For Loop ..................................................................................................................................................... 1286
GoTo ........................................................................................................................................................... 1287
Loop ........................................................................................................................................................... 1287
While ......................................................................................................................................................... 1287
Demais Comandos ......................................................................................................................................... 1287
Execute Immediate .................................................................................................................................... 1287
Funes ...................................................................................................................................................... 1288
IF ................................................................................................................................................................ 1289
Null ............................................................................................................................................................ 1289
Select Into .................................................................................................................................................. 1289
Colees e Registros ....................................................................................................................................... 1290
Nested Tables ............................................................................................................................................. 1290
Varrays ....................................................................................................................................................... 1291
Index-By Tables .......................................................................................................................................... 1291
Manipulando Colees .............................................................................................................................. 1292
Exceptions Para Colees .......................................................................................................................... 1292
Registros ..................................................................................................................................................... 1292
Subprogramas e Pacotes ................................................................................................................... 1293
Subprogramas ................................................................................................................................................. 1293
Parmetros ................................................................................................................................................. 1294
Passagem dos Parmetros .......................................................................................................................... 1295
Declaraes Forward .................................................................................................................................. 1295
Clusula AuthID ........................................................................................................................................ 1295
Clusula As Language ................................................................................................................................ 1295
Clusula Deterministic .............................................................................................................................. 1295
Table Functions .......................................................................................................................................... 1296
Clusula Pipelined ..................................................................................................................................... 1296
Clusula Parallel ......................................................................................................................................... 1296
Clusula Agregate ...................................................................................................................................... 1296
Overloading ............................................................................................................................................... 1296
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLI
XLII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1317
Comentrios (Comments) ......................................................................................................................... 1317
Atributos Visuais (Visual Attribute) ............................................................................................................... 1317
Atributo Lgico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1317
Branco Sobre Preto (White on Black) ........................................................................................................ 1318
Cor (Color) ..................................................................................................................................................... 1318
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1318
Padro de Preenchimento (Fill Pattern) .................................................................................................... 1318
Fonte (Font) .................................................................................................................................................... 1318
Nome da Fonte (Font Name) ..................................................................................................................... 1318
Tamanho da Fonte (Font Size) ................................................................................................................... 1318
Peso da Fonte (Font Weight) ..................................................................................................................... 1318
Estilo da Fonte (Font Style) ........................................................................................................................ 1318
Espaamento da Fonte (Font Spacing) ...................................................................................................... 1318
Bloco de Dados (Data Block) ............................................................................................................ 1319
Geral (General) ............................................................................................................................................... 1319
Nome (Name) ............................................................................................................................................ 1319
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1319
Comentrios (Comments) ......................................................................................................................... 1319
Navegao (Navigation) ................................................................................................................................. 1319
Estilo de Navegao (Navigation Style) ..................................................................................................... 1319
Bloco de Dados Anterior de Navegao (Previous Navigation Data Block) .............................................. 1319
Prximo Bloco de Dados de Navegao (Next Navigation Data Block) .................................................... 1320
Registros (Records) ......................................................................................................................................... 1320
Grupo de Atributos Visuais do Registro Atual (Current Record Visual Attribute Group) ......................... 1320
Tamanho do Array de Consulta (Query Array Size) .................................................................................. 1320
Nmero de Registros Armazenados no Buffer (Number of Records Buffered) .......................................... 1320
Nmero de Registros Exibidos (Number of Records Displayed) ............................................................... 1320
Consultar Todos os Registros (Query All Records) .................................................................................... 1320
Orientao do Registro (Record Orientation) ............................................................................................ 1321
Registro Simples (Single Record) ................................................................................................................ 1321
Banco de Dados (Database) ............................................................................................................................ 1321
Bloco de Dados do Banco de Dados (Database Data Block) ...................................................................... 1321
Impor Chave Primria (Enforce Primary Key) ........................................................................................... 1321
Consulta Permitida (Query Allowed) ........................................................................................................ 1321
Tipo de Origem de Dados de Consulta (Query Data Source Type) ........................................................... 1321
Nome de Origem dos Dados de Consulta (Query Data Source Name) ..................................................... 1321
Colunas de Origem de Dados de Consulta (Query Data Source Columns) .............................................. 1322
Argumentos de Origem dos Dados de Consulta (Query Data Source Arguments) ................................... 1322
Apelido (Alias) ............................................................................................................................................ 1322
Incluir Item REF (Include REF Item) .......................................................................................................... 1322
Clusula WHERE (WHERE Clause) ............................................................................................................ 1322
Clusula ORDER BY (ORDER BY Clause) .................................................................................................. 1322
Dica do Otimizador (Optimizer Hint) ....................................................................................................... 1323
Insero Permitida (Insert Allowed) .......................................................................................................... 1323
Atualizao Permitida (Update Allowed) ................................................................................................... 1323
Modo de Bloqueio (Locking Mode) ........................................................................................................... 1323
Deleo Permitida (Delete Allowed) .......................................................................................................... 1323
Modo de Tecla (Key Mode) ........................................................................................................................ 1323
Atualizar Somente Colunas Alteradas (Update Changed Columns Only) ................................................ 1324
Impor Segurana da Coluna (Enforce Column Security) .......................................................................... 1324
Tempo Mximo Para Consulta (Maximum Query Time) .......................................................................... 1324
Mximo de Registros Extrados (Maximum Records Fetched) .................................................................. 1324
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLIII
XLIV
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Fsico (Physical) .............................................................................................................................................. 1330
Visvel (Visible) .......................................................................................................................................... 1330
Posio X (X Position) ............................................................................................................................... 1331
Posio Y (Y Position) ................................................................................................................................ 1331
Largura (Width) ......................................................................................................................................... 1331
Altura (Height) ........................................................................................................................................... 1331
Atributos Visuais (Visual Attribute) ............................................................................................................... 1331
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1331
Grupo de Atributos Visuais do Prompt (Prompt Visual Attribute Group) ................................................ 1331
Atributo Lgico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1331
Branco Sobre Preto (White on Black) ........................................................................................................ 1332
Cor (Color) ..................................................................................................................................................... 1332
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1332
Padro de Preenchimento (Fill Pattern) .................................................................................................... 1332
Fonte (Font) .................................................................................................................................................... 1332
Nome da Fonte (Font Name) ..................................................................................................................... 1332
Tamanho da Fonte (Font Size) ................................................................................................................... 1332
Peso da Fonte (Font Weight) ..................................................................................................................... 1332
Estilo da Fonte (Font Style) ........................................................................................................................ 1332
Espaamento da Fonte (Font Spacing) ...................................................................................................... 1332
Prompt (Prompt) ............................................................................................................................................ 1333
Prompt (Prompt) ........................................................................................................................................ 1333
Estilo de Exibio do Prompt (Prompt Display Style) ............................................................................... 1333
Justificao do Prompt (Prompt Justification) .......................................................................................... 1333
Limite de Conexo do Prompt (Prompt Attachment Edge) ...................................................................... 1333
Alinhamento do Prompt (Prompt Alignment) .......................................................................................... 1333
Deslocamento de Conexo do Prompt (Prompt Attachment Offset) ....................................................... 1333
Deslocamento do Alinhamento do Prompt (Prompt Alignment Offset) .................................................. 1333
Ordem de Leitura do Prompt (Prompt Reading Order) ............................................................................. 1334
Cor do Prompt (Prompt Color) ...................................................................................................................... 1334
Cor de Fundo do Prompt (Prompt Foreground Color) ............................................................................. 1334
Fonte do Prompt (Prompt Font) .................................................................................................................... 1334
Nome da Fonte do Prompt (Prompt Font Name) ...................................................................................... 1334
Tamanho da Fonte do Prompt (Prompt Font Size) ................................................................................... 1334
Peso da Fonte do Prompt (Prompt Font Weight) ...................................................................................... 1334
Estilo da Fonte do Prompt (Prompt Font Style) ........................................................................................ 1334
Espaamento da Fonte do Prompt (Prompt Font Spacing) ....................................................................... 1334
Canvas (Canvas) ................................................................................................................................ 1334
Geral (General) ............................................................................................................................................... 1334
Nome (Name) ............................................................................................................................................ 1334
Tipo de Canvas (Canvas Type) .................................................................................................................. 1334
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1335
Comentrios (Comments) ......................................................................................................................... 1335
Funcional (Functional) ................................................................................................................................... 1335
Aumentar na Entrada (Raise on Entry) ...................................................................................................... 1335
Menu Pop-up (Popup Menu) ..................................................................................................................... 1335
Visualizador (ViewPort) .................................................................................................................................. 1335
Posio X do Visor (ViewPort X Position) ................................................................................................. 1335
Posio Y do Visor (ViewPort Y Position) .................................................................................................. 1335
Largura do Visor (ViewPort Width) ........................................................................................................... 1335
Altura do Visor (ViewPort Height) ............................................................................................................. 1335
Fsico (Physical) .............................................................................................................................................. 1336
Visvel (Visible) .......................................................................................................................................... 1336
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLV
XLVI
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Estilo da Fonte (Font Style) ........................................................................................................................ 1341
Espaamento da Fonte (Font Spacing) ...................................................................................................... 1341
Gatilho (Trigger) ............................................................................................................................... 1342
Geral (General) ............................................................................................................................................... 1342
Nome (Name) ............................................................................................................................................ 1342
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1342
Comentrios (Comments) ......................................................................................................................... 1342
Funcional (Functional) ................................................................................................................................... 1342
Estilo de Gatilho (Trigger Style) ................................................................................................................. 1342
Texto do Gatilho (Trigger Text) ................................................................................................................. 1342
Disparar no Modo Entrar Consulta (Fire in Enter-Query Mode) .............................................................. 1342
Hierarquia de Execuo (Execution Hierarchy) ......................................................................................... 1342
Ajuda (Help) ................................................................................................................................................... 1343
Exibio na Ajuda do Teclado (Display in Keyboard Help) ................................................................... 1343
Texto da Ajuda do Teclado (Keyboard Help Text) ................................................................................. 1343
Grupo de Registros (Record Group) ................................................................................................ 1343
Geral (General) ............................................................................................................................................... 1343
Nome (Name) ............................................................................................................................................ 1343
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1343
Comentrios (Comments) ......................................................................................................................... 1343
Funcional (Functional) ................................................................................................................................... 1344
Tipo de Grupo de Registros (Record Group Type) ..................................................................................... 1344
Consulta do Grupo de Registros (Record Group Query) ........................................................................... 1344
Tamanho de Extrao do Grupo de Registros (Record Group Fetch Size) ................................................ 1344
Especificaes da Coluna (Column Specifications) ................................................................................... 1344
Item (Item) ........................................................................................................................................ 1344
Geral (General) ............................................................................................................................................... 1344
Nome (Name) ............................................................................................................................................ 1344
Tipo de Item (Item Type) ........................................................................................................................... 1344
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1344
Comentrios (Comments) ......................................................................................................................... 1345
Tpico do Livro de Ajuda (Help Book Topic) ............................................................................................ 1345
Funcional (Functional) Item do Grfico (Chart Item) ................................................................................ 1345
Menu Pop-up (Popup Menu) ..................................................................................................................... 1345
Funcional (Functional) Caixa de Seleo (CheckBox) ................................................................................ 1345
Ativado (Enabled) ...................................................................................................................................... 1345
Etiqueta (Label) .......................................................................................................................................... 1345
Tecla de Acesso (Access Key) ...................................................................................................................... 1345
Classe de Implementao (Implementation Class) ................................................................................... 1346
Valor Quando Assinalado (Value When Checked) .................................................................................... 1346
Valor Quando No-Verificado (Value When Unchecked) ......................................................................... 1346
Mapeamento de Outros Valores da Caixa de Seleo (Check Box Mapping of Other Values) ................. 1346
Menu Pop-up (Popup Menu) ..................................................................................................................... 1346
Funcional (Functional) Item de Exibio (Display Item) ............................................................................ 1346
Justificao (Justification) .......................................................................................................................... 1346
Menu Pop-up (Popup Menu) ..................................................................................................................... 1347
Funcional (Functional) Imagem (Image) .................................................................................................... 1347
Ativado (Enabled) ...................................................................................................................................... 1347
Formato da Imagem (Image Format) ......................................................................................................... 1347
Profundidade da Imagem (Image Depth) .................................................................................................. 1347
Qualidade de Compactao (Compression Quality) ................................................................................. 1347
Qualidade de Exibio (Display Quality) .................................................................................................. 1348
Mostrar Paleta (Show Palette) .................................................................................................................... 1348
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLVII
XLVIII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Justificao (Justification) .......................................................................................................................... 1356
Classe de Implementao (Implementation Class) ................................................................................... 1356
Vrias Linhas (Multi-Line) ......................................................................................................................... 1356
Estilo de Sobreposio (Wrap Style) ........................................................................................................... 1356
Restrio a Maisculas / Minsculas (Case Restriction) ............................................................................ 1356
Ocultar Dados (Conceal Data) ................................................................................................................... 1357
Manter Posio do Cursor (Keep Cursor Position) .................................................................................... 1357
Salto Automtico (Automatic Skip) ........................................................................................................... 1357
Menu Pop-up (Popup Menu) ..................................................................................................................... 1357
Funcional (Functional) rea do Usurio (User Area) .................................................................................. 1357
Ativado (Enabled) ...................................................................................................................................... 1357
Funcional (Functional) Controle VBX (VBX Control) ................................................................................ 1357
Ativado (Enabled) ...................................................................................................................................... 1357
Etiqueta (Label) .......................................................................................................................................... 1358
Icnico (Iconic) .......................................................................................................................................... 1358
Nome do Arquivo de cones (Icon Filename) ........................................................................................... 1358
Menu Pop-up (Popup Menu) ..................................................................................................................... 1358
Arquivo do Controle VBX (VBX Control File) .......................................................................................... 1358
Nome do Controle VBX (VBX Control Name) .......................................................................................... 1358
Valor do Controle VBX (VBX Control Value) ........................................................................................... 1358
Funcional (Functional) rvore Hierrquica (Hierarchical Tree) ................................................................. 1358
Ativado (Enabled) ...................................................................................................................................... 1358
Permitir Ramificaes Vazias (Allow Empty Branches) ............................................................................. 1359
Multisseleo (Multi-Selection) ................................................................................................................. 1359
Mostrar Linhas (Show Lines) ..................................................................................................................... 1359
Mostrar Smbolos (Show Symbols) ............................................................................................................ 1359
Grupo de Registros (Record Group) ........................................................................................................... 1359
Consulta de Dados (Data Query) ............................................................................................................... 1359
Menu Pop-up (Popup Menu) ..................................................................................................................... 1359
Funcional (Functional) rea Bean (Bean Area) ........................................................................................... 1359
Ativado (Enabled) ...................................................................................................................................... 1359
Classe de Implementao (Implementation Class) ................................................................................... 1359
Menu Pop-up (Popup Menu) ..................................................................................................................... 1359
Integrao do Oracle Developer (Oracle Developer Integration) .................................................................. 1359
Nome do Arquivo (Filename) .................................................................................................................... 1359
Modo de Execuo (Execution Mode) ....................................................................................................... 1360
Modo de Comunicao (Communication Mode) ..................................................................................... 1360
Bloco de Dados da Origem de Dados (Data Source Data Block) ............................................................... 1360
Nome da Consulta (Query Name) ............................................................................................................. 1360
Grfico (Chart) ............................................................................................................................................... 1360
Eixo X da Origem de Dados (Data Source X Axis) .................................................................................... 1360
Eixo Y da Origem de Dados (Data Source Y Axis) ..................................................................................... 1360
Atualizar na Consulta (Update on Query) ................................................................................................. 1360
Atualizar no Commit (Update on Commit) .............................................................................................. 1360
Navegao (Navigation) ................................................................................................................................. 1360
Navegvel com Teclado (Keyboard Navigable) .......................................................................................... 1360
Navegao do Mouse (Mouse Navigate) .................................................................................................... 1360
Item Anterior de Navegao (Previous Navigation Item) ......................................................................... 1361
Prximo Item de Navegao (Next Navigation Item) ............................................................................... 1361
Dados (Data) ................................................................................................................................................... 1361
Tipo de Dados (Data Type) ........................................................................................................................ 1361
Tamanho Mximo (Maximum Length) ..................................................................................................... 1361
Tamanho Fixo (Fixed Length) ................................................................................................................... 1361
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLIX
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Mostrar Boto Fast Forward (Show Fast Forward Button) ......................................................................... 1369
Mostrar Controle de Volume (Show Volume Control) ............................................................................. 1369
Mostrar Indicador de Tempo (Show Time Indicator) ................................................................................ 1369
Mostrar Slider (Show Slider) ...................................................................................................................... 1369
Atributos Visuais (Visual Attribute) ............................................................................................................... 1369
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1369
Grupo de Atributos Visuais do Prompt (Prompt Visual Attribute Group) ................................................ 1369
Atributo Lgico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1370
Branco Sobre Preto (White on Black) ........................................................................................................ 1370
Cor (Color) ..................................................................................................................................................... 1370
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1370
Padro de Preenchimento (Fill Pattern) .................................................................................................... 1370
Fonte (Font) .................................................................................................................................................... 1370
Nome da Fonte (Font Name) ..................................................................................................................... 1370
Tamanho da Fonte (Font Size) ................................................................................................................... 1370
Peso da Fonte (Font Weight) ..................................................................................................................... 1370
Estilo da Fonte (Font Style) ........................................................................................................................ 1371
Espaamento da Fonte (Font Spacing) ...................................................................................................... 1371
Prompt (Prompt) ............................................................................................................................................ 1371
Prompt (Prompt) ........................................................................................................................................ 1371
Estilo de Exibio do Prompt (Prompt Display Style) ............................................................................... 1371
Justificao do Prompt (Prompt Justification) .......................................................................................... 1371
Limite de Conexo do Prompt (Prompt Attachment Edge) ...................................................................... 1371
Alinhamento do Prompt (Prompt Alignment) .......................................................................................... 1371
Deslocamento de Conexo do Prompt (Prompt Attachment Offset) ....................................................... 1371
Deslocamento do Alinhamento do Prompt (Prompt Alignment Offset) .................................................. 1371
Ordem de Leitura do Prompt (Prompt Reading Order) ............................................................................. 1372
Cor do Prompt (Prompt Color) ...................................................................................................................... 1372
Cor de Fundo do Prompt (Prompt Foreground Color) ............................................................................. 1372
Fonte do Prompt (Prompt Font) .................................................................................................................... 1372
Nome da Fonte do Prompt (Prompt Font Name) ...................................................................................... 1372
Tamanho da Fonte do Prompt (Prompt Font Size) ................................................................................... 1372
Peso da Fonte do Prompt (Prompt Font Weight) ...................................................................................... 1372
Estilo da Fonte do Prompt (Prompt Font Style) ........................................................................................ 1372
Espaamento da Fonte do Prompt (Prompt Font Spacing) ....................................................................... 1372
Ajuda (Help) ................................................................................................................................................... 1372
Dica (Hint) ................................................................................................................................................. 1372
Exibir Dica Automaticamente (Display Hint Automatically) ................................................................... 1373
Dica de Ferramenta (Tooltip) ..................................................................................................................... 1373
Grupo de Atributos Visuais de Dica de Ferramenta (Tooltip Visual Attribute Group) ............................. 1373
Internacional (International) ......................................................................................................................... 1373
Estado Inicial do Teclado (Initial Keyboard State) ..................................................................................... 1373
Ordem de Leitura (Reading Order) ............................................................................................................ 1373
Estado do Teclado (Keyboard State) ........................................................................................................... 1373
Direo (Direction) .................................................................................................................................... 1373
Item de Menu (Menu Item) .............................................................................................................. 1374
Geral (General) ............................................................................................................................................... 1374
Nome (Name) ............................................................................................................................................ 1374
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1374
Comentrios (Comments) ......................................................................................................................... 1374
Funcional (Functional) ................................................................................................................................... 1374
Ativado (Enabled) ...................................................................................................................................... 1374
Etiqueta (Label) .......................................................................................................................................... 1375
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LI
LII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Atributo Lgico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1381
Branco Sobre Preto (White on Black) ........................................................................................................ 1381
Cor (Color) ..................................................................................................................................................... 1381
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1381
Padro de Preenchimento (Fill Pattern) .................................................................................................... 1381
Fonte (Font) .................................................................................................................................................... 1382
Nome da Fonte (Font Name) ..................................................................................................................... 1382
Tamanho da Fonte (Font Size) ................................................................................................................... 1382
Peso da Fonte (Font Weight) ..................................................................................................................... 1382
Estilo da Fonte (Font Style) ........................................................................................................................ 1382
Espaamento da Fonte (Font Spacing) ...................................................................................................... 1382
Internacional (International) ......................................................................................................................... 1382
Direo (Direction) .................................................................................................................................... 1382
Menu e Submenu (Menu) ................................................................................................................. 1383
Geral (General) ............................................................................................................................................... 1383
Nome (Name) ............................................................................................................................................ 1383
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1383
Comentrios (Comments) ......................................................................................................................... 1383
Funcional (Functional) ................................................................................................................................... 1383
Menu Tirar (Tear-off Menu) ....................................................................................................................... 1383
Menu Pop-up (Popup Menu) ............................................................................................................ 1383
Geral (General) ............................................................................................................................................... 1383
Nome (Name) ............................................................................................................................................ 1383
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1383
Comentrios (Comments) ......................................................................................................................... 1384
Funcional (Functional) ................................................................................................................................... 1384
Menu Tirar (Tear-off Menu) ....................................................................................................................... 1384
Mdulo Form (Form Module) ........................................................................................................... 1384
Geral (General) ............................................................................................................................................... 1384
Nome (Name) ............................................................................................................................................ 1384
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1384
Comentrios (Comments) ......................................................................................................................... 1384
Ttulo do Livro de Ajuda (Help Book Topic) ............................................................................................. 1384
Funcional (Functional) ................................................................................................................................... 1384
Ttulo (Title) ............................................................................................................................................... 1384
Janela Console (Console Window) ............................................................................................................ 1385
Origem de Menu (Menu Source) ............................................................................................................... 1385
Mdulo de Menu (Menu Module) ............................................................................................................. 1385
Menu Inicial (Initial Menu) ....................................................................................................................... 1385
Diferir Imposio Obrigatria (Defer Required Enforcement) .................................................................. 1385
Segurana do Menu (Menu Security) ............................................................................................................. 1385
Atribuio de Menu (Menu Role) .............................................................................................................. 1385
Navegao (Navigation) ................................................................................................................................. 1385
Limite de Navegao do Mouse (Mouse Navigation Limit) ...................................................................... 1385
Primeiro Bloco de Dados de Navegao (First Navigation Data Block) .................................................... 1386
Registros (Records) ......................................................................................................................................... 1386
Grupo de Atributos Visuais do Registro Atual (Current Record Visual Attribute Group) ......................... 1386
Banco de Dados (Database) ............................................................................................................................ 1386
Unidade de Validao (Validation Unit) ................................................................................................... 1386
Modo de Interao (Interaction Mode) ..................................................................................................... 1386
Tempo Mximo Para Consulta (Maximum Query Time) .......................................................................... 1386
Mximo de Registros Extrados (Maximum Records Fetched) .................................................................. 1386
Modo de Isolamento (Isolation Mode) ...................................................................................................... 1386
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LIII
LIV
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Nome (Name) ............................................................................................................................................ 1393
Tipos de Grficos (Graphics Type) ............................................................................................................. 1393
Informaes Sobre a Diviso em Subclasses (Subclass Information) ........................................................ 1393
Quadro de Layout (Layout Frame) ................................................................................................................. 1393
Bloco de Dados de Layout (Layout Data Block) ........................................................................................ 1393
Atualizar Layout (Update Layout) ............................................................................................................. 1393
Estilo de Layout (Layout Style) .................................................................................................................. 1393
Alinhamento do Quadro (Frame Alignment) ............................................................................................ 1394
Alinhamento de Objetos Simples (Single Object Alignment) ................................................................... 1394
Margem Horizontal (Horizontal Margin) .................................................................................................. 1394
Margem Vertical (Vertical Margin) ............................................................................................................ 1394
Deslocamento Horizontal de Objeto (Horizontal Object Offset) .............................................................. 1394
Deslocamento Vertical de Objeto (Vertical Object Offset) ........................................................................ 1394
Permitir Expanso (Allow Expansion) ....................................................................................................... 1394
ShrinkWrap (ShrinkWrap) ......................................................................................................................... 1394
Preenchimento Vertical (Vertical Fill) ....................................................................................................... 1394
Mximo de Objetos por Linha (Maximum Objects Per Line) ................................................................... 1394
Alinhamento Inicial do Prompt (Start Prompt Alignment) ...................................................................... 1394
Deslocamento Inicial do Prompt (Start Prompt Offset) ............................................................................ 1395
Alinhamento do Prompt ao Topo (Top Prompt Alignment) ..................................................................... 1395
Deslocamento do Prompt ao Topo (Top Prompt Offset) ........................................................................... 1395
Permitir Prompts de Vrias Linhas (Allow Multi-Line Prompts) .............................................................. 1395
Permitir Prompts Anexos ao Topo (Allow Top-Attached Prompts) ........................................................... 1395
Permitir Prompts Iniciais Anexos (Allow Start-Attached Prompts) ........................................................... 1395
Registros (Records) ......................................................................................................................................... 1395
Nmero de Registros Exibidos (Number of Records Displayed) ............................................................... 1395
Distncia Entre Registros (Distance Between Records) ............................................................................. 1396
Barra de Rolagem (Scrollbar) .......................................................................................................................... 1396
Mostrar Barra de Rolagem (Show Scroll Bar) ............................................................................................. 1396
Alinhamento da Barra de Rolagem (Scroll Bar Alignment) ....................................................................... 1396
Largura da Barra de Rolagem (Scroll Bar Width) ....................................................................................... 1396
Fsico (Physical) .............................................................................................................................................. 1396
Posio X (X Position) ............................................................................................................................... 1396
Posio Y (Y Position) ................................................................................................................................ 1396
Largura (Width) ......................................................................................................................................... 1396
Altura (Height) ........................................................................................................................................... 1396
Largura da Linha (Line Width) .................................................................................................................. 1397
Estilo de Trao (Dash Style) ....................................................................................................................... 1397
Estilo de Maisculas/Minsculas (Cap Style) ............................................................................................ 1397
Estilo de Unio (Join Style) ........................................................................................................................ 1397
Bevel (Bevel) ............................................................................................................................................... 1397
Atributos Visuais (Visual Attribute) ............................................................................................................... 1397
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1397
Grupo de Atributos Visuais do Ttulo do Quadro (Frame Title Visual Attribute Group) .......................... 1397
Cor (Color) ..................................................................................................................................................... 1398
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1398
Padro de Preenchimento (Fill Pattern) .................................................................................................... 1398
Cor de Fundo do Limite (Edge Foreground Color) / Cor de Fundo do Limite
(Edge Background Color) ........................................................................................................................... 1398
Padro do Limite (Edge Pattern) ................................................................................................................ 1398
Ttulo de Quadro (Frame Title) ...................................................................................................................... 1398
Ttulo do Quadro (Frame Title) ................................................................................................................. 1398
Alinhamento do Ttulo do Quadro (Frame Title Alignment) ................................................................... 1399
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LV
LVI
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Bevel (Bevel) ............................................................................................................................................... 1405
Mostrar Barra de Rolagem Horizontal (Show Horizontal Scroll Bar) ........................................................ 1405
Mostrar Barra de Rolagem Vertical (Show Vertical Scroll Bar) .................................................................. 1406
Atributos Visuais (Visual Attribute) ............................................................................................................... 1406
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1406
Atributo Lgico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1406
Branco Sobre Preto (White on Black) ........................................................................................................ 1406
Cor (Color) ..................................................................................................................................................... 1406
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1406
Padro de Preenchimento (Fill Pattern) .................................................................................................... 1406
Fonte (Font) .................................................................................................................................................... 1407
Nome da Fonte (Font Name) ..................................................................................................................... 1407
Tamanho da Fonte (Font Size) ................................................................................................................... 1407
Peso da Fonte (Font Weight) ..................................................................................................................... 1407
Estilo da Fonte (Font Style) ........................................................................................................................ 1407
Espaamento da Fonte (Font Spacing) ...................................................................................................... 1407
Internacional (International) ......................................................................................................................... 1407
Direo (Direction) .................................................................................................................................... 1407
CAPTULO 14 VARIVEIS DE SISTEMA DOFORMS E VARIVEIS DE AMBIENTE .................................................... 1409
Variveis de Sistema ......................................................................................................................... 1410
System.Block_Status ....................................................................................................................................... 1410
System.Coordination_Operation ................................................................................................................... 1410
System.Current_Block .................................................................................................................................... 1410
System.Current_Datetime .............................................................................................................................. 1410
System.Current_Form .................................................................................................................................... 1410
System.Current_Item ..................................................................................................................................... 1410
System.Current_Value .................................................................................................................................... 1410
System.Cursor_Block ...................................................................................................................................... 1411
System.Cursor_Item ....................................................................................................................................... 1411
System.Cursor_Record .................................................................................................................................... 1411
System.Cursor_Value ...................................................................................................................................... 1411
System.Custom_Item_Event .......................................................................................................................... 1411
System.Custom_Item_Event_Parameters ....................................................................................................... 1411
System.Date_Threshold ( * ) ........................................................................................................................... 1411
System.Effective_Date ( * ) ............................................................................................................................. 1412
System.Event_Canvas ..................................................................................................................................... 1412
System.Event_Window .................................................................................................................................. 1412
System.Form_Status ....................................................................................................................................... 1412
System.Last_Form ........................................................................................................................................... 1412
System.Last_Query ......................................................................................................................................... 1412
System.Last_Record ........................................................................................................................................ 1412
System.Master_Block ...................................................................................................................................... 1412
System.Message_Level ( * ) ............................................................................................................................. 1413
System.Mode .................................................................................................................................................. 1413
System.Mouse_Button_Modifiers ................................................................................................................... 1413
System.Mouse_Button_Pressed ...................................................................................................................... 1413
System.Mouse_Button_Shift_State ................................................................................................................. 1413
System.Mouse_Item ....................................................................................................................................... 1413
System.Mouse_Canvas ................................................................................................................................... 1413
System.Mouse_Form ...................................................................................................................................... 1413
System.Mouse_X_Pos ..................................................................................................................................... 1414
System.Mouse_Y_Pos ..................................................................................................................................... 1414
System.Mouse_Record .................................................................................................................................... 1414
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LVII
LVIII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Tab .............................................................................................................................................................. 1425
Form ............................................................................................................................................................... 1425
Item ................................................................................................................................................................ 1426
Geral ........................................................................................................................................................... 1426
Chart .......................................................................................................................................................... 1427
CheckBox ................................................................................................................................................... 1428
Editor ......................................................................................................................................................... 1428
OLE ............................................................................................................................................................ 1428
Radio .......................................................................................................................................................... 1428
Image ......................................................................................................................................................... 1428
List .............................................................................................................................................................. 1429
Sound ......................................................................................................................................................... 1429
Menu .............................................................................................................................................................. 1429
Mensagem ...................................................................................................................................................... 1430
Controle de Tempo ........................................................................................................................................ 1431
Editor .............................................................................................................................................................. 1431
Lov .................................................................................................................................................................. 1431
Validao ........................................................................................................................................................ 1431
Parmetro Para Form ...................................................................................................................................... 1431
Query .............................................................................................................................................................. 1432
Record ............................................................................................................................................................. 1432
Record Group ................................................................................................................................................. 1433
Relation .......................................................................................................................................................... 1434
Report ............................................................................................................................................................. 1434
Transaction ..................................................................................................................................................... 1435
Window .......................................................................................................................................................... 1436
Compatibilidade com Verses Anteriores ...................................................................................................... 1436
Vbx ..................................................................................................................................................... 1437
Descrio do Pacote ....................................................................................................................................... 1437
Rotinas do Pacote ........................................................................................................................................... 1437
Texto_Io .............................................................................................................................................. 1438
Descrio do Pacote ....................................................................................................................................... 1438
Rotinas do Pacote ........................................................................................................................................... 1438
Ole2 ..................................................................................................................................................... 1438
Descrio do Pacote ....................................................................................................................................... 1438
Rotinas do Pacote ........................................................................................................................................... 1439
Debug ................................................................................................................................................. 1439
Descrio do Pacote ....................................................................................................................................... 1439
Rotinas do pacote ........................................................................................................................................... 1439
Pecs ..................................................................................................................................................... 1440
Descrio do Pacote ....................................................................................................................................... 1440
Rotinas do Pacote ........................................................................................................................................... 1440
Web ..................................................................................................................................................... 1440
Descrio do Pacote ....................................................................................................................................... 1440
Rotinas do Pacote ........................................................................................................................................... 1440
Ora_Ffi ................................................................................................................................................ 1441
Descrio do Pacote ....................................................................................................................................... 1441
Rotinas do Pacote ........................................................................................................................................... 1441
Ora_prof ............................................................................................................................................. 1442
Descrio do Pacote ....................................................................................................................................... 1442
Rotinas do Pacote ........................................................................................................................................... 1442
Ora_Nls ............................................................................................................................................... 1442
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LIX
LX
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
When-Tab-Page-Changed .......................................................................................................................... 1454
When-Timer-Expired ................................................................................................................................. 1454
When-Tree-Node-Activated ....................................................................................................................... 1454
When-Tree-Node-Expanded ...................................................................................................................... 1454
When-Tree-Node-Selected ......................................................................................................................... 1455
When-Window-Activated .......................................................................................................................... 1455
When-Window-Closed .............................................................................................................................. 1455
When-Window-Deactivated ...................................................................................................................... 1455
When-Window-Resized ............................................................................................................................. 1455
Key-Clrblk .................................................................................................................................................. 1455
Key-Clrfrm ................................................................................................................................................. 1455
Key-Clrrec .................................................................................................................................................. 1455
Key-Commit ............................................................................................................................................... 1455
Key-Cquery ................................................................................................................................................ 1455
Key-Crerec .................................................................................................................................................. 1455
Key-Delrec .................................................................................................................................................. 1456
Key-Down .................................................................................................................................................. 1456
Key-Dup-Item ............................................................................................................................................. 1456
Key-Duprec ................................................................................................................................................ 1456
Key-Edit ...................................................................................................................................................... 1456
Key-Entqry ................................................................................................................................................. 1456
Key-Exeqry ................................................................................................................................................. 1456
Key-Exit ...................................................................................................................................................... 1456
Key-Help .................................................................................................................................................... 1456
Key-Listval .................................................................................................................................................. 1456
Key-Menu ................................................................................................................................................... 1457
Key-Nxtblk ................................................................................................................................................. 1457
Key-Next-Item ............................................................................................................................................ 1457
Key-Nxtkey ................................................................................................................................................. 1457
Key-Nxtrec ................................................................................................................................................. 1457
Key-Nxtset .................................................................................................................................................. 1457
Key-Print .................................................................................................................................................... 1457
Key-Prvblk .................................................................................................................................................. 1457
Key-Prev-Item ............................................................................................................................................ 1457
Key-Prvrec .................................................................................................................................................. 1457
Key-Scrdown .............................................................................................................................................. 1458
Key-Scrup ................................................................................................................................................... 1458
Key-Up ....................................................................................................................................................... 1458
Key-Updrec ................................................................................................................................................ 1458
Key-F0 a F9 e Key-Enter ............................................................................................................................. 1458
Key-Others ................................................................................................................................................. 1458
Mestre-Detalhe (Master-Detail) ...................................................................................................................... 1458
On-Check-Delete-Master ........................................................................................................................... 1458
On-Clear-Details ........................................................................................................................................ 1458
On-Populate-Details ................................................................................................................................... 1458
Controle de Mensagem (Message-Handling) ................................................................................................. 1459
On-Error ..................................................................................................................................................... 1459
On-Message ................................................................................................................................................ 1459
Navegao (Navigational) .............................................................................................................................. 1459
Post-Block .................................................................................................................................................. 1459
Post-Form ................................................................................................................................................... 1459
Post-Record ................................................................................................................................................ 1459
Post-Text-Item ............................................................................................................................................ 1459
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXI
LXII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Classificao por Prefixo ................................................................................................................. 1465
On-<evento> .................................................................................................................................................. 1465
Post-<evento> ................................................................................................................................................. 1466
Pre-<evento> .................................................................................................................................................. 1467
When-<evento> .............................................................................................................................................. 1467
Key-* ............................................................................................................................................................... 1468
CAPTULO 17 OS MENUS DO FORMS ......................................................................................................... 1471
Menu Arquivo (File) .......................................................................................................................... 1472
Novo (New) .................................................................................................................................................... 1472
Abrir (Open) ................................................................................................................................................... 1472
Fechar (Close) ................................................................................................................................................. 1472
Salvar (Save) ................................................................................................................................................... 1472
Salvar Como (Save As) .................................................................................................................................... 1472
Salvar Tudo (Save All) ..................................................................................................................................... 1472
Reverter (Revert) ............................................................................................................................................. 1472
Importar (Import) ........................................................................................................................................... 1472
Exportar (Export) ............................................................................................................................................ 1473
Conectar (Connect) ........................................................................................................................................ 1473
Desconectar (Disconnect) .............................................................................................................................. 1473
Administrao (Administration) .................................................................................................................... 1473
Acesso ao Mdulo (Module Access) ........................................................................................................... 1473
Relatrio da Lista de Objetos (Object Report List) .................................................................................... 1473
Renomear (Rename) .................................................................................................................................. 1473
Deletar (Delete) .......................................................................................................................................... 1473
Compilar Arquivo (File Compile) .............................................................................................................. 1473
Converter (Convert) .................................................................................................................................. 1473
Inserir (Check In) ....................................................................................................................................... 1473
Retirar (Check Out) .................................................................................................................................... 1474
Opes de Controle de Origem (Source Control Options) ....................................................................... 1474
Configurar Pgina (Page Setup) ..................................................................................................................... 1474
Imprimir (Print) ............................................................................................................................................. 1474
Sair (Quit) ....................................................................................................................................................... 1474
Menu Editar (Edit) ............................................................................................................................ 1474
Desfazer (Undo) .............................................................................................................................................. 1474
Recortar (Cut) ................................................................................................................................................. 1474
Copiar (Copy) ................................................................................................................................................. 1474
Colar (Paste) ................................................................................................................................................... 1474
Limpar (Clear) ................................................................................................................................................ 1474
Duplicar (Duplicate) ....................................................................................................................................... 1474
SmartClasses ................................................................................................................................................... 1475
Selecionar Tudo (Select All) ............................................................................................................................ 1475
Menu Exibir (View) Navegador ..................................................................................................... 1475
View de Propriedade (Ownership View) ........................................................................................................ 1475
View Visual (Visual View) .............................................................................................................................. 1475
Mostrar Apenas PL/SQL (Only Show PL/SQL) ............................................................................................... 1475
Menu Exibir (View) Layout ........................................................................................................... 1475
Ampliar (Zoom In) ......................................................................................................................................... 1475
Reduzir (Zoom Out) ....................................................................................................................................... 1475
Tamanho Normal (Normal Size) .................................................................................................................... 1475
Ajustar Janela (Fit to Window) .................................................................................................................... 1475
Rguas (Rulers) ............................................................................................................................................... 1475
Guias de Rgua (Ruler Guides) ....................................................................................................................... 1476
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXIII
LXIV
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Menu Programa (Program) .............................................................................................................. 1480
Executar Form (Run Form) ............................................................................................................................. 1480
Cliente/Servidor (Client/Server) ................................................................................................................ 1480
Web (Web) ................................................................................................................................................. 1480
Depurar (Debug) ........................................................................................................................................ 1480
Compilar (Compile) ....................................................................................................................................... 1481
Compilar Seleo (Compile Selection)........................................................................................................... 1481
Gatilhos Inteligentes (Smart Triggers) ........................................................................................................... 1481
Editor Externo (External Editor) .................................................................................................................... 1481
Paleta de Sintaxe (Syntax Palette) .................................................................................................................. 1481
Localizar e Substituir PL/SQL (Find and Replace PL/SQL) ............................................................................. 1481
Editor PL/SQL (PL/SQL Editor) ....................................................................................................................... 1481
Importar Classes Java (Import Java Classes) .................................................................................................. 1481
Importar Interfaces de Biblioteca OLE (Import OLE Library Interface) ......................................................... 1481
Menu Ferramentas (Tools) ............................................................................................................... 1481
Assistente de Bloco de Dados (Data Block Wizard) ....................................................................................... 1481
Assistente de Layout (Layout Wizard) ........................................................................................................... 1481
Assistente de Grfico (Chart Wizard) ............................................................................................................. 1482
Assistente de Lov (Lov Wizard) ...................................................................................................................... 1482
Editor de Layout (Layout Editor) ................................................................................................................... 1482
Navegador de Objetos (Object Navigator) ..................................................................................................... 1482
Paleta de Propriedades (Property Palette) ...................................................................................................... 1482
Biblioteca de Objetos (Object Library) ........................................................................................................... 1482
Editor de Menu (Menu Editor) ....................................................................................................................... 1482
Report Builder ................................................................................................................................................ 1482
Preferncias (Preferences) ............................................................................................................................... 1482
Menu (Menu) ..................................................................................................................................... 1482
Criar Abaixo (Create Down) ........................................................................................................................... 1482
Criar Direita (Create Right) ......................................................................................................................... 1482
Deletar (Delete) .............................................................................................................................................. 1483
Expandir (Expand) ......................................................................................................................................... 1483
Recolher (Collapse) ........................................................................................................................................ 1483
Expandir Tudo (Expand All) ........................................................................................................................... 1483
Recolher Tudo (Collapse All) .......................................................................................................................... 1483
Prxima Ocorrncia (Next Instance) ............................................................................................................. 1483
Alternar Orientao (Switch Orientation) ..................................................................................................... 1483
Menu Ajuda (Help) ............................................................................................................................ 1483
Tpicos da Ajuda do Form Builder (Form Builder Help Topics) .................................................................... 1483
Quick Tour ...................................................................................................................................................... 1483
Cue Cards ....................................................................................................................................................... 1483
Manuais (Manuals) ......................................................................................................................................... 1484
Sobre o Form Builder (About Form Builder) .................................................................................................. 1484
CAPTULO 18 PROPRIEDADES DO REPORTS ................................................................................................ 1485
ncora (Anchor) ............................................................................................................................... 1486
Grupo ncora (Anchor) ................................................................................................................................. 1486
Nome do Objeto-Filho (Child Object Name) ............................................................................................ 1486
Tipo de Limite-Filho (Child Edge Type) .................................................................................................... 1486
Percentual de Limite-Filho (Child Edge Percent) ...................................................................................... 1486
Nome do Objeto-Pai (Parent Object Name) .............................................................................................. 1486
Tipo de Limite-Pai (Parent Edge Type) ...................................................................................................... 1486
Percentual de Limite-Pai (Parent Edge Percent) ........................................................................................ 1486
Fechar Horizontalmente (Collapse Horizontally) ..................................................................................... 1486
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXV
LXVI
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Tipo de Coluna Multimdia (Multimedia Column Type) ......................................................................... 1492
Gatilho PL/SQL (PL/SQL Trigger) .............................................................................................................. 1492
Configuraes de Web (Web Configuration) ................................................................................................. 1492
Destino de Hiperligao (Hyperlink Destination) ..................................................................................... 1492
Marcador (Bookmark) ................................................................................................................................ 1492
Hiperligao (Hyperlink) ........................................................................................................................... 1492
Linha de Comandos da Aplicao (PDF) - (Application Command Line (PDF)) ...................................... 1493
Layout Geral (General Layout) ...................................................................................................................... 1493
Quebra de Pgina Anterior (Page Break Before) ........................................................................................ 1493
Quebra de Pgina Posterior (Page Break After) .......................................................................................... 1493
Proteo de Pgina (Page Protect) .............................................................................................................. 1493
Formatao Condicional (Conditional Formatting) ................................................................................. 1493
Layout Avanado (Advanced Layout) ............................................................................................................ 1493
Impresso de Objeto Ativada (Print Object On) ....................................................................................... 1493
Impresso de Base Ativada (Base Printing On) .......................................................................................... 1494
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1494
Gatilho de Formato (Format Trigger) ........................................................................................................ 1494
Cdigo da Impressora Anterior (Printer Code Before) .............................................................................. 1494
Cdigo da Impressora Posterior (Printer Code After) ................................................................................ 1494
Campo (Field) .................................................................................................................................... 1494
Informaes Gerais (General Information) ................................................................................................... 1494
Nome (Name) ............................................................................................................................................ 1494
Comentrios (Comments) ......................................................................................................................... 1494
Campo (Field) ................................................................................................................................................. 1494
Origem (Source) ......................................................................................................................................... 1494
Tipo de Dados de Origem (Source Datatype) ............................................................................................ 1495
Visvel (Visible) .......................................................................................................................................... 1495
Mscara de Formato (Format Mask) .......................................................................................................... 1495
Numerao de Pgina (Page Numbering) .................................................................................................. 1495
Coluna (Column) ........................................................................................................................................... 1495
Tipo de Coluna (Column Type) ................................................................................................................. 1495
Tipo de Dados (Datatype) .......................................................................................................................... 1495
Largura (Width) ......................................................................................................................................... 1495
Valor se Nulo (Value If Null) ...................................................................................................................... 1495
Ordem de Quebra (Break Order) ................................................................................................................ 1496
Ler do Arquivo (Read From File) ................................................................................................................ 1496
Formato de Arquivo (File Format) ............................................................................................................. 1496
Marcador de Lugar/Frmula (PlaceHolder/Formula) ..................................................................................... 1496
Frmula PL/SQL (PL/SQL Formula) ........................................................................................................... 1496
Sumrio (Summary) ....................................................................................................................................... 1496
Funo (Function) ..................................................................................................................................... 1496
Origem (Source) ......................................................................................................................................... 1496
Reiniciar (Reset At) ..................................................................................................................................... 1497
Computar (Compute At) ........................................................................................................................... 1497
Configuraes de Web (Web Configuration) ................................................................................................. 1497
Destino de Hiperligao (Hyperlink Destination) ..................................................................................... 1497
Marcador (Bookmark) ................................................................................................................................ 1497
Contm Tags HTML (Contains HTML Tags) ............................................................................................. 1497
Hiperligao (Hyperlink) ........................................................................................................................... 1497
Linha de Comandos da Aplicao (PDF) - (Application Command Line (PDF)) ..................................... 1497
Layout Geral (General Layout) ...................................................................................................................... 1498
Quebra de Pgina Anterior (Page Break Before) ........................................................................................ 1498
Quebra de Pgina Posterior (Page Break After) .......................................................................................... 1498
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXVII
LXVIII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Ordem de Quebra (Break Order) ................................................................................................................ 1503
Ler do Arquivo (Read From File) ................................................................................................................ 1503
Formato de Arquivo (File Format) ............................................................................................................. 1503
Marcador de Lugar/Frmula (PlaceHolder/Formula) ..................................................................................... 1503
Frmula PL/SQL (PL/SQL Formula) ........................................................................................................... 1503
Definies XML (XML Definitions) ............................................................................................................... 1503
Tag XML (XML Tag) ................................................................................................................................... 1503
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1503
Excluir de Sada XML (Exclude from XML Output) .................................................................................. 1504
Contm Tags XML (Contains XML Tags) .................................................................................................. 1504
Coluna de Resumo (Summary Column) .......................................................................................... 1504
Informaes Gerais (General Information) ................................................................................................... 1504
Nome (Name) ............................................................................................................................................ 1504
Comentrios (Comments) ......................................................................................................................... 1504
Coluna (Column) ........................................................................................................................................... 1504
Tipo de Coluna (Column Type) ................................................................................................................. 1504
Tipo de Dado (Datatype) ........................................................................................................................... 1504
Largura (Width) ......................................................................................................................................... 1504
Valor se Nulo (Value If Null) ...................................................................................................................... 1504
Ler do Arquivo (Read From File) ................................................................................................................ 1504
Formato de Arquivo (File Format) ............................................................................................................. 1505
Sumrio (Summary) ....................................................................................................................................... 1505
Funo (Function) ..................................................................................................................................... 1505
Origem (Source) ......................................................................................................................................... 1505
Reiniciar (Reset At) ..................................................................................................................................... 1505
Computar (Compute At) ........................................................................................................................... 1505
Definies XML (XML Definitions) ............................................................................................................... 1505
Tag XML (XML Tag) ................................................................................................................................... 1505
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1506
Excluir de Sada XML (Exclude from XML Output) .................................................................................. 1506
Contm Tags XML (Contains XML Tags) .................................................................................................. 1506
Coluna do Banco de Dados (Database Column) ............................................................................. 1506
Informaes Gerais (General Information) ................................................................................................... 1506
Nome (Name) ............................................................................................................................................ 1506
Comentrios (Comments) ......................................................................................................................... 1506
Coluna (Column) ........................................................................................................................................... 1506
Tipo de Coluna (Column Type) ................................................................................................................. 1506
Tipo de Dado (Datatype) ........................................................................................................................... 1506
Largura (Width) ......................................................................................................................................... 1506
Valor se Nulo (Value If Null) ...................................................................................................................... 1507
Ordem de Quebra (Break Order) ................................................................................................................ 1507
Ler do Arquivo (Read From File) ................................................................................................................ 1507
Formato de Arquivo (File Format) ............................................................................................................. 1507
Definies XML (XML Definitions) ............................................................................................................... 1507
Tag XML (XML Tag) ................................................................................................................................... 1507
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1507
Excluir de Sada XML (Exclude from XML Output) .................................................................................. 1507
Contm Tags XML (Contains XML Tags) .................................................................................................. 1507
Consulta (Query) ............................................................................................................................... 1508
Informaes Gerais (General Information) ................................................................................................... 1508
Nome (Name) ............................................................................................................................................ 1508
Comentrios (Comments) ......................................................................................................................... 1508
Consulta (Query) ............................................................................................................................................ 1508
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXIX
LXX
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Matriz (Matrix) ................................................................................................................................. 1513
Informaes Gerais (General Information) ................................................................................................... 1513
Nome (Name) ............................................................................................................................................ 1513
Comentrios (Comments) ......................................................................................................................... 1514
Matriz (Matrix) ............................................................................................................................................... 1514
Quadro de Repetio Vertical (Vertical Repeating Frame)......................................................................... 1514
Quadro de Repetio Horizontal (Horizontal Repeating Frame) .............................................................. 1514
Grupo de Produto Cruzado (Cross Product Group) .................................................................................. 1514
Configuraes de Web (Web Configuration) ................................................................................................. 1514
Destino de Hiperligao (Hyperlink Destination) ..................................................................................... 1514
Marcador (Bookmark) ................................................................................................................................ 1514
Hiperligao (Hyperlink) ........................................................................................................................... 1514
Linha de Comandos da Aplicao (PDF) - (Application Command Line (PDF)) ................................... 1515
Mdulo Relatrio (Report) ............................................................................................................... 1515
Informaes Gerais (General Information) ................................................................................................... 1515
Nome (Name) ............................................................................................................................................ 1515
Comentrios (Comments) ......................................................................................................................... 1515
Relatrio (Report) ........................................................................................................................................... 1515
Unidade de Medida (Unit of Measurement) ............................................................................................. 1515
Mx. de Pginas de Corpo Horizontais (Maximum Horizontal Body Pages)............................................ 1515
Mx. de Pginas de Corpo Verticais (Maximum Vertical Body Pages) ...................................................... 1515
Ordem de Impresso do Painel (Panel Print Order) .................................................................................. 1515
Direo (Direction) .................................................................................................................................... 1516
Ttulo do Previsualizador (Preview Title) ................................................................................................... 1516
Nome da Funo (Role Name) ................................................................................................................... 1516
Distribuio (Distribution) ........................................................................................................................ 1516
Janela de Form de Parmetros (Parameter Form Window) ............................................................................ 1516
Largura (Width) ......................................................................................................................................... 1516
Altura (Height) ........................................................................................................................................... 1516
Nmero de Pginas (Number of Pages) ..................................................................................................... 1516
Escapes de Relatrio (Report Escapes) ............................................................................................................ 1517
Antes do Tipo de Relatrio (Before Report Type) ...................................................................................... 1517
Antes do Valor do Relatrio (Before Report Value) ................................................................................... 1517
Depois do Tipo de Relatrio (After Report Type) ...................................................................................... 1517
Depois do Valor do Relatrio (After Report Value) ................................................................................... 1517
Antes do Tipo de Pgina (Before Page Type) ............................................................................................. 1517
Antes do Valor da Pgina (Before Page Value) ........................................................................................... 1517
Depois do Tipo de Pgina (After Page Type) .............................................................................................. 1517
Depois do Valor da Pgina (After Page Value) ........................................................................................... 1517
Antes do Tipo de Form (Before Form Type) .............................................................................................. 1518
Antes do Valor do Form (Before Form Value) ............................................................................................ 1518
Depois do Tipo de Form (After Form Type) ............................................................................................... 1518
Depois do Valor do Form (After Form Value) ............................................................................................ 1518
Tipo de Controle de Pgina de Navegao (Page Navigation Control Type) ............................................ 1518
Valor de Controle da Pgina de Navegao (Page Navigation Control Value) ......................................... 1518
Definies XML (XML Definitions) ............................................................................................................... 1518
Tag XML (XML Tag) ................................................................................................................................... 1518
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1518
Tipo de Prlogo XML (XML Prolog Type) ................................................................................................. 1519
Valor de Prlogo XML (XML Prolog Value) ............................................................................................... 1519
Modo Caractere (Character Mode) ................................................................................................................ 1519
Projetar em Unidades de Caractere (Design in Character Units) .............................................................. 1519
Usar Linha de Dicas do Previsualizador (Use Previewer Hint Line) .......................................................... 1519
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXI
LXXII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Quebra de Pgina Posterior (Page Break After) .......................................................................................... 1524
Proteo de Pgina (Page Protect) .............................................................................................................. 1525
Elasticidade Vertical (Vertical Elasticity) ................................................................................................... 1525
Elasticidade Horizontal (Horizontal Elasticity) ......................................................................................... 1525
Formatao Condicional (Conditional Formatting) ................................................................................. 1525
Layout Avanado (Advanced Layout) ............................................................................................................ 1525
Impresso de Objeto Ativada (Print Object On) ....................................................................................... 1525
Impresso de Base Ativada (Base Printing On) .......................................................................................... 1526
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1526
Gatilho de Formato (Format Trigger) ........................................................................................................ 1526
Cdigo da Impressora Anterior (Printer Code Before) .............................................................................. 1526
Cdigo da Impressora Posterior (Printer Code After) ................................................................................ 1526
Final da Seo de Layout (End of Layout Section) .................................................................................... 1526
Quadro de Repetio (Repeating Frame) ........................................................................................ 1526
Informaes Gerais (General Information) ................................................................................................... 1526
Nome (Name) ............................................................................................................................................ 1526
Comentrios (Comments) ......................................................................................................................... 1526
Quadro de Repetio (Repeating Frame) ........................................................................................................ 1526
Origem (Source) ......................................................................................................................................... 1526
Direo de Impresso (Print Direction) ..................................................................................................... 1527
Mximo de Registros por Pgina (Maximum Records Per Page) ............................................................... 1527
Mnimo de Registros Vivos (Minimum Widow Records) ........................................................................ 1527
Modo de Coluna (Column Mode) ............................................................................................................. 1527
Espaamento Horiz. Entre Quadros (Horiz. Space Between Frames) ........................................................ 1527
Espaamento Vert. Entre Quadros (Vert. Space Between Frames) ............................................................. 1527
Grupo (Group) ............................................................................................................................................... 1527
Tipo de Filtro (Filter Type) ......................................................................................................................... 1527
Nmero de Registros (Number of Records) ............................................................................................... 1527
Filtro PL/SQL (PL/SQL Filter) ..................................................................................................................... 1528
Configuraes de Web (Web Configuration) ................................................................................................. 1528
Destino de Hiperligao (Hyperlink Destination) ..................................................................................... 1528
Marcador (Bookmark) ................................................................................................................................ 1528
Hiperligao (Hyperlink) ........................................................................................................................... 1528
Linha de Comandos da Aplicao (PDF) (Application Command Line (PDF)) ..................................... 1528
Layout Geral (General Layout) ...................................................................................................................... 1528
Quebra de Pgina Anterior (Page Break Before) ........................................................................................ 1528
Quebra de Pgina Posterior (Page Break After) .......................................................................................... 1528
Proteo de Pgina (Page Protect) .............................................................................................................. 1529
Elasticidade Vertical (Vertical Elasticity) ................................................................................................... 1529
Elasticidade Horizontal (Horizontal Elasticity) ......................................................................................... 1529
Formatao Condicional (Conditional Formatting) ................................................................................. 1529
Layout Avanado (Advanced Layout) ............................................................................................................ 1529
Impresso de Objeto Ativada (Print Object On) ....................................................................................... 1529
Impresso de Base Ativada (Base Printing On) .......................................................................................... 1530
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1530
Gatilho de Formato (Format Trigger) ........................................................................................................ 1530
Cdigo da Impressora Anterior (Printer Code Before) .............................................................................. 1530
Cdigo da Impressora Posterior (Printer Code After) ................................................................................ 1530
Seo (Section) ................................................................................................................................... 1530
Seo (Section) ............................................................................................................................................... 1530
Largura (Width) ......................................................................................................................................... 1530
Altura (Height) ........................................................................................................................................... 1530
Painis Horizontais por Pgina (Horizontal Panels per Page) ................................................................... 1530
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXIII
LXXIV
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Profile ............................................................................................................................................................. 1541
Readonly ......................................................................................................................................................... 1541
Role ................................................................................................................................................................. 1542
Rundebug ....................................................................................................................................................... 1542
Save_Rdf ......................................................................................................................................................... 1542
Schedule ......................................................................................................................................................... 1542
Server .............................................................................................................................................................. 1543
Term ............................................................................................................................................................... 1543
Thousands ...................................................................................................................................................... 1543
Tolerance ........................................................................................................................................................ 1543
Tracefile .......................................................................................................................................................... 1543
Tracemode ...................................................................................................................................................... 1543
Traceopts ........................................................................................................................................................ 1543
Userid ............................................................................................................................................................. 1544
Para Report Convert ......................................................................................................................... 1544
Batch ............................................................................................................................................................... 1544
Cmdfile ........................................................................................................................................................... 1544
Customize ....................................................................................................................................................... 1544
Dest ................................................................................................................................................................. 1545
Dtype .............................................................................................................................................................. 1545
Dunit .............................................................................................................................................................. 1545
Formsize ......................................................................................................................................................... 1545
Logfile ............................................................................................................................................................. 1546
Overwrite ........................................................................................................................................................ 1546
Pagesize ........................................................................................................................................................... 1546
Source ............................................................................................................................................................. 1546
Stype ............................................................................................................................................................... 1546
Userid ............................................................................................................................................................. 1546
Para Form Runtime .......................................................................................................................... 1547
Array ............................................................................................................................................................... 1547
Block_Menu .................................................................................................................................................... 1547
Buffer_Records ................................................................................................................................................ 1547
Debug ............................................................................................................................................................. 1547
Debug_Messages ............................................................................................................................................. 1547
Help ................................................................................................................................................................ 1547
Interactive ...................................................................................................................................................... 1548
Keyin .............................................................................................................................................................. 1548
Keyout ............................................................................................................................................................ 1548
Log .................................................................................................................................................................. 1548
Logon_Screen ................................................................................................................................................. 1548
OptimizeSQL .................................................................................................................................................. 1548
OptimizeTP ..................................................................................................................................................... 1548
Options_Screen .............................................................................................................................................. 1549
Output_File ..................................................................................................................................................... 1549
Pecs ................................................................................................................................................................. 1549
Query_Only .................................................................................................................................................... 1549
Quiet ............................................................................................................................................................... 1549
Record ............................................................................................................................................................. 1549
Statistics .......................................................................................................................................................... 1550
Term ............................................................................................................................................................... 1550
UseSdi ............................................................................................................................................................. 1550
Window_State ................................................................................................................................................ 1550
Para Form Compiler ......................................................................................................................... 1550
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXV
LXXVI
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Menu Editar (Edit) ............................................................................................................................ 1559
Desfazer (Undo) .............................................................................................................................................. 1559
Recortar (Cut) ................................................................................................................................................. 1559
Copiar (Copy) ................................................................................................................................................. 1559
Colar (Paste) ................................................................................................................................................... 1559
Limpar (Clear) ................................................................................................................................................ 1559
Duplicar (Duplicate) ....................................................................................................................................... 1559
Selecionar Todos (Select All) .......................................................................................................................... 1559
Cancelar Seleo de Todos (Deselect All) ....................................................................................................... 1559
Selecionar Quadro-Pai (Select Parent Frame) ................................................................................................. 1559
Vnculos (Links) ............................................................................................................................................. 1559
Object (Object) ............................................................................................................................................... 1559
Menu Exibir (View) ........................................................................................................................... 1560
View de Propriedade (Ownership View) ........................................................................................................ 1560
View de Tipo de Objeto (Object Type View) .................................................................................................. 1560
Previsualizador Ativo (Live Previewer) ........................................................................................................... 1560
Previsualizador de Web (Web Preview) .......................................................................................................... 1560
Criar Para Navegador da Web (Generate to Web Browser) ....................................................................... 1560
Usar HTML (Use HTML) ............................................................................................................................ 1560
Usar Folhas de Estilos HTML (Use HTML Style Sheets) ............................................................................. 1560
Usar PDF (Use PDF) .................................................................................................................................... 1560
Usar XML (Use XML) ................................................................................................................................. 1560
Mostrar Pgina Atual (Show Current Page) ............................................................................................... 1560
Mostrar Todas as Pginas (Show All Pages) ............................................................................................... 1560
Modelo de Dados (Data Model) ..................................................................................................................... 1561
Modelo de Layout (Layout Model) ................................................................................................................ 1561
Form de Parmetro (Parameter Form) ............................................................................................................ 1561
Seo de Layout (Layout Section) .................................................................................................................. 1561
Renovar Dados (Refresh Data) ....................................................................................................................... 1561
Previsualizador de Runtime (Runtime Previewer) ......................................................................................... 1561
Ampliar (Zoom In) ......................................................................................................................................... 1561
Reduzir (Zoom Out) ....................................................................................................................................... 1561
Novo Previsualizador (New Previewer) .......................................................................................................... 1561
Fechar Previsualizador (Close Previewer) ....................................................................................................... 1561
Primeira Pgina (First Page) ............................................................................................................................ 1561
Pgina Anterior (Previous Page) ..................................................................................................................... 1562
Prxima Pgina (Next Page) ........................................................................................................................... 1562
ltima Pgina (Last Page) .............................................................................................................................. 1562
Tamanho Normal (Normal Size) .................................................................................................................... 1562
Ajustar Janela (Fit to Window) .................................................................................................................... 1562
Rguas (Rulers) ............................................................................................................................................... 1562
Guias de Rgua (Ruler Guides) ....................................................................................................................... 1562
Grade (Grid) ................................................................................................................................................... 1562
Alinhar Grade (Snap to Grid) ...................................................................................................................... 1562
Quebras de Pgina (Page Breaks) .................................................................................................................... 1562
Paleta de Ferramentas (Tool Palette) .............................................................................................................. 1562
Barra de Status (Status Bar) ............................................................................................................................. 1562
Menu Inserir (Insert) ........................................................................................................................ 1563
Data e Hora (Date and Time) ......................................................................................................................... 1563
Nmero de Pgina (Page Number) ................................................................................................................. 1563
Objeto OLE (OLE Object) ............................................................................................................................... 1563
Array de Layout (Layout Matrix) ................................................................................................................... 1563
Menu Formatar (Format) ................................................................................................................. 1563
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXVII
LXXVIII
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMRIO
Executar Relatrio (Run Report) .................................................................................................................... 1568
Compilar (Compile) ....................................................................................................................................... 1568
Compilar Seleo (Compile Selection)........................................................................................................... 1568
Editor PL/SQL (PL/SQL Editor) ....................................................................................................................... 1569
Interpretador PL/SQL (PL/SQL Interpreter) ................................................................................................... 1569
Editor PL/SQL Armazenado (Stored PL/SQL Editor) ...................................................................................... 1569
Editor do Gatilho do Banco de Dados (DataBase Trigger Editor) .................................................................. 1569
Paleta de Sintaxe (Syntax Palette) .................................................................................................................. 1569
Localizar e Substituir em PL/SQL (Find and Replace in PL/SQL)................................................................... 1569
Menu Ferramentas (Tools) ............................................................................................................... 1569
Assistente de Relatrio (Report Wizard) ......................................................................................................... 1569
Assistente de Dados (Data Wizard) ................................................................................................................ 1569
Assistente de Grfico (Chart Wizard) ............................................................................................................. 1569
Assistente de Web (Web Wizard) .................................................................................................................... 1569
Rastrear (Trace) ............................................................................................................................................... 1570
Editor de Relatrio (Report Editor) ................................................................................................................ 1570
Editor de Gabarito (Template Editor) ............................................................................................................. 1570
Object Navigator ............................................................................................................................................ 1570
Paleta de Propriedades (Property Palette) ...................................................................................................... 1570
Criador de Form de Parmetros (Parameter Form Builder) ........................................................................... 1570
Preferncias (Preferences) ............................................................................................................................... 1570
Menu Ajuda (Help) ............................................................................................................................ 1570
Tpicos da Ajuda do Report Builder (Report Builder Help Topics) ................................................................ 1570
Quick Tour ...................................................................................................................................................... 1571
Cue Cards ....................................................................................................................................................... 1571
Manuais (Manuals) ......................................................................................................................................... 1571
Sobre o Report Builder (About Report Builder) .............................................................................................. 1571
CAPTULO 21 BUILT-INS DO REPORTS ....................................................................................................... 1573
Srw .................................................................................................................................................................. 1574
List .................................................................................................................................................................. 1577
NDICE REMISSIVO ................................................................................................................................... 1579
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXIX
Parte I
FUNDAMENTOS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Captulo 1
INSTALANDO O PERSONAL
ORACLE9I NO WINDOWS2000
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
METODOLOGIA
Acompanhamento passo a passo das etapas da instalao.
ACOMPANHANDO A INSTALAO
Ao colocarmos o CD-ROM na unidade apropriada, ser apresentada a tela Autorun, na qual teremos trs opes
para execuo.
A primeira opo, com o ttulo de Iniciar Instalao, efetua a instalao dos produtos. A segunda opo, intitulada
Explore CD, faz a leitura do diretrio-raiz do CD-ROM e o apresenta para que possamos navegar (ou explorar) pelas
diversas pastas presentes. A terceira e ltima opo chamada de Informaes de Paginao abre a documentao em
formato HTML (welcome.htm) presente no CD-ROM. Os dois botes no fim da pgina permitem o acesso Home
Page da Oracle (www.oracle.com) e Suporte (www.oracle.com/support); para tal devemos estar online na Internet.
Para iniciarmos a instalao propriamente dita, devemos clicar na primeira opo, ou seja, Iniciar Instalao, a
qual dar incio ao programa de instalao chamado Oracle Universal Installer, que far alguns questionamentos
para efetuar a gravao dos arquivos.
Caso a tela de Autorun, por algum motivo, no aparea automaticamente, podemos executar (no menu Iniciar do Windows, opo Executar) o
programa E:\Autorun\Autorun.exe (para o Autorun) ou diretamente E:\Setup.exe (para o Oracle Universal Installer), onde a letra E corresponde
unidade de CD-ROM do computador.
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
A prxima tela apresentada d as Boas-Vindas ao usurio e permite que faamos uma verificao dos produtos j instalados.
Uma vez que estamos iniciando o processo de instalao agora, passaremos simplesmente ao prximo dilogo.
PRODUTOS DISPONVEIS
Nova tela de dilogo ser apresentada para que faamos a escolha do que desejamos instalar. Neste momento,
optaremos por Oracle9i Database 9.0.1.1.1, pois esta a opo que far a instalao do banco de dados (que o
nosso interesse).
A segunda opo Oracle9i Client 9.0.1.1.1 seria usada se tivssemos instalado o banco de dados em uma mquina
(que faria o papel de servidora de banco de dados) e desejssemos fazer acesso a este banco de dados a partir de
outra mquina (que faria o papel de cliente para o banco de dados).
A terceira opo Oracle9i Management and Integration 9.0.1.0.1 seria usada tambm em uma mquina cliente,
porm por algum (um DBA, por exemplo) que viesse a gerenciar ou controlar os servios do banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
TIPOS DE INSTALAO
Este dilogo apresentado para ns porque optamos, anteriormente, por instalar o banco de dados Oracle9i.
Observamos na Figura 1.03 que podemos optar por trs tipos diferentes de bancos de dados ou por uma instalao
customizada (opo Personalizar).
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
RESUMO
Neste dilogo no fornecemos nenhuma outra indicao; simplemente o Oracle nos informa o que ser instalado.
Se voc usar a barra de rolagem verificar que o software bem grande.
Para iniciarmos a instalao devemos pressionar o boto Instalar. O tempo de instalao depender do hardware e da
quantidade de memria que voc tiver. No haver mais necessidade de interveno do usurio de agora em diante.
Ao trmino da instalao poderemos verificar, no Windows, as pastas criadas pelo instalador. A Figura 1.06 nos
mostra as pastas subordinadas pasta principal Oracle OraHome9i (este nome foi dado durante a instalao).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
METODOLOGIA
Descrio dos procedimentos necessrios modificao das variveis de ambiente do Oracle presentes no registro do Windows.
Durante o processo de instalao do Personal, so criadas algumas variveis de ambiente no Windows. Estas
variveis so consultadas por todos os programas Oracle que viermos a executar. Elas contm os diretrios dos
aplicativos, banco de dados, cones, preferncias padro para cada aplicativo e para o banco de dados e outras
informaes necessrias inicializao do banco de dados e/ou dos softwares aplicativos.
Uma das informaes registradas nesta rea o idioma, territrio e conjunto de caracteres vlidos para a estao do
usurio, que aps o processo de instalao do banco corresponde ao valor escolhido para o banco de dados.
Se desejarmos, podemos modificar o valor destas variveis de ambiente a fim de modificarmos algumas das
caractersticas de nosso sistema. Para tal, devemos executar o programa Regedit do Windows que apresenta todas
as variveis cadastradas para todos os aplicativos.
EXECUTANDO O REGEDIT
No menu Iniciar, opo Executar, podemos digitar Regedit e pressionar o boto OK para que seja apresentada a tela
abaixo, contendo a estrutura principal onde esto armazenadas as informaes de ambiente. Estas informaes
esto organizadas em ns. Como nosso interesse se refere s variveis do Oracle, deveremos expandir o n (basta
clicar sobre o smbolo + esquerda do nome do n) HKEY_LOCAL_MACHINE e, subordinado a este n, deveremos
expandir tambm o n SOFTWARE.
O N ORACLE
No editor de registro, poderemos visualizar uma pasta com o nome de ORACLE. Se a expandirmos encontraremos
uma pasta ALL_HOMES, uma pasta HOME0, uma pasta OLEDB, uma pasta ORACLE_HOMES, etc. Se esta foi a sua
primeira instalao, significa que voc s tem um Oracle Home e, portanto, no esto criadas as pastas HOME1,
HOME2, HOME3, HOME4 e HOME5, como vemos na Figura 1.07. No meu caso este foi o quinto Oracle Home
10 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Para verificarmos as variveis de ambiente e seus valores, devemos clicar sobre a pasta Home0 (para vocs e Home5
para mim). As variveis de ambiente relativas a esta instalao esto visveis na janela direita. Nesta janela
procure a varivel Oracle_Home e verifique o diretrio correspondente.
Dentre estas variveis, devemos procurar pela varivel NLS_LANG, a qual deve estar preenchida com o valor
BRAZILIAN PORTUGUESE_BRAZIL.WE8MSWIN1252 se tivermos escolhido o conjunto de caracteres
WE8MSWIN1252 e o idioma do seu sistema operacional for portugus.
Para modificarmos o valor desta varivel, devemos efetuar um double-click no cone (ab) esquerda do nome da
varivel para que seja apresentada uma janela de edio.
Os valores vlidos para estas variveis esto detalhados no item referente a Globalization Support. Para efeito de
exemplificao, modificamos seu valor para AMERICAN_AMERICA.WE8MSWIN1252.
Com esta alterao todas as mensagens que recebermos no SQL*Plus passaro a ser apresentadas em ingls e toda
informao monetria ou de data apresentar o padro americano. Como, agora, voc j sabe modificar esta varivel,
voc poder escolher uma das duas opes apresentadas anteriormente para ela. Observe, com cuidado, porm, que
o texto deve estar escrito exatamente como visto para que o banco de dados e o aplicativo funcionem corretamente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
11
METODOLOGIA
Apresentao e acompanhamento das etapas necessrias para a criao de um usurio inicial usando a ferramenta SQL*Plus.
Como primeiro passo, devemos acionar o SQL*Plus (presente na pasta Application Development), que apresentar
uma tela de login para que informemos o usurio e a senha. O texto presente nesta tela varia de acordo com a
linguagem em uso.
Neste momento, preencheremos o campo usurio com SYSTEM e o campo senha com o valor MANAGER. O
campo referente string de conexo (Host String ou String do Host) no precisa ser preenchido, uma vez que
estamos fazendo conexo com um banco de dados local. Posteriormente, ao instalarmos os softwares aplicativos
(Oracle Developer 6i), necessitaremos preencher um nome para a conexo, e este assunto ser visto no item
referente instalao dos produtos de desenvolvimento. D OK.
Para a criao de um usurio, devemos digitar na linha apresentada o comando mostrado na Listagem 1.01. O
texto deve ser digitado exatamente como mostrado na listagem (comeando com o texto CREATE USER). Aps
cada linha, tecle Enter para que o SQL*Plus perceba que o comando tem continuao e numere as linhas seguintes.
A troca de linha feita com Enter. Para execuo do comando, deve ser anexado na ltima linha um ponto-evrgula.
A criao do usurio no suficiente para sua utilizao. O prximo comando dar poderes de DBA (administrador
do banco de dados) para o usurio DESENV.
12 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Todos os exerccios do livro usaro este usurio. A seguir faremos a criao das tabelas que usaremos em nosso
estudo. Para tal comearemos com o modelo de dados e, na seqncia, passaremos para os arquivos (scripts) que
contm os comandos para criao e preenchimento das referidas tabelas.
METODOLOGIA
Apresentao da base de dados relacional e descrio dos procedimentos para criao dos dados.
MODELO DE DADOS
Na Figura 1.10, apresentamos um esquema do modelo de entidades e relacionamentos, descrito logo a seguir.
A tabela Funcionrio (Func) tem como primary key (PK) a coluna cd_mat e como foreign key (FK) a coluna cd_depto,
que estabelece relacionamento com a tabela Depto.
A tabela Departamento (Depto) tem como primary key (PK) a coluna cd_depto e como foreign key (FK) a coluna
cd_gerente, que estabelece relacionamento com a tabela Func, e a coluna cd_depto_ctb, que estabelece um autorelacionamento.
A tabela Projeto (Proj) tem como primary key (PK) a coluna cd_proj e como foreign key (FK) a coluna cd_resp, que
estabelece relacionamento com a tabela Func, e a coluna cd_depto, que estabelece relacionamento com a tabela Depto.
A tabela Atividades (Ativ) tem como primary key (PK) a coluna cd_ativ e no possui relacionamentos com outras tabelas.
Finalmente, a tabela Projetos-Atividades (PrjAtv) tem como primary key (PK) as colunas cd_proj e cd_ativ, que
simultaneamente agem como foreign key (FK) e estabelecem relacionamento com as tabelas Proj e Ativ,
respectivamente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
13
Observe que na ltima linha da listagem, o caractere delimitador o plic ( ' ). No momento da digitao, certifique-se de usar esse caractere. Caso
seja utilizado algum outro, como aspas simples ( ), por exemplo, haver erro na compilao. Use sempre o plic!
Nesse primeiro script, todas as tabelas so removidas, o que permite que reexecutemos as mesmas operaes
diversas vezes e faamos a implementao do modelo novamente; portanto, no se espante se a primeira vez que
voc execut-lo cada um dos comandos DROP apresente a mensagem de erro ERRO na linha 1: ORA-00942: a
tabela ou view no existe.
Nesse script, criamos a especificao fsica da tabela Depto. Observe que foram fornecidos parmetros fsicos no
comando Create Table para que a tabela criada tivesse um tamanho reduzido.
14 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Nesse script, criamos a tabela Func, que j estabelece o relacionamento com a tabela Depto e cria uma regra de
integridade para a coluna in_sexo.
A criao da tabela Proj apresentada na Listagem 1.07 j estabelece os relacionamentos com as tabelas Depto e Func.
A criao da tabela Ativ apresenta como particularidade a expresso Organization Index, indicando que no haver
estruturas separadas para os dados e a PK. Ser construda uma nica estrutura B*Tree contendo o ndice e na
mesma linha os dados correspondentes. Esta tabela no possui Rowid fsico e sim lgico. Estudaremos este assunto
no prximo captulo.
Na Listagem 1.09, criamos a tabela Projetos-Atividades com os relacionamentos estabelecidos para as tabelas Proj e Ativ.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
15
Na Listagem 1.10, criamos uma tabela que no se acha presente no modelo. Ela tem as colunas cd_mat e cd_depto,
mas no estabelece relacionamento com as tabelas Func e Depto. Essa tabela tem a finalidade de armazenar
informaes histricas da empresa que podem no mais estar cadastradas nas tabelas dirias. Usaremos suas
informaes para teste de tabelas particionadas.
Observe que ela possui uma clusula Partition By Range, indicando que, fisicamente, esta tabela est subdividida
em quatro partes e que, logicamente, se trata de uma nica tabela. O Oracle responsvel por adicionar ou
pesquisar as informaes na partio correta.
16 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
17
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
ATIV
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
18 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
PRJATV
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
('AD3110',10, '12041989','22041989');
('AD3110',40, '28121991','07011992');
('AD3110',70, '13091994','23091994');
('AD3111',20, '27061990','28071990');
('AD3111',50, '13031993','13041993');
('AD3111',80, '28111995','29121995');
('AD3112',20, '29061990','01071990');
('AD3112',50, '15031993','17031993');
('AD3112',80, '30111995','02121995');
('AD3113',30, '29031991','21041991');
('AD3113',60, '13121993','05011994');
('AD3113',90, '29081996','21091996');
('IF1000',10, '16031989','23031989');
('IF1000',40, '01121991','08121991');
('IF1000',70, '17081994','24081994');
('IF2000',30, '14121990','01011991');
('IF2000',60, '30081993','17091993');
('IF2000',90, '16051996','03061996');
('MA2100',40, '04111991','05121991');
('MA2100',70, '21071994','21081994');
('MA2110',10, '19021989','21021989');
('MA2110',40, '06111991','08111991');
('MA2110',70, '23071994','25071994');
('MA2110',100, '08041997','10041997');
('MA2111',20, '19111989','12121989');
('MA2111',50, '05081992','28081992');
('MA2111',80, '22041995','15051995');
('MA2113',30, '24101990','08111990');
('MA2113',60, '10071993','25071993');
('MA2113',90, '26031996','10041996');
('OP2000',20, '20081990','30081990');
('OP2000',50, '06051993','16051993');
('OP2000',80, '21011996','31011996');
('OP2010',10, '16061989','01071989');
('OP2010',40, '02031992','17031992');
('OP2010',70, '17111994','02121994');
('OP2011',30, '12061991','08071991');
('OP2011',60, '26021994','24031994');
('OP2011',90, '12111996','08121996');
('OP2012',20, '24071990','31071990');
('OP2012',50, '09041993','16041993');
('OP2012',80, '25121995','01011996');
('OP2013',10, '06081989','24081989');
('OP2013',40, '22041992','10051992');
('OP2013',70, '07011995','25011995');
('PL2100',20, '02021990','28021990');
('PL2100',50, '19101992','14111992');
('PL2100',80, '06071995','01081995');
O ltimo script executa todos os demais e estabelece o relacionamento da tabela Depto com a tabela Func, o autorelacionamento e d Commit em todas as atualizaes realizadas. Como ltimo passo, fecha o SQL*Plus.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
19
20 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Captulo 2
SQL E SQL*PLUS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
21
METODOLOGIA
Apresentao terica dos objetivos da linguagem e suas caractersticas.
DADOS HISTRICOS
Em junho de 1970, o Dr. E.F. Codd publicou um artigo intitulado A Relational Model of Data for Large Shared
Data Banks. Este artigo determinou o incio da mudana na filosofia de bancos de dados, at ento hierrquicos
ou de rede. A IBM Corporation, Inc. desenvolveu uma linguagem para usar o modelo imaginado por Codd. Esta
linguagem foi batizada SEQUEL (Structured English Query Language) e posteriormente apenas SQL. Hoje, a
linguagem SQL aceita como um padro para bancos de dados relacionais.
A SQL (Structured Query Language) uma linguagem para interface com bancos de dados relacionais, isto , todos
os usurios e programas que desejarem realizar alguma tarefa no banco de dados devem fornecer comandos escritos
nesta linguagem.
Para que esta linguagem se mantivesse comum a todos os fabricantes de software, algumas instituies estabeleceram
padres para a linguagem. A ltima verso publicada pela ANSI (American National Standard Institute) e pela ISO (International Standards Organization) datada de 1999 e chamada de SQL:99. O SQL do Oracle9i um superset deste padro.
O ORACLE E O SQL
No Oracle, todo e qualquer acesso ao banco de dados deve ser codificado na linguagem SQL. Apesar de muitos dos
produtos da Oracle apresentarem uma interface que, aparentemente, no utiliza SQL, o que fazem, na verdade,
converter as solicitaes dos usurios em comandos de SQL no relacionamento com o banco de dados.
Desta forma, poderamos concluir dizendo que o banco de dados Oracle s entende SQL.
22 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
No Captulo 1 voc encontrar o modelo de dados utilizado ao longo de todo o livro, alm do conjunto de valores armazenados. Se necessrio,
para estudarmos caractersticas especficas, novas tabelas ou colunas podero ser adicionadas.
A ABRANGNCIA DA LINGUAGEM
Se o banco de dados s entende SQL, ento devemos supor que a linguagem possui no apenas comandos de
manipulao, mas tambm comandos para criao dos diversos objetos, controle de acesso, autorizao, etc.
Como isto verdade e em funo da grande quantidade de comandos, a linguagem SQL foi dividida em trs
partes principais.
Comandos para Controle da Transao so os comandos necessrios para que possamos controlar a efetivao
ou no das modificaes realizadas no banco de dados.
Comandos para Controle da Sesso so os comandos necessrios para que possamos modificar as caractersticas
de nossa sesso.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
23
METODOLOGIA
Apresentao conceitual da ferramenta e descrio sinttica dos comandos necessrios edio, execuo e tratamento de arquivos.
TCNICA
Apresentao de exemplos utilizando os comandos bsicos descritos.
A terceira informao deste dilogo corresponde string de conexo (String do Host), ou seja, o nome de um
parmetro que indica a que mquina e a que banco de dados desejamos estabelecer conexo. Se voc estiver
estabelecendo conexo com um banco de dados instalado na mesma mquina (local), este valor no precisa ser
preenchido; caso isto no acontea, consulte seu DBA para obter o nome adequado para preenchimento. Em todo
este captulo estaremos usando o Personal Oracle9i (verso 9.0.1.1.1) para realizao dos testes. A instalao deste
produto se encontra descrita no Captulo 1 (Instalando o Personal Oracle9i no Windows 2000).
Quando a conexo estabelecida, obtemos permisso do banco de dados para enviar comandos e receber respostas.
O intervalo de tempo entre o momento em que uma conexo estabelecida at o momento em que ela encerrada
chamado de Sesso.
O SQL BUFFER
No SQL*Plus, a tela apresentada mostra uma linha com o texto SQL> esquerda do vdeo, indicando que poderemos
digitar o comando que desejamos executar.
24 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Ao digitarmos um comando na linha de prompt (SQL>), a ferramenta identifica este comando e verifica se se trata de
um comando de SQL. Em caso afirmativo, coloca-o numa rea de memria chamada SQL Buffer (ver Figura 2.03).
Quando terminamos a digitao, esta rea de memria, que s pode conter 1(um) comando de SQL, transmitida para
o banco de dados. Quando o banco de dados retorna o resultado, o SQL*Plus recebe a informao, a formata e apresenta.
OS COMANDOS DO SQL*PLUS
No esquema da Figura 2.03, observamos que nem todos os comandos digitados so colocados na rea de Buffer para
transmisso ao banco de dados. Isto ocorre porque o SQL*Plus tambm possui comandos prprios com a finalidade de:
DIGITANDO NO SQL*PLUS
A digitao na linha de prompt pode ser contnua (uma nica linha) ou pode ocupar mais de uma linha, bastando
que teclemos Enter para que seja mostrada uma numerao seqencial no lado esquerdo do vdeo, indicando que
o SQL*Plus considerou continuao do estado de digitao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
25
SELECT
'TESTE'
FROM
DUAL
.
Havendo um comando de SQL armazenado no SQL Buffer, poderemos alter-lo, list-lo ou substitu-lo com alguns
comandos bsicos, prprios do SQL*Plus.
COMANDOS DE EDIO
Os comandos de edio tm o objetivo de modificar a informao armazenada no SQL Buffer. Estes comandos
afetam apenas uma linha de cada vez, isto , a edio feita linha a linha.
Quando listamos o contedo do SQL Buffer, o SQL*Plus mostra do lado esquerdo do texto (ao lado da numerao)
um asterisco em uma das linhas, indicando que se trata da linha corrente, ou seja, da linha apta para modificao.
Desta forma, qualquer comando de edio que viermos a fazer afetar apenas a linha corrente.
LIST
Este comando tem a finalidade de listar uma ou mais linhas do SQL Buffer. A ltima linha listada pelo comando se
tornar a linha corrente.
l2
'TESTE'
l * 4
'TESTE'
FROM
DUAL
l last
DUAL
l 1 *
SELECT
'TESTE'
FROM
DUAL
l *
DUAL
Na Listagem 2.02, o comando List usado em letra minscula. Repita o exemplo utilizando letra maiscula. Voc
poder observar agora que os comandos do SQL*Plus no so case sensitive, isto , a informao pode ser fornecida
em letra minscula ou maiscula indiferentemente.
26 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Repita o teste apresentado na Listagem 2.02 com outras opes sintticas. Verifique se ocorre alguma diferena na
digitao dos comandos em letra maiscula ou minscula.
APPEND
Com este comando, podemos adicionar um trecho de texto ao fim da linha corrente. Sua sintaxe apresentada na
Sintaxe 2.02 a seguir.
Observe, no exemplo da Listagem 2.03, que o texto adicionado imediatamente aps o texto existente na linha
corrente, mesmo havendo um branco entre o comando e o texto. Observe, ainda, que, aps a execuo do comando,
o SQL*Plus apresenta a linha modificada para verificao.
L
SELECT
'TESTE'
FROM
DUAL
L2
'TESTE'
A , 'OUTRO TESTE'
'TESTE', 'OUTRO TESTE'
Se desejarmos incluir um branco (ou mais) entre o texto antigo e o novo, devemos digitar o comando Append,
dois brancos (ou mais) e o texto a ser adicionado. Como teste adicional, tente usar este comando para incluir um
ponto-e-vrgula ao final de alguma linha. Isto no possvel, uma vez que o ponto-e-vrgula no faz parte da
sintaxe do SQL e tem uma conotao especial para o SQL*Plus, pois indica trmino de digitao e solicitao de
execuo. Se, porm, o trecho que estivermos digitando no for de SQL e sim de PL/SQL, teremos necessidade de
incluir o ponto-e-vrgula no texto. Para que isto seja possvel, devemos repetir a ao realizada com o branco, ou
seja, para a incluso de um ponto-e-vrgula ao fim do texto, devemos digitar dois ponto-e-vrgulas seguidos.
CHANGE
Este comando de edio tem o objetivo de substituir parte do texto (ou todo) por outro. O separador (<sepchar>)
pode ser qualquer caracter especial que no esteja presente no texto <old> nem no texto <new>.
Observe que os separadores apresentados so iguais. Podemos utilizar qualquer caracter especial no presente nos
textos, porm, dentro de um comando, s podemos usar um deles.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
27
L
SELECT
'TESTE', 'OUTRO TESTE'
FROM
DUAL
L2
'TESTE', 'OUTRO TESTE'
C/TESTE/TST
'TST', 'OUTRO TESTE'
Este comando efetua apenas uma substituio por linha, isto , a linha analisada da esquerda para a direita
e, quando for encontrado um trecho de texto igual ao texto <old>, feita a substituio pelo texto <new> e o
comando encerrado. Se desejarmos repetir a substituio para outro trecho da linha, devemos digitar o
comando novamente.
Para que no precisemos digitar repetidamente o mesmo comando, podemos pint-lo com o boto esquerdo do mouse (pressionar o mouse
sobre o primeiro caracter que desejamos copiar, mant-lo pressionado e arrast-lo at o ltimo caracter desejado) e, sem soltar o boto esquerdo,
clicar o boto direito do mouse. Esta ao far com que o trecho pintado seja copiado para a linha de prompt. Experimente.
DEL
Exclui uma determinada linha da rea do SQL Buffer. Caso no sejam informados parmetros que indiquem a
linha a ser removida, ser excluda a linha corrente.
No exemplo da Listagem 2.05, foi excluda a linha 2, deixando a sintaxe do comando SQL invlida. O prximo
comando (Input) resolve este problema.
L
SELECT
'TST', 'OUTRO TESTE'
FROM
DUAL
DEL 2
L
SELECT
FROM
DUAL
28 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
INPUT
Este comando adiciona uma ou mais linhas aps a linha corrente (no SQL Buffer). Este comando difere do comando
Append uma vez que pode voltar ao estado de digitao, abrindo uma nova linha para digitao imediatamente
aps a linha corrente.
Quando digitamos o comando juntamente com um texto, criada uma nova linha imediatamente aps a linha
corrente, sendo seu contedo o texto informado. Quando digitamos apenas o comando, o SQL*Plus volta ao
estado de digitao, apresentando uma linha vazia com a numerao esquerda seqencial da linha corrente,
anexada da letra i (ver exemplo da Listagem 2.06).
Para concluirmos a digitao desta(s) linha(s), devemos seguir os procedimentos normais vistos anteriormente no
tpico Digitando no SQL*Plus.
L
SELECT
FROM
DUAL
L1
SELECT
I
'TESTE',
'OUTRO TESTE'
L
SELECT
'TESTE',
'OUTRO TESTE'
FROM
DUAL
Observe que, ao listarmos o contedo do SQL Buffer novamente, as linhas j foram renumeradas.
EDIT
Este comando aciona um editor registrado no Windows e passa como parmetro o nome de um arquivo ou o texto
presente no SQL Buffer, de acordo com o comando executado.
Quando omitimos o nome do arquivo a ser editado, o SQL*Plus aciona o editor do sistema passando como parmetro
o texto do SQL Buffer.
Quando desejamos editar um determinado arquivo, seu nome pode ser informado com ou sem a extenso. A
extenso default SQL.
O editor em uso pode ser obtido atravs de uma varivel chamada _EDITOR. Para sabermos seu valor, podemos
digitar na linha de prompt DEFINE _EDITOR ou apenas DEFINE. No primeiro caso, o SQL*Plus nos mostrar o
valor apenas da varivel solicitada. No segundo caso, sero apresentadas todas as variveis existentes at o momento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
29
O editor-padro no Windows o bloco de notas (Notepad). Antes de substituirmos o editor-padro por outro de
nossa escolha, devemos nos lembrar de que o editor escolhido deve aceitar um parmetro correspondente ao arquivo
a ser editado. A Figura 2.04 apresenta a execuo do comando EDIT sem que informemos o nome do arquivo.
Observe a mensagem apresentada na linha imediatamente abaixo da linha de prompt. Nesta situao, o SQL*Plus
deveria passar como parmetro para o editor o contedo do SQL Buffer. O que ele faz, na verdade, gravar um
arquivo em disco (cujo nome default Afiedt.Buf) e passar o nome deste arquivo como parmetro para o editor.
Quando efetuamos as modificaes desejadas, salvamos e fechamos o editor (Notepad), o SQL*Plus refaz a leitura
do arquivo Afiedt.Buf carregando o texto modificado para o SQL Buffer.
Observe na Figura 2.04 que o Notepad apresenta o texto seguido de uma barra. Essa barra indica ao SQL*Plus que
o comando est completo. Caso retiremos a barra do arquivo, ao retornarmos para o SQL*Plus, ele apresentar
uma linha vazia imediatamente aps a ltima linha lida para que continuemos a digitao. Experimente.
O diretrio do Windows onde sero gravados (ou lidos) os arquivos de trabalho pode ser controlado por ns
(default C:\<Oracle Home>\BIN). Se criarmos um atalho para o SQL*Plus (o executvel se encontra na pasta
C:\<Oracle Home>\BIN e se chama SqlPlusw.exe), basta que modifiquemos o diretrio Iniciar em da pasta
Atalho (ver Figura 2.05), obtida ao pressionarmos o boto direito do mouse sobre o cone do SQL*Plus e escolhermos
a opo Propriedades.
Podemos, tambm, modificar o diretrio de trabalho default do atalho presente na pasta Application Development
da seguinte forma: clicar no boto Iniciar (do Windows), opo Configuraes, opo Barra de Tarefas e menu Iniciar,
pasta Avanado, clicar no boto Avanado, expandir o n Programas, pesquisar (subordinado pasta Documents
and Settings) a pasta All Users e expandi-la, seguir expandindo seqencialmente as pastas Menu Iniciar, Programas e
Oracle OraHome9i. Finalmente clicar sobre a pasta Application Development para que tenhamos acesso ao cone
de ferramentas. Neste ponto, pressionar o boto direito do mouse sobre o cone do SQL*Plus e escolher a opo
30 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Com esta modificao, qualquer arquivo a ser lido ou gravado pelo SQL*Plus o ser no novo diretrio default.
Se desejarmos efetuar a leitura ou gravao de arquivos em outros diretrios, podemos incluir o caminho onde se
encontra o arquivo ao usarmos o comando EDIT.
RUN
Este comando envia o contedo do SQL Buffer para o banco de dados e, ao mesmo tempo, apresenta no vdeo as
linhas enviadas (lista o SQL Buffer).
Para efeito de teste, digite o comando de SQL apresentado na Listagem 2.08 e execute o comando RUN.
SELECT 'TESTE'
FROM DUAL
RUN
SELECT 'TESTE'
FROM DUAL
'TEST
----TESTE
SQL>
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
31
/ (BARRA)
Quando digitamos uma barra na linha de prompt e em seguida teclamos Enter, o SQL*Plus envia o contedo do
SQL Buffer para o banco de dados, porm no apresenta o texto enviado, isto , no lista o SQL Buffer. Esta a
diferena entre o comando Run e a barra.
EXIT / QUIT
Os comandos Exit e Quit so equivalentes e tm a finalidade de encerrar a sesso do SQL*Plus. Isto significa que a
conexo com o banco de dados e, simultaneamente, o prprio programa sero encerrados.
De acordo com a Sintaxe 2.09, observamos que podemos determinar como deve ser considerado o trmino do
programa, isto , com sucesso ou no e com efetivao ou no das modificaes realizadas no banco de dados.
Quando digitamos apenas Quit (ou apenas Exit), ficam valendo as opes sublinhadas. O trmino do programa
considerado normal e a conexo se encerra tambm normalmente com Commit.
As demais opes indicam a ocorrncia de uma falha na execuo do SQL*Plus. Isto pode ser til quando executamos
o SQL*Plus dentro de um arquivo de comandos para o sistema operacional em que devemos determinar como foi
o trmino do programa anterior, para que o prximo comando do arquivo seja executado ou no.
Podemos informar um valor numrico fixo, o valor de uma varivel de substituio ou o valor de uma varivel
BIND (varivel para troca de informaes com um programa PL/SQL ser vista posteriormente).
A utilizao destes parmetros de encerramento comum em arquivo de comandos. Desta forma, poderemos
transferir o valor para o arquivo de comandos a fim de controlar a execuo do comando seguinte.
A conexo com o banco pode ser encerrada independentemente do tipo de trmino do SQL*Plus (Commit ou Rollback).
A execuo de um comando Commit indica ao banco de dados que todos os comandos que modificaram informaes do banco de dados devem
ser considerados vlidos e as alteraes devem ser efetivadas. J um comando Rollback indica que as modificaes devem ser desconsideradas.
A janela da esquerda apresenta um script chamado exsql.sh, contendo a execuo do SQL*Plus numa linha de
comando recebendo como parmetros o user, password e o script a ser executado (@valor). Aps a execuo,
verificamos se o trmino foi normal ou no e adotamos caminhos alternativos. Foi utilizado o parmetro s
indicando que a janela do SQL*Plus no deve ser aberta, ou seja, indicando execuo em batch.
Na janela da direita, apresentamos o contedo deste script valor: ele encerra o SQL*Plus com warning.
Na janela inferior, vemos a execuo do script exsql.sh, no qual o trmino do programa (SQL*Plus) foi anormal,
e recebemos as mensagens adequadas.
32 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
O objetivo de transferirmos informaes para o ambiente permitir que executemos o SQL*Plus em batch e
faamos o controle sobre o resultado, definindo alternativas de ao em caso de erro, warning, etc.
DESCRIBE
Este comando tem a finalidade de apresentar a definio de um objeto criado na base de dados Oracle. O objeto
pode ser uma table, view, synonym, function, procedure ou package.
A Sintaxe 2.10 indica que podemos obter informaes de objetos pertencentes ao usurio que estabeleceu a conexo,
objetos de outros usurios (informando-se <schema>) ou objetos existentes em outros bancos de dados (informandose <database_link_name>). Posteriormente, veremos o conceito de schema e como criar um database_link.
No exemplo a seguir, estamos obtendo a descrio da tabela Dual e da rotina Proc.
Tipo
-----------VARCHAR2(1)
In/Out Default?
--------------IN
Observe que a tabela Dual no pertence ao usurio DESENV e sim ao usurio SYS; por este motivo, estamos
informando o schema da tabela. J a procedure Teste pertence ao usurio DESENV e desta forma no necessrio
que o schema seja fornecido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
33
SAVE
Este comando salva o contedo do SQL Buffer em um arquivo do sistema operacional.
A sintaxe acima permite que o contedo do SQL Buffer seja salvo em um arquivo novo (default), substitua um
arquivo existente ou seja adicionado a um arquivo existente.
A extenso do arquivo fornecida por .<ext> . Caso seja omitida, ser usado SQL como extenso padro. O padro
pode ser mudado com o uso da varivel de sistema Suffix.
No exemplo (Listagem 2.10), recebemos um erro quando indicamos que a salva deve ser efetuada e que o arquivo
j existe em disco. Se desejarmos, realmente, efetuar a salva, complementamos o comando com a opo Replace,
indicando que desejamos a substituio do arquivo.
GET
A recuperao de um texto para o SQL Buffer feita por meio do comando GET. Todo o contedo do arquivo
copiado para o SQL Buffer, e portanto este arquivo deve conter apenas um comando.
34 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Caso o nome do arquivo seja composto das palavras List ou File, seu nome deve ser mencionado entre aspas.
Por default, o contedo do arquivo listado aps ser carregado para o SQL Buffer. Se esta ao no for desejada,
devemos usar a opo Nolist.
START
Este comando executa o contedo de um arquivo de comandos existente no sistema operacional. Cada comando
de SQL ou de SQL*Plus lido e tratado individualmente. Num arquivo executado por Start, podemos incluir
diversos comandos de SQL.
O comando @ sinnimo de Start e o @@ semelhante, com a diferena de que, se este comando for includo em
um arquivo de comandos, ele pesquisar o arquivo associado no diretrio do arquivo de comando e no no
diretrio local, como seria o caso do @ e do Start.
A Sintaxe 2.13 do comando Start permite a passagem de parmetros. Estes parmetros so variveis de substituio
que so utilizadas para a alterao de trechos do comando SQL. Observe no exemplo (Listagem 2.12) que o valor
passado como parmetro substitudo antes de o SQL*Plus enviar o comando ao banco de dados ( apresentada
uma mensagem com o texto da linha antes e aps a substituio).
Foram usados dois parmetros, um para a coluna Nr_git (numrica) e outro para a coluna Cd_depto (alfanumrica).
O valor &1 indica que deve ser feita a substituio pelo primeiro parmetro passado na linha de comando. Como
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
35
As variveis de substituio no precisam ter nomes numricos, podemos dar qualquer nome a elas; porm, neste
caso, no podem ser utilizadas como parmetro para o comando Start. Ao executarmos um comando de SQL ou de
SQL*Plus contendo uma referncia a variveis de substituio, o SQL*Plus solicita que o valor da varivel seja
informado. Observe na Listagem 2.14 que, mesmo quando informamos os valores na linha de comando, estes so
ignorados e feita a solicitao dos valores.
Quando o comando contm a varivel de substituio com nome alfanumrico precedido por um &, o SQL*Plus
no define uma varivel de substituio com este nome. Se for desejada esta ao, devemos preceder a varivel de
substituio com && e teremos o mesmo efeito que no caso do Start com parmetros numricos.
VL_SAL
-----2984
CD_MAT
-----220
NR_GIT
-----18
SQL> @TESTE
antigo
3: WHERE NR_GIT > &&INST AND CD_DEPTO = '&&DEP'
novo
3: WHERE NR_GIT > 17 AND CD_DEPTO = 'D11'
Quando desejamos que o valor da varivel de substituio seja concatenado com outro valor, devemos usar um
ponto (.) para separar seu nome do valor.
36 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Com este comando, encerramos nosso estudo preliminar do SQL*Plus, pois j estamos em condies de editar e
executar os comandos de SQL que trataremos de agora em diante.
Posteriormente voltaremos a estudar outro grupo de comandos do Plus, a fim de formatarmos o resultado de um
comando executado ou modificarmos caractersticas de execuo da ferramenta.
METODOLOGIA
Apresentao e descrio da sintaxe bsica de um comando Select.
TCNICA
Exemplificao de uso com indicao dos resultados obtidos.
INTRODUO
Retomaremos, agora, o estudo da linguagem SQL. Para os testes iniciados a partir deste ponto, utilizaremos as
tabelas apresentadas no tpico Criao da Base Relacional (no Captulo 1).
Como j vimos anteriormente, a DML a parte da SQL que permite que os usurios faam consultas, modifiquem
informaes existentes, criem novos dados ou excluam dados das tabelas do banco de dados.
As consultas aos dados so feitas atravs do comando SELECT, que um dos comandos mais ricos da linguagem,
possuindo uma sintaxe ampla que permite diversas opes de pesquisa.
Na Sintaxe 2.14, verificamos que num comando SELECT, obrigatoriamente, devemos especificar que dados devem
ser trazidos, em que tabelas se encontram e, opcionalmente, podemos especificar que condies devem ser satisfeitas
para a obteno destes dados.
As informaes a serem trazidas do banco de dados podem ser compostas de nomes de colunas, funes ou expresses.
No exemplo da Listagem 2.17 usamos uma funo (to_char), uma expresso matemtica (vl_sal * 1.2) e um nome
de coluna (cd_mat) na clusula Select. Repita este exemplo e voc verificar que todas as linhas da tabela Func so
apresentadas no resultado, uma vez que no existem restries quanto s linhas lidas da tabela.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
37
RESTRINGINDO A CONSULTA
As restries so estabelecidas com o uso da clusula Where. com esta clusula que determinamos que linhas
devem ser selecionadas. Observe o exemplo da Listagem 2.18.
Neste exemplo, s os funcionrios que trabalham no departamento A00 so apresentados no resultado. Se voc
observar detalhadamente o exemplo, verificar que a forma como foi escrito o comando SELECT mistura letras
maisculas e minsculas indiscriminadamente e sem problemas de execuo, porm a string A00 deve ser escrita
em letras maisculas, uma vez que, na coluna cd_depto da tabela Func, esta informao foi armazenada em letras
maisculas. Repita o exemplo anterior comparando cd_depto com a string a00. Qual o resultado encontrado?
Imaginemos agora que desejamos obter informaes de todas as colunas da tabela Func para o funcionrio com
matrcula 100.
Ao utilizarmos o smbolo * (asterisco), estamos informando ao Oracle que desejamos obter todas as colunas da
tabela referenciada na clusula From. Estas colunas so apresentadas na mesma ordem em que foram criadas na
tabela correspondente. J no exemplo da Listagem 2.18, as informaes foram trazidas na ordem de seleo, uma
vez que mencionamos explicitamente o que desejvamos obter.
Para a montagem do resultado, o SQL*Plus tem a necessidade de determinar o tamanho de cada coluna para que possa
definir o layout de apresentao; desta forma, existem alguns padres de layout de acordo com o tipo de coluna.
Para as colunas de data, o tamanho determinado pela mscara de edio default em uso na sesso (obtida pela
NLS do banco de dados ou da estao) ou pela mscara de edio especfica modificada pelo uso da funo To_Char.
Em ambos os casos, o alinhamento pela esquerda.
Para as colunas alfanumricas, o tamanho da coluna determinado por sua definio na tabela do banco de dados
(Char, Nchar, Varchar2, Varchar ou Nvarchar2) e o alinhamento pela esquerda.
Para as colunas Long, Clob ou Nclob, a largura determinada pelas variveis de sistema Longchunksize ou Long,
o que for menor.
Para as colunas numricas, o tamanho determinado pelo cabealho da coluna, sendo que seu tamanho mnimo
dado pela varivel de sistema NumWidth (do SQL*Plus). O alinhamento pela direita.
Todos estes padres podem ser modificados com o uso do comando Column do SQL*Plus.
38 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
OPERADORES DE COMPARAO
At este momento, as restries estabelecidas na clusula Where utilizaram apenas a igualdade como operador de
comparao, porm a sintaxe do comando permite a utilizao dos seguintes operadores: = (igual), ^= (diferente),
> (maior), >= (maior ou igual), < (menor), <= (menor ou igual), <> (diferente) e != (diferente).
A palavra NOT tambm pode ser usada para estabelecer uma negao.
USANDO AND E OR
Se desejamos colocar mais de uma condio de restrio na clusula Where, estas condies devem ser combinadas
atravs das palavras And ou Or.
Com a palavra And, indicamos restries que devem acontecer simultaneamente, ambas obrigatrias. Com a
palavra Or, indicamos restries que podem ou no acontecer simultaneamente. Veja os exemplos da Listagem
2.24 a seguir.
ou
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO, NR_CARGO
2
FROM FUNC
3
WHERE CD_DEPTO = 'A00' OR NR_CARGO = 56;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
39
Observe no exemplo da Listagem 2.26 que o valor do salrio est sendo multiplicado por um nmero negativo (1.1). O Oracle considera este smbolo como o sinal do nmero (menos unrio) e no uma operao de subtrao.
Este predicado compara valores correspondentes coluna mencionada. Podemos comparar valores numricos,
alfanumricos e at mesmo datas. Neste caso, desejamos selecionar todos os funcionrios com data de nascimento
entre 01/01/70 e 31/12/71.
Como as datas armazenadas no banco de dados comportam hora, minuto e segundo, optamos por transformar
uma constante com data de 01/01/72 e subtrair da mesma 1 segundo (1/86400), de tal forma que todos os
funcionrios nascidos at s 23:59:59 do dia 31/12/71 pudessem ser selecionados.
40 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Listagem 2.29 In
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO
2
FROM FUNC
3
WHERE CD_MAT IN (10, 100, 320);
Da mesma forma que o predicado Between, podemos comparar valores alfanumricos, datas ou valores numricos.
No exemplo (Listagem 2.31), foram selecionados todos os funcionrios cujo nome comeasse com a letra E e que
trabalhassem em um departamento cujo cdigo tivesse trs caracteres, o primeiro fosse D e o terceiro fosse 1.
Se desejssemos saber quais os funcionrios que tivessem a letra A em seu nome, qual a sintaxe necessria?
Os caracteres porcentagem e sublinhado, por possurem um significado especial, no podem ser usados normalmente
na string de pesquisa; precisamos indicar ao Oracle que estamos pesquisando exatamente aquele caracter.
Suponhamos, ento, que desejssemos pesquisar a existncia do caracter % num texto de uma determinada coluna
de tabela. Teramos a necessidade de indicar que, neste caso, o smbolo de porcentagem deveria ser considerado
um caracter normal apto para pesquisa. Veja exemplo na Listagem 2.32.
Na clusula Like, aparece o caracter porcentagem trs vezes. A primeira e a ltima indicam que pode haver qualquer
nmero de caracteres (de 0 a n) antes e depois do texto a ser pesquisado. A segunda, uma vez que precedida pelo
caracter de escape (/), indica que este o texto que desejamos pesquisar.
O caracter de escape definido pela clusula Escape e pode ser qualquer caracter exceto % e _ (underscore).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
41
No exemplo, tentamos comparar o valor ausente com NULL atravs dos operadores >= (maior ou igual) e = (igual),
o que no produziu nenhuma linha como resultado. Faa outros testes utilizando comparaes com esta coluna e
voc comprovar que, apenas quando vier a utilizar a expresso Is Null, conseguir obter a linha em que a coluna
cd_gerente no est preenchida, ou seja, seu valor est ausente.
Se a pesquisa, por outro lado, no fornecer possibilidade de o Oracle restringir a busca a determinadas parties,
todas sero selecionadas.
Utilizando uma sintaxe prpria do comando SELECT, podemos contornar esta situao (se desejarmos) limitando
a busca a uma determinada partio, bastando que mencionemos a clusula Partition aps a clusula From, como
mostrado na Listagem 2.35.
42 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
O uso de tabelas particionadas pode ser muito til, justamente para dados histricos, que no precisam ser
consultados todo o tempo e que, estando armazenados em reas (tablespaces) separadas das linhas mais
freqentemente utilizadas da tabela, podem trazer significativo ganho na performance das aplicaes dirias.
EXERCCIOS
A soluo dos exerccios propostos aqui est no ltimo tpico deste Captulo, intitulado Resoluo dos Exerccios
Propostos. Tente resolver toda a lista primeiro e s no final verifique as respostas. Salve todos os exerccios em
arquivos de trabalho. Se as respostas estiverem difceis de conferir refaa a carga das tabelas com o sript L01_17.sql
2.01) Deseja-se uma lista que contenha nmero da matrcula, primeiro e ltimo nome e cargo de todos os
funcionrios do sexo feminino que tenham cargo superior a 55.
2.02) Deseja-se uma lista que contenha nmero de matrcula, nome e sobrenome do funcionrio em cujo sobrenome
no seja encontrada a letra E.
2.03) Repita o exerccio anterior de tal forma que a letra pesquisada seja fornecida por varivel de substituio na
linha do comando.
2.04) Deseja-se uma lista contendo cdigo e nome do projeto para todos os projetos que possuam o texto AMA
em algum lugar de seu nome. Como restrio adicional, temos que somente os projetos em cujo cdigo existam os
nmeros 21 como terceiro e quarto caracter devem ser pesquisados.
2.05) Obtenha a descrio da tabela Funcionrio.
2.06) Deseja-se uma lista contendo os cdigos de departamento para os departamentos que possuam funcionrios.
Na listagem-resposta, no deve haver repetio de cdigo de departamento.
2.07) Deseja-se uma lista contendo cdigo do departamento e nome do departamento de todos os departamentos
em que o cdigo do departamento contbil no est preenchido.
2.08) Deseja-se uma lista (matrcula, nome e departamento) de todos os funcionrios que estejam alocados aos
departamentos A00, B01 ou C01.
2.09) Deseja-se saber quais os funcionrios (matrcula, cargo e departamento) que foram cadastrados na partio
Anos95_99 da tabela de histrico de promoes.
METODOLOGIA
Apresentao e descrio da sintaxe bsica dos comandos Insert, Update e Delete.
TCNICA
Atualizao dos dados armazenados utilizando a sintaxe descrita seguida de consulta a estes dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
43
Com esta sintaxe, podemos incluir linhas em tabelas locais, de outros schemas e ainda de outros bancos de dados
(@<dblink>). A incluso pode ser feita linha a linha ou os valores podem ser obtidos de outra(s) tabela(s) do banco
de dados de tal forma que a incluso de diversas linhas pode ser feita com um nico comando Insert. Finalmente,
podemos definir que os valores sejam cadastrados em uma determinada partio de uma tabela especfica. A
seguir, estudaremos separadamente cada uma das opes apresentadas.
Suponhamos que desejssemos incluir duas novas linhas na tabela de funcionrios, porm no dispomos de
informaes completas destes novos funcionrios. Observe as diferenas sintticas nos exemplos da Listagem 2.36.
No primeiro Insert, foram mencionadas as colunas que desejvamos preencher. Desta forma, informamos valores
apenas para estas colunas.
No segundo caso, as colunas da tabela no foram mencionadas; sendo assim, precisamos associar valores a cada
uma das colunas. Faa um Describe da tabela Func e verifique a ordem em que as colunas foram criadas na tabela.
Esta a ordem em que devemos fornecer informaes para a segunda forma sinttica.
Quando no possumos valor para uma determinada coluna, podemos utilizar a palavra-chave NULL, indicando
que a coluna especfica no ser gravada no banco de dados.
No prximo exemplo, faremos a incluso de dados sem mencionar em que partio a incluso deve ser realizada.
Uma vez que a coluna dt_promocao de preenchimento obrigatrio, ser em funo dela que o Oracle descobrir
em que partio deve incluir cada uma das linhas.
44 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Neste exemplo, tentamos incluir linhas na partio Anos2000, quando, na verdade, a data da promoo era de
1999. Observamos que o Oracle, apesar de informarmos o nome da partio, faz a verificao e impede que faamos
a incluso na partio incorreta, garantindo a integridade lgica da informao armazenada.
No exemplo da Listagem 2.39, o comando Insert foi utilizado para efetuar a incluso de diversas linhas
simultaneamente. As linhas foram obtidas da prpria tabela Func para efeito de teste. Observe que o novo cdigo
da matrcula foi derivado do valor antigo, porm foi obrigatria sua modificao, pois cd_mat primary key da
tabela Func. Isto significa que o Oracle no admitir duas linhas com o mesmo valor de matrcula.
Na Listagem 2.40, foram feitas duas tentativas de incluso que resultaram em falha.
No primeiro comando, tentamos incluir uma matrcula j existente, o que causou a mensagem de erro ORA00001: restrio exclusiva (DESENV.SYS_C00642) violada, onde nos mostrada qual a regra de integridade que foi
violada (SYS_C00642); este o nome da restrio de primary key da tabela Func.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
45
primeira vista, pode no fazer sentido a utilizao desta clusula, porm, posteriormente, veremos que pode ser
interessante obter como retorno o endereo lgico de gravao da linha, chamado de ROWID, ou ainda a referncia
a um objeto tabela (object table).
No exemplo, declaramos duas variveis no SQL*Plus (ser visto no item Conhecendo Mais Sobre o SQL*Plus) e as utilizamos
para receber o valor retornado. O comando Print tambm um comando do SQL*Plus e ser visto no mesmo item.
46 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Suponhamos que desejssemos alterar o salrio de todos os funcionrios em 10%. O comando Update poderia ser
utilizado de forma que o novo salrio fosse igual ao anterior mais 10%. Para que todos os funcionrios fossem
atualizados, bastaria que omitssemos a clusula Where. Faa este teste.
No prximo exemplo, tentaremos atualizar o salrio e cargo dos funcionrios com cargo 58 para que ganhem 90%
do salrio da gerente Cristina Henderson (matrcula 10) e o mesmo cargo. Para realizarmos esta atualizao,
precisaremos consultar os dados para obter o salrio e cargo do gerente, calcular 90% do salrio e, ento, fazer a
atribuio aos funcionrios com cargo 58.
No exemplo apresentado, todas as operaes foram feitas em um nico comando Update. Sua sintaxe permite que
na clusula de atribuio faamos uma busca para obteno do valor a ser atribudo. Observe que o Select interno
possui uma clusula Where que determina os valores a serem obtidos e o comando Update tambm possui uma
clusula Where para determinar quais linhas sero atualizadas.
Experimente repetir o exemplo, porm no lugar de matrcula 10 na restrio do Select utilize matrcula maior que
10. Substitua o cargo para 66 (caso contrrio, nenhuma linha estar apta para atualizao).
A mensagem de erro apresentada ORA-01427: a subconsulta de uma nica linha retorna mais de uma linha, indica
que a subquery s pode retornar uma linha para ser usada como atribuio nas colunas a serem atualizadas.
Daremos um exemplo a seguir que far a atualizao dos dados em uma tabela particionada (Hst_Promo).
Primeiramente sem mencionar a partio e posteriormente indicando qual a partio a ser modificada.
Se no mencionarmos a partio, todas as parties sero consultadas para verificao da condio de seleo.
Quando mencionamos a partio, a restrio presente na clusula Where somente ser verificada para esta partio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
47
Neste exemplo apenas uma linha foi atualizada; para que fosse possvel o retorno das informaes de diversas
linhas, deveramos declarar um host array (por exemplo, um nvel 01 do Cobol) para receber a informao. Os
tipos das colunas retornadas e os elementos do array devem ser compatveis, alm do que o nmero de linhas
retornadas no pode exceder ao tamanho do array.
Na Listagem 2.45, declaramos uma varivel BIND no SQL*Plus do tipo alfanumrica e utilizamos a funo
ROWIDTOCHAR para converter o formato ROWID para o formato alfanumrico, j que no pudemos declarar no
SQL*Plus uma varivel com o tipo de que necessitvamos. As funes de SQL sero tratadas ainda neste captulo
no tpico Modificando o Resultado com Funes e a declarao de variveis no SQL*Plus no tpico Conhecendo
Mais Sobre o SQL*Plus.
Nosso primeiro exemplo remover aquela funcionria recm-contratada Elizabeth Jorio e, ainda, o gerente do
departamento D11.
No primeiro comando Delete executado, conseguimos remover a funcionria desejada. Na clusula Where, utilizamos
a pesquisa pelo nome Elizabeth, que foi escrito exatamente igual forma como estava armazenado. O que aconteceria
se tivssemos feito a pesquisa com o nome escrito com todas as letras em maisculas? Faa este teste voc mesmo.
A sintaxe dos comandos de SQL pode ser escrita em letras maisculas ou minsculas, conforme nosso desejo, uma
vez que os comandos no so sensveis utilizao de maisculas ou minsculas. J o contedo de uma coluna
depende da forma como a informao foi armazenada. Em uma pesquisa posterior, devemos igualar a coluna a um
valor constante escrito exatamente da mesma forma que foi armazenado. Caso contrrio, no encontraremos a
linha na base de dados.
48 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
A mensagem de erro ORA-02292: restrio de integridade (DESENV.SYS_C00650) violada registro filho localizado,
indica que foi encontrado um registro subordinado ao registro de funcionrio que desejvamos remover. A restrio
de integridade que garante esta regra se chama SYS_C00650.
Nosso prximo teste ser a remoo de linhas de uma tabela particionada. Inicialmente sem mencionarmos a
partio e, posteriormente, mencionando o nome da partio desejada.
Quando mencionamos o nome da partio, estamos restringindo a pesquisa a esta partio, tornando a execuo
do comando mais eficiente. Quando isto no ocorre, todas as parties so pesquisadas.
EXERCCIOS
A soluo dos exerccios propostos aqui est no fim deste captulo, em tpico intitulado Resoluo dos Exerccios
Propostos. Tente resolver toda a lista primeiro e s no final verifique as respostas. Salve todos os exerccios em
arquivos de trabalho.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
49
Joana Rodrigues
Marcelo Salgado
salrio
R$ 1.435,00
R$ 1.743,00
departamento
E21
B01
sexo
feminino
masculino
grau de instruo
17
19
cargo
52
55
2.11) Deseja-se, agora, completar as informaes sobre os novos funcionrios. Sabendo-se que a funcionria Joana
recebeu ramal 1512 e data de admisso 15/01/99 e que o funcionrio Marcelo recebeu ramal 1418 e data de
admisso 15/02/99, necessrio que os dados na tabela Func sejam atualizados e que sejam includas as linhas
correspondentes ao valor inicial dos funcionrios na tabela de histrico de promoes.
2.12) Inclua-se como funcionrio. Preencha todas as colunas da tabela. O nmero da matrcula deve corresponder
ao dia do seu aniversrio somado ao ano.
2.13) Tente trocar o cdigo do departamento associado a voc para um cdigo de departamento invlido. O que
acontece? Por qu?
2.14) Inclua todos os funcionrios do departamento D11 no departamento D01, acrescentando ao nmero da
matrcula o valor 340.
2.15) Altere o ramal de todos os funcionrios do departamento D11 para 1437.
2.16) Exclua todas as linhas da partio Anos80.
2.17) Aumente o salrio de todos os funcionrios em 10%.
2.18) Exclua todos os funcionrios que ganhem mais que o funcionrio cuja matrcula 200. O que ocorre? Por qu?
METODOLOGIA
Apresentao e descrio de clusulas adicionais para os comandos Select, Insert, Update e Delete que permitam ordenao e restries baseadas em consultas.
TCNICA
Apresentao de problemas resolvidos com a utilizao da sintaxe descrita.
USANDO APELIDOS
A partir de agora, voc ver aparecer nos comandos de SQL apelidos para as colunas (ou expresses) e posteriormente
para o nome da tabela. A utilizao de apelidos bastante simples, bastando que coloquemos o apelido desejado
ao lado da expresso (ou nome da coluna), sem vrgula entre eles. O Oracle enviar ao SQL*Plus o valor da coluna
indicando o apelido (ou alias) como sendo o nome daquela coluna. Esta uma forma de modificarmos o cabealho
do resultado gerado.
50 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Neste primeiro exemplo, ordenamos o resultado por cdigo do departamento ascendentemente e por salrio
(terceira coluna da lista de seleo) em ordem descendente. Observe que as trs primeiras linhas so do departamento
A00 e que o primeiro funcionrio apresentado possui salrio superior aos demais.
Na Listagem 2.50, a ordenao primria feita pela coluna cd_depto (segunda coluna na lista de seleo) sem que
tenhamos fornecido a indicao Asc ou Desc. Pelo resultado, conclumos que a ordenao default Asc.
Neste comando Select foi calculada uma expresso (vl_sal * 1.1), a qual recebeu o apelido de Projeo. Este apelido
foi utilizado com sucesso na clusula Order By.
No exemplo anterior, a ordenao foi feita pela coluna cd_depto, apesar de esta no estar presente na lista de
seleo. Na verdade, o Oracle faz a seleo da coluna, ordena o resultado e apenas no envia o valor correspondente
para o usurio solicitante.
Ainda neste exemplo, utilizamos para apelido um nome composto de duas palavras, sendo necessrio o uso das
aspas para indicar que se tratava de um nico nome. A palavra-chave AS foi usada para indicar ao Oracle que
incluiramos um apelido para a coluna, isto no obrigatrio; podemos trabalhar com o formato visto no exemplo
2.50. Teste voc agora outros tipos de apelidos usando os caracteres especiais do teclado. Experimente a utilizao
sem aspas e verifique o erro recebido.
Faamos, agora, a ordenao proposta pela Listagem 2.52. O que acontece quando ordenamos por uma coluna
cujo contedo de alguma (ou algumas linhas) est ausente. Teste este exemplo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
51
Na Listagem 2.53 usamos a clusula NULLS FIRST para que o posicionamento das linhas com valores ausentes seja
apresentado antes dos demais valores em ordenao. Podemos optar por NULLS LAST se desejarmos que estas
linhas sejam apresentadas aps os demais valores.
Foram utilizados dois subselects. O mais interno retorna apenas uma linha, pois a restrio feita pelo cdigo do
departamento (que primary key da tabela Depto). O segundo tambm retorna uma nica linha, pois a restrio
feita por cd_mat (que primary key da tabela Func). A execuo do comando iniciada no subselect mais
interno at atingir o nvel da consulta principal.
No exemplo da Listagem 2.55, estamos selecionando todos os funcionrios do gerente cuja matrcula fornecida
como parmetro.
Nos dois exemplos, o subselect retornou apenas uma linha e pudemos comparar o valor retornado diretamente
com o valor correspondente na consulta principal.
Suponhamos, agora, que a subconsulta retorne mais de uma linha. Neste caso, a comparao no poder ser feita
apenas com um dos operadores de comparao (>, <, =, >=, etc.).
Na Listagem 2.56, a subconsulta retornou diversas linhas (B01, C01, D01 e E01). Desta forma, a consulta principal
no poderia testar apenas a igualdade para uma lista de valores. Foi, ento, utilizada a palavra-chave Some (ou
Any), que indica algum. As palavras-chave a serem usadas juntamente com os operadores de comparao so:
52 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Na Listagem 2.57, foram selecionados todos os departamentos em que no existiam funcionrios alocados, uma
vez que a restrio indicava diferente de todos os cdigos de departamento selecionados na subquery.
Alm desta combinao de palavras-chave e operadores de comparao para tratamento das subqueries, tambm
podemos utilizar o predicado IN (j visto anteriormente), que ter o mesmo significado de = ANY ou, no caso de
NOT IN, o mesmo significado de <> ALL.
Neste exemplo (Listagem 2.58) foram selecionadas, da tabela de funcionrios, apenas informaes dos gerentes.
O gerente do departamento identificado na tabela Depto atravs da coluna cd_gerente, cujo contedo corresponde
ao cdigo da matrcula do funcionrio (gerente) na tabela de Funcionrios.
EXERCCIOS
2.19) Deseja-se atualizar o salrio de todos os funcionrios que so gerentes de departamento em 5%.
2.20) Deseja-se excluir todos os departamentos que no possuam funcionrios alocados.
2.21) Deseja-se uma lista (matrcula, nome e salrio) de todos os funcionrios que ganhem mais que todos os
funcionrios do departamento parametrizado. Ordene o resultado por salrio. Os funcionrios sem salrio devem
ser apresentados no incio da relao.
2.22) Deseja-se uma lista (matrcula, nome e cargo) dos funcionrios que possuam cargo igual ao cargo de algum
dos funcionrios do departamento D11.
2.23) Deseja-se uma lista contendo matrcula, nome, departamento e salrio de todos os funcionrios que sejam
responsveis por projeto (tabela Proj), mas no sejam gerentes (tabela Depto). Ordene o resultado por salrio. Os
funcionrios sem salrio devem ser apresentados no fim da relao.
2.24) Deseja-se uma lista (cdigo e nome) dos departamentos que iniciaram projetos em janeiro de 1996.
METODOLOGIA
Apresentao e descrio das funes que efetuam clculos sobre um conjunto de valores e da clusula Group By que organiza as linhas selecionadas em
grupos de acordo com a especificao fornecida.
TCNICA
Apresentao de exemplos que desenvolvam as sintaxes descritas em uma seqncia crescente de dificuldade.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
53
54 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Neste primeiro exemplo, o grupo sobre o qual os clculos foram feitos foi toda a tabela Funcionrio, uma vez que
no limitamos as linhas selecionadas (Where). Obtivemos a soma de todos os salrios cadastrados, a mdia salarial
(aritmtica), o valor do maior e do menor salrio e quantas linhas foram encontradas na tabela Funcionrio.
Dentro do algoritmo de clculo das funes de grupo, as linhas com NULL so excludas da etapa de avaliao.
Caso esta ao no fosse efetuada, o resultado, freqentemente, seria NULL, uma vez que ao operarmos um valor
desconhecido (NULL) com um valor conhecido o resultado ser invariavelmente desconhecido.
Para verificao dos resultados gerados, prepare a massa de teste apresentada na Listagem 2.60 a seguir.
Nesta massa de teste, temos duas linhas em que a coluna Salrio no est preenchida. Sobre esta massa vamos
efetuar alguns clculos relativos s funes de grupo.
Na sintaxe verificamos que All a opo default; todos os valores (exceto NULL) so passados como argumento das funes.
De acordo com a descrio das funes de agregao a seguir faremos exemplos com a massa de dados anterior
para que os resultados possam ser conferidos e entendidos.
AVG
Retorna a mdia dos valores de <expresso>. Ela pode ser usada como uma funo de agregao ou analtica. Se a
funo for aplicada a um grupamento vazio (sem linhas) o retorno null.
CORR
Retorna o coeficiente da correlao de um conjunto de pares de nmeros. Ela pode ser usada como uma funo de
agregao ou analtica. Os parmetros <expr1> e <expr2> devem ser numricos. Os pares em que <expr1> ou
<expr2> estiverem sem valor so excludos do resultado. A frmula de clculo para esta funo a seguinte:
COVAR_POP(<expr1>, <expr2>) / (STDDEV_POP (<expr1>) * STDDEV_POP (<expr2>))
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
55
COUNT
Retorna o nmero de linhas que satisfaam a query. Ela pode ser usada como uma funo de agregao ou analtica.
COVAR_POP
Retorna a covarincia populacional de um conjunto de pares numricos. Ela pode ser usada como uma funo de
agregao ou analtica. Os parmetros <expr1> e <expr2> devem ser numricos. Os pares em que <expr1> ou
<expr2> estiverem sem valor so excludos do resultado. A frmula de clculo para esta funo a seguinte:
(SUM(<expr1> * <expr2>) (SUM(<expr2>) * SUM(<expr1>)) / n) / n
Se a funo for aplicada a um grupamento vazio (sem linhas) o retorno null. O divisor n indica a quantidade de
linhas onde <expr1> e <expr2> esto preenchidos.
A funo AVG nos traz como resultado 166,667, indicando que a soma das linhas (1000) foi dividida por 6 (linhas
em que salrio tem valor) e no por 8 (total de linhas que atendem condio de busca). As linhas em que salrio
no possui valor (NULL) so ignoradas para clculo do resultado.
A funo Count sobre a coluna vl_sal nos traz como resultado 6, indicando que das linhas selecionadas seis
possuem valor na coluna vl_sal. Quando a mesma funo Count aplicada sobre a coluna cd_mat (primary key),
que possui valor para todas as linhas, o resultado 8, indicando que foram selecionadas oito linhas na consulta.
Observe que a funo Count com o argumento * (asterisco) retorna o mesmo valor que para a coluna cd_mat. Esta
sintaxe fornece o nmero de linhas selecionadas no comando, independente de qualquer coluna. Pode ser usada
sempre que desejarmos saber a quantidade de linhas obtidas.
A funo Sum soma todas as linhas no nulas do resultado. Caso as linhas com valor Null fossem includas, o valor
seria necessariamente Null (isto , desconhecido).
A frmula da funo Covar_Pop utiliza apenas a funo Sum sendo, neste caso, mais fcil de conferirmos o resultado. Se
aplicarmos a frmula ( [35500 [[215*1000 ] / 6 ]] / 6 ) diretamente aos valores obtidos separadamente no exemplo
verificaremos que o resultado obtido negativo (-55.556). Devemos observar que a descrio da funo diz que as linhas
em que uma das expresses Null so excludas do resultado, e neste caso a linha com cargo 12 no entra nos clculos. A
frmula modificada ( [35500 [[203*1000 ] / 6 ]] / 6 ) em funo desta regra obtm o valor esperado de 277,778.
Observe a seguir a descrio da funo Covar_Samp. Repita o exemplo da Listagem 2.61 substituindo Covar_Pop
por Covar_Samp e confira o resultado.
COVAR_SAMP
Retorna a covarincia simples de um conjunto de pares numricos. Ela pode ser usada como uma funo de
agregao ou analtica. Os parmetros <expr1> e <expr2> devem ser numricos. Os pares em que <expr1> ou
<expr2> estiverem sem valor so excludos do resultado. A frmula de clculo para esta funo a seguinte:
(SUM(<expr1> * <expr2>) (SUM(<expr2>) * SUM(<expr1>)) / n) / (n-1)
56 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CUME_DIST
Esta funo calcula a distribuio cumulativa de um valor em um grupo de valores. O valor retornado por esta funo
estar dentro do intervalo > 0 e <= 1. Ela calcula, para uma linha hipottica R identificada pelos argumentos da
funo e especificao de ordenao, a posio relativa de R no grupo de agregao. O clculo considera como se R
estivesse inserida no grupo de linhas a serem agregadas. Os argumentos da funo identificam um nica linha dentro
de cada grupo; desta forma devem estar associados a expresses constantes dentro de cada grupo. Os nmeros de
expresses no argumento e na clusula Order By devem ser idnticos pois sero considerados 1 para 1 posicionalmente.
DENSE_RANK
Esta funo calcula o posicionamento (rank) de uma linha em um grupo ordenado de linhas. O posicionamento
consecutivo, inteiro, comeando em 1. O maior valor do Rank corresponde ao nmero de valores distintos retornados
pela query. Ela calcula o posicionamento relativo de uma linha hipottica identificada pelos argumentos da funo
de acordo com a ordenao especificada. Os argumentos da funo identificam uma nica linha dentro de cada
grupo; desta forma devem estar associados a expresses constantes dentro de cada grupo. Os nmeros de expresses
no argumento e na clusula Order By devem ser idnticos pois sero considerados 1 para 1 posicionalmente.
FIRST
Pode ser usada como funo de agregao ou analtica. Opera em um conjunto de valores a partir de um conjunto
de linhas que rank (so identificadas) como FIRST com relao a uma determinada ordem. Se somente uma
linha for classificada (rank) como FIRST, a agregao realizada em um conjunto de apenas uma linha. A funo
de agregao utilizada em conjunto pode ser MIN, MAX, SUM, COUNT, AVG, VARIANCE ou STDDEV.
Na Listagem 2.62 observamos que as funes Cume_Dist e Dense_Rank receberam como parmetro a constante
300. Poderamos ter fornecido mais de um valor (separados por vrgulas), desde que constantes.
Como primeiro resultado da Cume_Dist para o valor 300 recebemos 1, isto significa que 100% das linhas selecionadas
possuam valores de salrio menores (ou igual) que 300 considerando-se um total de 9 linhas ordenadas
ascendentemente por salrio (o valor 300 includo no resultado) e nos quais os valores Null so considerados os
menores. O segundo resultado (44,44%) indica que o clculo 4/9 foi realizado. Este clculo possui a seguinte
lgica: o valor 300 includo na lista de valores, e desta forma passamos de 8 linhas para 9. Como os valores com
Null foram colocados na frente, os dois valores 300 (o da linha com matrcula 104 e o da constante) ocuparam
respectivamente o terceiro e quarto lugares na seqncia de leitura. Como o clculo se refere a todos os valores
maiores ou iguais a 300 (devido ordenao estabelecida), escolhe-se a posio 4 como numerador do clculo. Se
toda esta explicao est confusa para voc, faa as contas com um valor que no tenha na sua lista, por exemplo
290 ou 310. Outro teste interessante retirar as linhas com Null da query (where vl_sal is not null). Estas duas
modificaes devem te ajudar a entender melhor o resultado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
57
GROUP_ID
Esta funo distingue linhas duplicadas resultantes de uma especificao GROUP BY. Ela somente vlida em
comandos SELECT que utilizem a clusula GROUP BY. Se houver n duplicatas para um determinado grupamento
a funo retornar valores de 0 a n-1.
GROUPING
Esta funo distingue valores relativos a uma agregao que utilize GROUP BY juntamente com as extenses
ROLLUP ou CUBE. O objetivo determinar quando o valor null de uma determinada expresso significa uma
agregao e quando significa o valor real (ou ausente) da expresso. A <expresso> que viermos a usar na funo
GROUPING deve ser compatvel com o valor usado na clusula GROUP BY. O retorno da funo 1 se o valor de
<expresso> null significando um conjunto de todos os valores e 0 se o null significar valor ausente.
GROUPING_ID
Retorna um nmero que corresponde ao Grouping bit vector associado com uma linha. aplicvel somente a
comandos SELECT que incluam a clusula GROUP BY com a extenso ROLLUP ou CUBE e uma funo GROUPING.
LAST
Pode ser usada como funo de agregao ou analtica. Opera em um conjunto de valores a partir de um conjunto
de linhas que rank (so identificadas) como LAST com relao a uma determinada ordem. Se somente uma linha
for classificada (rank) como LAST, a agregao realizada em um conjunto de apenas uma linha. A funo de
agregao utilizada em conjunto pode ser MIN, MAX, SUM, COUNT, AVG, VARIANCE ou STDDEV.
MAX
Retorna o maior valor de <expresso>. Pode ser usada como uma funo de agregao ou analtica.
MIN
Retorna o menor valor de <expresso>. Pode ser usada como uma funo de agregao ou analtica.
PERCENT_RANK
Esta funo similar a CUME_DIST (distribuio cumulativa). O intervalo de valores retornados por PERCENT_RANK
de 0 a 1 (inclusive). A primeira linha em qualquer conjunto tem um PERCENT_RANK de 0.
58 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
A primeira construo da funo LAST obter o menor cargo (min) das linhas classificadas como LAST. Esta
classificao dada atravs da ordenao de salrio, no caso ASC e com nulls no fim. Sendo assim, o maior valor de
salrio NULL (as linhas sem salrio so, portanto, classificadas como LAST). Das 2 linhas com salrio 100, o
menor cargo 12. No segundo exemplo a ordenao de salrio descendente e as linhas sem salrio (NULL) so
ordenadas no incio da fila; desta forma as linhas com salrio 100 so classificadas como LAST e, portanto, o
menor deste grupo cargo 8.
As funes max e min so facilmente compreendidas por ns. O maior salrio, desconsiderando-se as linhas sem
salrio, 300 e o maior cargo 65. O menor salrio e o menor cargo so, respectivamente, 100 e 8.
Nos testes da funo Percent_Rank utilizamos, desta vez, valores que no pertencem lista de valores presentes na
tabela. Como esta funo similar funo Cume_Dist j sabemos que a frmula corresponde diviso da posio
da linha em questo em relao posio da ltima linha do grupo. Como esta funo inicia a classificao em
zero, temos como primeira frmula a diviso de 6 por 8, ou seja, a posio da linha com valor de salrio 310 6 (os
trs valores 100 ocupam as posies 0, 1 e 2; os dois valores 200 ocupam as posies 3 e 4; o valor 300 ocupa a
quinta posio; o valor 310 a sexta e os dois valores null as posies 7 e 8) e da ltima linha 8. O resultado 0.75
corresponde a esta diviso. No segundo exemplo temos 5 sobre 8 (os trs valores 100 ocupam as posies 0, 1 e 2;
os dois valores 200 ocupam as posies 3 e 4; o valor 290 ocupa a quinta posio; o valor 300 a sexta posio e os
dois valores null as posies 7 e 8). No terceiro exemplo, pela classificao, o valor 310 o primeiro da lista,
recebendo o valor 0, que, dividido por qualquer valor, d zero. No ltimo exemplo a diviso realizada de 1 por 8.
PERCENTILE_CONT
Esta funo realiza uma distribuio inversa considerando um modelo de distribuio contnua. Ela obtm um
valor percentual e uma especificao de ordenao e retorna um valor interpolado que deve cair dentro do percentual
em relao especificao de ordenao. Os nulls so ignorados no clculo. O parmetro deve ser uma constante
com valor entre 0 e 1, pois indica um valor percentual. A clusula ORDER BY deve ser composta de uma nica
expresso numrica ou datetime. O resultado calculado por uma interpolao linear entre os valores aps a
ordenao. Usando-se o valor percentual (P) e o nmero de linhas (N) no grupo de agregao, determina-se o
nmero da linha de interesse. Este nmero de linha calculado de acordo com a frmula:
RN = (1 + (P * ( N 1)
O resultado final da funo de agregao calculado pela interpolao linear entre os valores das linhas relativas
ao nmero da linha, onde CRN = CEILING(RN) e FRN = FLOOR(RN). O resultado final ser o valor da expresso da
linha em RN se CRN=FRN=RN (no houver mais de um valor resultante) ou (CRN RN) * (valor da expresso da
linha em FRN) + (RN FRN) * (valor da expresso da linha em CRN).
Tambm pode ser usada como funo analtica.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
59
PERCENTILE_DISC
uma distribuio inversa que assume um modelo de distribuio discreta. Ela recebe um valor percentual e uma
especificao de ordenao e retorna um elemento do conjunto. Os Nulls so ignorados no clculo. O parmetro deve
ser uma constante com valor numrico entre 0 e 1 pois corresponde a um percentual. A clusula ORDER BY no possui
restries de tipo. Para um determinado valor percentual P e de acordo com a ordenao, a funo retornar o menor
valor CUME_DIST (com relao mesma especificao de ordenao) que seja maior ou igual ao parmetro P.
RANK
Calcula o posicionamento (rank) de um valor em um grupo de valores. As linhas com valores iguais recebem a
mesma classificao. Calcula a posio de uma linha hipottica identificada pelos argumentos da funo com
relao a uma ordenao. Os argumentos da funo devem ser constantes. O nmero de expresses no argumento
e na clusula Order By devem ser idnticos pois sero considerados 1 para 1 posicionalmente.
CONT_ASC,
CONT_DESC,
DISC_ASC,
DISC_DESC,
RK_ASC,
RK_DESC
Para as funes Percentile, passamos como parmetro um percentual e recebemos como resultado um valor relativo
expresso de ordenao (no nosso caso VL_SAL), ou seja, elas funcionam de forma inversa da funo CUME_DIST.
Nos quatro exemplos passamos como parmetro 50%. Uma vez que nestas funes os valores NULLS so eliminados,
a quantidade de linhas teis passa a ser 6 e 50%, ou seja, o centro da lista corresponde a duas linhas, uma linha
com valor 100 e uma linha com valor 200 (tanto ascendentemente quanto descendentemente).
Para Percentile_Cont, uma vez que no conseguimos obter uma nica linha (veja a seguir o clculo de RN), devemos
aplicar a frmula (CRN RN) * (valor da expresso da linha em FRN) + (RN FRN) * (valor da expresso da linha em CRN).
Como primeiro passo devemos determinar a linha de interesse, ou seja, RN = (1 + P * (N 1)); no nosso caso, temos
que RN = (1 + 0.5 * (6 1)), onde P o percentual (0.5) e N a quantidade de linhas (6). O resultado RN=3.5. O valor
de CRN (o menor inteiro maior que RN) 4. O valor de FRN (o maior inteiro menor que RN) 3.
Uma vez que RN representa a linha desejada e a linha 3.5 no existe, devemos aplicar a frmula mostrada acima e
obter o valor de salrio.
Valor = (4 3.5) * (salrio na linha FRN = 100) + (3.5 3) * (salrio na linha CRN = 200)
Valor = 0.5 * 100 + 0.5 * 200 = 50 + 100 = 150
Para Percentile_Disc no feita a interpolao, o valor retornado ser o primeiro em relao s linhas que atendem
ao percentual, ou seja, ser o valor da linha FRN. Neste caso temos valores diferentes para ordenaes diferentes.
Para ordenao ascendente, o valor correspondente linha 3 (FRN) 100 e para ordenao descendente, o valor
correspondente linha 3 (FRN) 200.
A funo Rank d a posio relativa do valor na lista ordenada considerando o valor inserido no grupo; desta
forma o primeiro resultado 8 considera a seguinte lista: null (1), null (2), 100 (3), 100 (4), 100 (5), 200 (6), 200 (7),
290 (8) e 300 (9). No segundo exemplo, temos a posio 4 para o valor de salrio 290, o que significa: null (1), null
(2), 300 (3), 290 (4), 200 (5), 200 (6), 100 (7), 100 (8) e 100 (9).
As funes a seguir calculam a regresso linear de um conjunto de duplas de nmeros. Podem ser usadas como
funes de agregao ou analticas.
60 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
REGR_AVGX
Avalia a mdia da varivel independente, representada por <expresso2> da regresso linear. Ela calcula
AVG(<expresso2>) aps a eliminao das linhas em que <expresso1> ou <expresso2> no possuem valor (NULL).
REGR_AVGY
Avalia a mdia da varivel dependente, representada por <expresso1> da regresso linear. Ela calcula
AVG(<expresso1>) aps a eliminao das linhas em que <expresso1> ou <expresso2> no possuem valor (NULL).
REGR_COUNT
Retorna um inteiro que representa o nmero de pares no nulos usados para clculo da regresso linear.
REGR_INTERCEPT
Retorna o y-intercept da regresso linear. Aps a eliminao dos pares de nulos o seguinte clculo realizado:
AVG(<expr1>) REGR_SLOPE(<expr1>, <expr2>) * AVG(<expr2>)
REGR_R2
Retorna o coeficiente de determinao para a regresso. Aps a eliminao dos pares nulos o seguinte clculo realizado:
IF VAR_POP (<expr2>) = 0 THEN NULL;
ELSIF VAR_POP (<expr1>) = 0 AND VAR_POP(<exp2>) <> 0 THEN 1;
ELSIF VAR_POP(<expr1>) > 0 AND VAR_POP(<expr2>) != 0 THEN POWER(CORR(<expr1>,<expr2>),2);
ELSE NULL;
REGR_SLOPE
Retorna o declive da linha. Aps a eliminao dos pares nulos, o seguinte clculo realizado:
COVAR_POP(<expr1>, <expr2>) / VAR_POP(<expr2>)
REGR_SXX
As funes Regr_Sxx, Regr_Sxy e Regr_Syy so funes auxiliares usadas para calcular vrias estatsticas. Aps a
eliminao dos pares nulos, o seguinte clculo realizado:
REGR_COUNT(<expr1>, <expr2>) * VAR_POP(<expr2>)
REGR_SXY
As funes Regr_Sxx, Regr_Sxy e Regr_Syy so funes auxiliares usadas para calcular vrias estatsticas. Aps a
eliminao dos pares nulos, o seguinte clculo realizado:
REGR_COUNT(<expr1>, <expr2>) * COVAR_POP(<expr1>, <expr2>)
REGR_SYY
As funes Regr_Sxx, Regr_Sxy e Regr_Syy so funes auxiliares usadas para calcular vrias estatsticas. Aps a
eliminao dos pares nulos, o seguinte clculo realizado:
REGR_COUNT(<expr1>, <expr2>) * VAR_POP(<expr1>)
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
61
Neste exemplo analisaremos apenas os trs primeiros, pois os demais podem ser conferidos diretamente pelas
frmulas descritas.
Dentro da nossa massa de dados apenas seis linhas (veja REGR_COUNT) possuem valor em ambas as colunas
VL_SAL e NR_CARGO; portanto, este ser a quantidade utilizada para clculo em todas as funes deste grupo.
Para a mdia de NR_CARGO (calculada por REGR_AVGX) devemos levar em considerao os valores (8 + 32 + 32
+ 45 + 65 + 21) divididos por 6. Para a mdia de VL_SAL (calculada por REGR_AVGY devemos levar em considerao
os valores (100 + 100 + 100 + 200 + 200 + 300) divididos por 6.
STDDEV
Retorna o desvio padro simples da <expresso>. Pode ser usada tanto como funo de agregao como funo analtica.
Retorna 0 quando houver apenas uma linha de entrada. O resultado corresponde raiz quadrada da varincia.
STDDEV_POP
Calcula o desvio padro populacional e retorna a raiz quadrada da varincia populacional. Pode ser usada como
uma funo de agregao ou como funo analtica. Retorna Null se o retorno da funo VAR_POP for Null.
STDDEV_SAMP
Calcula o desvio padro simples cumulativo e retorna a raiz quadrada da varincia simples. Pode ser usada como
funo de agregao ou analtica. Utiliza a funo VAR_SAMP como entrada. Se o resultado de VAR_SAMP for null,
seu retorno tambm ser null.
SUM
Retorna o somatrio dos valores de <expresso>. Pode ser usada como funo de agregao ou analtica.
VAR_POP
Retorna a varincia populacional de um conjunto de linhas aps descartar as linha nulas. Pode ser usada como funo
de agregao ou analtica. Se o conjunto de entrada for vazio, o resultado ser null. O seguinte clculo realizado:
(SUM(<expr> ** 2) - SUM(<expr>) ** 2 / COUNT(<expr>)) / COUNT(<expr>)
VAR_SAMP
Retorna a varincia simples de um conjunto de linhas aps descartar as linhas nulas. Pode ser usada como funo
de agregao ou analtica. Se o conjunto de entrada for vazio, o resultado ser null. O seguinte clculo realizado:
(SUM(<expr> ** 2) - SUM(<expr>) ** 2 / COUNT(<expr>)) / (COUNT(<expr>) 1)
Esta funo similar funo VARIANCE, exceto que para um elemento a funo VARIANCE retorna 0 e VAR_SAMP
retorna null.
62 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
VARIANCE
Retorna a varincia dos valores de <expresso>. Pode ser usada como funo de agregao ou analtica. O clculo
da varincia feito da seguinte forma:
IF <quantidade de linhas> = 1 THEN 0
ELSE VAR_SAMP(<expr>)
Comeando pelo fim, confirmamos que o resultado da funo VARIANCE e VAR_SAMP so iguais pois a quantidade
de linhas informadas para a funo foi maior que 1. A funo SUM, presente no resultado, pode ser utilizada
juntamente com a clusula DISTINCT indicando que somente valores diferentes de salrio sero somados (100 +
200 + 300). Para conferirmos os valores das demais funes devemos apenas realizar os clculos descritos acima,
considerando o resultado de SUM_2 como sendo sum(vl_sal 2) e SUM**2 como sendo sum(vl_sal)2. A quantidade
de linhas para salrio 6.
COUNT(*) SUM(VL_SAL)
-------- ----------4
19665,13
2
6681,68
3
10162,08
Neste primeiro exemplo, as linhas da tabela de funcionrios foram divididas em grupos com relao coluna
Cdigo do Departamento. Desta forma, o grupo com cd_depto valendo A00 possui soma total dos salrios igual
a 19.665,13 e composto de quatro linhas. J o grupo com cd_depto valendo C01 possui soma total dos salrios
igual a 10.162,08 e composto de trs linhas. Das informaes apresentadas, a nica que no se apresenta como
argumento de uma funo de grupo a coluna em relao qual foi feito o grupamento, uma vez que seu valor
igual em todas as linhas do grupo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
63
Na Listagem 2.68, foi feita uma tentativa de se obter uma informao unitria do conjunto de linhas de cada
grupo. A mensagem de erro indica que isto no possvel, uma vez que aquela coluna no se encontra presente na
clusula Group By.
REGRA
No possvel a utilizao direta de colunas no referenciadas na clusula Group By na lista de seleo. Estas
colunas s podem ser usadas como argumento das funes de grupo.
Na lista de seleo, podemos utilizar outras expresses que resultem no mesmo valor para todas as linhas de cada
grupo, tais como: valores constantes, as funes User, Userid, Sysdate, clculos envolvendo as colunas sobre as
quais est sendo feito o grupamento (ver Listagem 2.65).
No exemplo da Listagem 2.69, foram selecionadas da tabela Funcionrio as linhas em que a coluna in_sexo possua
o valor M. Este conjunto de linhas foi separado de acordo com o valor de cargo. Para cada um dos grupos foram
aplicadas as funes Max, Min e Avg.
Observe que a restrio presente na clusula Where faz referncia a uma informao da tabela Func. Imagine que
desejssemos obter apenas as linhas em que a mdia salarial fosse superior a R$ 2.500,00.
A utilizao desta restrio na clusula Where causa um erro (ORA-00934: a funo de grupo no permitida aqui)
que indica que no podemos fazer referncia ao resultado do grupamento antes de o grupamento ser realizado.
A CLUSULA HAVING
A clusula Having vem resolver o problema apresentado no exemplo da Listagem 2.70. Ela se aplica aps o
grupamento ter sido realizado. Assim, poderemos efetuar uma restrio sobre as colunas calculadas durante a
execuo da clusula Group By.
A clusula Having no precisa ser usada em conjunto com a clusula Group By. Se ela for usada sem a clusula Group By, toda a tabela ser
tratada como um (1) grupo.
64 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
FROM FUNC
WHERE IN_SEXO = 'M'
GROUP BY NR_CARGO
HAVING AVG(VL_SAL) > 2500;
Na Listagem 2.71, a restrio foi feita sobre a soma salarial que no foi mencionada na clusula Select. Neste
exemplo, foram selecionados outros tipos de informao que podem aparecer na lista de seleo de um grupamento.
Observe que em todos os exemplos apresentados o resultado de um grupamento sempre trouxe as linhas ordenadas
pela coluna (ou colunas) sobre a qual foi feito o grupamento. Isto ocorre porque o Oracle pode executar uma operao
de ordenao para separar as linhas selecionadas de acordo com os grupos. O resultado desta operao pode trazer os
dados na ordem ascendente do grupo ou no. A clusula Group By tem a finalidade de grupar as linhas e no ordenar.
A clusula a ser usada para garantir que o resultado ser apresentado na ordem desejada a clusula Order By.
ROLLUP
uma extenso da clusula Group By que, alm de executar as funes de agregao para os grupos estabelecidos
na clusula, executa as mesmas funes de agregao para subgrupos compostos das n-1, n-2, ..., at 0 expresses
includas na clusula Rollup e retorna uma nica linha sumariada para cada um destes subgrupos. Tem grande
utilidade na construo de subtotais.
Observe na Listagem 2.73 que o grupamento desenvolvido retorna 1 (uma) linha para cada grupo depto-cargo-sexo.
Adicionalmente a estas linhas, a clusula Rollup acrescentou uma linha para cada grupo depto-cargo, outra linha
para cada depto, contendo um sumrio ou subtotal referente s linhas grupadas, e, finalmente, um total geral.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
65
52 F
52 M
52
56 F
56
48 M
48
54 F
54
52 M
52
54 M
54
6520
1725
1918
3643
3617
3617
7260
1775
1775
2625
2625
4400
1995
1995
4999
4999
6994
25174
23 linhas selecionadas.
Poderamos considerar que esta clusula fez uma operao de grupamento para cada quebra do grupo. Esta operao
de agregao para cima (para estabelecer sumrios menos detalhados) chamada de Rollup.
A quantidade de grupos que a clusula Rollup gerar ser igual quantidade de expresses includas na clusula + 1. No caso do exemplo,
inclumos na clusula Rollup trs expresses; portanto, obtivemos quatro tipos de totais.
CUBE
Tambm uma extenso da clusula Group By que, alm de executar as funes de agregao para os grupos
estabelecidos na clusula Cube, executa as mesmas funes de agregao para subgrupos compostos dos valores de
todas as possveis combinaes das expresses (informadas para Cube) e retorna uma nica linha sumariada para
cada subgrupo. Podemos nos utilizar desta caracterstica para a montagem de produtos matriciais (cross-tab).
Observe na Listagem 2.74 que utilizamos o mesmo grupamento do exemplo anterior, porm obtivemos um nmero
maior de linhas no resultado.
66 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
54 F
54
F
M
52 M
52
54 M
54
M
48
48
52
52
52
54
54
54
56
56
M
F
M
F
M
F
F
M
2625
2625
2625
1775
4400
1995
1995
4999
4999
6994
6994
1775
1775
1725
5740
7465
4850
7467
12317
3617
3617
10192
14982
25174
42 linhas selecionadas.
Isso ocorreu porque a clusula Cube, alm de calcular a funo SUM(vl_sal) para o grupo depto-cargo-sexo, tambm
gerou somas para os subgrupos depto-cargo, depto-sexo, cargo-sexo, s cargo, s depto, s sexo e um total geral.
A quantidade de grupos que a clusula Cube gerar ser igual a 2 elevado quantidade de expresses includas na clusula. No caso do exemplo,
inclumos na clusula Cube trs expresses; portanto, obtivemos 8 tipos de totais.
+ 0 *
+ 0 *
+ 0 *
depto
+ 0 *
+ 0 *
depto
+ 0 *
2**0
2**0
2**0
2**0
2**0
2**0
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
67
0
0
0
0
1
1
1
1
M
M
F
M
0
1
0
1
0
0
0
1
0
1
0
1
2
2
2
3
16 linhas selecionadas.
Nos exemplos da Listagem 2.75, simplificamos o grupamento para que o resultado fosse mais claro.
Observe que, os valores de Grouping_id correspondem concatenao dos diversos resultados da funo Grouping na ordem em que ocorrem. Considerando-se uma formao (Grouping s retorna zero ou 1), temos que o valor
de Grouping_id seria calculado (no exemplo) como GRP_DEPTO * 21 + GRP_SEXO * 20.
Desta forma as linhas em que GRP_DEPTO recebeu 0 e GRP_SEXO recebeu 1 calcularam GRP_ID com 1 (0 * 21 + 1 * 20).
As linhas em que GRP_DEPTO recebeu 1 e GRP_SEXO recebeu 0 calcularam GRP_ID com 2 (1 * 21 + 0 * 20). Finalmente
a linha em que tanto GRP_DEPTO quanto GRP_SEXO receberam valor 1 calcularam GRP_ID com 3 (1 * 21 + 1 * 20).
I GROUP_ID() SUM(VL_SAL)
- ---------- ----------F
0
10568
M
0
11642
0
F
0
8080
M
0
7012
0
22210
0
15092
1
22210
1
15092
9 linhas selecionadas.
Neste ltimo exemplo utilizamos a funo GROUP_ID para identificar as linhas de D11 e D21 que aparecem duas
vezes (com os mesmos valores em toda a linha) em funo de um grupamento duplo entre cd_depto e a extenso
Rollup de cd_depto com in_sexo.
EXERCCIOS
2.25) Deseja-se uma lista contendo matrcula, nome e salrio de todos os funcionrios que ganhem mais que a
mdia salarial da empresa.
2.26) Produza uma lista contendo a mdia salarial, total de salrios e quantidade de linhas selecionadas por
departamento, de todos os funcionrios que tenham em seu primeiro nome a letra A.
2.27) Produza uma lista contendo o cargo, a mdia salarial e o nmero de funcionrios grupados por cargo para os
departamentos D01, D11, D21 e E11. Todos os cargos com menos de trs funcionrios devem ser excludos do
resultado. A lista deve vir ordenada descendentemente por mdia salarial.
2.28) Determine a quantidade de atividades diferentes por projeto (tabela Prjatv).
2.29) Deseja-se obter, em mdia, quantos funcionrios existem por departamento.
2.30) Deseja-se obter uma lista (nr_cargo) de todos os cargos que possuam mais de duas funcionrias.
68 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
METODOLOGIA
Apresentao e descrio sinttica das funes escalares subdivididas em grupos de acordo com o tipo de parmetro e retorno.
TCNICA
Apresentao de exemplos que desenvolvam as funes descritas analisando as diversas opes sintticas oferecidas, quando cabvel.
INTRODUO
Funes so programas que realizam determinadas aes, podem receber parmetros e retornam pelo menos um resultado.
As funes de que trataremos neste item so as escalares. Uma funo dita escalar quando se aplica a um valor (e
no a um conjunto, como as funes de grupo).
Dentre as funes predefinidas pelo SQL do Oracle9i, o maior conjunto se refere s funes escalares. Estas builtins se aplicam (s) coluna(s) de uma nica linha, desta forma produzindo um resultado por linha.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
69
Numricas So aquelas que recebem parmetros numricos e geram resultados numricos. Podem ser
subdivididas em Trigonomtricas e Numricas Simples.
NUMRICAS SIMPLES
Recebem parmetros numricos e geram resultados numricos. Foram, para efeito de sintaxe, grupadas de acordo
com a quantidade de parmetros recebidos: um parmetro, dois parmetros obrigatrios e um parmetro obrigatrio
e um opcional. Sero apresentadas em ordem alfabtica.
ABS
Retorna o valor absoluto do argumento.
BITAND
Calcula uma operao de AND entre os bits dos dois argumentos. Os valores do argumento devem ser no
negativos e inteiros.
Esta funo no determina o tipo de seu resultado; portanto, pode ser necessrio que a utilizemos dentro de outra
funo (TO_NUMBER, por exemplo) para garantir que o retorno ser numrico.
CEIL
Retorna o menor inteiro maior ou igual ao argumento.
70 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
EXP
Retorna e elevado n-sima potncia (de acordo com o valor do argumento), onde e = 2.71828183....
Na Listagem 2.77, observamos que a funo Ceil, quando recebe um argumento negativo, aparentemente produz
um resultado incorreto; porm, devemos nos lembrar que 2 maior que 2.5 e, portanto, o resultado est correto.
Para entendermos o resultado da funo Bitand devemos nos lembrar da formao binria dos nmeros envolvidos:
1 = 0 * 2**2 + 0 * 2**1 + 1 * 2**0
5 = 1 * 2**2 + 0 * 2**1 + 1 * 2**0
Uma operao AND somente produzir resultado diferente de zero se ambos os bits correspondentes forem 1.
Neste caso BITAND(1, 2) far um AND entre (001) e (010). Como no ocorre empate (de 1 e 1 na mesma posio
correspondente), o resultado zero. Observe o resultado entre 6 (110) e 2(010).
Esta funo pode ser interessante quando utilizada junto com DECODE.
FLOOR
Retorna o maior inteiro menor que ou igual ao argumento.
LN
Retorna o logaritmo natural do argumento, que deve ser maior que zero.
LOG
Retorna o logaritmo de <expresso2> na base <expresso1>. A base (<expresso1>) deve ser qualquer nmero
positivo diferente de 0 e 1 e <expresso2> deve ser maior que zero.
MOD
Retorna o resto da diviso de <expresso1> por <expresso2>. Se o valor do divisor (<expresso2>) for zero, retornar
o prprio valor de <expresso1>.
POWER
Retorna <expresso1> elevada <expresso2> potncia. Os argumentos <expresso1> e <expresso2> podem assumir
qualquer valor, porm se <expresso1> for negativo, <expresso2> deve ser inteira.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
71
ROUND
Retorna <expresso1> arredondado para um determinado nmero (<expresso2>) de posies direita do ponto decimal.
Se <expresso2> for omitida, o segundo argumento ser considerado zero. Se <expresso2> for negativa, sero arredondados
os dgitos esquerda do ponto decimal. Como restrio temos que <expresso2> deve ser um valor inteiro.
A funo Round realiza a ao de arredondamento se o valor do nmero a ser omitido for maior ou igual a 5. Caso
contrrio, a casa decimal ser simplesmente omitida do resultado.
SIGN
Retorna o sinal da <expresso>. Desta forma, se a <expresso> for menor que zero, o valor retornado ser 1. Se a
<expresso> for igual a zero, o valor retornado ser zero e se a <expresso> for maior que zero, o valor retornado ser 1.
SQRT
Retorna a raiz quadrada do argumento. A funo retorna um resultado real. O argumento (<expresso>) deve ser positivo.
TRUNC
Retorna <expresso1> truncado para um determinado nmero (<expresso2>) de posies direita do ponto decimal. No h arredondamento; as posies superiores ao valor de <expresso2> so apenas omitidas do resultado. Se
<expresso2> for omitida, o segundo argumento ser considerado zero. Se <expresso2> for negativa, sero considerados
os dgitos esquerda do ponto decimal. Como restrio temos que <expresso2> deve ser um valor inteiro.
WIDTH_BUCKET
Esta funo permite a construo de um histograma de intervalos de mesmo tamanho. Os parmetros <menor_valor>
e <maior_valor> determinam o menor valor do histograma e o maior valor do histograma, que ser subdividido
em tantos intervalos quanto determinarmos em <num_buckets> (deve ser uma constante inteira e positiva). Os
intervalos so do tipo fechado-aberto, o que significa que o valor inferior de cada intervalo estar includo naquele
grupo e o valor superior no. A <expresso> deve ser do tipo numrica ou datetime.
72 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
FAIXAS
-----6
6
6
6
6
6
7
7
7
7
7
7
7
8
8
8
8
8
18 linhas selecionadas.
TRIGONOMTRICAS
Recebem parmetros numricos e geram resultados numricos. Esto relacionadas com clculos matemticos de
trigonometria. Levam em considerao que o crculo trigonomtrico tem o tamanho de 1. Os argumentos relativos
a ngulos so fornecidos em radianos.
Para transformarmos um ngulo (em graus) para radianos, devemos dividi-lo por 57.29578.
ACOS
Retorna o arco do cosseno (argumento) informado.
O argumento (<expresso>) deve estar no intervalo de -1 a 1. O resultado ser fornecido em radianos e varia de 0 a p (pi).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
73
ASIN
Retorna o arco do seno (argumento) informado.
O argumento (<expresso>) deve estar no intervalo de 1 a 1. O resultado ser fornecido em radianos e varia de
-p/2 a p/2 (pi / 2).
* 57.29578)
57.29578)
* 57.29578)
57.29578)
ASIN(0.5) ,
ASIN(1) ,
ACOS(0.5) ,
ACOS(1)
ASIN(0.5)
ASIN(1) ACOS(0.5)
ACOS(1)
--------- --------- --------- --------30
90
60
0
ATAN
Retorna o arco da tangente (<expresso>) informada.
O resultado ser fornecido em radianos e varia de -p/2 a p/2 (pi / 2).
ATAN2
Retorna o arco da tangente (<expresso1>/<expresso2>) informada.
O resultado ser fornecido em radianos e varia de -p a p (pi). Observe que ATAN2 (<expresso1>, <expresso2>)
produz o mesmo resultado que ATAN (<expresso1>/<expresso2>).
ATAN(0),
ATAN(0.5),
ATAN(1),
ATAN2(0,1),
ATAN2(1,2),
ATAN2(1,1)
ATAN(0) ATAN(0.5)
ATAN(1) ATAN2(0,1) ATAN2(1,2) ATAN2(1,1)
--------- --------- --------- ---------- ---------- ---------0
26
45
0
26
45
COS
Retorna o cosseno do ngulo (<expresso>) informado, o qual deve ser expresso em radianos.
COSH
Retorna o cosseno hiperblico do ngulo (<expresso>) informado, o qual deve ser expresso em radianos.
COS(30),
COS(60),
COS(0),
COSH(30),
COSH(60),
COSH(0)
COS(30)
COS(60)
COS(0) COSH(30) COSH(60)
COSH(0)
--------- --------- --------- --------- --------- --------,86602541 ,50000001
1 1,1402383 1,6002868
1
74 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SIN
Retorna o seno do ngulo (<expresso>) informado, o qual deve ser expresso em radianos.
SINH
Retorna o seno hiperblico do ngulo (<expresso>) informado, o qual deve ser expresso em radianos.
SIN(30),
SIN(60),
SIN(0),
SINH(30),
SINH(60),
SINH(0)
SIN(30)
SIN(60)
SIN(0) SINH(30) SINH(60)
SINH(0)
--------- --------- --------- --------- --------- --------,5 ,8660254
0 ,54785347 1,249367
0
TAN
Retorna a tangente do ngulo (<expresso>) informado, o qual deve ser expresso em radianos.
TANH
Retorna a tangente hiperblica do ngulo (<expresso>) informado, o qual deve ser expresso em radianos.
TAN(30),
TAN(60),
TAN(45),
TANH(30),
TANH(60),
TANH(45)
TAN(30)
TAN(60)
TAN(45) TANH(30) TANH(60) TANH(45)
--------- --------- --------- --------- --------- --------,57735026 1,7320508 ,99999999 ,48047277 ,78071443 ,6557942
ALFANUMRICAS
Recebem parmetros alfanumricos e/ou numricos e geram resultados alfanumricos.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parmetros recebidos, porm sero apresentadas
em ordem alfabtica.
Os exemplos, preferencialmente, usaro constantes para melhor entendimento e a tabela Dual (do dicionrio de
dados do Oracle) por conter apenas uma linha.
CHR
Retorna o caracter correspondente a <valor>. Esta transformao pode ser feita de acordo com o charset do banco
de dados ou de acordo com o national charset .
Se a opo Using Nchar_Cs no for utilizada, a transformao de <valor> no caracter equivalente ser feita de
acordo com o charset do banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
75
Se a opo Using Nchar_Cs for utilizada, a transformao de <valor> no caracter equivalente ser feita de acordo
com o national charset .
O charset e o national charset so especificados no momento da criao do banco de dados e no podem ser
modificados posteriormente. O charset determina o conjunto de valores vlidos para armazenamento. O national
charset determina o conjunto de valores vlidos para colunas do tipo Nchar, Nvarchar, etc.
CONCAT
Retorna um texto resultante da concatenao de <texto1> com <texto2>. O resultado equivalente ao uso do
operador || (concatenao).
INITCAP
Retorna <texto> com a primeira letra de cada palavra em maiscula e as demais em minsculas. O espao em
branco determina o trmino de uma palavra e o incio de outra. Podemos utilizar tambm outros caracteres no
alfanumricos com este fim.
CONCAT
INITCAP
76 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LOWER
Retorna o <texto> com todas as letras em minsculas.
LPAD
Retorna <texto1> completado esquerda com os caracteres definidos em <texto2> para o comprimento definido
por <tamanho>. Caso <texto2> no seja informado, ser completado com brancos.
Se <texto1> tiver comprimento maior que o valor de <tamanho>, a string resultante ser truncada para o
comprimento definido por <tamanho>.
LTRIM
Retorna <texto> sem os caracteres presentes em <conjunto>, encontrados esquerda. A busca, que se processa da
esquerda para a direita, interrompida quando for encontrado o primeiro caracter no pertencente a <conjunto>.
Caso <conjunto> no seja fornecido, o caracter pesquisado ser o branco.
NLS_INITCAP
Retorna <texto> com a primeira letra de cada palavra em letra maiscula e as demais em minsculas. A funo
considera que as palavras esto separadas por brancos ou caracteres no alfanumricos.
O segundo parmetro (<nlsparam>) s pode conter a sintaxe NLS_SORT = <sort>, onde <sort> pode ser um nome
de idioma ou BINARY. A seqncia de ordenao para determinadas lnguas tambm apresenta requerimentos
especficos para colocao de maisculas e minsculas.
NLS_LOWER
Retorna <texto> com todas as letras em minsculas.
O segundo parmetro (<nlsparam>) s pode conter a sintaxe NLS_SORT = <sort>, onde <sort> pode ser um nome
de idioma ou BINARY. A seqncia de ordenao para determinadas lnguas tambm tem requerimentos especficos
para colocao de maisculas e minsculas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
77
NLS_UPPER
Retorna <texto> com todas as letras em maisculas.
O segundo parmetro (<nlsparam>) s pode conter a sintaxe NLS_SORT = <sort>, onde <sort> pode ser um nome
de idioma ou BINARY. A seqncia de ordenao para determinadas lnguas tambm tem requerimentos especficos
para colocao de maisculas e minsculas.
NLSSORT
Retorna a string de bytes usada para ordenar <texto>.
O segundo parmetro (<nlsparam>) s pode conter a sintaxe NLS_SORT = <sort>, onde <sort> pode ser um nome
de idioma ou BINARY. Se omitirmos o segundo parmetro, esta funo usa a ordenao default em uso na sesso.
Se especificarmos BINARY, ela retorna <texto>.
BINARY
DEFAULT
BINARY
---------------------------- -------1E37140001010100
43484100
REPLACE
Retorna <texto> substituindo cada aparecimento de <string1> no <texto> por <string2>. Se <string2> no for
informada, cada aparecimento de <string1> em <texto> ser removido.
RPAD
Retorna <texto1> completado direita com os caracteres definidos em <texto2> para o comprimento definido por
<tamanho>. Caso <texto2> no seja informado, ser completado com brancos.
Se <texto1> tiver comprimento maior que o valor de <tamanho>, a string resultante ser truncada para o
comprimento definido por <tamanho>.
RTRIM
Retorna <texto> sem os caracteres presentes em <conjunto>, encontrados direita. A busca, que se processa da
direita para a esquerda, interrompida quando for encontrado o primeiro caracter no pertencente a <conjunto>.
Caso <conjunto> no seja fornecido, o caracter pesquisado ser o branco.
78 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SOUNDEX
Retorna uma string que represente o som de <texto>. A funo retorna fonemas iguais para palavras que tenham
o mesmo som em ingls.
SUBSTR
Retorna uma parte de <texto>, comeando no caracter definido por <posio> e com comprimento de <tamanho>.
A funo realiza aes diferentes de acordo com o valor de <posio>. Se <posio> for maior que zero, o Oracle
iniciar a contagem a partir do caracter mais esquerda. Se <posio> for zero, o comprimento ser considerado 1
(o caracter mais esquerda). Finalmente, se <posio> for menor que zero, o Oracle iniciar a contagem a partir do
caracter mais direita.
O parmetro <tamanho>, quando omitido, indica que ser considerado o comprimento determinado por <posio>
at o final da string. Por outro lado, se <tamanho> for menor que 1, ser retornado Null.
Se para os parmetros numricos forem fornecidos valores em ponto flutuante haver transformao com truncamento.
TRANSLATE
Retorna <texto> substituindo cada uma das ocorrncias de <conjunto1> pela ocorrncia correspondente em <conjunto2>.
O relacionamento entre os caracteres de <conjunto1> e <conjunto2> posicional. Se o comprimento de <conjunto2>
for inferior ao comprimento de <conjunto1>, os caracteres sem correspondncia sero omitidos do resultado.
TREAT
Esta funo altera o tipo declarado para a expresso. Uma vez que ela est ligada definio de tipo, somente ser
estudada no Captulo 4.
TRIM
A funo TRIM retira caracteres iniciais (leading), finais (trailing) ou ambos de uma string de caracteres. Se o
conjunto de caracteres a serem pesquisados (Trim_Character) ou o conjunto de caracteres onde a pesquisa ser
feita (Trim_Source) forem literais, devero ser apresentados entre aspas simples.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
79
ABCDEFGHI
JKLMNO
Nos exemplos da Listagem 2.94, usamos um conjunto de caracteres numricos do qual retiramos os zeros iniciais
e finais, e um conjunto de caracteres alfanumricos (literais) do qual retiramos os brancos iniciais e finais. Se no
especificarmos o Trim_Character, o default branco.
Se especificarmos LEADING, o Oracle remove qualquer caracter inicial (lado esquerdo) igual ao Trim_Character.
Se, por outro lado, especificarmos TRAILING, o Oracle remove qualquer caracter final (lado direito) igual ao
Trim_Character.
Se especificarmos BOTH ou omitirmos as trs indicaes, o Oracle remove tanto os caracteres do lado esquerdo
quanto os do lado direito que sejam iguais ao Trim_Character.
UPPER
Retorna <texto> com todas as letras maisculas.
80 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
ASCII
Retorna a representao decimal, no charset do banco de dados, para o primeiro byte de <texto>. Se o charset do
banco de dados for ASCII, esta funo retornar um valor ASCII. Se o banco de dados possuir um charset EBCDIC,
esta funo retornar o valor EBCDIC correspondente.
INSTR
Retorna a posio da n-sima ocorrncia de <texto2> dentro de <texto1>. A ocorrncia desejada fornecida pelo
parmetro <ocorrncia>. A posio inicial de pesquisa dada por <posio>. Se <posio> for negativa, a pesquisa
se dar da direita para a esquerda.
PRIMEIRO E,
POSIO 3,
2A OCORR.,
POSIO -6,
2A OCORR.
Observe na Listagem 2.98 que, quando <posio> negativa, o posicionamento feito da direita para a esquerda, a
ocorrncia contabilizada da direita para a esquerda, mas a posio resultante fornecida da esquerda para a direita.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
81
LENGTH
Retorna o comprimento de <texto> em caracteres.
LENGTH,
CLAS,
CHA
>
LENGTH CLAS
CHA
------- -------------------- -----------13 1E4B1469000101010100 201400010100
DATAS
Realizam manipulao de datas.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parmetros recebidos, porm sero apresentadas
em ordem alfabtica (exceto Sysdate e SessionTimezone).
Os exemplos, preferencialmente usaro constantes para melhor entendimento e a tabela Dual (do dicionrio de
dados do Oracle) por conter apenas uma linha.
Em algumas das funes de data, podemos passar um texto no lugar do parmetro <data>. O Oracle far a converso
usando a funo To_Date com o formato de acordo com o padro em uso na estao do usurio. Nas funes Trunc
e Round, esta ao no possvel.
SYSDATE
Retorna a data e hora correntes do banco de dados. O formato de apresentao depende do idioma e do territrio
em uso na estao do usurio. No afetado pelas modificaes de zona de tempo da sesso do usurio.
ADD_MONTHS
Retorna a data <data1> adicionada de <meses>. O parmetro <meses> deve ser inteiro, porm pode ser negativo. Se
o ms resultante da soma tiver menos dias que o dia calculado ou se o dia fornecido no parmetro <data>
corresponder ao ltimo dia do ms, o dia resultante ser o ltimo dia do ms calculado. Caso contrrio, ser
exatamente o dia fornecido no parmetro <data1>.
82 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CURRENT_DATE
Retorna a data corrente na zona de tempo (meridiano) da sesso do usurio. Caso no venhamos a modificar
caractersticas de meridiano, esta funo e a Sysdate sero similares.
SESSIONTIMEZONE
Apresenta o posicionamento em relao ao fuso horrio da sesso do usurio. Os fusos horrios so calculados em
relao ao meridiano de Greenwich. Se caminharmos para o lado esquerdo do Planisfrio (para este teste conveniente que voc tenha um mo) estaremos subtraindo horas em relao hora oficial de Greenwich. Se caminharmos
para a direita estaremos somando.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
83
Observe na Listagem 2.101 que Sysdate no foi afetada pela modificao na zona de tempo da sesso do usurio.
CURRENT_TIMESTAMP
Retorna a data corrente e hora na zona de tempo da sesso do usurio. Apresenta, adicionalmente, a time zone da
sesso do usurio. A preciso determina frao de segundos (o default 6, o limite 9). A diferena entre esta funo
e LocalTimestamp que apresentado o valor da zona de tempo enquanto que Localtimestamp no apresenta.
DBTIMEZONE
Retorna o valor da zona de tempo do banco de dados. O formato do retorno pode ser um offset ([ + | - ] TZH:TZM)
ou um nome de regio, de acordo com a especificao da data na criao do banco de dados. A tabela
V$Timezone_Names contm uma lista das zonas de tempo por nome.
EXTRACT
Extrai uma determinada informao de tempo (por exemplo ano, ms, dia, segundo, etc.) de um campo do tipo
datetime ou interval. A tabela V$Timezone_Names contm uma lista das zonas de tempo por nome.
FROM_TZ
Converte um valor de timestamp sem zona de tempo para um valor de timestamp com zona de tempo solicitada.
O formato do parmetro <time_zone_value> deve ser um offset ([ + | - ] TZH:TZM). No feita converso de hora,
apenas anexada a especificao de zona de tempo ao timestamp fornecido como parmetro.
LOCALTIMESTAMP
Retorna a data e hora corrente na zona de tempo da sesso.
84 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
DBTIME CURRENT_TIMESTAMP
ANO HORA FROM_TZ
LOCALTIMESTAMP(8)
------ -------------------- ----- ---- -------- ----------- --------------------05:00 11/11/01 09:56:03,00 2001
-6 05/10/01 19:30:25,00 11/11/01 09:56:03,00
0001 -06:00
0000000 +04:00
000056
Neste exemplo observamos que a funo Extract pode ser usada em variveis (no caso usamos as funes SYSDATE
e CURRENT_TIMESTAMP) no formato DATE ou TIMESTAMP. Para que possamos extrair valores como
TIMEZONE_HOUR, o parmetro deve possuir especificao de zona de tempo; caso contrrio receberemos erro
(teste com CURRENT_DATE em vez de CURRENT_TIMESTAMP).
Observe que o resultado da funo FROM_TZ no fez nenhuma modificao na informao passada como parmetro,
e o que muda realmente o tipo de dado retornado, que passa a ser TIMESTAMP WITH TIME ZONE. O primeiro
parmetro passado para a funo tem de ser, necessariamente, um timestamp. No exemplo usamos o formato
TIMESTAMP <string>. A string deve estar no formato: yyyy-mm-dd hh24:mi:ss. Poderamos ter usado,
alternativamente, um valor que j fosse um timestamp, por exemplo Localtimestamp. Receberemos erro se tentarmos
outro tipo de valor, por exemplo uma data ou timestamp with time zone.
A diferena entre a funo Current_Timestamp e a funo Localtimestamp pode ser visualizada no exemplo. A
funo Current_Timestamp do tipo timestamp with time zone, enquanto que Localtimestamp do tipo timestamp.
LAST_DAY
Retorna a data do ltimo dia do ms obtido do parmetro <data>.
MONTHS_BETWEEN
Retorna o nmero de meses entre <data1> e <data2>. Se <data1> e <data2> fizerem referncia ao mesmo dia do
ms ou ao ltimo dia do ms, o resultado sempre inteiro. Caso contrrio, o Oracle calcula a frao do resultado
baseado em meses de 31 dias e considera a diferena de horas entre as datas.
NEW_TIME
O parmetro <data1> fornecido na zona horria <zona1> e ser convertido para a data e hora correspondente em <zona2>.
Tabela 2.01 Valores vlidos para Zonas Horrias (Meridianos)
Abreviatura
Descrio
AST, ADT
BST, BDT
CST, CDT
EST, EDT
GMT
Greenwich
HST, HDT
MST, MDT
NST
PST, PDT
YST, YDT
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
85
LASTDAY
ULTIMO DIA MESMO DIA OUTRO DIA BST
EST
NST
------------------- ---------- --------- --------- ----- ----- ----28/02/1999 00:00:00
2
5
5,03226 23:00 05:00 06:30
NEXT_DAY
Retorna a data correspondente a <dia da semana> que seja posterior a <data1>. A lngua em que o parmetro <dia
da semana> deve ser fornecido depende do idioma em uso na sesso.
ROUND
Retorna o parmetro <data> arredondado para o formato especificado. Caso <formato> no seja informado, haver
o arredondamento para o dia mais prximo.
Observe que a opo WW transformou a data 17/02/1999 em 19/02/1999. Se pegarmos um calendrio de 1999
veremos que o dia primeiro de janeiro caiu em uma sexta-feira. Desta forma a sexta-feira mais prxima do dia 17/
02 (que quarta-feira) corresponde ao dia 19/02 (sexta-feira).
SYS_EXTRACT_UTC
Extrai o UTC (Coordinated Universal Time, ou seja, Greenwich Mean Time) de um parmetro do tipo datetime
with time zone, isto , determina a data e hora no meridiano de Greenwich.
SYSTIMESTAMP
Retorna a data do sistema, incluindo fraes de segundo e a time zone do banco de dados.
86 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
TRUNC
Retorna o parmetro <data> truncado para o formato especificado. Caso <formato> no seja informado, haver o
truncamento para o dia mais prximo.
Tabela 2.02 Formatos vlidos para Round e Trunc
Formato
Descrio
CC, SCC
Ano (meio=01/07)
Ano (ISO)
WW
IW
DDD, DD, J
Dia (DEFAULT)
DAY, DY, D
Hora
MI
Minuto
TZ_OFFSET
Retorna a time zone offset correspondente ao valor passado no parmetro baseado na data que o comando executado.
UTC_STR
-------------------26/12/01 01:23:00,00
0000000
SYSTIMESTAMP
TZ_OFF TZ_OFFS
-------------------- ------ -------11/11/01 15:36:13,00 -03:00 -05:00
0000 -02:00
No exemplo da Listagem 2.107 podemos observar que a funo Sys_Extract_Utc recalcula o parmetro recebido,
fornecendo o resultado no timestamp de Greenwich. O parmetro deve ser um timestamp com zona de tempo.
CONVERSO
Realizam converso de tipo.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parmetros recebidos, porm sero apresentadas
em ordem alfabtica.
Os exemplos, preferencialmente usaro constantes para melhor entendimento e a tabela Dual (do dicionrio de
dados do Oracle) por conter apenas uma linha.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
87
88 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
ASCIISTR
Recebe um argumento string em qualquer charset e retorna uma string ASCII no charset do banco de dados. O valor
retornado contm somente caracteres que so vlidos em SQL e a contrabarra ( \ ).
BIN_TO_NUM
Converte um vetor de bits no seu nmero equivalente. Cada argumento desta funo deve representar um bit
(somente valores 0 e 1 e so permitidos) no vetor.
CAST
Uma converso de tipo coleo para outro tipo coleo. Podemos converter uma coleo annima (o resultado de
uma subquery) ou uma coleo identificada (um Varray ou uma Nested Table) em uma outra coleo que seja
compatvel. Para que seja aceita a converso, os elementos de ambas as colees devem ser de mesmo tipo. Se o
resultado da subquery retornar diversas linhas, devemos indicar isso usando a palavra Multiset. Como esta funo
trata de colees, ela somente ser estudada no Captulo 4.
CHARTOROWID
Converte o valor de <texto> para o formato interno de Rowid.
Cada linha no banco de dados possui um endereo. Este endereo chamado de Rowid. Ele composto de quatro
informaes: data object number (nmero associado a cada segmento do banco de dados), block (bloco de dados
do arquivo que contm a linha), row (nmero da linha dentro do bloco) e file (indica o arquivo database file
onde se acha a linha). Este assunto ser mais explorado no tpico Administrando o Banco de Dados.
Cada tabela (exceto Index Table) possui uma pseudocoluna chamada Rowid. Ela no criada pelo DBA, no
apresentada quando usamos o comando Describe (do SQL*Plus), mas pode ser listada atravs de um comando Select.
No exemplo acima o cedilha maisculo corresponde ao valor C7 (ou 199) e A com til corresponde ao valor C3(195). A
contrabarra indica a presena de um valor em hexadecimal na seqncia. A string de bits informada na funo
BIN_TO_NUM resultou no valor 25 (2**4 + 2**3 + 2**0). A converso do texto Rowid para formato interno pode ser til
na programao, principalmente em linguagens que no possuam variveis com o tipo ROWID (como por exemplo C).
COMPOSE
Recebe um argumento string em qualquer tipo de dados e retorna uma string Unicode em sua forma normalizada
no mesmo charset da entrada. O parmetro de entrada poder estar no formato CHAR, VARCHAR2, NCHAR,
NVARCHAR2, CLOB ou NCLOB.
CONVERT
Converte <texto> para o <charset _destino>. O <charset _db> corresponde ao charset em que <texto> est armazenado.
O valor default o charset do banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
89
DECOMPOSE
Recebe um argumento string em qualquer tipo de dados e retorna uma string Unicode aps decomposio cannica
no mesmo charset da entrada. O parmetro de entrada poder estar no formato CHAR, VARCHAR2, NCHAR,
NVARCHAR2, CLOB ou NCLOB.
HEXTORAW
Converte <texto>, que deve ser um valor hexadecimal, para o formato interno Raw.
NUMTODSINTERVAL
Converte um numrico para o formato de armazenamento INTERVAL DAY TO SECOND. O primeiro parmetro
deve ser numrico. O segundo parmetro pode ser uma string do tipo CHAR, VARCHAR2, NCHAR ou NVARCHAR2
e deve corresponder a um dos seguintes valores: DAY, HOUR, MINUTE, SECOND (case sensitive).
NUMTOYMINTERVAL
Converte um numrico para o formato de armazenamento INTERVAL YEAR TO MONTH. O primeiro parmetro
deve ser numrico. O segundo parmetro pode ser uma string do tipo CHAR, VARCHAR2, NCHAR ou NVARCHAR2
e deve corresponder a um dos seguintes valores: YEAR, MONTH (case sensitive).
No exemplo da Listagem 2.109 podemos observar o uso das funes NUMTODSINTERVAL e NUMTOYMINTERVAL.
No primeiro parmetro passamos um valor numrico (inteiro ou decimal) e no segundo informamos a unidade do
primeiro parmetro. Observe que 125 meses corresponde a 10 anos e 5 meses (NUMTOYMINTERVAL).
RAWTOHEX, RAWTONHEX
Rawtohex converte <raw> para seu texto correspondente em hexadecimal e Rawtonhex converte para hexadecimal em NVARCHAR2.
90 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
ROWIDTOCHAR, ROWIDTONCHAR
A funo RowidToChar converte valores de Rowid para caracteres (ver CharToRowid). O tamanho da string resultante
sempre de 18 caracteres. A funo RowidToNchar converte um valor de Rowid para NVARCHAR2 com comprimento
de 18 caracteres.
TO_CHAR
Esta primeira forma sinttica da funo TO_CHAR s possui um parmetro. Seu objetivo converter valores
NCHAR, NVARCHAR2, CLOB ou NCLOB para o charset do banco de dados.
TO_CHAR
A funo To_Char possui duas sintaxes, uma para efetuar a converso de datas para o formato caracter e outra para
converter o formato numrico para caracter.
As especificaes de formato variam de acordo com a converso desejada. Se o formato no for especificado, ser
usado o formato padro da sesso do usurio. Esse formato determinado pelos parmetros da National Language
Support em uso.
Tabela 2.03 numricos vlidos para To_Char e To_Number
Formato
Descrio
Completa o comprimento do formato com zeros ( esquerda ou direita, de acordo com a mscara fornecida).
A quantidade de 9s determina o comprimento. Se o nmero for positivo acrescentado um branco esquerda e, se negativo, o sinal de menos.
Retorna brancos esquerda da parte inteira de um nmero zero, mesmo que no formato haja zeros.
Notao cientfica.
FM
MI
PR
RN
rn
Pode ser inserido direita ou esquerda, determinando o local do aparecimento do sinal de menos para valores negativos e branco para positivos.
continua
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
91
Formato
Descrio
TM
Text minimum. Retorna (em formato decimal) o menor nmero de caracteres possvel. O default TM9 que retorna o nmero em formato
fixo (a menos que exceda 84 caracteres, neste caso retornado em notao cientfica).
Os formatos numricos podem ser usados na To_Char com parmetro numrico, ou na To_Number.
Os formatos de data podem ser usados na To_Char com parmetro data, ou na To_Date.
TO_CLOB
Converte o valor passado como parmetro (que pode ser uma coluna NCLOB ou outro tipo de caracter) para
CLOB. O parmetro pode ser do tipo CHAR, NCHAR, VARCHAR2, NVARCHAR2, CLOB ou NCLOB.
TO_DATE
Converte <texto> para o formato interno de data. O parmetro <formato> indica em que formato est o texto. Se
o formato for omitido, o Oracle assumir que o texto est no formato de data padro da sesso do usurio.
Tabela 2.04 Formatos de data vlidos para To_Char, To_Date, To_Timestamp e To_Timestmap_Tz
Formato
Descrio
-/,.;:text
AM ou A.M. ou PM ou P.M.
BC ou B.C. AD ou A.D.
CC, SCC
Adiciona 1 aos dois primeiros dgitos do ano (yyyy) e prefixa datas BC com um sinal negativo.
DAY
DD
Dia do ms (1-31).
DDD
DY
EE
FF
Frao de segundo.
HH, HH12
Hora (0-12).
continua
92 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Formato
Descrio
HH24
Hora (0-23).
IW
IYYY ou IYY ou IY ou I
Ano ISO.
Dia em data juliana. Data inicial para formato de data juliana 01/01/4712 BC.
MI
Minuto
MM
Ms (numrico).
MON
MONTH
RM
RR
Ano. Soma 1 aos dois primeiros dgitos de CC se ano for < 50 e os ltimos 2 dgitos do ano corrente forem >=50. Subtrai 1 de
CC se ano >= 50 e os ltimos dois dgitos do ano corrente forem < 50.
RRRR
Ano. Aceita 2 ou 4 dgitos. Se ano informado com 2 dgitos, segue as mesmas regras de RR.
SS
Segundo.
SSSSS
SYYYY
TZD
TZH
TZM
TZR
WW
Caracter radix local para ser usado como separador da parte fracionria dos segundos. Ex.: HH:MI:SSXFF.
Y,YYY
YEAR, SYEAR
YYYY ou YYY ou YY ou Y
Ano.
Os formatos RR e RRRR levam em considerao o ano atual (por exemplo, 1999) e o valor informado de ano (por
exemplo, to_date(ddmmrr, 010149)) para determinao do sculo. Se os dois ltimos dgitos do ano atual (no
nosso caso, 1999) so inferiores a 50 e o ano informado (no nosso caso, 49) < 50, o sculo retornado o
corrente, e se o ano informado for >= 50, o sculo retornado o atual menos 1. Se os dois ltimos dgitos do ano
atual (no nosso caso, 1999) so superiores a 49 e o ano informado (no nosso caso, 49) < 50, o sculo retornado
o corrente mais um, e se o ano informado for >= 50, o sculo retornado o sculo corrente. Como resultado,
o comando to_date(ddmmrr, 010149) executado no ano de 1999 geraria a data 01/01/2049. Este comando
executado no ano 2000 produziria o mesmo resultado, porm observe que a lgica seguida seria diferente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
93
O parmetro <nlsparam> pode conter o texto Nls_Date_Language = <idioma> para os formatos de data e pode
conter os textos Nls_Numeric_Characters = <d><g> Nls_Currency = <texto> Nls_Isso_Currency = <territorio>
para os formatos numricos, onde <d> indica o separador decimal e <g> o separador de grupo.
TO_DSINTERVAL
Converte uma string (no formato CHAR, VARCHAR2, NCHAR ou NVARCHAR2) para INTERVAL DAY TO SECOND. O nico parmetro NLS que pode ser utilizado NLS_NUMERIC_CHARACTERS.
TO_LOB
Essa funo converte valores Long ou Long Raw armazenados em colunas do tipo Long para valores Lob. Podemos
aplicar essa funo somente a uma coluna Long ou Long Raw e somente na lista de seleo de uma subquery de um
comando INSERT.
Como primeiro passo de nosso teste, criamos uma tabela contendo uma coluna do tipo Long e a preenchemos
com dados (Listagem 2.114).
Como segundo passo, criamos uma tabela similar primeira, porm utilizando o tipo de dados Clob.
Fizemos, em seguida, uma tentativa de realizar uma converso implcita da coluna Long para a coluna Lob e
recebemos o erro reportado na Listagem 2.115.
94 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
TO_MULTI_BYTE
Retorna <texto> com todos os seus caracteres single-byte convertidos para o seu correspondente multi-byte. Qualquer
caracter single-byte que no tenha correspondncia includo na string de sada no formato single-byte.
TO_NCHAR
Converte uma string do tipo CLOB ou NCLOB a partir do charset do banco de dados para o national charset . Esta
funo equivalente a TRANSLATEUSING NCHAR_CS.
TO_NCHAR
Converte uma string no formato DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL
TIME ZONE, INTERVAL MONTH TO YEAR ou INTERVAL DAY TO SECOND a partir do charset do banco de dados
para o national charset .
TO_NCHAR
Converte um nmero para uma string NVARCHAR2. O formato e correspondente nlsparam pode ser relativo a
DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL MONTH
TO YEAR ou INTERVAL DAY TO SECOND.
TO_NCLOB
Converte valores CLOB em uma coluna LOB ou outro tipo de string para valores NCLOB. O Oracle converte a
coluna LOB a partir do charset do banco de dados para o national charset .
TO_NUMBER
Converte <texto> para o valor numrico correspondente. O parmetro <formato> tem a finalidade de indicar
como o texto est formatado.
VALOR DSINT
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
95
TO_SINGLE_BYTE
Retorna <texto> com todos os seus caracteres multi-byte convertidos para single-byte. Se houver caracteres multibyte na string sem correspondente single-byte, ele permanecer multi-byte no resultado.
TO_TIMESTAMP
Converte um texto de tipo CHAR, VARCHAR2, NCHAR ou NVARCHAR2 no formato timestamp para um valor
interno de timestamp. O parmetro nls especifica o formato do texto.
TO_TIMESTAMP_TZ
Converte um texto de tipo CHAR, VARCHAR2, NCHAR ou NVARCHAR2 para um valor interno de TIMESTAMP
WITH TIME ZONE. O parmetro nls especifica o formato do texto.
TO_YMINTERVAL
Converte um texto de tipo CHAR, VARCHAR2, NCHAR ou NVARCHAR2 para um valor interno de INTERVAL
YEAR TO MONTH.
TRANSLATE USING
Converte o texto no charset especificado, que pode ser charset do banco de dados ou national charset . Ambos so
especificados quando o banco de dados criado e no podem ser mudados posteriormente. O national charset est
relacionado aos tipos de dados Nchar, Nvarchar2, etc.
UNISTR
Converte uma string em qualquer charset e a retorna em Unicode. Para incluirmos UCS2 codepoints devemos
preceder o caracter por uma contrabarra ( \ ). Para incluirmos a prpria contrabarra ( \ ) devemos preced-la com
outra contrabarra.
OUTRAS
Neste grupo de funes, veremos algumas funes que no se enquadram na classificao anterior. Tanto a sintaxe
quanto a apresentao das funes sero feitas em ordem alfabtica.
Sempre que possvel, nos exemplos, usaremos a tabela Dual (do dicionrio de dados do Oracle).
BFILENAME
Retorna um locator associado a um arquivo binrio presente no ambiente servidor. O objetivo estabelecer uma
ligao entre um arquivo fora do banco de dados e uma coluna no banco de dados. Esta coluna do tipo Bfile.
96 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
COALESCE
Esta funo retorna a primeira expresso no nula da lista. Se todas as expresses forem Null, o resultado ser Null.
DECODE
Compara <expresso> a cada valor do parmetro <compara> e retorna <resultado> se a expresso fornecida for
igual ao parmetro <compara>. Se toda a lista for pesquisada e <expresso> no for igual a nenhum dos parmetros
<compara> fornecidos, o resultado da funo o contedo do parmetro <default>, que se no for informado
causar um resultado Null.
DUMP
Retorna um valor VARCHAR2 contendo o tipo de dado, comprimento (em bytes) e a representao interna da expresso.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
97
Descrio
10
16
17
Os argumentos <inicio> e <comprimento> podem ser combinados para determinar que parte da representao
interna deve ser apresentada. O default retornar a representao interna inteira na notao decimal.
EMPTY_BLOB OU EMPTY_CLOB
Retorna um locator vazio. Pode ser usado para dar valor inicial a uma varivel ou coluna. Empty significa que o
Lob est inicializado mas no preenchido com dados.
EXISTSNODE
Esta funo determina se existe uma estrutura hierrquica (passada como parmetro) no documento especificado.
O retorno da funo ser zero se a estrutura no existir e > 0 se for encontrada.
98 00CURSO COMPLETO
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
No exemplo da Listagem 2.121 criamos uma tabela com uma coluna do tipo SYS.XMLTYPE (verifique este Datatype
no Captulo 10). Como este tipo de coluna no um tipo de dado escalar, um objeto, para incluirmos a informao
precisamos da ajuda do mtodo CREATEXML.
Um documento XML pode ter uma estrutura como podemos observar no exemplo. Diretamente subordinado a
<Endereco> encontramos diversos elementos (<Bairro>, <Cidade>, <Estado>, etc.).
A funo Existsnode verifica a existncia de uma estrutura. No nosso caso poderamos ter procurado por qualquer
elemento subordinado a endereo. O nico cuidado que a informao case sensitive, e desta forma o parmetro
/endereco/numero no encontrado.
O estudo sobre objetos (necessrio para que voc consiga entender o teste) ser realizado no Captulo 4.
EXTRACT
A funo Extract retorna um objeto do tipo XML que contenha a hierarquia pesquisada. Podemos, ento, aplicar
um mtodo deste tipo de objeto e visualizar o contedo, por exemplo.
GREATEST
Retorna a maior <expresso> da lista de valores. Todas as expresses aps a primeira so convertidas para o tipo de
dado da primeira antes de a comparao ser feita. O Oracle no completa as expresses para que fiquem do mesmo
tamanho. Expresses do tipo caracter levaro em considerao o charset do banco de dados.
LEAST
Retorna a menor <expreso> da lista de valores. Todas as expresses aps a primeira so convertidas para o tipo de
dado da primeira antes de a comparao ser feita. O Oracle no completa as expresses para que fiquem do mesmo
tamanho. Expresses do tipo caracter levaro em considerao o charset do banco de dados.
NLS_CHARSET _DECL_LEN
Retorna o comprimento da coluna em caracteres no charset fornecido. O parmetro <tamanho> fornecido em
bytes. O parmetro <charset _id> corresponde ao nmero identificador do charset .
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
99
NLS_CHARSET _ID
Retorna o nmero identificador do charset fornecido pelo parmetro <texto>. A palavra-chave Char_cs retorna o
identificador do charset do banco de dados. A palavra chave Nchar_cs retorna o identificador do national charset .
Nomes de charset invlidos causam o retorno de Null.
NLS_CHARSET _NAME
Retorna o nome do charset correspondente ao nmero identificador fornecido por <charset _id>. Se o identificador
fornecido no tiver correspondncia com um charset vlido, a funo retorna Null.
NULLIF
Esta funo compara <expresso1> e <expresso2>. Se forem iguais ser retornado Null, e caso contrrio ser
retornada <expresso1>.
NVL
Se <expresso1> for Null, a funo retornar <expresso2>, e caso contrrio ser retornado o prprio valor de <expresso1>.
Preferencialmente as duas expresses devem ser de mesmo tipo. Caso no sejam, o Oracle converter <expresso2>
para o tipo de <expresso1>. O tipo de dado retornado ser o tipo de <expresso1> (exceto se <expresso1> for de
um dos tipos de dado caracter, pois neste caso o tipo de dado do retorno ser Varchar2).
NVL2
Se <expresso1> no for null retornar <expresso2>. Se <expresso1> for null, retornar <expresso3>. O
argumento <expresso1> pode ser de qualquer tipo. Os argumentos <expresso2> e <expresso3> podem ser de
qualquer tipo exceto Long.
SYS_CONNECT_BY_PATH
Vlido apenas para queries hierrquicas. Retorna o caminho do valor da coluna a partir do n raiz. Tanto o parmetro
<coluna> quanto o parmetro <texto> podem ser dos tipos CHAR, VARCHAR2, NCHAR e NVARCHAR2.
CD_ PATH
--- -----------/A00
A00 /A00/B01
A00 /A00/C01
A00 /A00/D01
D01 /A00/D01/D11
D01 /A00/D01/D21
A00 /A00/E01
E01 /A00/E01/E11
E01 /A00/E01/E21
9 linhas selecionadas.
O resultado deste exemplo ser melhor compreendido depois que estudarmos hierarquias, neste captulo.
SYS_CONTEXT
Retorna o valor do atributo informado como parmetro e associado com o context namespace.
A tabela a seguir apresenta os atributos vlidos para a funo considerando-se o namespace default USERENV.
Podemos criar nossos prprios namespaces usando o package DBMS_SESSION.
O objetivo de um namespace criarmos uma rea associada sesso do usurio para armazenamento de informaes,
que podem vir a ser usadas em aplicaes.
Tabela 2.06 Atributos para Sys_Context
Formato
Descrio
Nls_territory
Retorna o Territrio.
Nls_currency
Nls_calendar
Nls_date_format
Nls_date_language
Retorna a linguagem usada para dias da semana, meses e assim por diante (em datas).
Nls_sort
Session_user
Current_user
Retorna o nome do usurio da sesso corrente, que pode ser diferente do SESSION_USER de dentro de uma Stored Procedure
(como um Invoker Rights).
Current_schema
Retorna o nome do schema corrente, que pode ser alterado com o comando ALTER SESSION SET SCHEMA <comando>.
Current schemaid
Session_userid
Ip_address
Obtm o endereo de IP de um cliente se este estiver conectado ao Oracle usando o protocolo TCP-IP.
Current_userid
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
101
SYS_DBURIGEN
Esta funo recebe como parmetro uma ou mais colunas (ou atributos) e, opcionalmente, um ROWID e gera uma
URL do tipo DBUriType para uma coluna ou row. Podemos usar o URL para recuperar um documento XML no
banco de dados.
Todas as colunas (ou atributos) devem residir na mesma tabela. Devem fazer referncia a valores que identifiquem
uma linha (PK ou UK). Por default a URL aponta para um documento XML formatado. Se desejarmos que a URL
aponte somente o texto do documento, devemos especificar o parmetro text( ).
SYS_GUID
Gera e retorna um identificador nico global (RAW) composto de 16 bytes.
SYS_TYPEID
Esta funo retorna o typeid do mais especfico tipo do parmetro. Uma vez que esta funo est totalmente ligada
concepo de objetos, somente ser estudada no Captulo 4.
SYS_XMLGEN
Esta funo retorna uma instncia do tipo SYS.XMLType contendo um documento XML. A <expresso> pode ser
um valor escalar, um tipo definido pelo usurio ou uma instncia de um XMLType.
Se <expresso> for escalar o resultado ser um elemento XML contendo o valor escalar. Se a expresso for um tipo
do usurio, a funo mapear os atributos do tipo do usurio para elementos XML. Se <expresso> for uma instncia
XMLType, a funo incluir o documento em um elemento XML cuja tag default ROW.
Observe que o resultado desta funo um objeto do tipo XMLType e no podemos visualizar diretamente seu
contedo. Para isto devemos usar um mtodo que liste seu contedo. Veja o prximo exemplo.
Esta funo ser melhor compreendida depois do estudo sobre objetos no Captulo 4.
SYS_XMLAGG
Agrega todos os documentos XML (ou fragmentos) representados por <expresso> e produz um nico documento
XML. Ele adiciona um novo elemento com o nome default de ROWSET.
UID
Retorna um nmero inteiro que corresponde e identifica o usurio corrente.
USER
Retorna o usurio corrente com o tipo de dado Varchar2.
USERENV
Retorna informaes sobre a sesso corrente.
Os valores vlidos para o parmetro <opo> so os seguintes:
Isdba Retorna True se a sesso corrente foi habilitada como DBA. Caso contrrio, retorna False.
Language Retorna a linguagem, territrio e charset atualmente em uso na sesso.
Terminal Retorna um identificador do sistema operacional para o terminal em uso na sesso corrente.
Sessionid Retorna o identificador de auditoria da sesso. Para que este valor seja significativo, o parmetro de
inicializao do banco de dados Audit_Trail deve estar com o valor True.
Client_Info Retorna at 64 bytes de informao obtidos da sesso do usurio e gravados pelo pacote
DBMS_APPLICATION_INFO.
VSIZE
Retorna o nmero de bytes usados para armazenar a representao interna de <expresso>.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
103
EXERCCIOS
2.41) Deseja-se uma relao contendo matrcula, nome, idade atual e tempo de servio para aqueles funcionrios
que tenham sido admitidos com menos de 21 anos.
2.42) Deseja-se uma relao contendo nome, sobrenome, data e hora do nascimento, ms e ano de admisso em
algarismos romanos e o salrio editado (contendo moeda) para todos os funcionrios que possuam mais de quatro
vogais em seu sobrenome.
2.43) Deseja-se uma relao contendo nome completo do funcionrio (centralizado sob o ttulo Nome), data de
nascimento formatada com hora, minuto e segundo (alinhado direita sob o ttulo Nascimento), o cdigo do
departamento (alinhado esquerda e de tal forma que o ttulo Depto seja apresentado).
2.44) Deseja-se uma relao contendo o nome e sobrenome de todos os funcionrios, sendo que todas as vogais
devem ser apresentadas em minsculas e as consoantes em maisculas. As informaes sobre salrio devem ser
criptografadas da seguinte forma: 22 ser transformado na letra Z; 0,1 sero transformados na letra A; 2,3 sero
transformados na letra B; 4,5,6 sero transformados na letra C, e os demais nmeros na letra D.
2.45) Deseja-se uma relao contendo nome completo do funcionrio usando letras maisculas e minsculas, sexo
por extenso, nmero de dias entre a data de admisso e o ltimo dia do ms da data corrente e o valor do salrio
(se houver definido; caso contrrio, 0) formatado. Esta relao deve ser ordenada do menor salrio para o maior.
2.46) Deseja-se uma relao com as seguintes informaes: linguagem em uso no banco de dados, o conjunto de
caracteres nacionais e o do banco de dados, o endereo da linha do funcionrio com matrcula 100, a data de hoje
(com dia, ms e ano por extenso), a data da prxima quinta-feira, o seno, cosseno e tangente do ngulo de 30 graus.
2.47) Deseja-se realizar o enquadramento dos funcionrios da empresa em uma faixa salarial. O grupo ser dividido
em 10 faixas iguais, sendo o intervalo salarial aprecivel entre 1500 e 5000. Determine a faixa de cada funcionrio.
2.48) Deseja-se obter o valor numrico e nome da zona de tempo da sesso e do banco de dados.
2.49) Receba um timestamp como parmetro e sua zona de tempo e retorne este timestamp convertido para o
horrio de Greenwich.
METODOLOGIA
Apresentao e descrio das funes que efetuam clculos sobre um conjunto de valores.
TCNICA
Apresentao de exemplos que desenvolvam as sintaxes descritas em uma seqncia que analise as opes sintticas disponveis, quando possvel.
INTRODUO
So programas que tm a finalidade de efetuar clculos sobre um conjunto de linhas. Elas diferem das funes de
agregao no sentido de retornarem mltiplas linhas para cada grupo.
O grupo de linhas chamado de window e definido pela clusula analytic. A janela determina o intervalo de
linhas para que os clculos sejam realizados para a current row. Esta janela pode ser definida em funo de
quantidade de linhas ou em funo de um intervalor lgico (por exemplo tempo).
As funes analticas correspondem penltima etapa de execuo de uma query (a ltima corresponde clusula
ORDER BY). Desta forma as funes analticas somente podem ser usadas na clusula SELECT ou na ORDER BY.
O argumento para estas funes pode ser o nome de uma coluna ou uma expresso (combinao de nomes de
colunas, constantes ou outras funes).
A Tabela 2.07 a seguir relaciona todas as funes analticas. Voc vai observar que diversas funes desta lista j
apareceram, no grupo de funes de agregao. O que as torna analticas o uso da palavra chave OVER seguida
das clusulas que aparecem no incio da Sintaxe 2.26.
Tabela 2.07 Relao de funes analticas
Avg (*)
Corr (*)
Covar_pop (*)
Covar_samp (*)
Count (*)
Cume_dist
Dense_rank
First
First_value (*)
Lag
Last
Last_value (*)
Lead
Max (*)
Min (*)
Ntile
Percent_rank
Percentile_cont
Percentile_disc
Rank
Ratio_to_report
Regr_ (*)
Row_number
Stddev (*)
Stddev_pop (*)
Stddev_samp (*)
Sum (*)
Var_pop (*)
Var_samp (*)
Variance (*)
Na lista acima as funes com (*) permitem a sintaxe completa da clusula analtica.
Rows o uso desta palavra significa que para cada linha selecionada ser associada uma window. Esta janela,
que corresponde a um conjunto de linhas, ser usada para clculo do resultado da funo, ou seja, a funo
aplicada a todas as linhas da janela. A palavra ROWS indica, ainda, que a determinao da janela ser feita em
unidades fsicas (linhas). No podemos especificar esta clusula a menos que usemos ORDER BY.
Range o uso desta palavra significa que para cada linha selecionada ser associada uma window. Esta janela,
que corresponde a um conjunto de linhas, ser usada para clculo do resultado da funo, ou seja, a funo
aplicada a todas as linhas da janela. A palavra RANGE especifica a janela como um conjunto lgico. No podemos
especificar esta clusula a menos que usemos ORDER BY.
Unbounded Preceding esta opo indica que a window comea na primeira linha da partio. No pode ser
usado como ponto de fim de especificao.
Between And com esta clusula podemos indicar um ponto de incio e um ponto de trmino da janela. A
primeira expresso determina o ponto inicial e a segunda expresso determina o ponto final.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
105
Current Row se esta expresso for usada como ponto inicial indica que a window comea na linha ou valor
corrente (dependendo da especificao ROW ou RANGE, respectivamente). Neste caso o ponto final no pode
ser <value_expr> PRECEDING. Se especificado como ponto final, indica que a janela termina na linha corrente
ou valor (dependendo da especificao ROW ou RANGE, respectivamente). Neste caso o ponto inicial no pode
ser <value_expr> FOLLOWING.
<value_expr> Preceding se esta expresso for usada como ponto final, ento o ponto inicial tambm dever
ser <value_expr> Preceding. Se especificarmos ROWS, <value_expr> um offset fsico, numrico, positivo. Se
<value_expr> for usada como ponto de incio deve identificar uma linha antes do ponto final. Se especificarmos
RANGE, <value_expr> corresponde a um offset lgico, numrico e positivo ou um intervalo literal. Somente
poderemos especificar uma expresso na clusula ORDER BY e se <value_expr> for numrica, a <expresso> da
Unbounded Following indica que a janela termina na ltima linha da partio. Esta uma especificao de
ponto final e no pode ser usada como ponto de incio.
<value_expr> Following se esta expresso for usada como ponto inicial, ento o ponto final tambm dever
ser <value_expr> Following. Se especificarmos ROWS, <value_expr> um offset fsico, numrico, positivo. Se
<value_expr> for usada como ponto de incio deve identificar uma linha antes do ponto final. Se especificarmos
RANGE, <value_expr> corresponde a um offset lgico, numrico e positivo ou um intervalo literal. Somente
poderemos especificar uma expresso na clusula ORDER BY e se <value_expr> for numrica, a <expresso> da
clusula ORDER BY deve ser um NUMBER ou DATE. Se <value_expr> for um intervalo, a <expresso> da clusula
ORDER BY deve ser do tipo DATE.
Partition By com esta clusula podemos particionar o resultado da query em grupos baseados em um ou mais
valores de <value_expr>. Se a clusula for omitida, haver somente um grupo. Podemos especificar mais de uma
funo analtica na mesma query, cada uma delas contendo clusulas Partition By prprias.
Se omitirmos o uso da clusula windowing, o default RANGE BETWEEN UNBOUNDED PRECEDING AND
CURRENT ROW.
Se voc removeu as linhas criadas no banco de dados para teste das funes de grupo refaa o exemplo da Listagem
2.60 para que estas linhas sejam restauradas e possamos testar este novo grupo de funes.
FIRST_VALUE
uma funo analtica que retorna o primeiro valor em um conjunto ordenado de valores.
Esta funo no pode ser usada por qualquer das outras funes analticas como parmetro (na <expresso>), isto
, no pode ser aninhada.
Para entendermos o resultado temos dois passos a verificar: primeiramente devemos identificar qual a janela de
linhas para cada linha selecionada e como segundo passo devemos aplicar a funo First_Value a cada linha.
Neste primeiro exemplo em funo da restrio especificada UNBOUNDED PRECEDING e UNBOUNDED FOLLOWING, indicamos que todas as linhas selecionadas fazem parte da janela. Como a ordenao ocorre em funo
de salrio DESC, o primeiro cargo de cada grupo o cargo 21, que por este motivo aparece em todos os resultados.
LAG
uma funo analtica que fornece o acesso a mais de uma linha de uma tabela simultaneamente sem um auto-join.
Supondo-se um conjunto de linhas retornadas da querie e uma posio de cursor, esta funo fornece o acesso a uma
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
107
A funo LAG no permite a sintaxe completa da clusula analytic, e desta forma, no determinamos a janela.
No exemplo a funo traz o salrio anterior em relao ordenao de NR_CARGO, ou seja, para o funcionrio
com cargo 45 e salrio 200, a funo apresentou o salrio 100 que corresponde ao salrio do funcionrio com cargo
32 (imediatamente anterior ao funcionrio com cargo 45).
LAST_VALUE
uma funo analtica que retorna o ltimo valor em um conjunto ordenado de valores.
Esta funo no pode ser usada por qualquer das outras funes analticas como parmetro (na <expresso>), isto
, no pode ser aninhada.
A window deste exemplo ser formada (a cada linha) a partir da linha corrente mais uma linha para frente. Assim sendo
para a linha com cargo 8 a window composta das linhas 8 e 45. Para 45 das linhas 45 e 65, para 65 das linhas 65 e 21,
etc. Uma vez que a funo retorna o ltimo valor da seqncia, ser retornado o segundo valor de cada seqncia.
LEAD
uma funo analtica que fornece o acesso a mais de uma linha de uma tabela simultaneamente sem um auto-join.
Supondo-se um conjunto de linhas retornadas da query e uma posio de cursor, esta funo fornece o acesso a uma
NTILE
uma funo analtica que divide um conjunto ordenado de dados em faixas, de acordo com <expresso> e
associa o nmero da faixa correspondente a cada linha. As faixas (buckets) so numeradas de 1 at <expresso>,
que deve ser uma constante positiva (para cada partio).
Se <expresso> for maior que o nmero de linhas as faixas sero preenchidas de uma em uma at a quantidade de
linhas, ficando as demais vazias.
Esta funo no pode ser usada por qualquer das outras funes analticas como parmetro (na <expresso>), isto
, no pode ser aninhada.
No exemplo a lista de cargos foi classificada de acordo com a quantidade de faixas recebida como parmetro e da
ordenao estabelecida. Indicamos a determinao de 3 faixas. Os cargos foram distribudos da seguinte forma: de
8 a 21 para faixa 1, de 32 a 45 para faixa 2 e de 65 em diante para faixa 3.
RATIO_TO_REPORT
uma funo analtica que calcula a razo entre um valor e a soma de um conjunto de valores. Se o parmetro
<expresso> for null o resultado da funo tambm ser null.
O conjunto de valores determinado por <query_partition_clause>. Caso seja omitido ser considerada uma nica
partio composta de todas as linhas retornadas pela query.
Esta funo no pode ser usada por qualquer das outras funes analticas como parmetro (na <expresso>), isto
, no pode ser aninhada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
109
58
32
21
2925 ,227626459
100
,1
300
,3
12
8
32
65
45
61
100
100
200
200
4125
,1
,1
,2
,2
1
Neste exemplo inclumos 3 departamentos para que pudssemos realizar o particionamento dos dados em relao
a estes departamentos. Isto significa que o valor de salrio para os funcionrios do departamento A00 foi dividido
por 12850 (5272+4650+2925) para clculo da razo (Ratio). Observe que, no caso dos funcionrios do departamento
A02, os salrios foram divididos por 1000 (que corresponde soma dos salrios no nulos), e isto significa que os
Nulls foram ignorados para efeito de clculo.
ROW_NUMBER
uma funo analtica que associa um nmero nico para cada linha qual esta aplicada (cada linha da partio
ou retornada pela query), na ordem especificada pela clusula Order By, comeando com 1.
Esta funo no pode ser usada por qualquer das outras funes analticas como parmetro (na <expresso>), isto
, no pode ser aninhada.
Neste exemplo o particionamento foi, novamente, realizado em relao a departamento, ou seja, temos trs grupos,
um para cada departamento. Em cada grupo as linhas foram ordenadas por cargo e receberam um nmero crescente,
comeando em 1 e incremento de 1.
nr_cargo, vl_sal,
over (ORDER BY NR_CARGO NULLS LAST
RANGE BETWEEN 5 PRECEDING AND 5 FOLLOWING) COUNT,
over (ORDER BY NR_CARGO NULLS LAST
RANGE UNBOUNDED PRECEDING) AVG,
over (ORDER BY NR_CARGO NULLS LAST
ROWS 3 PRECEDING) MAX,
Count para esta funo usamos um intervalo correspondente a cargos 5 pontos anteriores ao cargo da linha e
5 pontos posteriores ao cargo da linha. Quando usamos a palavra RANGE estamos utilizando um intervalo
relativo linha. No nosso caso, os intervalos seriam para cargo 8 o intervalo entre 3 e 13 (existem neste intervalo
dois cargos 8 e 12), para cargo 12 o intervalo entre 7 e 17(existem neste intervalo dois cargos 8 e 12), para
cargo 21 o intervalo 16 e 26 (neste intervalo s existe o cargo 21) e assim por diante.
Avg para esta funo no definimos o fim do intervalo, o que significa, por default, o cargo da linha corrente.
Unbounded Preceding indica a primeira linha como incio do intervalo. Sendo assim, para o cargo 8 o intervalo
de linhas composto somente com a linha corrente. Para o cargo 12 o intervalo [8,12]. Para o cargo 21 o
intervalo [8,21] e para o cargo 32 o intervalo [8,32]. Observe que neste ltimo valor, o resultado corresponde
expresso (8+12+21+32+32)/5, com resultado 21. Isto significa que a seleo feita em relao ao valor (todas
as linhas com cargo <=32) e no a posicionamento fsico.
Max para esta funo utilizamos posicionamento fsico, ou seja, o intervalo ser composto de 3 linhas (em
relao ordenao fsica) anteriores e a linha atual. Desta window escolhido o maior valor.
Min para esta funo usamos a sintaxe Range 10 Preceding, o que indica que o intervalo ser composto das linhas
com cargo entre (cargo da linha atual 10) at (cargo da linha atual). Desta window escolhido o menor valor.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
111
Cume_Dist quando esta funo usada analiticamente ela no possui parmetro, o valor comparado se refere ao
valor da expresso usada na clusula ORDER BY aplicada linha corrente. A clusula Partition determina o universo
analisado. Desta forma, para a primeira partio temos 3 linhas (com salrio 100). O valor 0.333 (1/3) indica que
1 linha (no caso a corrente) possui cargo <= 8. Para as linhas com cargo 32, 100% delas possuem cargo <= 32,
considerando-se como universo as linhas com salrio 100. No exemplo existem 4 universos: o universo das
linhas com salrio 100, o das linhas com salrio 200, o das linhas com salrio 300 e o das linhas com salrio Null.
Dense_Rank quando esta funo usada analiticamente ela no possui parmetro. O valor comparado ou classificado
aquele informado na clusula ORDER BY aplicado linha corrente. Considerando-se o universo das linhas com
salrio 100 temos que o cargo 8 o segundo na classificao e 32 o primeiro, pois utilizamos a expresso DESC.
First o uso desta funo analiticamente levar em considerao um universo de valores especfico para cada
linha analisada. Com relao ao grupamento das linhas com salrio 100, usamos ordenao por cargo; desta
forma a linha classificada como FIRST para este primeiro grupo foi aquela com cargo 8. Sobre esta linha aplicamos
a funo max(nr_cargo). Para que o resultado fique mais lgico preencha mais uma coluna da tabela FUNC,
para as linhas com cd_depto = A02 e utilize esta coluna na funo max para que os resultados fiquem diferenciados.
Last o uso desta funo analiticamente levar em considerao um universo de valores especfico para cada linha
analisada. Com relao ao grupamento das linhas com salrio 100, usamos ordenao por cargo; desta forma as
linhas classificadas como LAST para este primeiro grupo foram aquelas com cargo 32. Sobre esta linha aplicamos
a funo min(nr_cargo). Para que o resultado fique mais lgico preencha mais uma coluna da tabela FUNC, para
as linhas com cd_depto = A02 e utilize esta coluna na funo min para que os resultados fiquem diferenciados.
Percent_Rank quando esta funo usada analiticamente ela no possui parmetro, o valor comparado se
refere ao valor da expresso usada na clusula ORDER BY aplicada linha corrente. A clusula Partition determina
o universo analisado. Desta forma para a primeira partio temos 3 linhas (com salrio 100). Uma vez que
ordenamos por cargo descendentemente temos a classificao da seguinte forma: os dois cargos 32 ocupam as
posies 0 e 1, o cargo 8 ocupa a posio 2. Como resultado encontramos o denominador de todas as fraes
deste grupo como sendo 2. Para o cargo 8 a razo 2/2 que produz como resultado 1. Para as linhas com cargo
32 obteremos a primeira classificao, ou seja, 0/2, que produz como resultado zero.
Percentile_Cont a diferena desta funo quando analtica o particionamento, que produzir 4 (no nosso
caso) grupos de interresse. Como primeiro passo devemos determinar a linha de interesse, usaremos, para efeito
de anlise, um grupo com quantidade par de linhas (o grupo com salrio 200). Como RN = (1 + P * (N 1)), no
exemplo da Listagem 2.139, temos que RN = (1 + 0.5 * (2 1)), onde P o percentual (0.5) e N a quantidade de
linhas (2). O resultado RN=1.5. O valor de CRN (o menor inteiro maior que RN) 2. O valor de FRN (o maior
inteiro menor que RN) 1. Uma vez que RN representa a linha desejada e a linha 1.5 no existe, devemos aplicar
a frmula e obter o valor de cargo.
Valor = (2 1.5) * (cargo na linha FRN = 45) + (1.5 1) * (cargo na linha CRN = 65) = (0.5)*45 + (0.5)* 65 = 22.5
+ 32.5 = 55
Percentile_Disc no feita a interpolao, o valor retornado ser o primeiro em relao s linhas que atendem
ao percentual, ou seja, ser o valor da linha FRN. Para o primeiro grupo (salrio igual a 100), a linha RN
possvel de ser encontrada pois RN = (1 + 0.5 * (3 1)), cujo resultado 2. Desta forma a linha de interesse
aquela com cargo 32. Para o segundo grupo j sabemos que RN = 1.5 e portanto temos duas linhas candidatas a
linha de interesse. Como a funo no realiza interpolao, o resultado corresponde, sempre, primeira linha,
e no caso deste grupo o cargo retornado para as duas 45.
Rank a funo Rank d a posio relativa do valor na lista ordenada. A diferena em relao ao seu uso como
funo de agregao que podemos determinar o universo de valores. Para o primeiro grupo, o valor 8 ficou
classificado com 3 e os dois valores 32 como 1. No segundo grupo o valor 45 foi classificado como 2 e o valor 65
como 1. Esta classificao foi dada em funo da ordenao descendente.
EXERCCIOS
2.50) Deseja-se saber (somente para os cargos 55) o salrio do funcionrio com grau de instruo imediatamente
inferior e superior ao seu; o resultado deve vir ordenado pelo nome do funcionrio.
2.51) Ainda estudando uma forma de enquadramento salarial o departamento Pessoal deseja dividir o grupo em
trs faixas, considerando ordenao decrescente de cargo. Apresente o enquadramento para os funcionrios dos
departamentos A00 e D11 e ordene o resultado pelo nome do funcionrio.
2.52) Deseja-se saber quanto o salrio de cada funcionrio representa (percentualmente) em relao ao seu prprio
departamento e em relao empresa.
2.53) Deseja-se saber para cada funcionrio:
a) o salrio imediatamente anterior e posterior ao seu.
b) o cargo imediatamente anterior e posterior ao seu.
c) a classificao do salrio do funcionrio em relao empresa e a seu departamento.
O resultado deve vir ordenado pelo nome do funcionrio.
METODOLOGIA
Apresentao e descrio das operaes da lgebra relacional e sua sintaxe correspondente no Oracle9i.
TCNICA
Descrio da ao realizada pela operao da lgebra relacional com desenvolvimento de exemplo correspondente usando SQL do Oracle9i.
INTRODUO
A lgebra Relacional possui oito operaes (restrio, projeo, unio, interseo, diferena, produto cartesiano,
juno e diviso) para operar conjuntos. Neste tpico, trataremos destas operaes e como execut-las usando o
SQL do Oracle.
SELEO OU RESTRIO
A seleo uma operao que restringe linhas. Supondo-se a existncia de uma tabela F, as tuplas resultantes
seriam representadas por T F [cargo=53]. Isto significa que o resultado T uma relao que contm apenas as
rows de F que satisfazem comparao indicada.
Para exemplificao, utilizaremos duas tabelas F e G criadas a partir da tabela Func, como apresentado na Listagem
2.140 a seguir.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
113
No Oracle, a operao Seleo ou Restrio resolvida pela presena de uma clusula Where que obtenha apenas
as linhas desejadas.
NOME
-----------MARIA
JAIRO
JOAQUIM
Observe que utilizamos o * (asterisco) para obter todas as colunas, uma vez que estamos restringindo apenas as linhas.
PROJEO
A projeo uma operao que restringe colunas. Considerando-se a existncia de uma tabela F, as tuplas resultantes
seriam representadas por T F [cargo, depto]. Isto significa que o resultado T uma relao que contm apenas as
colunas indicadas (cargo e depto). As rows duplicadas que seriam criadas so eliminadas.
No Oracle, esta operao pode ser resolvida utilizando-se a clusula Distinct aplicada s colunas desejadas.
Neste caso, a operao no estabelece restrio sobre as linhas selecionadas (no definida nenhuma clusula Where).
No SQL do Oracle, podemos realizar a combinao destas duas operaes ao adicionarmos ao comando SELECT a
clusula Where, juntamente com a definio das colunas na clusula Select.
UNIO
A operao de unio efetua uma soma de conjuntos eliminando as duplicidades. Considerando-se a existncia das
duas tabelas F e G, as tuplas resultantes da unio seriam representadas por T F G. A unio s pode ser efetuada
entre relaes unio-compatveis.
No SQL do Oracle, os dois conjuntos participantes do processo de unio so definidos dinamicamente atravs de
dois (ou mais) comandos Selects unidos por Union ou Union All.
Para que seja possvel a realizao do processo, algumas regras devem ser respeitadas:
Neste primeiro exemplo, fizemos a unio de todas as linhas da tabela F (total de 12 linhas) com todas as linhas da
tabela G (total de oito linhas). O resultado apresenta apenas 15 linhas, pois existem rows em F que tambm
existem em G.
No exemplo da Listagem 2.144, utilizamos clusulas Where individuais por comando Select e o operador Union All,
que fez com que as linhas selecionadas individualmente fossem apresentadas mesmo havendo duplicatas no resultado.
Neste ltimo exemplo de unio, foram somados trs conjuntos. No primeiro conjunto, somente as linhas com
cargo igual a 52. No segundo conjunto, apenas as linhas com cargo igual a 53. Com estas restries no houve
necessidade de utilizarmos Union, uma vez que no haveria linhas duplicadas, tornando a operao mais eficiente,
no havendo necessidade de sort.
Este resultado foi unido ao terceiro conjunto, que tinha como restrio depto = D11, podendo trazer linhas j
presentes no conjunto resultante anterior. Desta forma escolhemos utilizar o operador Union. Execute o comando
da Listagem 2.145 e observe que as linhas dos funcionrios Jairo e Maria esto duplicadas (mesmo nome e mesmo
salrio). Isto ocorre porque a avaliao de duplicidade no se d em relao a uma coluna em particular e sim em
relao a toda a linha. Utilizamos constantes para modificar o resultado das linhas a serem unidas: a constante
Departamento 11 substituiu a coluna Depto (isto foi possvel pois ambas so alfanumricas, apesar de diferirem
em tamanho) e a constante Analista Pleno independente do cargo apresentado, fazendo com que as linhas
provenientes do terceiro Select fossem apresentadas integralmente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
115
INTERSEO
A operao de interseo restringe o conjunto resultante s tuplas presentes em todos os conjuntos participantes
da operao. Considerando-se a existncia de duas tabelas F e G, as tuplas resultantes da interseo seriam
representadas por T F G. A interseo s pode ser efetuada entre relaes unio-compatveis.
No SQL do Oracle, os dois conjuntos participantes do processo de interseo so definidos dinamicamente atravs
de dois (ou mais) comandos Selects unidos por Intersect.
As mesmas regras aplicveis unio so vlidas na interseo:
No exemplo da Listagem 2.146, inclumos uma nova linha na tabela F (com matrcula 999), exatamente igual, em
relao s colunas Nome, Depto e Salario, linha existente de matrcula 160. Na interseo, s apresentada uma
linha para a funcionria Elizabet.
DIFERENA
A operao de diferena efetua uma subtrao de conjuntos eliminando as duplicidades. Considerando-se a existncia
das duas tabelas F e G, o resultado T uma relao que contm as rows de F que no esto presentes em G. As tuplas
da diferena seriam representadas por T F - G. A diferena s pode ser efetuada entre relaes unio-compatveis.
Neste caso, a ordem em que a operao realizada produz modificaes no resultado.
No SQL do Oracle, os dois conjuntos participantes do processo de diferena so definidos dinamicamente atravs
de dois (ou mais) comandos Selects unidos pelo operador Minus.
As regras j apresentadas na unio e na interseo devem ser obedecidas tambm na diferena.
Neste primeiro exemplo, foi feita a diferena F - G e observamos que a linha nova adicionada na tabela F apareceu
no resultado. Na Listagem 2.148, invertemos o processo e realizamos a diferena G - F para verificarmos que o
resultado depende da ordem da operao.
PRODUTO CARTESIANO
Um produto de conjuntos contm todos os elementos do primeiro conjunto concatenados com todos os elementos
do segundo conjunto. Considerando-se a existncia das duas tabelas F e P, o resultado T uma relao que contm
as rows em F concatenadas s rows de P. As tuplas do produto seriam representadas por T F x P. Neste caso, a
ordem dos fatores no altera o produto.
GERENTE
------EVA
IRACY
CRISTINA
No SQL do Oracle, os dois conjuntos participantes do processo de produto so definidos dinamicamente atravs
da clusula Select (definindo as colunas a serem apresentadas no resultado) e da clusula From, indicando as
tabelas a serem operadas.
Observe no resultado da Listagem 2.150 que a tabela P possui trs linhas relativas aos departamentos A00, D11 e
D21. Cada uma destas linhas foi concatenada a cada uma das linhas da tabela F que atendesse restrio de
matrcula entre 150 e 200.
Executando-se o comando da Listagem 2.150 veremos o resultado desta concatenao. Como a tabela P possua
trs linhas e a restrio sobre a tabela F resultou em seis linhas, o produto das duas tabelas gerou 18 linhas (3 x 6).
Observe, porm, que a coluna Depto (da tabela F) indica a que departamento aquele funcionrio pertence. Na
mesma linha, esto presentes informaes do departamento deptno e do funcionrio depto. Quando estas informaes
so iguais, significa que houve a concatenao da linha do funcionrio com o seu departamento. Quando estas
informaes so diferentes, significa que houve a concatenao da linha com um outro departamento qualquer.
Quando estabelecemos uma restrio que determine que linhas da tabela P devem ser concatenadas com que
linhas da tabela F, estamos determinando uma operao de Juno (ou Join).
JUNO OU JOIN
Uma operao de Join contm todos os elementos do primeiro conjunto concatenados a todos os elementos do
segundo conjunto que satisfaam regra de comparao indicada. Considerando-se a existncia das duas tabelas
F e P, o resultado T uma relao que contm as rows em F concatenadas s rows de P que satisfazem a comparao
entre os domnios indicados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
117
Neste primeiro exemplo da Listagem 2.151, as linhas de F foram concatenadas s linhas de P, porm atendendo
restrio de que depto = deptno, garantindo que cada departamento seja concatenado exatamente a seus funcionrios.
No exemplo da Listagem 2.152 a seguir, desejvamos obter informaes sobre os gerentes dos departamentos. Na
tabela P temos o nome do gerente, e na tabela F temos o nome do funcionrio. Nada mais natural, portanto, que
realizar um Join entre as tabelas de tal forma que a restrio fosse gerente = nome.
Observe que no necessrio que faamos a seleo de colunas da tabela P. O que estabelece o produto a presena
das duas tabelas na clusula From e o que estabelece a restrio a presena da clusula Where determinando a
regra de juno.
Neste exemplo da Listagem 2.153, desejvamos obter informaes relativas ao funcionrio que tivesse vencimentos
superiores aos do gerente de seu departamento. Desta forma, numa mesma linha precisvamos de informaes
referentes ao gerente e ao funcionrio. Como ambos esto presentes na mesma tabela, precisamos utilizar alguns
artifcios para que no haja erros de sintaxe ao selecionarmos uma mesma coluna duas vezes. Faamos a anlise
passo a passo do comando Select desenvolvido.
Iniciaremos a anlise pela clusula From. Nela so referenciadas trs tabelas: a tabela P (que contm informaes
sobre o departamento), a tabela F (que contm informaes sobre o funcionrio) e novamente a tabela F, agora
apelidada de G (que contm informaes sobre o funcionrio gerente). A partir do momento que apelidamos a
tabela F de G, para ns e para o Oracle consideraremos a existncia de uma tabela G.
Na clusula Select, definimos as informaes que desejamos visualizar de cada uma das tabelas. Como as colunas
da tabela F e da tabela G so iguais, h necessidade de qualificarmos as informaes. Desta forma, desejvamos
obter a matrcula, nome e salrio do gerente (g.mat, g.nome e g.salario) e matrcula, nome, salrio e departamento
do funcionrio (f.mat, f.nome, f.salario e f.depto).
A clusula Where o que vai determinar as regras do relacionamento. Precisvamos garantir que o funcionrio e
o gerente trabalhassem no mesmo departamento, pois a proposta era obter os funcionrios que tivessem salrio
superior ao de seu gerente. Assim, restringimos que os departamentos de ambas as tabelas fossem o mesmo (f.depto
= g.depto). Como segunda restrio desejvamos que o salrio do funcionrio fosse superior ao salrio do gerente
GERENTE
-------------IRACY
IRACY
IRACY
IRACY
EVA
EVA
EVA
MAT
--180
190
200
220
230
240
270
NOME
SALARIO DEP
------------ ------- --MARIA
2134 D11
JAIRO
2045 D11
DAVI
2774 D11
JOANA
2984 D11
JOAQUIM
2218 D21
SALVADOR
2876 D21
MARTA
2738 D21
Este exemplo semelhante ao da Listagem 2.151, o que mudamos foi a sintaxe. Substitumos a vrgula da listagem
anterior pelas palavras Natural Join; outra forma aceita que tambm produziria os mesmos resultados seria Natural
Inner Join. Em ambos os exemplos utilizamos a condio de igualdade para que tivssemos mais facilidade de
entendimento. Este tipo de Join dito eqijoin, isto , usando a igualdade. A forma mais comum de juno entre
as duas tabelas o uso do Inner Join com a condio de igualdade, ou seja, Inner Eqijoin. Um Inner Join aquele
em que somente sero selecionadas para o resultado aquelas linhas que existam em ambos os lados da operao.
Para o exemplo em estudo significa que somente aparecero no resultado aquelas linhas de F em que depto esteja
preenchido com um valor existente em P. Observe que o departamento A00 no apareceu no resultado (no existe
nenhum elemento em F cuja coluna DEPTO esteja preenchida com A00). Da mesma forma se incluirmos linhas na
tabela F cujo valor preenchido na coluna DEPTNO no exista em P ou esteja vazio (NULL), no encontraremos
estas linhas no resultado do Join. Faa um teste desta situao. Esta a regra do Inner Join.
Nesta sintaxe alternativa para o comando da Listagem 2.154 podemos separar as clusulas relativas ligao entre as
tabelas no ON <condition> e as demais clusulas de filtragem na clusula WHERE. Isto pode ser muito til, principalmente
quando realizamos um Join envolvendo diversas tabelas e/ou quando a chave para relacionamento constituda de
mais de uma coluna. Esta sintaxe torna visvel as restries relativas juno e aquelas relativas a filtragem.
Este exemplo da Listagem 2.156 produz exatamente o mesmo resultado daquele estudado na Listagem 2.150.
Substitumos a vrgula pelo texto CROSS JOIN. O resultado um produto cartesiano, isto , cada uma das linhas de
P concatenada com cada uma das linhas de F, produzindo 18 linhas no resultado aps a filltragem de matrcula
(entre 150 e 200). Esta sintaxe torna mais clara a inteno do programador no sentido de obter um produto cartesiano.
Isto, certamente, facilita a manuteno posterior de um programa pois indica claramente a inteno do resultado.
DIVISO
As tuplas da diviso seriam representadas por T F [depto : deptno] P. A ordem dos operandos afeta o resultado da operao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
119
EXERCCIOS
2.54) Deseja-se uma lista contendo o nome do projeto, o nome das atividades e tempo de durao de cada atividade
(fornecido em nmero de horas). Ordene o resultado por projeto e atividade.
2.55) Deseja-se uma lista contendo o cdigo e nome de cada departamento, nome e sobrenome do gerente, ordenado
por cdigo de departamento.
2.56) Deseja-se uma lista contendo nome, sobrenome, salrio e departamento de todos os funcionrios que sejam
responsveis por projeto, porm no sejam gerentes.
2.57) Deseja-se uma lista contendo o nome e departamento do gerente e nome e salrio de todos os funcionrios
subordinados a ele. Apresente o resultado ordenado por departamento e salrio (descendente).
2.58) Deseja-se uma lista contendo o nome do projeto, o nome do departamento responsvel e o nome do
funcionrio responsvel, desde que ele trabalhe no departamento responsvel pelo projeto.
2.59) Deseja-se saber quais os departamentos que no possuem funcionrios (usar Minus).
2.60) Deseja-se saber quais os departamentos (cdigo e nome) responsveis por mais de dois projetos e que,
simultaneamente, possuam mais de trs funcionrios (usar Intersect).
2.61) Deseja-se saber o cdigo e nome do projeto, cdigo e nome da atividade e o tempo de durao da atividade
durante o ano de 1996. Ordene o resultado por nome do projeto e nome da atividade. Se uma atividade se iniciou
antes de 1996 e terminou durante o ano de 1996, desejamos saber apenas quanto tempo ela durou de 01/01/96 at
a data de trmino. Se uma atividade comeou durante o ano de 1996 e terminou em outro ano, desejamos saber
apenas o tempo da data de incio da atividade at dia 31/12/1996. Se uma atividade comeou antes de 1996 e
terminou depois de 1996, sua durao ser de 01/01 a 31/12, e, finalmente, se uma atividade comeou e terminou
em 1996, sua durao ser desde a data de incio at a data de trmino.
METODOLOGIA
Apresentao e descrio sinttica dos demais comandos de SQL*Plus, que possibilitaro a formatao dos resultados, a definio de variveis, organizao
do ambiente de trabalho, dentre outros comandos.
TCNICA
Apresentao de exemplos que desenvolvam os efeitos descritos.
COMANDOS DE FORMATAO
Os comandos de formatao vo permitir a modificao do layout de apresentao dos comandos executados.
Poderemos estabelecer tamanho para as colunas, ttulo para o relatrio, colunas de quebra, clculos quanto ao
relatrio e quebra.
COLUMN
O comando Column tem a finalidade de formatar uma determinada coluna ou expresso.
Podemos executar este comando sem coluna identificada para que ele apresente a formatao existente em vigor
no SQL*Plus. Se o executarmos informando um nome de coluna ou expresso, ele apresentar a formatao em
vigor para o elemento especfico.
Cada uma das opes do comando afetar uma caracterstica da coluna ou expresso, de acordo com a lista a seguir:
Alias Associa um alias para a coluna (ou expresso), que pode ser utilizado em um comando Break, Compute
ou at mesmo em outro comando Column.
Fold (After ou Before) Associa um carriage return antes (before) ou depois (after) do cabealho e coluna em
cada linha. Isto fora uma quebra na linha na posio em que o carriage return colocado. O SQL*Plus no
adiciona um carriage return extra ao final da linha listada.
Format Determina um formato de edio para as colunas numricas e um tamanho de coluna para as demais
colunas. O <formato> no pode ser substitudo por uma varivel; deve ser um valor constante e pode ser composto
pelos caracteres { 9 0 , . $ L G D C B MI S PR V EEEE RN rn DATE }, com a mesma funcionalidade dos formatos
numricos da funo To_Char. Para os formatos alfanumricos ou de data, podemos especificar An, onde n
indica a largura da coluna.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
121
NewLine Quebra a linha antes de o valor ser apresentado. Tem o mesmo efeito de Fold_Before.
New_Value Atribui ao parmetro <varivel> o novo valor desta coluna toda vez que houver mudana de valor.
Print / NoPrint Apresenta (Print) ou no (NoPrint) a coluna na listagem resultado (cabealho e todos os valores).
Null Indica o <texto> a ser apresentado quando o contedo da coluna for indeterminado (Null).
Old_Value Atribui ao parmetro <varivel> o valor anterior desta coluna toda vez que houver mudana de valor.
On / Off Habilita ou desabilita os atributos de apresentao para a coluna.
Wrapped Determina como ser feito o controle de quebra quando o contedo da coluna for maior que a
largura especificada para ela. A opo Wrapped indica que o texto ser cortado na largura especificada e continuar
na prxima linha. Word_wrapped indica que o texto ser cortado em final de palavra. Truncated indica que o
texto apresentado ser apenas aquele que couber na primeira linha.
NM_FUNC
VL_SAL DT_NASC
------------- ------ -------CRISTINA
5275 14/08/53
MIGUEL
4125 02/02/68
SANDRA
3825 11/05/61
JOAO
4017,5 15/09/55
SQL>
SQL>
SQL>
SQL>
SQL>
COL
COL
COL
COL
/
CD_DEPTO
NM_FUNC
VL_SAL
DT_NASC
HEA
HEA
HEA
HEA
DEPTO FOR A5
NOME DO |FUNCIONRIO FOR A11
SALRIO FOR L999G990D00
NASC NOPRINT
DEPTO NOME DO
FUNCIONARIO
----- --------------------A00
CRISTINA
B01
MIGUEL
C01
SANDRA
E01
JOAO
SALRIO
----------Cr$5.275,00
Cr$4.125,00
Cr$3.825,00
Cr$4.017,50
No exemplo da Listagem 2.157, executamos o comando Select sem realizar a formatao das colunas, e
posteriormente reexecutamos o mesmo comando para analisarmos as diferenas.
A opo For garante o tamanho da coluna cd_depto, de tal forma que o cabealho aparece por completo. O
cabealho da coluna nm_func foi quebrado em duas linhas com o uso do | (pipe) no meio do texto. A coluna vl_sal
recebeu a formatao padro correspondente ao NLS_Lang em vigor para a sesso. Por fim, a coluna dt_nasc no
foi impressa pois recebeu a opo NoPrint.
Aps a execuo do comando COL para as colunas cd_depto, nm_func, vl_sal e dt_nasc, qualquer comando Select
executado que retorne colunas com estes nomes (nome da coluna ou apelido) ser formatado com as definies
anteriores at que venhamos a executar um comando COL com a opo Clear para cada uma das colunas, um
comando CLEAR com a opo Columns ou encerremos o SQL*Plus.
O comando COL muito utilizado dentro de arquivos de comandos. Veja o exemplo da Listagem 2.158. Aps a
execuo do comando desejado, desfazemos a formatao de cada coluna, retornando aos valores padres.
REPHEADER / REPFOOTER
Os comandos RepHeader e RepFooter tm a finalidade de formatar um ttulo geral para o incio ou fim do relatrio.
Somente sero apresentados na primeira pgina (RepHeader) ou na ltima pgina do relatrio (RepFooter).
A utilizao de um dos comandos sem parmetros faz com que o SQL*Plus liste o header ou footer em vigor.
Page Muda de pgina aps o header ou antes do footer. Para que este comando gere uma marcao de pgina
fsica, devemos ter executado anteriormente o comando Set Newpage 0 (veja em Modificando Variveis de Sistema).
Col Estabelece posicionamento na coluna <nmero> da linha de impresso atual (avana ou recua).
Skip Pula para o incio da prxima linha <nmero> vezes. Se o parmetro <nmero> for omitido, 1 vez
assumido. Se o parmetro <nmero> possuir o valor 0, far com que haja o posicionamento na linha atual.
Tab Pula <nmero> de colunas para a frente ou para trs (se o valor for negativo).
Left / Center / Right Estabelece o posicionamento dos textos que o seguem esquerda, centralizados ou
direita, respectivamente. Os textos so tratados como um nico elemento.
Bold Realiza impresso em negrito. No vdeo, a linha ser repetida trs vezes.
Format Utiliza os mesmos formatos vlidos para o comando Column. A palavra Format no pode ser abreviada.
<texto> Corresponde a uma nica palavra ou a um conjunto de palavras (se entre aspas).
<varivel> Corresponde a uma varivel de substituio criada pelo usurio.
Sql.Pno Corresponde ao nmero da pgina corrente.
Sql.Lno Corresponde ao nmero da linha corrente.
Sql.Release Corresponde release do Oracle.
Sql.Sqlcode Corresponde ao valor do ltimo cdigo de erro ocorrido.
Sql.User Corresponde indicao do usurio da sesso.
On / Off Torna o header (ou footer) habilitado ou desabilitado sem afetar sua definio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
123
Figura 2.07 O resultado apresentado foi gerado pelo script da Listagem 2.159 a seguir.
O comando RepHeader ocupa diversas linhas e considerado pelo SQL*Plus um nico comando, pois o smbolo
(hfen) foi utilizado ao fim de cada linha para indicar continuao de comando (para o SQL*Plus). A primeira coisa
formatada no header do relatrio foi o nmero da pgina (Sql.Pno) esquerda, depois no centro da mesma linha
foi formatado o texto Relatrio de Teste. A opo Skip 2 posiciona no incio da nova linha duas vezes, deixando,
portanto, uma linha em branco. A opo Format se aplica s variveis numricas seguintes; portanto formatamos
o nmero da pgina e a release do Oracle.
O retngulo preto esquerda da linha de cabealho indica que existe um caracter para quebra de pgina. No
comando RepFooter, o primeiro texto no apresentou posicionamento; o SQL*Plus assume esquerda. Ao trmino
do arquivo, os trs ttulos foram desabilitados.
SET LINESIZE 50
REPHEADER PAGE LEFT FORMAT 9 SQL.PNO CENTER Relatrio de Teste SKIP 2 CENTER Release FORMAT 999999999 SQL.RELEASE SKIP 2 CENTER Usurio SQL.USER
TTITLE RIGHT Pag. FORMAT 990 SQL.PNO
REPFOOTER PAGE
ltima Pgina SKIP 2 LEFT do Relatrio
SELECT CD_MAT, NM_FUNC, CD_DEPTO
FROM FUNC
WHERE ROWNUM < 5
/
REPHEADER OFF
TTITLE OFF
REPFOOTER OFF
TTITLE / BTITLE
Os comandos Ttitle e Btitle formatam ttulos a serem apresentados no topo (Ttitle) ou rodap (Btitle) de cada
pgina do relatrio.
A sintaxe destes dois comandos semelhante dos comandos RepHeader e RepFooter, excetuando-se a opo
Page, que no existe para Ttitle e Btitle.
O resultado da Figura 2.08 foi gerado pelo script da Listagem 2.160 a seguir. Observe que o texto adicionado ao
comando Ttitle aparece em todas as pginas, inclusive nas pginas de header e footer.
SET LINESIZE 50
REPHEADER PAGE CENTER Relatrio de Teste
TTITLE RIGHT Pag. FORMAT 990 SQL.PNO SKIP 3 CENTER Ttulo da Pgina
REPFOOTER PAGE ltima Pgina SKIP 2 LEFT do Relatrio
SELECT CD_MAT, NM_FUNC, CD_DEPTO
FROM FUNC
WHERE ROWNUM < 5;
REPHEADER OFF
TTITLE OFF
REPFOOTER OFF
BREAK
O comando Break define quais so os elementos de quebra e que ao deve ser tomada quando ocorrer a mudana
de valor (quebra) em cada um deles. Este comando no ordena os dados recebidos do banco de dados. Para que o
resultado seja adequado, no comando Select devemos incluir a clusula Order By com as mesmas colunas para as
quais desejamos que o SQL*Plus avalie a quebra.
S podemos executar o comando Break uma vez em cada sesso. Um segundo comando desabilita o primeiro;
desta forma, o ltimo comando Break que executarmos passa a determinar as quebras vlidas. No cumulativo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
125
Skip Page Indica que deve ser feita uma mudana de pgina (com reimpresso dos cabealhos existentes)
quando houver uma quebra.
NoDuplicates Indica que a coluna (ou expresso) de quebra no deve ter seu valor repetido na linha subseqente
enquanto no for percebida uma nova quebra ( a opo default).
Duplicates Indica que a coluna (ou expresso) de quebra deve ter seu valor repetido na linha subseqente.
55 DOLORES
60 SANDRA
D11
55 IRACY
55 BRUNO
E01
58 JOAO
E11
55 ELIANE
O resultado da Listagem 2.161 foi gerado com o script da Listagem 2.162. No script, foram estabelecidas duas
colunas de quebra cd_depto e nr_cargo. Para cd_depto, foi determinado que a cada quebra fossem puladas duas
linhas antes da impresso de uma linha com novo valor. A opo NoDuplicates default e indica que no deve
haver repetio de valor para linhas com a coluna de quebra igual. No exemplo, a linha com nome do funcionrio
Silvio no apresenta valor para a coluna cd_depto, pois seu valor semelhante ao da linha anterior (A00). Para a
coluna nr_cargo, determinamos que a cada quebra fosse duplicado o valor do cargo. No exemplo, a linha do
funcionrio Bruno tem o mesmo cargo da funcionria Iracy; no entanto, o cargo repetido.
COMPUTE
O comando Compute efetua um clculo em relao a um elemento de quebra. Se desejarmos efetuar um clculo
quando houver quebra da coluna cd_depto, esta coluna deve estar referenciada no comando Break. Se desejarmos
um determinado clculo ao trmino do relatrio, a palavra Report deve estar mencionada no comando Break e
assim por diante. O clculo s efetuado em relao a um elemento presente no comando de quebra.
Podemos especificar um ou mais clculos por elemento e, ainda, especificar um label que identifique o tipo de
clculo efetuado.
Os parmetros para determinao de clculos so:
VL_SAL PROJECAO
------ --------4650
5115
2925
3217,5
------ --------3787,5
4166,25
7575
8332,5
C01
3825
4207,5
2380
2618
------ ---------
SANDRA
DOLORES
***** -------
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
127
3102,5
6205
3412,75
6825,5
***** ------Mdia
Soma
------ --------3445
3789,5
13780
15158
O resultado apresentado na Listagem 2.163 foi gerado pelo script da Listagem 2.164.
No script, foi includo apenas um comando Compute para efetuar o clculo de somatrio e mdia das colunas
Salrio e Projeo, quando da ocorrncia de quebra por departamento e ao final do relatrio. Poderamos ter
definido dois comandos Computes para realizar a operao anterior com o mesmo efeito, um para a quebra de
departamento e outro para o trmino do relatrio.
Se criarmos mais de um comando Compute para a mesma indicao de quebra, somente a ltima considerada.
As demais so ignoradas. Teste o exemplo da Listagem 2.165.
CLEAR
O comando Clear tem por finalidade limpar o valor atual da opo especificada.
SPOOL
Este comando armazena o resultado de uma consulta em um arquivo do sistema operacional e, opcionalmente,
envia o arquivo para a impressora default do sistema.
Arquivo Indica o nome do arquivo para o qual est sendo enviado o resultado. A extenso default para o
Windows LST. De acordo com o sistema operacional este valor poder variar (LIS). Se desejarmos, poderemos
alterar esta extenso definindo outro valor.
Neste arquivo so gerados no s o resultado do(s) comando(s) executado(s), como tambm as mensagens enviadas,
o texto do comando, enfim, uma reproduo de tudo o que mostrado no vdeo. Podemos alterar este resultado
atravs de variveis de sistema.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
129
SHOW
Apresenta informaes sobre o elemento especificado.
Dentre os parmetros do comando Show apresentados na sintaxe, temos alguns ainda no utilizados nos comandos
anteriores. So eles:
SGA Apresenta a alocao de memria feita para o banco de dados. uma opo para uso por DBAs.
Errors Apresenta informaes sobre o ltimo comando de PL/SQL compilado ou sobre uma rotina especfica
nomeada no comando.
DEFINE
Este comando especifica uma varivel de substituio e associa um valor alfanumrico a ela. Quando este comando
executado sem parmetros, o nome e valor de todas as variveis de substituio so apresentados. Quando
informamos o nome de uma varivel, apenas seu valor apresentado.
O valor desta varivel permanece no sistema at que modifiquemos seu valor atravs de outro comando Define,
um comando Accept ou Col com New_Value / Old_Value, ou ainda faamos a destruio da varivel com o comando
Undefine ou encerremos o SQL*Plus.
UNDEFINE
Destri a definio de uma determinada varivel de substituio.
No exemplo da Listagem 2.171, aps a destruio da varivel dep, a execuo do comando Select que faz referncia
a esta varivel solicita ao usurio que fornea um valor para dep, pois esta varivel no existe.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
131
VARIABLE
Este comando cria uma varivel Bind, que pode ser usada em programas de PL/SQL.
PRINT
Este comando apresenta o valor de uma varivel Bind ou de todas as variveis deste tipo declaradas (se for executado
sem argumentos).
ACCEPT
Este comando cria uma varivel de substituio e, opcionalmente, formata uma mensagem para o usurio.
Quando criamos a varivel de substituio com este comando, ela pode ser de tipo Number, Char ou Date, havendo
crtica se o valor informado no for compatvel com o tipo definido. Os formatos vlidos para uso so os mesmos
do comando Col, e ainda so suportados os formatos SQL de data quando o tipo da varivel for Date. Podemos
informar um valor default (para o caso de o usurio no fornecer nenhum), apresentar uma mensagem ou no e
esconder o valor digitado pelo usurio (hide).
PROMPT
Envia uma mensagem ou uma linha em branco para a tela do usurio. Pode ser til para scripts longos, a fim de
informar o passo executado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
133
PAUSE
Este comando envia uma linha em branco ou uma linha com texto para a tela do usurio e aguarda que este tecle
Enter para que o script tenha prosseguimento.
O exemplo da Listagem 2.174 mostra um script contendo os dois comandos e sua execuo.
SET
Este comando, que pode ser includo em um script, modifica o valor de uma das variveis de sistema.
A Tabela 2.08 a seguir apresenta a lista e significados das variveis de sistema do SQL*Plus.
Descrio
APPI[NFO]{ON|OFF|text}
Indica que os comandos executados com @, @@ e Start devem ser registrados pelo pacote DBMS_APPLICATION_INFO a fim de terem sua execuo monitorada pelo DBA. O valor default para texto SQL*Plus.
ARRAY[SIZE] {15|n}
Determina o nmero de linhas que o SQL*Plus deve obter do banco de dados a cada leitura (Fetch).
Indica se o ORACLE efetiva as modificaes pendentes para o database. A opo ON faz com que seja
executado um COMMIT aps cada comando SQL ou bloco PL/SQL. A opo IMM funciona de forma
semelhante a ON. A opo n indica que o comando COMMIT deve ser executado aps n comandos de
atualizao bem-sucedidos.
AUTOP[RINT] {OFF|ON}
Esta opo pode ser utilizada pelo DBA durante um processo de recuperao do banco de dados.
AUTOT[RACE] {OFF|ON|TRACE[ONLY]}
[EXP[LAIN]] [STAT[ISTICS]]
Apresenta um relatrio sobre a execuo dos comandos de SQL DML (Select, Insert, Update ou Delete) bemsucedidos. O relatrio pode incluir a apresentao de estatsticas e o caminho de execuo (Explain). A opo
TraceOnly apresenta o relatrio sem apresentar os dados da Query. Se Statistics for solicitado a execuo do
comando realizada, porm sem a apresentao dos resultados. Para que a opo Explain possa ser
executada deve ser criada a tabela Plan_Table para a gerao do caminho de acesso.
BLO[CKTERMINATOR] { . |c}
Determina um caracter no-alfanumrico a ser usado para indicar fim de blocos PL/SQL.
CMDS[EP] {;|c|OFF|ON}
Determina um caracter no alfanumrico usado para separar mltiplos comandos de SQL*Plus digitados na
mesma linha. Se usarmos a opo ON, o caracter default ser ponto-e-vrgula ( ; ).
COLSEP {_|text}
Determina o texto a ser impresso entre colunas selecionadas (Select). Se o valor tiver brancos ou caracteres
de pontuao, deve ser informado entre aspas simples. O valor default um nico espao em branco.
COM[PATIBILITY] {V7|V8|NATIVE}
CON[CAT] { . |c|OFF|ON}
Determina o caracter para terminar uma varivel de substituio se desejarmos seguir imediatamente a
varivel com um caracter que o SQL*Plus deva interpretar como valor, e no como parte do nome da
varivel de substituio.
COPYC[OMMIT] {0|n}
Controla o nmero de linhas aps as quais o comando COPY deve efetivar (Commit) as linhas para o banco
de dados. Se optarmos por 0 (zero), o commit s ser executado ao final da cpia.
COPYTYPECHECK {OFF|ON}
Determina que a verificao de compatibilidade de tipos de dados deve ser suprimida durante uma incluso
ou adicionamento de linhas para tabelas usando-se o comando COPY. Esta uma facilidade para DB2, que
necessita que um CHAR seja copiado para um DB2 DATE.
DEF[INE] {&|c|OFF|ON}
Determina o caracter a ser usado para prefixar variveis de substituio. ON ou OFF controla se o SQL*Plus
ir ou no pesquisar no texto a procura de variveis de substituio para substitu-las por valores. Ao
usarmos ON, o valor atribudo &. Esta opo tem precedncia sobre SCAN.
DESCRIBE [DEPTH{1|n|ALL}]
[LINENUM {ON|OFF}] [INDENT{ON|OFF}]
Determina o nvel de profundidade para o qual desejamos recursivamente descrever um objeto. Os valores
vlidos variam de 1 a 50. Aplicvel a partir do SQL*Plus 8.1.5.
ECHO {OFF|ON}
Controle quando o comando Start lista cada comando presente no arquivo de comandos quando realiza a
sua execuo.
EDITF[ILE] file_name[.ext]
Determina o nome default para o comando Edit (no Windows, o nome default Afiedt.buf). Podemos incluir
caminho e/ou extenso para o arquivo.
EMB[EDDED] {OFF|ON}
Controla onde cada nova pgina do relatrio comea. OFF fora cada relatrio a comear no topo de uma
nova pgina. ON permite que um relatrio inicie em qualquer parte da pgina.
ESC[APE] { \ |c|OFF|ON}
Define qual o caracter a ser usado como escape. ON altera o valor <c> para o default \. Este caracter
utilizado antes do caracter indicado para variveis de substituio para indicar que o texto a seguir deve ser
considerado normal e no uma substituio.
FEED[BACK] { 6 | n }
Mostra o nmero de registros retornados por uma query se forem selecionados mais de n registros (default 6).
continua
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
135
Varivel
Descrio
FEED[BACK] { ON | OFF }
FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL}
Verifica sintaticamente o comando SQL informado com o padro ANSI/ISO SQL92. Este comando pode ser
executado mesmo que no estejamos conectados ao banco de dados. Ficar acionado atravs de todas as
conexes que estabelecermos, at que seja desabilitado ou que encerremos (EXIT) o SQL*Plus.
Indica se as respostas (outputs) e prompts dos comandos devem ou no ser mostrados no vdeo. Usado para
execuo em batch.
HEADSEP {| | ON | OFF}
Determina qual o caracter indicador de quebra de linha para o texto dos cabealhos de coluna.
Permite a modificao da instncia para a sesso. Somente podemos definir uma nova instncia se no
estivermos conectados a uma determinada instncia no momento. Podemos utilizar qualquer identificador
do Oracle Net como instance_path.
LIN[ESIZE] {80 | n}
LOBOF[FSET] { n | 1}
Determina a posio inicial para apresentao de informaes para colunas Clob e Nclob.
LOGSOURCE [pathname]
Especifica a localizao dos arquivos de log arquivados. Este comando pode ser utilizado por DBAs durante
um processo de recuperao.
LONG {80|n}
Determina a largura mxima em bytes para apresentao de valores LONG, CLOB e NCLOB e para cpia de
valores LONG. O valor mximo de 2GB.
LONGC[HUNKSIZE] {80|n}
Determina o tamanho (em bytes) dos incrementos nos quais o SQL*Plus recupera um valor LONG, CLOB ou
NCLOB. Quando obtemos valores CLOB ou NCLOB podemos desejar obter os valores em pedaos em vez do
tamanho total em funo de restries de memria.
Indica que o relatrio a ser gerado a partir deste momento o ser em formato HTML. Veja o tpico
Acionando o SQL*Plus em batch para verificar o detalhamento desta sintaxe.
NEWPAGE { 1 | n | none}
Determina o nmero de linhas em branco a serem impressas entre o incio da pgina e o primeiro ttulo.
Zero (0) coloca formfeed no topo.
NULL { | <texto>}
Indica qual o texto a ser apresentado na coluna quando seu contedo, em uma determinada linha, for
indeterminado (Null).
NUMFORMAT { | <formato>}
NUM[WIDTH] {10 | n}
PAU[ SE ] <mensagem>
PAU[ SE ] ON | OFF
Indica se o mecanismo de pausa aps o preenchimento de uma pgina deve ser acionado (default OFF).
RECSEP {WR[APPED]|EA[CH]|OFF}
Mostra ou imprime separadores de registros. A varivel RECSEPCHAR define o caracter a ser apresentado
para separao de registros. O valor default um branco. Esta varivel indica quando o SQL*Plus deve
efetuar a separao dos registros. Se escolhermos WRAPPED, o SQL*Plus imprime um separador somente
aps as linhas quebradas. Se escolhermos EACH, a impresso se dar a cada linha.
RECSEPCHAR {_|c}
Controla a apresentao das informaes geradas atravs do pacote DBMS_OUTPUT em stored procedures
ou blocos de PL/SQL. O parmetro Size determina o nmero de bytes que podem ser buferizados dentro do
Oracle9i Server (o valor deve variar entre 2000 e 1.000.000). O default 2000. Quando WRAPPED
habilitado a quebra de linha ocorre a cada LINESIZE caracteres. Quando WORD_WRAPPED utilizado a
quebra de linhas ocorre a cada LINESIZE caracteres, porm em final de palavra. Quando TRUNCATED
habilitado, cada linha truncada em LINESIZE caracteres.
continua
Varivel
Descrio
SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]}
Permite o alinhamento correto para terminais que mostrem caracteres shift junto com os dados (por
exemplo IBM 3270).
SHOW[MODE] {OFF|ON}
Indica se o SQL*Plus mostra o valor antigo e o novo de uma varivel de sistema quando esta modificada
com o comando SET.
SPACE {1 | n}
Indica o nmero de espaos entre as colunas do relatrio. O valor mximo 10 (default 1).
SQLBL[ANKLINES] {ON|OFF}
Converte os textos dos comandos SQL e PL/SQL de acordo com a opo escolhida, inclusive os textos
constantes (entre plics). (default MIXED)
Determina o caracter que o SQL*Plus mostra como prompt se quebrarmos uma linha de comando do
SQL*Plus usando o hfen ( - ).
SQLN[UMBER] {OFF|ON}
Determina o prompt para a segunda (e subseqentes) linha quando estamos efetuando a digitao de
comandos SQL ou PL/SQL. ON indica que o prompt deve ser uma numerao seqencial. OFF indica que o
valor deve ser SQLPROMPT.
SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
Determina a compatibilidade do SQL*Plus com relao ao comando VARIABLE (por enquanto somente este
comando afetado). O parmetro x representa version, o parmetro y representa release e o parmetro z
representa update. Se colocarmos um valor inferior a 9.0.0 (no arquivo Glogin.sql o valor default 8.1.7), o
tamanho das variveis de tipo Nchar e Nvarchar2 estaro associadas ao National Character Set em uso (que
determinar se o valor expresso em bytes ou caracteres).
SQLPRE[FIX] { # |c}
Indica um prefixo. Durante a digitao de um comando de SQL podemos, em uma linha separada prefixada
pelo caracter escolhido, digitar um comando de SQL*Plus, que ser executado imediatamente aps o
<enter> da linha. Deve ser um caracter no alfanumrico.
Indica qual caracter o SQL*PLUS reconhecer como fim de linha e execuo. OFF indica que no existe caracter
associado, o fim do comando reconhecido por uma linha inteira em branco. A opo ON retorna ao valor default de;
TAB {OFF|ON}
Determina como o SQL*Plus formata espaos no resultado. OFF usa brancos para formatar espaos no resultado.
ON usa o caracter TAB. Esta opo aplicvel apenas a terminais. TABs no so colocados em arquivos.
TERM[OUT] {OFF|ON}
Controla a apresentao dos resultados gerados por comandos executados a partir de um arquivo de
comandos. OFF suprime a apresentao do resultado no vdeo, mas o spool do resultado gerado. TERMOUT
OFF no afeta a apresentao de comandos interativos.
TI[ME] {OFF|ON}
TIMI[NG] {OFF|ON}
Controla a apresentao de estatsticas de tempo. ON mostra as estatsticas em cada comando SQL ou bloco
de PL/SQL.
TRIM[OUT] {OFF|ON}
Determina se o SQL*Plus deixa os brancos finais de cada linha ou remove-os. ON remove os brancos ao fim
de cada linha aumentando a performance, especialmente til quando executamos o SQL*Plus de um
equipamento lento. No afeta Spool.
TRIMS[POOL] {ON|OFF}
Determina se o SQL*Plus retira os brancos ao final de cada linha enviada para spool. ON remove os brancos
finais. No afeta o resultado para o terminal.
UND[ERLINE] { - | c | ON | OFF}
Determina o caracter usado para sublinhar cabealhos de colunas. ON altera o valor para o padro -. <c>
no pode ser um caracter alfanumrico.
Determina se o texto do comando SQL ser apresentado antes e aps o SQL*PLUS ter efetuado a
substituio do parmetro pelo valor real (default ON).
WRA[P] {OFF|ON}
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
137
Na Listagem 2.176, testamos as variveis Escape, SqlTerminator, SqlPrompt e Time. A varivel Escape pode ser
muito til quando desejamos incluir o & dentro de um texto sem que ele tenha a funo de varivel de substituio.
Na Listagem 2.177, foram testadas as variveis Serveroutput e Linesize. Para a varivel Serveroutput, os formatos
disponveis so Wrapped, Word_wrapped ou Truncated. Indicando que, quando o texto do pacote Dbms_Ouput
maior que a largura de uma linha, o SQL*Plus deve formatar a linha de acordo com uma das opes fornecidas.
Se Wrapped informado, a quebra de linha ocorre a cada Linesize caracteres. Se Word_Wrapped informado, a
quebra de linha tambm ocorre, aproximadamente, a cada Linesize caracteres, porm em final de palavra. Se for
utilizado Truncated, cada linha truncada em Linesize caracteres.
STORE
O comando Store gera um arquivo contendo todas as variveis de sistema e seus valores defaults para que possamos
gerar um script com aquelas que desejamos alterar.
Quando o SQL*Plus comea a executar, ele procura por um arquivo de nome Login.Sql e, caso encontre, executa os
comandos existentes neste arquivo.
Desta forma, podemos criar um arquivo com este nome no diretrio default do SQL*Plus contendo atribuies a
variveis de sistema, ttulos, formatao de colunas; enfim, todos os padres que quisermos estabelecer para nossa
sesso. Toda vez que iniciarmos o SQL*Plus, este arquivo ser executado automaticamente.
APPINFO ON
APPINFO SQL*PLUS
ARRAYSIZE 15
AUTOCOMMIT OFF
AUTOPRINT ON
AUTOTRACE OFF
SHIFTINOUT INVISIBLE
BLOCKTERMINATOR .
COLSEP
COMPATIBILITY NATIVE
CONCAT .
COPYCOMMIT 0
COPYTYPECHECK ON
DEFINE &
ECHO OFF
COMANDOS DIVERSOS
Neste item, veremos o restante dos comandos de SQL*Plus.
CONNECT / DISCONNECT
Permite a troca de sesso do SQL*Plus com o banco de dados ou encerra uma sesso com o banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
139
COPY
Copia os dados de uma query para uma tabela em um banco de dados local ou remoto.
TIMING
Registra dados de tempo para um determinado intervalo. O parmetro <texto> corresponde ao nome do timer
criado. Se executado sem parmetros, lista a quantidade de timers ativos. A opo Show mostra o valor acumulado
para o timer corrente e a opo Stop interrompe a contagem para o timer ativo.
ATTRIBUTE
Este comando especifica atributos de apresentao (display) para um determinado atributo de uma coluna Object Type.
HELP
Este comando aciona o mecanismo de Help do SQL*Plus mostrando o manual com a sintaxe desejada. Para que a
sintaxe seja apresentada o DBA dever instalar os textos de Help executando o arquivo helpbld.sql presente no
diretrio <Oracle_Home>\sqlplus\admin\help.
s[ilent] Indica que a execuo ser em batch. No aberta janela para o SQL*Plus.
<logon> Indica o logon do usurio (username, password, string de conexo, etc.), / (barra) ou /Nolog. A / (barra)
estabelece conexo no usurio default (Ops$<username do sistema operacional>). A opo /Nolog aciona o SQL*Plus
mas no estabelece conexo. Supe-se que na primeira linha do arquivo de comandos encontraremos o logon adequado.
<arquivo> Onde informamos o nome do script que desejamos executar. Se o arquivo no estiver local, todo o
caminho (diretrio) deve ser informado. Adicionalmente podemos passar os parmetros necessrios execuo
do script (veja o comando start e @).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
141
-Markup com esta opo podemos gerar as sadas dos relatrios em formato HTML se habilitarmos a opo
HTML (esta mesma ao pode ser obtida com o comando SET MARKUP HTML ON). O Sql*Plus gera pginas
completas contidas nas tags <html> e <body>. A opo Spool OFF gera sada HTML para ser includa em uma
pgina Web, porm sem a incluso das tags <html> e <body>. A opo PRE ON indica que o resultado do comando
de sql ser includo entre as tags <pre> e </pre>. O texto ao lado da opo Head ser includo no arquivo de sada
entre as tags <head> e </head>. O texto associado opo Body permite a especificao de parmetros para a tag
Body. O texto ao lado de Table permite a especificao de atributos para a tabela tais como BORDER, CELLPADDING,
CELLSPACING e WIDTH. Por default o valor de Width 90% e Border 1. A opo Entmap se receber o valor OFF
manter os valores de <, > e encontrados nos dados lidos do banco de dados intactos, isto , considerar que as
informaes so pertencentes a textos em HTML. Caso esta opo receba o valor ON, os textos sero traduzidos,
onde < ser substitudo por <, > ser substitudo por > e ser substudo por &qt;.
Na Listagem 2.180 encontramos inicialmente a linha de comando do SQL*Plus para execuo de um arquivo de
nome arqhtm.sql e sada para arquivo em formato HTML.
O segundo grupo de comandos presente na listagem corresponde ao contedo do arquivo arqhtm.sql. Na Listagem
2.181 a seguir apresentamos o resultado gerado.
O MENU DO SQL*PLUS
O menu do SQL*Plus apresenta cinco submenus: Arquivo, Editar, Procurar, Opes e Ajuda.
ARQUIVO
Temos as opes de salvar o Sql Buffer para um arquivo em disco, ler um arquivo e carregar para o buffer, iniciar ou
encerrar o envio de dados para Spool, executar o comando presente no Buffer ou interromper sua execuo.
EDITAR
Realiza as operaes bsicas de copiar e colar, aciona o editor ou define um novo editor.
PROCURAR
Faz pesquisa de um texto na tela do SQL*Plus.
OPES
Apresenta o dilogo Ambiente com a lista de variveis de sistema e seus valores defaults para modificao.
AJUDA
Apresenta informaes sobre a verso do SQL*Plus.
EXERCCIOS
2.62) Sabendo-se que os cdigos de departamento so subdivididos em depto (letra) e centro de custo (nmero),
deseja-se uma lista organizada por centro de custo contendo nome e sobrenome do funcionrio, cdigo do
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
143
Apresentar nome do responsvel (nome e sobrenome alinhados esquerda) e data de admisso (dd/mm/yyyy
centralizado), nome do funcionrio (nome e sobrenome centralizado) e salrio (formatado).
Deve ser apresentado um total salarial e uma mdia por projeto no final do relatrio. Deseja-se, tambm, a
quantidade de funcionrios por projeto e no final do relatrio.
METODOLOGIA
Apresentao e descrio sinttica de clusulas mais complexas utilizadas nos comandos Select, Insert, Update e Delete, tais como Outer Join, Subselect
Correlacionado, Teste de existncia, Hierarquia, Views, utilizao de subquery na clusula From, Merge, Insert com All e When, uso de Select na clusula Select.
TCNICA
Apresentao de problemas resolvidos com as novas sintaxes apresentadas.
OUTER JOIN
Quando estudamos Join, observamos que o resultado gerado conta apenas com as linhas da tabela A que tm
correspondncia com alguma linha na tabela B.
Execute o comando da Listagem 2.182 e observe que, quando estabelecemos um Join da tabela F com a tabela P
que contm linhas referentes aos departamentos A00, D11 e D21, a linha referente ao departamento A00 no
aparece no resultado.
Esta situao ocorre porque na clusula Where estabelecemos a restrio de que apenas quando ocorresse a igualdade
entre Depto e Deptno seria gerada uma linha resultante.
Este tipo de Join, que s gera linha resultante quando a informao que estabelece a ligao existe em ambas as tabelas,
chamado de Inner Join e j foi estudado por ns anteriormente. Trata-se da forma mais usual de ligao entre duas tabelas.
No Oracle, temos outro tipo de Join chamado Outer Join, no qual podemos determinar que os dados de uma
tabela sejam mostrados mesmo que no seja encontrada a ligao com a outra tabela.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
145
No exemplo da Listagem 2.184, listamos cada departamento (tabela Depto) e o nome do gerente correspondente
(tabela Func), porm sabamos que havia departamentos sem indicao do gerente. Para conseguirmos realizar o
Join, precisamos informar ao Oracle que poderiam haver valores de cd_gerente que no teriam correspondncia
na coluna cd_mat da tabela Func.
Como restrio, temos que o indicador s pode ser colocado em um dos lados do sinal de igualdade.
Este exemplo da Listagem 2.185 equivalente quele apresentado na Listagem 2.184, ou seja, todas as linhas de
departamento (presente do lado direito da clusula OUTER JOIN) sero trazidas mesmo que no haja correspondncia
com linhas em Func (lado esquerdo da clusula OUTER JOIN). A utilizao explcita da sintaxe RIGHT OUTER
JOIN torna o comando SELECT mais claro para quem o estiver lendo. A recomendao da Oracle de que passemos
a usar esta sintaxe no lugar da outra (+).
NM_GERENTE
---------CRISTINA
MIGUEL
SANDRA
IRACY
EVA
JOAO
ELIANE
TEODORO
JOANA
GABRIEL
. . .
DIRETORIA DE SISTEMAS
NOVO DEPTO
No exemplo da Listagem 2.186, removemos algumas linhas do resultado para efeito esttico (observe . . .).
A sintaxe Full Outer Join permite que sejam trazidas linhas da tabela Func que no possuem correspondncia em
Depto e linhas de Depto que no possuem correspondncia em Func, alm, claro, daquelas que se relacionam. Esta
uma vantagem sobre a sintaxe anterior (+), que no permite o uso do sinal (+) em ambos os lados da operao.
EXISTS
Exists um predicado, e portanto deve ser usado sob condio. No pode ser usado em nvel de Select e nem
independentemente das clusulas Where, Start With, Connect By ou Having.
Este predicado tem a finalidade de verificar se a condio estabelecida em um subselect existe ou no. No feita
comparao de valor, o retorno True ou False. To logo a condio seja verificada, a busca interrompida.
No exemplo da Listagem 2.187, desejava-se remover um determinado departamento, desde que no houvesse
funcionrios associados. Observe que no subselect associado clusula Exists no houve necessidade de se obter
nenhuma coluna em especial (Select 0). O objetivo era apenas determinar se existiam ou no linhas na tabela Func
relativas ao departamento fornecido.
No exemplo da Listagem 2.188, o objetivo era incluir linhas na tabela G, desde que os departamentos referenciados
(A00 e B01) no existissem em sua massa de dados. Isto garantiria que duas execues no duplicariam os dados da
tabela. Observe que numa segunda execuo do mesmo comando nenhuma linha foi includa.
HIERARQUIA
As clusulas Start With e Connect By utilizadas em um comando Select permitem que faamos a leitura organizada
de uma hierarquia. Como restrio, temos que a relao deve ocorrer entre colunas de uma mesma tabela.
Uma hierarquia definida por um auto-relacionamento em diversos nveis. Suponhamos que tivssemos uma
tabela contendo peas fabricadas por uma determinada empresa. Cada uma das peas composta de outras peas,
que tambm podem ser compostas por outras peas, e assim por diante.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
147
Na Listagem 2.189, criamos uma tabela capaz de armazenar as peas fabricadas pela empresa. Alm da restrio da
primary key, criamos um relacionamento que garantir que uma determinada pea esteja associada pea-pai da
qual componente.
Suponhamos, agora, que desejamos cadastrar as seguintes peas apresentadas no esquema da Figura 2.10.
No esquema, a pea 10000 composta de trs peas (11000, 12000 e 13000); a pea 11000 , por sua vez, composta
de duas outras peas (11100 e 11200). A pea 11200 composta das peas 11210 e 11220. Desta forma, geramos
um conjunto hierrquico em que cada pea-filha identifica qual a pea-pai da qual componente.
Para refletirmos estas informaes na tabela Peas do banco de dados, foram cadastradas as linhas de dados do
esquema, algumas das quais apresentadas na Listagem 2.190.
Com a tabela preparada, poderemos utilizar o comando Select para obter as linhas organizadas segundo a hierarquia.
Observe a ordem em que as linhas so apresentadas: a pea 10000 aparece em primeiro lugar, seguida da primeira
pea-filha 11000, que possui filhas 11100 e 11200, esta ltima, por sua vez, possuindo filhas 11210 e 11220,
encerrando este ramo da hierarquia. Retornamos ao segundo nvel (filhos diretos de 10000) com a pea 12000 que,
como no tem filhos, faz com que a lista prossiga no mesmo nvel com a pea 13000, que possui as peas-filhas
13100 e 13200. Esta a ordem em que o Oracle pesquisa cada ocorrncia na tabela. Poderamos entender como um
processo recursivo que s se encerra quando chega ao ltimo nvel da hierarquia.
As clusulas Start With e Connect By tm a finalidade de:
Start With Indicar ao Oracle em que ramo da hierarquia deve-se restringir a pesquisa. Note-se que o Oracle, a
priori, no sabe quantas rvores diferentes e independentes existem na tabela. Esta clusula limita a lista aos ramos
que desejamos listar. Se no informarmos esta clusula, o Oracle ler cada linha da tabela Peas e a considerar
incio (topo) de hierarquia, tentando gerar uma rvore hierrquica independente para cada uma das linhas.
Connect By Indicar ao Oracle como ocorre o auto-relacionamento. Que colunas devem ser comparadas e qual
delas corresponde coluna-pai do relacionamento. Pode parecer confuso, a princpio, uma vez que cd_pea_pai
contm o valor da pea-pai da relao; na verdade, este valor funciona como um ponteiro para a coluna que
realmente representa a coluna-pai da relao (a coluna filha aponta para a coluna-pai o inverso no seria
possvel, pois existem diversos filhos).
NM_PEA
---------PEA 10000
PEA 11000
PEA 11100
PEA 11200
VL_PEA CD_PEA_PAI
------- ----------10000
1100
10000
111
11000
112
11000
Quando trabalhamos com estas clusulas, ainda temos como recurso adicional a possibilidade de identificar o
nvel hierrquico da linha listada utilizando a pseudocoluna Level (esta pseudocoluna nos Selects que no usam a
clusula Connect By retorna zero).
NM_PEA
---------PEA 10000
PEA 11000
PEA 11100
PEA 11200
PEA 11210
PEA 11220
J que contamos com esta informao adicional, podemos utiliz-la para estabelecer uma endentao no resultado,
como mostra a Listagem 2.194.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
149
Compare este resultado com o anterior. Observe que a hierarquia no foi quebrada, porm a ordem dos elementos
subordinados foi invertida. A clusula SIBLINGS associada clusula ORDER BY permite que controlemos a ordem
com que os ramos sero apresentados.
SUBSELECTS CORRELACIONADOS
Nos subselects estudados at agora, no havia relao entre a query principal e a query do subselect. A execuo do
subselect acontecia independente da query principal, gerando um resultado que seria utilizado para estabelecer a
restrio nos dados da query principal.
Suponhamos, porm, que desejssemos obter uma informao relativa linha lida na query principal. Por exemplo, se
desejssemos saber quais os funcionrios que ganham mais que a mdia salarial de todos os funcionrios do mesmo
departamento. Observe que para atender a esta consulta precisaramos ler o funcionrio, obter o cdigo do departamento,
calcular a mdia salarial e retornar ao funcionrio original para verificar se ele se enquadra na condio estabelecida.
Um subselect correlacionado indica ao Oracle a necessidade de realizar estas operaes.
Na Listagem 2.197, desejvamos obter quais os funcionrios que ganhavam mais que seu respectivo gerente.
O Join da query externa garante que na linha lida haver dados de um funcionrio qualquer e o cdigo do gerente
do departamento em que este funcionrio trabalha. Na subquery foi feita uma consulta tabela Func para obteno
do salrio do funcionrio cuja matrcula correspondesse ao cdigo do gerente obtido na linha da query externa.
No houve necessidade de qualificao.
A qualificao s necessria quando temos um caso particular em que a subquery necessita comparar dados de
colunas que internamente e externamente tenham o mesmo nome.
Como ltimo exemplo, suponhamos que desejssemos obter departamentos que no possuam funcionrios. Observe que a clusula Exists foi utilizada juntamente com a correlao na Listagem 2.198.
VIEWS RELACIONAIS
Uma view relacional corresponde a um comando Select armazenado no banco de dados associado a um nome. Na
Listagem 2.199, criamos uma view que obtenha informaes dos funcionrios e dos departamentos respectivos.
O comando Create View pertence parte da linguagem que define objetos no banco de dados, chamada de DDL,
porm inciaremos sua utilizao neste item a fim de introduzirmos o prximo tpico. A criao de views associadas
a objetos ser vista no Captulo 4.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
151
VARCHAR2(40)
NUMBER(9,2)
NUMBER(3)
VARCHAR2(16)
NUMBER(2)
Observe que a view contm a possibilidade de alterarmos o nome das colunas para nomes mais amigveis e so
visualizadas, pelo usurio, como tabelas. Na verdade, no so tabelas capazes de armazenar dados. Fazem referncia
a uma ou mais tabelas, outras views ou uma combinao de tabelas e views. Correspondem a um comando Select
armazenado na base de dados, que obtido quando realizamos uma operao de DML fazendo referncia view.
Na Listagem 2.200 criamos a view FuncD11, semelhante view Funcionrio, incluindo a restrio de que s
devem ser selecionados os funcionrios do departamento D11.
As views possuem uma grande utilizao em um banco de dados: podemos armazenar queries complexas que
sejam muito utilizadas, podemos armazenar queries que contenham restries permitindo o acesso apenas s
views no lugar das tabelas bsicas (restries de linhas e/ou colunas), podemos armazenar queries que contenham
clculos, colunas constantes que decodifiquem a forma real como a informao est armazenada.
Quando realizamos uma consulta utilizando na clusula From o nome da view, o Oracle junta as restries existentes
nos dois Selects e realiza a consulta tabela bsica (pois nela que esto armazenados os dados).
DEPTO
------------------------------GERENCIA DE SISTEMAS COMERCIAIS
GERENCIA DE SISTEMAS COMERCIAIS
GERENCIA DE SISTEMAS COMERCIAIS
GERENCIA DE SISTEMAS COMERCIAIS
Na consulta da Listagem 2.201 utilizamos a view FuncD11, estabelecendo a restrio de que apenas o cargo 55 fosse
selecionado. Na base de dados existem nove linhas com cargo 55, porm apenas quatro foram listadas. Isto acontece
porque duas restries foram estabelecidas na busca: cargo igual a 55 e cdigo do departamento igual a D11.
Observe que o comando Select empregado com a view utiliza para nomes de colunas aqueles definidos para a view
tanto com referncia clusula Select quanto clusula Where.
Uma view pode ser usada para Select e para Insert, Update ou Delete. Veja a Listagem 2.202. As linhas atualizadas,
na verdade, foram as linhas com nr_git = 17 e cd_depto = D11 da tabela Func.
No exemplo da Listagem 2.203, estaremos criando uma view que obtenha apenas os gerentes cadastrados na
tabela Func.
Se desejarmos impedir que sejam feitas atualizaes utilizando a view, podemos dispor da clusula With Read Only
em substituio a With Check Option.
Neste caso, qualquer tentativa de atualizao (Insert, Update ou Delete) atravs da view resulta em erro.
EM SELECTS
Veremos aqui a utilizao subquery na clusula From de um comando Select.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
153
As subqueries na clusula From so bastante utilizadas, principalmente quando a subquery realiza uma agregao.
O comando de SQL apresenta uma outra forma de utilizarmos subquery na clusula FROM, porm de uma maneira
mais clara. Com a clusula WITH utilizada precedendo a query, damos um nome subquery, e a partir da ela pode
ser usada como se fosse uma view para todas as queries internas a esta, desde a principal at a mais interna. O
nome dado tem visibilidade a partir da query principal.
EM UPDATES
Para efeito de exemplificao, repetiremos as condies da view Gerentes, porm relacionada diretamente no
lugar do nome da tabela bsica.
At mesmo a clusula With Check Option pode ser utilizada para garantir que a verificao seja realizada. Observe
que, com a seleo de apenas algumas colunas da tabela Func, somente estas podem ser atualizadas.
EM INSERTS
Na Listagem 2.209, utilizamos a mesma query do exemplo anterior, porm violamos a restrio de cargo >= 60. Observe
que a mensagem de erro exatamente a mesma de quando fizemos uma tentativa de incluso incorreta com a view.
EM DELETES
Na Listagem 2.210, tentamos fazer referncia a uma coluna da tabela Func que no estava presente no Select usado
na clusula From.
A mensagem de erro indica que somente podemos mencionar na clusula Where do comando Delete colunas
presentes no Select da subquery.
O COMANDO MERGE
O comando tem a funo de obter linhas de uma determinada tabela para atualizar ou incluir linhas em outra tabela.
Como restrio temos que no podemos atualizar mltiplas vezes a mesma linha da tabela destino em um mesmo
comando Merge.
As clusulas presentes nesse comando so:
Analisemos o exemplo da Listagem 2.211; a operao de Merge ser realizada sobre a tabela Func. A clusula Using
determina a origem dos dados, que pode ser uma outra tabela (neste caso no h necessidade do parntese), um
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
155
No nosso caso as colunas das tabelas envolvidas no possuem qualquer semelhana; porm havendo necessidade
podemos apelidar a subquery e usar este apelido como qualificador das colunas similares, como fizemos no exemplo
da Listagem 2.212.
All <clusula Insert Into> indica que o Oracle far uma incluso incondicional. Ser includa uma linha para
cada clusula Insert definida para cada linha retornada pela subquery.
When indica que ser feita uma filtragem. Podemos incluir at 127 clusulas When. Elas indicaro qual dos
inserts ser realizado.
All When todas as clusulas When sero verificadas e para cada uma delas em que a condio for verdadeira a
linha ser includa.
First When as clusulas When sero verificadas na ordem estabelecida no comando e quando a primeira for
verdadeira a linha ser includa e as demais descartadas.
Neste exemplo observamos que, apesar de as duas incluses serem realizadas pelo mesmo comando, elas so
tratadas separadamente no banco de dados. No exemplo tentamos incluir um funcionrio com um departamento
ainda inexistente, includo no mesmo comando, porm na linha seguinte. Isto no foi possvel. Porm, quando
invertemos a operao obtivemos sucesso (veja o exemplo da Listagem 2.214).
A sintaxe do comando exige que se viermos a determinar mais de uma tabela, utilizemos a clusula Values para
todas as tabelas, exceto para a ltima, que dever, obrigatoriamente, vir acompanhada de um comando Select.
Neste exemplo da Listagem 2.215 utilizamos a clusula When em conjunto com a clusula All. Esta combinao
faz com que todas as condies sejam analisadas e se mais de uma for verdadeira mais de um Insert ser realizado.
Verifique a sintaxe completa no Captulo 10.
(DAY
INTO
(DAY
INTO
NM_FUNC
---------TESTE ALL
TESTE WHEN
TESTE WHEN
Quando usamos First com When as condies so analisadas em ordem e a primeira atendida executada, sendo
as demais descartadas. O uso da subquery obrigatria, veja sintaxe no Captulo 10.
No exemplo da Listagem 2.217 obtivemos o maior valor de matrcula da prpria tabela Func para que a incluso
no corresse o risco de receber erro de duplicidade. Nesta sintaxe temos de garantir que o comando Select retorne
apenas uma linha.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
157
Neste exemplo tentamos obter mais de uma linha de um dos comandos Selects embutidos e recebemos erro.
NM_FUNC||''||NM_SOBRENOME
------------------------CRISTINA HENDERSON
VICENTE LOURENCO
SILVIO OLIVA
Neste exemplo analisamos o valor retornado pela coluna IN_SEXO e de acordo com o contedo retornamos
informaes diferentes linha a linha. Esta sintaxe similar ao uso do DECODE; no entanto, podemos usar uma
segunda forma sinttica que elimina a necessidade da comparao e na qual podemos definir diversas condies
diferentes. Veja a sintaxe completa no Captulo 10, pois voc precisar dela para fazer os exerccios.
EXERCCIOS
2.70) Deseja-se uma lista com todos os gerentes e seus respectivos funcionrios, contendo nome e sobrenome do
gerente, cdigo e nome do departamento, nome e sobrenome do funcionrio. Todos os departamentos devem ser
apresentados (mesmo que no haja gerentes ou funcionrios) e todos os funcionrios devem ser apresentados
(mesmo que estejam sem departamento).
2.71) Deseja-se remover todas as atividades que no estejam em uso.
2.72) Deseja-se uma lista contendo nome, matrcula, cargo e salrio dos funcionrios que possuam o maior salrio
da empresa e daqueles que possuam o menor salrio da empresa.
2.73) Deseja-se uma relao hierrquica de todos os departamentos da empresa (cdigo e nome), considerando-se que
os departamentos esto subordinados aos seus respectivos departamentos contbeis. A relao deve apresentar endentao
de trs espaos para identificar subordinao. O departamento no mais alto nvel da hierarquia no possui indicao de
departamento contbil (Null). Apresente o caminho da hierarquia. Ordene o resultado pelo nome do departamento.
2.74) Deseja-se uma lista contendo nome, sobrenome, matrcula, ramal, cdigo e nome do departamento, cdigo
e nome do projeto de todos os funcionrios que sejam responsveis por projeto e, simultaneamente, gerentes.
METODOLOGIA
Apresentao e descrio das views do dicionrio de dados, associadas a objetos do usurio.
TCNICA
Descrio e comentrios sobre a informao contida na(s) tabela(s) mapeada(s) pelas views. Adicionalmente, algumas consultas sero realizadas para melhor
entendimento da informao armazenada.
INTRODUO
O banco de dados Oracle possui um conjunto de tabelas especiais para registrar informaes de todos os objetos
criados no banco. A este conjunto de tabelas chamamos Dicionrio de Dados.
As tabelas do dicionrio esto criadas no usurio SYS e possuem nomes utilizados internamente pelos softwares da
Oracle. Porm, foram criadas views para que pudssemos consultar as informaes cadastradas.
Estas views esto divididas em trs grandes grupos: User_, All_ e DBA_.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
159
USER_OBJECTS
Esta view contm informaes de todos os objetos do usurio, sejam tabelas, views, ndices, sinnimos, etc.
Tipo
------------VARCHAR2(128)
VARCHAR2(30)
NUMBER
NUMBER
VARCHAR2(18)
Atravs da coluna Object_Type podemos identificar qual o tipo de objeto listado. Obtemos tambm informaes
sobre a data e hora de criao, indicao de subobjeto (tabelas particionadas, por exemplo).
SET LINESIZE 80
COL OBJECT_NAME FOR A20
COL SUBOBJECT_NAME FOR A10
SELECT OBJECT_NAME, SUBOBJECT_NAME,
OBJECT_ID, DATA_OBJECT_ID,
OBJECT_TYPE
FROM SYS.USER_OBJECTS;
OBJECT_NAME
SUBOBJECT_ OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
-------------------- ----------- --------- -------------- --------------ATIV
32223
TABLE
CIDADES
32180
32180 TABLE
DEPTO
32217
32217 TABLE
FUNC
32219
32219 TABLE
FUNCIONARIO
32262
VIEW
GERENTES
32265
VIEW
HST_PROMO
ANOS2000
32231
32231 TABLE PARTITION
HST_PROMO
ANOS80
32228
32228 TABLE PARTITION
HST_PROMO
ANOS90_94
32229
32229 TABLE PARTITION
HST_PROMO
ANOS95_99
32230
32230 TABLE PARTITION
HST_PROMO
32227
TABLE
PAISES
32176
32176 TABLE
PRJATV
32225
32225 TABLE
PROJ
32221
32221 TABLE
SYS_C002830
32226
32226 INDEX
SYS_C002835
32232
32232 INDEX
SYS_C002841
32261
32261 INDEX
SYS_IOT_TOP_32223
32224
32224 INDEX
SYS_LOB0000032202C00001$$
32203
32203 LOB
SYS_LOB0000032242C00001$$
32243
32243 LOB
SYS_LOB0000032242C00002$$
32245
32245 LOB
TESTE_LOB
32242
32242 TABLE
USER_TABLES
Esta view contm a descrio das tabelas criadas no schema do usurio que realiza a consulta.
Tipo
------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
Esta view apresenta informaes estticas sobre a tabela, tais como o tablespace onde ela est alocada, o tamanho
de uma extenso, quantidade mxima de extenses, percentual de crescimento da extenso, etc., e, ainda, uma
srie de informaes dinmicas, tais como o nmero de linhas, o nmero de blocos alocados, o tamanho mdio de
cada linha e diversas outras. Estas informaes so alimentadas pelo comando Analyze, que armazena informaes
estatsticas sobre os objetos do banco de dados a fim de dar ao Otimizador maiores condies de definir qual o
melhor caminho para estabelecer acesso aos dados quando executamos os comandos de DML (ver o tpico
Administrando o Banco de Dados).
USER_TAB_COLUMNS
Esta view contm a descrio das colunas de todas as tabelas, views e clusters do schema do usurio.
Nulo?
-------NOT NULL
NOT NULL
Tipo
------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(106)
VARCHAR2(3)
VARCHAR2(30)
NOT NULL NUMBER
Com esta view, podemos obter informaes sobre as colunas de uma determinada tabela, view ou cluster. Da
mesma forma que na User_Tables, encontramos informaes estticas tais como o tipo da coluna, tamanho, indicao
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
161
TABLE_NAME
---------DEPTO
DEPTO
DEPTO
DEPTO
FUNC
FUNC
HST_PROMO
HST_PROMO
COLUMN_NAME
-----------CD_DEPTO
NM_DEPTO
CD_GERENTE
CD_DEPTO_CTB
CD_MAT
NM_FUNC
DT_PROMOCAO
CD_MAT
DATA_TYPE DATA_LENGTH
---------- ----------CHAR
3
VARCHAR2
40
NUMBER
22
CHAR
3
NUMBER
22
VARCHAR2
12
DATE
7
NUMBER
22
USER_TAB_PARTITIONS
Encontraremos, aqui, informaes sobre as diversas parties de uma tabela particionada. Estas parties podem
ser armazenadas em localizaes diferentes e possuir caractersticas fsicas diferentes daquelas das tabelas.
Tipo
-----------VARCHAR2(30)
VARCHAR2(3)
VARCHAR2(30)
NUMBER
LONG
NUMBER
NUMBER
USER_INDEXES
Esta view contm informaes sobre os ndices das tabelas. So informaes estticas (nome, tipo, tabela, tipo da
tabela, unicidade, localizao, tamanho, etc.) e dinmicas (nmero de nveis, chaves distintas, nmero de linhas)
preenchidas quando executamos o comando Analyze.
Nulo?
Tipo
-------- -----------NOT NULL VARCHAR2(30)
VARCHAR2(27)
NOT NULL VARCHAR2(30)
NOT NULL VARCHAR2(30)
VARCHAR2(11)
VARCHAR2(9)
VARCHAR2(8)
NUMBER
VARCHAR2(30)
INDEX_NAME
-----------------------SYS_C002813
SYS_C002816
SYS_C002822
SYS_C002830
SYS_C002835
SYS_C002841
SYS_IL0000032202C00001$$
SYS_IL0000032238C00002$$
SYS_IL0000032242C00001$$
SYS_IL0000032242C00002$$
SYS_IOT_TOP_32223
INDEX_TYPE
--------------------NORMAL
NORMAL
NORMAL
NORMAL
NORMAL
NORMAL
LOB
LOB
LOB
LOB
IOT - TOP
TABLE_NAME
---------DEPTO
FUNC
PROJ
PRJATV
HST_PROMO
PEAS
TESTE
LOB8
TESTE_LOB
TESTE_LOB
ATIV
TABLE_TYPE UNIQUENES
---------- ---------TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
TABLE
UNIQUE
Observe na Listagem 2.228 a presena de um ndice do tipo IOT_TOP. Este ndice, na verdade, corresponde tabela
Ativ. Esta tabela do tipo Index Organized Table (IOT), ou seja, os dados da tabela esto armazenados na linha do
ndice. No existe para esta tabela nenhum outro ndice alm do ndice da PK, pois os dados so armazenados
juntamente com a chave do ndice, obedecendo organizao estabelecida para este ndice (asc, desc). Esta tabela
no possui um Rowid (faa um teste e comprove).
USER_IND_COLUMNS
Esta view contm informaes sobre as colunas que so chaves dos ndices: nome, tabela, tamanho e posicionamento
no ndice.
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
NUMBER
NUMBER
NUMBER
VARCHAR2(4)
USER_IND_PARTITIONS
Nesta view, encontramos informaes sobre as parties de ndices.
Tipo
-----------VARCHAR2(30)
VARCHAR2(3)
VARCHAR2(30)
NUMBER
LONG
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
163
NUMBER
NUMBER
VARCHAR2(8)
VARCHAR2(30)
NUMBER
NUMBER
NUMBER
NUMBER
USER_CONSTRAINTS
Esta view contm informaes sobre as regras de integridade de uma determinada tabela. Sejam elas restries
sobre colunas ou relacionamentos.
Nulo?
-------NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(1)
NOT NULL VARCHAR2(30)
LONG
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(9)
VARCHAR2(8)
VARCHAR2(14)
USER_CONS_COLUMNS
Contm informaes sobre as colunas existentes nas definies das constraints.
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
NUMBER
USER_SEQUENCES
Descrio das seqncias criadas no schema do usurio.
Nulo?
Tipo
-------- -----------NOT NULL VARCHAR2(30)
NUMBER
NUMBER
NOT NULL NUMBER
VARCHAR2(1)
VARCHAR2(1)
NOT NULL NUMBER
NOT NULL NUMBER
USER_SYNONYMS
Lista de todos os sinnimos criados no schema do usurio dos objetos presentes em seu schema ou em outros.
Nulo?
Tipo
-------- -----------NOT NULL VARCHAR2(30)
VARCHAR2(30)
NOT NULL VARCHAR2(30)
VARCHAR2(128)
USER_USERS
Contm informaes sobre os usurios do banco de dados.
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
NUMBER
VARCHAR2(32)
DATE
DATE
NOT NULL VARCHAR2(30)
USER_VIEWS
Lista dos textos das views do banco de dados.
Tipo
-----------VARCHAR2(30)
NUMBER
LONG
NUMBER
VARCHAR2(4000)
NUMBER
VARCHAR2(4000)
USER_UPDATABLE_COLUMNS
Nesta view, so apresentadas as colunas das tabelas e views indicando se as mesmas podem ser includas, modificadas
ou removidas.
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(3)
VARCHAR2(3)
VARCHAR2(3)
Para avaliarmos a utilizao destas informaes, criamos uma view de nome Atualiza, contendo um Join entre a
tabela Funcionrio e a tabela Departamento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
165
Ao selecionarmos informaes da view User_Updatable_Columns, observaremos que Atualiza aparece sob a coluna
Table_Name e possui indicaes de quais colunas podemos atualizar.
COLUMN_NAME
-----------CD_MAT
CD_DEPTO
VL_SAL
NM_FUNC
NM_DEPTO
CD_DEPTO
NM_DEPTO
CD_GERENTE
CD_DEPTO_CTB
UPD
--YES
NO
YES
YES
NO
YES
YES
YES
YES
INS
--YES
NO
YES
YES
NO
YES
YES
YES
YES
DEL
--YES
NO
YES
YES
NO
YES
YES
YES
YES
USER_TYPES
Apresenta a lista de tipos criados no banco de dados sob o schema do usurio.
Nulo?
-------NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
RAW(16)
VARCHAR2(30)
NUMBER
NUMBER
VARCHAR2(3)
VARCHAR2(3)
VARCHAR2(3)
USER_TYPE_ATTRS
Apresenta os atributos referentes a cada tipo criado no banco de dados sob o schema do usurio.
Nulo?
-------NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(7)
VARCHAR2(30)
VARCHAR2(30)
NUMBER
NUMBER
USER_TYPE_METHODS
Descreve os mtodos associados aos tipos criados no schema do usurio.
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
NUMBER
VARCHAR2(6)
NOT NULL NUMBER
NOT NULL NUMBER
VARCHAR2(3)
USER_NESTED_TABLES
Descreve a relao entre a tabela nested e a tabela na qual ela est contida.
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
VARCHAR2(30)
VARCHAR2(20)
USER_OBJECT_TABLES
Descreve as caractersticas de uma tabela Objeto. Contm informaes de armazenamento estticas e informaes
geradas pelo Analyze relativas utilizao.
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
NUMBER
NUMBER
NUMBER
NUMBER
USER_LOBS
Contm informaes sobre os Large Objects (Lobs), como, por exemplo, a tabela em que se encontra, se um dado
armazenado dentro ou fora da linha da tabela, nome do ndice, nome do segmento.
Tipo
-----------VARCHAR2(30)
VARCHAR2(4000)
VARCHAR2(30)
VARCHAR2(30)
NUMBER
Na consulta realizada a esta tabela, encontramos as duas colunas criadas na tabela Teste, uma do tipo Clob e outra
do tipo Blob.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
167
COLUMN_NAME
-----------TX_LOB
X
COL1
COL2
SYS_NC00002$
SEGMENT_NAME
-----------------------------SYS_LOB0000032238C00002$$
SYS_LOB0000032202C00001$$
SYS_LOB0000032242C00001$$
SYS_LOB0000032242C00002$$
SYS_LOB0000032250C00002$$
INDEX_NAME
-----------------------SYS_IL0000032238C00002$$
SYS_IL0000032202C00001$$
SYS_IL0000032242C00001$$
SYS_IL0000032242C00002$$
SYS_IL0000032250C00002$$
USER_METHOD_PARAMS
Esta view descreve os parmetros associados a cada mtodo dos tipos definidos.
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
NUMBER
VARCHAR2(30)
NUMBER
USER_METHOD_RESULTS
Aqui vemos a descrio dos resultados dos tipos definidos.
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
NUMBER
VARCHAR2(7)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(44)
EXERCCIOS
2.86) Deseja-se uma lista de todas as tabelas do usurio contendo a quantidade de colunas, a quantidade de
relacionamentos e a quantidade de ndices desta tabela.
2.87) Deseja-se obter, para cada restrio de integridade, a tabela associada, a tabela correspondente (no caso de
relacionamento), o nome da restrio, o texto da restrio ordenado por tabela associada e nome da restrio.
2.88) Determinar, para cada tabela particionada, seu nome, o nome de cada partio e as regras do particionamento.
2.89) Deseja-se informaes sobre as views criadas no schema do usurio, contendo nome, texto associado, colunas
que podem ser atualizadas.
TCNICA
Apresentao conceitual e prtica com exemplos especficos de cada um dos comandos.
TRANSACTION
Transao um conceito que determina um intervalo de tempo durante o qual vrias modificaes podem ser
realizadas para o banco de dados, e ao trmino do qual estas modificaes so efetivadas ou desmanchadas em
conjunto. No possvel efetivar parte dos comandos da transao. A transao tratada como uma unidade,
como se fosse um nico comando.
Suponhamos uma transao de transferncia de uma conta corrente para outra. Esta transao envolve pelo menos
duas operaes de atualizao. A primeira verifica e retira o dinheiro da conta corrente do cliente-origem e atualiza
seu saldo. A segunda credita o dinheiro na conta corrente do cliente-destino e atualiza seu saldo.
Esse conjunto de operaes pode ser considerado uma transao porque ele no pode ser desmembrado em operaes
separadas. O dinheiro no pode ser subtrado da conta do cliente-origem sem que o cliente-destino tenha os
crditos adicionados e nem vice-versa. A operao toda uma nica unidade, uma transao.
COMMIT
O Oracle possui dois comandos para que indiquemos ao banco de dados o momento em que conclumos a transao
da aplicao. A indicao de que a transao deve ser efetivada feita com o comando Commit e a de que a
transao deve ser desmanchada feita com o comando Rollback.
At que uma transao seja encerrada e efetivada com o uso do comando Commit, nenhuma das alteraes feitas
por ela sobre a base de dados fica visvel por qualquer outra sesso que estabelea conexo com o banco de dados,
qualquer que seja o usurio conectado.
Isto significa que as linhas modificadas por uma transao ficam bloqueadas, impedidas de uso por qualquer
usurio do banco de dados, at que a transao seja concluda. Esse mecanismo de bloqueio chama-se Lock. Ele
torna as transaes independentes, uma vez que, estando o acesso para atualizao impedido, no corremos o
risco de tomar decises em relao a modificaes ainda pendentes, no efetivadas.
Aps a execuo do Commit e conseqente efetivao da transao, podemos estar seguros de que as modificaes
foram refletidas no banco de dados e no mais podero ser desfeitas.
Uma transao inicia quando o primeiro comando de SQL DML encontrado no programa ou aps um Commit
ou Rollback.
Uma transao termina quando:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
169
Um comando de DDL concludo. Aps a execuo do comando de DDL, o Oracle implicitamente executa um
Commit. Isto encerra a transao que continha o comando. Observe que no podemos desfazer um comando
de DDL com Rollback. Aps solicitarmos sua execuo, a transao em uso fechada, abre-se uma outra, faz-se
a execuo do comando, a transao encerrada e aberta outra. Quando novamente temos acesso informao,
a transao do comando j foi concluda.
O usurio se desconecta do Oracle. Se o trmino da transao foi normal, isto , no ocorreram erros, o Oracle
efetiva os comandos da ltima transao (Commit). Se o trmino foi anormal, com erros, o Oracle desmancha
todos os comandos relativos ltima transao (Rollback).
Para transaes terminadas normalmente em um programa Oracle Precompiler (Pro*C, Pro*Cobol, etc.), no h efetivao da transao; o
compilador no monta um comando de Commit. Neste caso o Oracle far um Rollback. Quando trabalhamos com aplicativos ou utilitrios da
Oracle, este padro de trmino estabelecido, ou seja, para trmino normal Commit.
recomendao da Oracle que o usurio explicitamente informe ao banco de dados qual a ao desejada tambm para a ltima transao da
aplicao, antes de encerrar a conexo com o banco de dados.
Como recomendao adicional, temos que um programa que altere o contedo de uma ou mais linhas em uma ou mais tabelas deve periodicamente
fixar estas modificaes (Commit). Isto deve ocorrer pois cada uma das linhas modificadas fica bloqueada, impedida de ser atualizada por outra
aplicao (Locked). Desta forma, quanto mais linhas Locked uma aplicao mantiver, menor a possibilidade de concorrncia e maior a necessidade
de controle por parte do Oracle e, portanto, maior gasto de CPU.
Inicialmente, a modificao foi realizada apenas para a transao que solicitou o comando. Aps a execuo do
Commit, todos os usurios tm acesso informao modificada. A palavra Work mantida para compatibilidade
com o SQL padro. Os comandos Commit e Commit Work so equivalentes.
Para avaliarmos o impacto do comando abriremos duas sesses do SQL*Plus simultaneamente, lado a lado, utilizando
o mesmo usurio (Desenv).
Na sesso da esquerda, consultamos o valor do salrio antes e aps a modificao e visualizamos o novo valor
mesmo sem executarmos o comando Commit. Na sesso da direita, visualizamos apenas o salrio sem modificao.
A leitura permitida, porm o valor apresentado sempre aquele de antes da modificao.
Neste ponto, executamos o comando Commit para a sesso da esquerda. Na sesso da direita, a leitura j trouxe a
nova informao.
Na sesso da esquerda, repetimos a operao de atualizao sem executar um comando Commit. Na sesso da
direita, tentamos realizar uma atualizao na mesma linha de matrcula 160. A sesso ficou bloqueada, na fila para
atualizao. No liberada at que o usurio que possui o controle da linha realize um Commit ou Rollback,
desbloqueando a linha.
Com estes exemplos, podemos tirar algumas concluses:
Uma leitura nunca interrompida por um processo de atualizao, ela sempre prossegue.
Uma leitura no bloqueia os dados. No faz Lock.
Uma leitura enxerga o dado com a imagem que ele tinha antes de a leitura se iniciar. Ela v todos os dados
Commited antes do incio da consulta e v todas as modificaes feitas por sua prpria transao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
171
SAVEPOINT
Savepoints so utilizados junto com o comando Rollback. Tm a finalidade de marcar um ponto intermedirio na transao.
Savepoints podem ser teis quando temos uma transao que executa diversos programas. Antes de cada programa
podemos marcar um Savepoint e, caso ocorra um erro no programa, podemos realizar um Rollback somente at o
ponto marcado, desfazendo todas as modificaes realizadas pelo programa e, ento, execut-lo novamente com
as correes necessrias.
Quando ocorre um Rollback para Savepoint, todas as modificaes ocorridas aps o Savepoint so desmanchadas e
todos os locks adquiridos aps este ponto tambm so liberados. A transao, porm, no efetivada. Todas as modificaes
ocorridas antes do Savepoint continuam Lockeds sem efetivao, aguardando que o usurio realize um Commit.
Na Listagem 2.253 foram feitas modificaes em dois funcionrios, Davi e Daniel. Marcamos dois pontos de
controle: um aps atualizarmos o salrio de Daniel e outro aps atualizarmos o salrio de Davi.
Continuando o exemplo, listamos os valores do salrio dos dois funcionrios e comprovamos estarem iguais.
Resolvemos, ento, desfazer toda a transao e executamos um comando Rollback. Observe pelo Select apresentado
posteriormente que a transao ainda estava pendente. Caso o comando Rollback To Savepoint houvesse efetivado
o salrio de Daniel, no conseguiramos desmanchar a modificao neste momento.
Somente o comando Commit efetiva uma transao.
ROLLBACK
O comando Rollback tem a finalidade de concluir uma transao desmanchando todas as modificaes efetuadas
desde o ltimo Savepoint ou Commit.
No exemplo da Listagem 2.256, as 32 linhas modificadas pelo comando Update foram desconsideradas com o uso
do comando Rollback. O comando Select realizado posteriormente comprova que no existem linhas com grau de
instruo 1 na base de dados.
READ CONSISTENCY
Nos comandos acima, testamos o funcionamento do modelo de consistncia do Oracle. Veremos, a seguir, suas
regras de funcionamento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
173
Todos os dados lidos por uma operao de consulta no so alterados durante sua execuo.
Esta frase pode parecer confusa a princpio. As listagens abaixo mostraro uma seqncia de comandos para que o
texto seja esclarecido. A fim de que voc acompanhe os exemplos, abra duas sesses do SQL*Plus lado a lado, A e B.
A Listagem 2.257 apresenta uma transao A em que criamos a tabela teste_rc, incluimos uma linha correspondente
ao timestamp atual e demos commit. Em seguida atualizamos esta tabela para o timestamp corrente sem dar
commit.
NM_FUNC
-----------BRUNO
CRISTINA
DANIEL
TIME
------------------------------16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
Na Listagem 2.258, iniciamos a leitura dos dados na transao B. A leitura foi iniciada s 10:25:03, ou seja, aps a
transao A atualizar os dados (sem Commit). O que constatamos que a visualizao da informao corresponde
ao que realmente est valendo no banco de dados. O que o usurio B consegue ler o que est, com certeza,
valendo. Se o usurio A desistir de atualizar (fazendo um Rollback), as decises tomadas pelo usurio B em relao
informao lida no so afetadas. Caso o usurio A venha a efetivar a transao, a leitura realizada pelo usurio
B j no corresponder mais informao presente no banco de dados; no entanto, esta atualizao feita pelo
usurio A foi realizada aps a leitura feita pelo usurio B independentemente de a diferena de tempo ser um
Retornamos transao A e efetuamos um Commit. Esta operao foi disparada s 10:25:06 (aps o incio da
leitura na transao A) e concluiu retornando uma resposta s 10:25:08. Enquanto isso, a transao B estava
processando a leitura.
NM_FUNC
-----------BRUNO
CRISTINA
DANIEL
DAVI
DILSON
DOLORES
ELIANE
ELINE
TIME
------------------------------16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
WILIAM
WILSON
teste
Nesta listagem, verificamos que o processo de leitura apresentou a ltima linha s 10:25:32, porm a informao
referente ao dado atualizado na tabela teste_rc no foi atualizada; vemos o timestamp de incluso, correspondente
ao valor que estava na base quando o processo de leitura foi disparado.
O que o Oracle garante que, quando iniciamos uma leitura, todas as informaes obtidas do banco de dados so
referentes ao exato momento em que a leitura foi iniciada e no do momento em que a linha especfica foi obtida.
Desta forma, a informao consistente; vemos todos os dados relativos ao mesmo momento de tempo, como se
fosse uma foto instantnea dos dados selecionados, mesmo que a informao lida requeira tempo de acesso maior
e no seja obtida instantaneamente.
O exemplo no pretende comprovar a execuo deste processo, pois que o tempo decorrido pode ter sido derivado de outros fatores e no apenas
da leitura dos dados. A inteno simplesmente favorecer o entendimento.
O SEGMENTO DE ROLLBACK
Cada base de dados contm um ou mais segmentos de rollback. Esta rea tem a finalidade de registrar as modificaes
feitas por cada transao, e que podem ser desmanchadas.
Essa rea utilizada para rollback das transaes, Read Consistency e Recovery.
O segmento de rollback registra diversas informaes, dentre as quais:
Identificador da transao.
Descrio da informao como ela existia antes da modificao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
175
Na transao B, executamos uma modificao no banco de dados sem efetuar um Commit (10:47:59).
Na transao A, executamos uma leitura-consulta sobre os dados de funcionrio e, como era de se esperar, no
vimos a modificao, pois a transao no foi efetivada (10:49:29).
Retornamos transao B e efetuamos um Commit para que os dados da transao fossem efetivados e todos os
Locks liberados (10:50:32).
Retornamos transao A e refizemos a leitura. Iniciada, agora, aps a efetivao da transao. No obtivemos
informao sobre as modificaes, continuamos no percebendo que a coluna Nr_Git de todas as linhas foi
modificada (10:51:51).
Na prpria transao A, executamos um Commit para encerrar o efeito do Set Transaction e imediatamente depois
executamos uma leitura. Finalmente tivemos informao dos dados modificados (10:53:33).
Com estes exemplos, comprovamos o comportamento do Set Transaction em relao visibilidade das informaes
atualizadas no banco de dados.
Devemos, no entanto, avaliar com cuidado a necessidade de utilizar este comando, pois transaes Read Only
muito longas podem receber erro (Snapshot Is Too Old), indicando que a base de dados j sofreu muitas modificaes
desde que o comando foi executado. Quando isto ocorre, podemos encerrar a transao e reexecutar o comando
Set Transaction, se necessrio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
177
Na Listagem 2.267, transao A, efetuamos o bloqueio de todas as linhas da tabela Funcionrio (11:12:00).
Na transao B (Listagem 2.268), tentamos efetuar uma atualizao em apenas uma linha e ficamos bloqueados (11:13:46).
A transao A (Listagem 2.269) detm o conjunto de linhas e pode indiscriminadamente efetuar atualizaes
(11:14:26).
Isto ocorre porque, antes de recebermos, na transao A, qualquer linha do banco de dados, todas as linhas
selecionadas so bloqueadas.
DEADLOCKS
Um DeadLock uma situao de bloqueio mltiplo em que as transaes envolvidas ficam aguardando umas pelas
outras sem que seja possvel a alguma delas prosseguir. Isto causa um bloqueio recproco que s pode ser percebido
e resolvido pelo banco de dados.
Observe que ambos os locks so adquiridos, pois as transaes no so conflitantes. Cada uma delas adquire
bloqueio sobre uma linha independente.
O Oracle percebe a ocorrncia do conflito e cancela o ltimo comando de uma das transaes. Permitindo que o
usurio cancele a transao e a execute novamente mais tarde.
SET CONSTRAINT
Este comando tem por finalidade modificar o momento de verificao das restries de integridade.
Normalmente, to logo enviemos um comando de atualizao para a base de dados, as regras de integridade so
verificadas (esta a situao mais comum e o que era disponvel at a release 7.3).
A partir da release 8 do Oracle, podemos determinar que uma restrio de integridade seja verificada apenas no
momento em que a transao for encerrada com Commit.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
179
No exemplo, a coluna B possui uma restrio que ser verificada to logo um comando de DML seja executado. J
a coluna A possui a especificao INITIALLY DEFERRED o que indica que a validao de integridade ser adiada
(deferred) para o momento em que for executado o comando COMMIT. A opo Deferrable permite a modificao
do momento da verificao dinamicamente pelo usurio atravs do comando SET CONSTRAINT.
O comando Set Constraint se subdivide em:
Set Constraints Immediate Indica que as restries de integridade especificadas por uma constraint com a
indicao de Deferrable devem ser verificadas imediatamente aps cada comando de DML.
Set Constraints Deferred Indica que as restries de integridade especificadas por uma constraint com a indicao
de Deferrable devem ser verificadas apenas quando a transao executar um Commit.
SQL> COMMIT;
COMMIT
*
ERRO na linha 1:
ORA-02091: transao repetida
ORA-02290: restrio de checagem (DESENV.SYS_C002846) violada
No primeiro comando Insert, a restrio relativa coluna A violada, mas no ocorre erro porque esta restrio s
ser verificada a tempo de Commit. No segundo comando Insert, a restrio relativa coluna B violada e o erro
ocorre imediatamente.
Quando executamos o comando Commit, a verificao da constraint relativa coluna A ocorre e no feita a
incluso na tabela TA.
O comando permite que faamos a alterao de uma constraint especfica ou de todas as constraints que possuem
a opo de Deferrable.
ALTER SESSION
Este comando possui um amplo espectro de modificaes que pode realizar. Veremos algumas destas modificaes
e suas conseqncias.
Commit in Procedure Habilita ou desabilita (Enable ou Disable) a execuo do comando Commit (e Rollback)
em stored procedures ou functions.
Quando um comando Commit ou Rollback executado em uma sesso, isto afeta todos os comandos executados
na sesso. Quando desejamos garantir que as rotinas que executamos na sesso no efetivem a transao, podemos
utilizar este comando.
Set Sql_Trace Habilita ou desabilita (True ou False) a facilidade de trace para a sesso.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
181
Esta opo aparentemente no muda o comportamento da sesso, porm passa a ser gerado em disco (no ambiente
servidor) um arquivo contendo informaes sobre a execuo de cada um dos comandos de DML ocorridos durante a sesso (ou at que esta opo seja desabilitada). Isto ajuda o DBA a verificar a existncia de comandos com
problemas de performance.
Set NLS Modifica diversas caractersticas relativas National Language Support e sero tratadas no prximo tpico.
Set Flagger Indica que os comandos de SQL executados na sesso devero passar pelo crivo de validao
sinttica de acordo com o padro Ansi (Entry, Intermediate, Full ou OFF).
O erro apresentado indica que a sintaxe informada se acha incompatvel com o padro SQL92 Entry.
Set Current_Schema Possibilidade de alterao do schema corrente sem alterao do usurio corrente.
A alterao de schema faz com que as referncias feitas sem qualificao sejam direcionadas para o schema
especificado no comando. Isso uma forma prtica de acesso a dados que esto em outro usurio. Observe, no
exemplo 2.282, que fizemos acesso tabela Emp do usurio Scott sem necessidade de qualificao (Scott.emp).
Essa caracterstica, no entanto, no d privilgios especiais ao usurio. Para que o acesso seja possvel, ele deve ter
os privilgios necessrios sobre o objeto desejado.
Set Constraints Este comando tem a finalidade de modificar o momento de verificao das restries de integridade.
Com a opo Immediate, indicamos que as condies especificadas por uma Constraint Deferrable sero verificadas
imediatamente aps cada comando de DML (similar ao Set Constraints All Immediate marcado no incio de cada transao).
A opo Deferred indica que as condies especificadas por uma Constraint Deferrable sero verificadas quando a
transao for Committed (similar ao Set Constraints All Deferred marcado no incio de cada transao).
Finalmente, a opo Default restaura todas as Constraints, no incio de cada transao, ao seu estado inicial
(Deferred ou Immediate).
Set Time_Zone Determina a forma de apresentao e a zona (meridiano) para a sesso corrente. Este parmetro
est associado sesso (no um parmetro de inicializao).
Ao usarmos o formato +/- hh:mm, indicamos que o valor dever ser fornecido em relao ao meridiano de
Greenwich. Os valores vlidos variam de 12:00 a + 14:00.
Se especificarmos LOCAL, ser usado o valor estabelecido quando a sesso teve incio. Se especificarmos
DBTIMEZONE, desejamos que o valor seja igualado especificao do banco de dados.
Na ltima opo informamos um nome de regio. Para sabermos os nomes de regies existentes devemos consultar a
coluna TZNAME da view V$TIMEZONE_NAMES. Neste caso a funo SESSIONTIMEZONE retornar um nome de regio.
SET ROLE
O comando Set Role adquire para a sesso, dinamicamente, os privilgios das roles informadas.
A criao de roles e sua utilidade sero vistos no tpico Administrando o Banco de Dados.
Na primeira parte deste exemplo (Listagem 2.285), criamos a role Ler e autorizamos a leitura da tabela Func para
ela. A role foi autorizada para o usurio Scott.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
183
Se tivssemos uma sesso com o usurio Scott j conectado ao banco de dados, para que ele tivesse acesso aos
privilgios liberados pela role Ler, haveria necessidade de executar o comando Set Role a fim de adquirir estes privilgios.
Se estabelecermos uma nova conexo usando o usurio Scott, podemos ou no ter necessidade de usar o comando
Set Role. Isto depender da forma como o DBA da instalao criou o usurio Scott. No nosso caso, quando o
usurio Scott estabeleceu conexo, todas as roles a que ele tinha direito foram adquiridas automaticamente.
GLOBALIZATION SUPPORT
A Globalization Support permite o armazenamento, processamento e recuperao de dados em linguagem nativa.
Temos a garantia da Oracle de que os utilitrios do banco de dados, as mensagens de erro, a ordem para sort, data,
informaes monetrias e convenes de calendrio se adaptem automaticamente linguagem e local nativos.
At a verso 8i este conjunto de caractersticas era chamado de National Language Support. A NLS habilita o
Oracle a apresentar mensagens na linguagem especificada e datas no formato determinado. Permite que as aplicaes
utilizem um conjunto de caracteres para armazenamento de dados no banco de dados compatvel com o pas
(acentuao, cedilha, etc.).
As aplicaes desenhadas com National Language Support podem trabalhar com diferentes conjuntos de caracteres
armazenados no banco de dados, com linguagens diferentes, com formatos de data, com formatos para nmeros,
com regras de ordenao e de converso.
Na verso 9i as capacidades anteriores foram ampliadas e a National Language Support passou a ser um subconjunto
da Globalization Support. Nesta verso poderemos desenvolver aplicaes com capacidade multilingstica e
produtos de software podem ser acessados e executados de qualquer parte do mundo sem modificao.
Disponibilizao do utilitrio Oracle Locale Builder Utility (Lbuilder) para que possamos customizar os dados
locais tais como linguagem, charset, territrio ou ordenao lingstica.
ESQUEMA DE CODIFICAO
Quando pressionamos uma tecla em um terminal qualquer, a aparncia do caracter apresentado depende do
esquema de codificao em uso naquela estao. A tecla pressionada traduzida de acordo com o esquema de
codificao (ou character set) em uso na estao. O mesmo ocorre quando o terminal recebe um cdigo e o
converte para uma figura (letra, nmero e pontuao) no vdeo.
UNICODE
Unicode um esquema de codificao de caracteres universal que permite que armazenemos informaes de
qualquer linguagem usando um nico charset. Unicode gera um cdigo nico para cada caracter, independentemente
da plataforma, programa ou linguagem. A utilizao de Unicode em aplicaes multi-plataforma ou cliente-servidor
ou em sites da web pode trazer grandes benefcios uma vez que ele permite que um software possa ser utilizado em
diferentes plataformas e pases sem necessidade de reengenharia e, talvez o mais importante, ele permite que o
dado seja transportado atravs de diferentes ambientes sem corrupo.
Parmetros de inicializao do banco de dados (no arquivo init.ora). A definio neste ponto funcionar como
uma especificao default; as demais definies se sobrepem ao que especificarmos neste local. No init.ora
podemos especificar: Nls_Calendar, Nls_Comp, Nls_Currency, Nls_Date_Format, Nls_Date_Language,
Nls_Dual_Currency, Nls_Iso_Currency, Nls_Language, Nls_Length_Semantics, Nls_Numeric_Characters, Nls_Sort,
Nls_Territory, Nls_Timestamp_Format, Nls_Timestamp_Tz_Format.
Variveis de ambiente (declaradas para a estao do usurio). No caso do Windows, no registrador. Podemos
especificar: Nls_Calendar, Nls_Comp, Nls_Credit, Nls_Currency, Nls_Date_Format, Nls_Date_Language,
Nls_Debit, Nls_Dual_Currency, Nls_Iso_Currency, Nls_Lang, Nls_List_Separator, Nls_Monetary_Characters,
Nls_Nchar_Conv_Excp, Nls_Numeric_Characters, Nls_Sort, Nls_Timestamp_Format, Nls_Timestamp_Tz_Format.
As variveis declaradas em nvel de ambiente ficam associadas estao do usurio e sero utilizadas por todas
as aplicaes Oracle que vierem a ser utilizadas na estao, ou seja, todas as sesses abertas nesta estao. Se
sobrepem s definies feitas para o banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
185
ALTER SESSION
Nosso estudo comear pelo comando Alter Session, que, como j comentamos anteriormente, tem a finalidade
de alterar caractersticas relativas sesso do usurio.
A linguagem usada para nomes de dias, nomes de meses e suas respectivas abreviaes.
Smbolos equivalentes usados na linguagem para A.M., P.M., A.D. e B.C.
Seqncia de ordenao dos caracteres.
A tabela a seguir apresenta a lista de linguagens vlidas para o Oracle9i. As linguagens listadas com (*) indicam
aquelas para as quais as mensagens de erro do Oracle foram traduzidas.
Tabela 2.09 Linguagens
American
Arabic (*)
Assamese
Bangla
Bengali
Bulgarian
Canadian French
Catalan (*)
Croatian
Czech (*)
Danish (*)
Dutch (*)
Egyptian
English
Estonian
Finnish (*)
French (*)
German (*)
German Din
Greek (*)
Gujarati
Hebrew (*)
Hindi
Hungarian (*)
Icelandic
Indonesian
Italian (*)
Japanese (*)
Kannada
Korean (*)
Latvian
Lithuanian
Malay
Malayalam
Marathi
Mexican Spanish
Norwegian (*)
Oriya
Polish (*)
Portuguese (*)
Punjabi
Romanian (*)
Russian (*)
Slovak (*)
Slovenian
Spanish (*)
Swedish (*)
Tamil
Teluger
Thai
Turkish (*)
Ukrainian
Vietnamese
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
187
America
Australia
Austria
Bahrain
Bangladesh
Belgium
Brazil
Bulgaria
Canada
Catalonia
Chile
China
Cis
Colombia
Costa Rica
Croatia
Cyprus
Czech Republic
Denmark
Djibouti
Egypt
El Salvador
Estonia
Finland
France
Guatemala
Germany
Greece
Hong Kong
Hungary
Iceland
India
Indonesia
Iraq
Ireland
Israel
Italy
Japan
Jordan
Kazakhstan
Korea
Kuwait
Latvia
Lebanon
Libya
Lithuania
Luxembourg
Macedonia
Malaysia
Mauritania
Mexico
Morocco
New Zealand
Norway
Oman
Panama
Peru
Poland
Portugal
Puerto Rico
Qatar
Romania
Saudi Arabia
Singapore
Slovakia
Slovenia
Somalia
South Africa
Spain
Sudan
Sweden
continua
Syria
Taiwan
Thailand
The Netherlands
Tunisia
Turkey
Ukraine
United Kingdom
Uzbekistan
Venezuela
Vietnam
Yemen
Yugoslavia
O parmetro Nls_Date_Language determina a linguagem a ser usada para os nomes de dias e meses e suas respectivas
abreviaturas. No h necessidade de arquivo especfico, e portanto podemos efetuar a alterao para qualquer linguagem
vlida (para linguagens que usem caracteres multi-byte h necessidade de o terminal suportar este tipo de cdigo).
O parmetro Nls_Numeric_Characters explicitamente especifica o caracter a ser usado como separador decimal e o caracter
a ser usado como separador de milhar. Estes caracteres devem ser informados na ordem <d> (decimal) e <g> (grupo,
milhar). Os valores devem ser diferentes, no podem ser numricos nem um dos seguintes caracteres: +, -, <, >.
O parmetro Nls_Currency permite que faamos a modificao do smbolo financeiro local e o parmetro
Nls_Iso_Currency permite que determinemos o territrio cujo smbolo ISO deve ser usado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
189
Observe que s podemos modificar diretamente o smbolo local. O smbolo ISO determinado indiretamente,
pelo territrio.
O parmetro Nls_Sort altera a seqncia na qual o Oracle ordena os caracteres.
Arabic_Abj_Match
Arabic_Abj_Sort
Arabic_Match
Ascii7
Bengali
Big5
Binary
Bulgarian
Canadian French
Catalan
Croatian
Czech
Czech_Punctution
Danish
Dutch
Ebcdic
Eec_Euro
Eec_Europa3
Estonian
Finnish
French
German
German_Din
GBK
Greek
Hebrew
HKSCS
Hungarian
Icelandic
Indonesian
Italian
Japanese
Latin
Latvian
Lithuanian
Malay
Norwegian
Polish
continua
Romanian
Russian
Slovak
Slovenian
Spanish
Swedish
Swiss
Thai_Dictionary
Thai_Telephone
Turkish
Ukrainian
Unicode_Binary
Vietnamese
West_European
Xcatalan
Xcroatian
Xczech
Xczech_Punctuation
Xdanish
Xdutch
Xfrench
Xgerman
Xgerman_Din
Xhungarian
Xpunctuation
Xslovak
Xslovenian
Xspanish
Xswiss
Xturkish
Xwest_European
ROC Official
Thai Buddha
Persian
Arabic Hijrah
English Hijrah
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
191
O parmetro NLS_COMP permite a utilizao de caractersticas da lngua para efeito de comparao. Normalmente,
a comparao na clusula Where binria. Para que a comparao obedecesse s caractersticas especficas da
linguagem era necessrio o uso da funo NLSSORT.
No exemplo da Listagem 2.295 pudemos observar que a modificao exclusiva do parmetro NLS_SORT no fez
com que a comparao na clusula Where levasse em considerao as caractersticas lingsticas. Somente quando
indicamos o valor ANSI para NLS_COMP conseguimos que as comparaes tambm levassem em considerao o
parmetro NLS_SORT.
O parmetro NLS_Dual_Currency permite a definio de um outro smbolo financeiro a ser utilizado nas
apresentaes monetrias.
VARIVEIS DE AMBIENTE
Aps verificarmos a utilizao diretamente na sesso, veremos quais as diferenas para a declarao usando as
variveis de ambiente. Como exemplificao, trabalharemos o RegEdit do Windows.
Se voc no tem intimidade na alterao de valores no RegEdit, tome muito cuidado no seu manuseio. Todos os programas instalados no Windows
gravam variveis de ambiente nestes registradores a fim de consultarem a tempo de inicializao. Uma alterao incorreta pode causar srios
problemas na execuo de programas e at do prprio Windows.
Vrios dos parmetros vistos junto com o comando Alter Session podem ser utilizados como variveis de ambiente:
Nls_Calendar, Nls_Comp, Nls_Currency, Nls_Date_Format, Nls_Date_Language, Nls_Dual_Currency,
Nls_Iso_Currency, Nls_Numeric_Characters, Nls_Sort, Nls_Timestamp_Format, Nls_Timestamp_Tz_Format. Estes
valores no sero repetidos neste momento.
Estudaremos apenas aqueles parmetros ainda no mencionados.
Para visualizarmos uma informao nos registradores do Windows, devemos:
Clicar no boto Iniciar (Windows), opo Executar, escrever RegEdit e clicar OK.
Na janela apresentada do lado esquerdo expandir o n Hkey_Local_Machine (clicar sobre o sinal +). Novamente
expandir o n Software subordinado ao n anterior (clicar sobre o sinal + lateral ao nome do n). Subordinada
a este n, veremos a pasta Oracle.
Clicar sobre a pasta Oracle e encontrar a pasta Home (no meu caso Home5) que corresponde instalao do
banco de dados. Na janela direita veremos surgir o conjunto de variveis de ambiente do Oracle.
O parmetro Nls_Lang composto de trs informaes: linguagem, territrio e character set, com o formato:
<linguagem>_<territrio>.<charset>.Todos os componentes so opcionais. Se desejarmos informar o territrio sem
a linguagem, por exemplo, devemos usar o formato: _<territrio>.<charset >.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
193
Ainda usando a mesma janela do RegEdit, selecionar no menu de opes Editar, Novo e Valor da Seqncia.
Ser criado um novo parmetro na janela direita, que poderemos preencher com o nome da varivel de
ambiente desejada.
Depois de preenchermos o nome, devemos efetuar um clique duplo sobre o cone para que seja apresentado um
dilogo que permitir o preenchimento do valor desejado.
O parmetro Nls_Credit determina a criao de um smbolo para indicao de crdito em relatrios. Este smbolo
pode conter quaisquer caracteres at o comprimento de nove posies. O valor default obtido de Nls_Territory.
O parmetro Nls_Debit determina a criao de um smbolo para indicao de dbitos em relatrios. Este smbolo
pode conter quaisquer caracteres at o comprimento de nove posies. O valor default obtido de Nls_Territory.
O parmetro Nls_List_Separator especifica o caracter a ser usado para separar valores em uma lista de valores. Deve
ser um caracter single-byte e no pode ser numrico, nem similar aos smbolos monetrios
(Nls_Monetary_Characters) e nem um dos seguintes smbolos: (+), (-), (<), (>), (.). O valor derivado de Nls_Territory.
O parmetro Nls_Monetary_Characters determina o smbolo para unidade monetria e centavos, por exemplo, ($)
para o dlar americano e () para centavos de dlar. Os caracteres especificados devem ser diferentes entre si e no
podem ser numricos, nem um dos seguintes smbolos: (+), (-), (<), (>), (.). O valor derivado de Nls_Territory.
O parmetro Nls_Nchar_Conv_Excp indica se a perda de dados durante uma converso explcita ou implcita de
tipo de dado deve ou no reportar um erro.
Parmetros NLS
To_Date
Nls_Date_Language, Nls_Calendar
To_Number
To_Char
To_Nchar
Nls_Upper
Nls_Sort
Nls_Lower
Nls_Sort
Nls_Initcap
Nls_Sort
Nlssort
Nls_Sort
EXERCCIOS
Neste grupo de exerccios, trabalharemos com duas cpias ativas do SQL*Plus. primeira chamaremos sesso 1 e
segunda, sesso 2.
2.90) Coloque outra cpia do SQL*PLUS ativa no usurio DESENV (sesso 2).
2.91) Atualize sua tabela Depto (sesso 1), mas no d Commit. O que o outro usurio (sesso 2) v? Por qu?
2.92) D Commit sobre suas atualizaes (sesso 1). A visibilidade na sesso 2 possvel agora? Por qu?
2.93) Atualize sua tabela Depto (sesso 1), mas no d Commit. Atravs da sesso 2, tente atualizar a mesma linha
alterada anteriormente. O que acontece? Por qu? D Rollback nas duas sesses.
2.94) Atualize sua tabela Depto (sesso 1), mas no d Commit. Na sesso 2, execute um SELECT .. FOR UPDATE.
Qual a diferena?
2.95) Explique, com suas palavras, o que acontece nos trechos de programa abaixo:
Listagem-resposta 2.95A
SQL> UPDATE FUNC
3
SET VL_SAL = VL_SAL * 1.10;
33 linhas atualizadas;
SQL> COMMIT;
Validao completa.
Listagem-resposta 2.95B
SQL> DELETE FROM FUNC WHERE NR_GIT = 21;
1 linhas deletada.
SQL> ROLLBACK;
Rollback completo.
Listagem-resposta 2.95C
SQL> UPDATE DEPTO
2
SET CD_GERENTE = 200
3
WHERE CD_DEPTO = 'A00';
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
195
METODOLOGIA
Apresentao e descrio dos conceitos de Index Tables e Large Objects.
TCNICA
Exemplificao de uso dos objetos apresentados.
INDEX TABLES
Index Organized Tables so tipos especiais de tabelas que armazenam os dados ordenados pela primary-key.
Nesta forma de organizao, o Oracle mantm as linhas da tabela em um ndice B-Tree construdo com base na
primary key. As linhas do ndice contm o valor da chave e os valores dos demais dados.
Devemos especificar, obrigatoriamente, uma primary key para este tipo de tabela.
Cada tabela no banco de dados possui uma pseudocoluna chamada Rowid. As tabelas Index-Organized no possuam
esta caracterstica at a verso 8i. No nosso modelo de dados, a tabela Ativ foi construda com este tipo de organizao.
ROWID LGICO
A obteno do endereo da linha (Rowid) de uma tabela Index-Organized resolvida pelo Oracle ao fornecer um
endereo lgico chamado de Logical Rowid, que baseado na chave primria da tabela.
desta forma (atravs destes Rowids lgicos) que o Oracle consegue realizar a construo de ndices secundrios
para uma tabela do tipo Index-Organized.
Cada Logical Rowid usado em um ndice secundrio pode incluir um physical guess (como se fosse uma dica), que
identifica a localizao do bloco da linha no momento em que o ndice secundrio foi criado ou reconstrudo.
Com esta caracterstica, o Oracle poder usar este guess para fazer acesso diretamente ao bloco-folha (da tabela
Index-Organized) em vez de fazer uma pesquisa pela chave. Isto garante que acessos atravs dos Logical Rowids
para tabelas que no sejam volteis (como o caso do ambiente Data Warehouse) tenham performance similar aos
Rowids fsicos das tabelas normais.
Para tabelas volteis, no entanto, se o guess se tornar ultrapassado (envelhecido, incorreto), a pesquisa pela primary key deve ser realizada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
197
ROWID
------------*BAIAAHICwQv+
*BAIAAHICwRX+
*BAIAAHICwTP+
*BAIAAHICwgL+
Podemos fazer acesso a uma linha usando o formato Where Rowid = <valor>, onde o valor corresponde
estrutura incompleta (opaca) retornada pelo comando Select Rowid.
O acesso atravs do Rowid lgico a maneira mais rpida de obter o acesso a uma linha especfica, apesar de
eventualmente requerer o acesso a mais de um bloco.
Um Rowid lgico no alterado se o valor da primary key no mudar. Isso menos estvel que um Rowid fsico,
que permanece imutvel independente das alteraes feitas para a linha.
UROWID);
LARGE OBJECTS
Large Objects ou Lobs so tipos de dados que podem armazenar informaes de at 4 GB de dados binrios
(imagens, sons, vdeos, etc.) ou caracteres.
Podem ser subdivididos em duas categorias:
Internos So aqueles armazenados em tablespaces, dentro do banco de dados (Blob, Clob ou Nclob).
TIPOS DE LOBS
Os tipos de Lobs so os seguintes:
No exemplo da Listagem 2.301, podemos ressaltar algumas caractersticas bsicas dos Lobs:
Podemos definir mais de um lob por tabela (isto no possvel com colunas Long ou Long Raw).
Podemos especificar uma clusula Lob que determine caractersticas fsicas para a coluna, tais como o tablespace
onde a informao ser armazenada, se o armazenamento poder ser efetuado na linha (enable storage in row)
quando o tamanho da coluna menor que 4000 bytes ou sempre ser efetuado em outra rea (disable storage in
row), o nome da rea externa de armazenamento, o nome do ndice de controle do lob e alguns outros parmetros
de armazenamento (no sero vistos neste material).
A especificao de nome para o segmento onde sero armazenados os dados pode ser til para avaliao fsica e
possvel modificao.
LOCATOR
Um Lob composto de duas partes:
LOB INDEX
O Lob Index criado implicitamente. usado para encontrar o dado do lob em seu segmento. O lob index contm
o rowid (endereo) da tabela, que contm a coluna Lob, o offset e o endereo da parte de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
199
Tipo
--------------NUMBER
CLOB
CLOB
BLOB
BLOB
BINARY FILE LOB
BINARY FILE LOB
NCLOB
NCLOB
INCLUSO
Podemos inicializar uma coluna Lob usando o prprio comando Insert.
No exemplo da Listagem 2. 304, o directory Local indica o diretrio do sistema operacional onde se encontra o arquivo.
ALTERAO
A alterao se dar em termos de locators, que sero substitudos por outros no caso do primeiro exemplo ou
diretamente sobre o texto com o uso da funo TO_CLOB.
No exemplo da Listagem 2. 306 a seguir, alteraremos os valores das colunas Clob, sem uso de TO_CLOB.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
201
CONSULTAS
Na primeira consulta, obteremos os dados das colunas CLOB.
C_CLOB1
C_CLOB2
------------------------------ ------TEXTO QUALQUER
NOVO TESTE DE ATUALIZAO
Na Listagem 2. 307, vemos que o SQL*Plus apresenta o valor da coluna. Traz o contedo endereado pelo locator.
Na Listagem 2.308, vemos que as demais colunas no podem ser apresentadas pelo SQL*Plus, pois se trata de
colunas binrias (C_BLOB1 e C_BFILE1).
Os exerccios referentes a Lobs sero feitos em PL/SQL, uma vez que a manipulao em SQL bastante bsica.
EXERCCIOS
2.104) Incluir dados na tabela TLOB com o formato especificado abaixo, a partir da tabela Func:
a) c_number deve receber cd_mat.
b) c_clob1 deve receber nm_func concatenado com nm_sobrenome.
c) c_clob2 deve receber o nome do departamento em que o funcionrio trabalha.
d) c_nclob1 deve receber o projeto que o funcionrio coordena (se for o caso).
e) c_nclob2 deve receber a concatenao de data de nascimento, data de admisso, cargo, grau de instruo e salrio.
2.105) Associar a coluna C_BFILE1 ao arquivo correspondente indicado pela coluna nm_foto.
METODOLOGIA
Apresentao da sintaxe bsica para criao de objetos em um banco de dados Oracle9i e autorizao de uso dos objetos.
TCNICA
Acompanhamento com exemplos simples que permitam o entendimento dos comandos.
INTRODUO
Neste tpico, analisaremos alguns comandos da Data Definition Language a fim de conhecermos a amplitude da
linguagem SQL. De um modo geral, os comandos tratados na SQL DDL so executados por um Administrador de
Banco de Dados (DBA) que possui um conhecimento mais profundo do funcionamento interno do Oracle e,
portanto, mais condio de indicar as melhores formas de armazenamento.
SCHEMA
Os objetos do banco de dados esto divididos em dois grandes grupos: schema objects e non schema objects.
Um schema uma coleo de estruturas de dados subordinadas a um user e possui o mesmo nome do user. Cada
usurio dono de um nico schema.
Os objetos subordinados a um usurio, ou seja, os schema objects, so os seguintes tipos de estruturas:
clusters
database links (+)
index-only tables e tables
indexes
object tables, object types, object views (#)
sequences
materialized views e materialized view logs
stored functions, stored procedures, database triggers, packages e external procedure libraries (*)
synonyms
views
(+) S disponveis se a opo de distribuio estiver instalada. No sero vistos neste material.
(*) S disponveis se PL/SQL estiver instalado. Sero vistos no prximo captulo (PL/SQL).
(#) S disponveis se a opo objects estiver instalada.
Existem, no banco de dados, objetos que so compartilhados por diversos usurios e no esto subordinados ao
schema de nenhum deles, so os non schema objects. Correspondem aos seguintes objetos:
directories
profiles
roles
rollback segments
tablespaces
users
Create Com este grupo de comandos, podemos definir a estrutura de diversos objetos no banco de dados.
Cada um deles possui sintaxe prpria: Create Table, Create Tablespace, Create User, etc.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
203
Drop Com este grupo de comandos, podemos remover o objeto e sua estrutura do banco de dados. As sintaxes
variam por tipo de objeto: Drop Sequence, Drop Synonym, Drop Cluster, etc.
Grant / Revoke Neste grupo de comandos, estabelecemos (ou revogamos) autorizao de uso sobre objetos
criados ou sobre aes permitidas relativas ao banco de dados.
Audit / NoAudit Este grupo de comandos coordena a gravao de informaes de auditoria para
acompanhamento e investigao das aes realizadas pelos usurios no banco de dados.
Diversos Neste grupo final se acham os comandos Analyze (responsvel por coletar estatsticas, validar estruturas
ou identificar cadeias), Comment (que permitir que adicionemos comentrios ao dicionrio de dados), Rename (para alterarmos o nome de um objeto) e Truncate (para removermos todas as linhas de uma tabela ou
cluster e liberarmos espao livre).
A sintaxe e definio especfica de cada um dos comandos sero objeto de estudo em outro material especfico para DBAs.
ARMAZENAMENTO
Quando falamos em banco de dados Oracle, estamos tratando de duas partes bem distintas: a parte fsica de armazenamento
(esttica), chamada de Database, e a parte dos mecanismos de software e memria (ativa), chamada de Instncia.
Conceitualmente, diremos que um Database composto de:
Arquivos de Banco de Dados (Database Files) Onde esto armazenados os dados do dicionrio de dados e os
dados do usurio.
Arquivos de Log (Redo Log Files) Onde esto armazenadas todas as aes executadas sobre os dados e que
podem ser utilizadas para recuperao dos mesmos.
Arquivos de Controle (Control Files) Onde esto armazenadas informaes sobre os arquivos de dados a fim
de garantir a integridade do banco como um todo.
Arquivo de Parmetros (Parameter File Init.ora) Onde esto armazenados os parmetros de inicializao do
banco de dados.
No esquema da Figura 2.13, vemos a presena das estruturas de armazenamento e a Instncia (representando os
mecanismos de software).
Uma instncia Oracle composta basicamente de:
Uma rea de memria compartilhada pelos componentes do software (processos), chamada de SGA (System
Global Area).
Diversos componentes do software, chamados de processos background (programas que trabalham para todos
os usurios do banco de dados), dos quais quatro so indispensveis: Pmon (Process Monitor controle dos
processos Server que agem para os usurios), Smon (System Monitor controle do sistema como um todo),
Dbwr (Database Writer encarregado de efetuar a gravao nos arquivos do banco de dados) e Lgwr (Log Writer
responsvel por efetuar a gravao nos arquivos de Redo Log).
Esta a noo bsica de funcionamento do banco de dados onde os processos background, a rea de memria
compartilhada e o database so os componentes mais importantes. Os processos Server tambm presentes no
diagrama fazem o acesso e atualizao (em memria) nos dados dos usurios. Dependendo da arquitetura escolhida
pelo DBA, podemos ter um processo Server para cada processo do usurio (nesta arquitetura, cada sesso estabelecida
no ambiente cliente ativa um processo Server no ambiente servidor, que tem como tarefa executar todos os comandos
solicitados pela sesso do cliente) ou podemos ter um processo Server compartilhado por diversos usurios (nesta
TABLESPACE
No esquema apresentado na Figura 2.13, vemos um conjunto de arquivos chamados de Database Files. Estes
arquivos so visveis externamente pelo sistema operacional; internamente, o Oracle relaciona estes arquivos a
objetos internos chamados de Tablespaces.
No esquema da Figura 2.14, vemos que um tablespace pode estar associado a um ou mais database files, enquanto
um database file s pode estar associado a um tablespace.
O tablespace corresponde unidade lgica de armazenamento. dentro dele que armazenaremos as tabelas,
ndices, dicionrio de dados, etc.
BLOCO ORACLE
Pelo esquema, observamos que um tablespace composto por diversas partes do mesmo tamanho. Estas partes so
chamadas de blocos. O tamanho de um bloco definido pelo DBA na criao do banco de dados, no arquivo
init.ora. O bloco ser a unidade mnima de leitura ou gravao para disco, ou seja, toda vez que desejarmos obter
informaes de uma determinada linha de uma tabela, no mnimo estaremos solicitando a leitura de um bloco. Da
mesma forma, quando estivermos alterando apenas uma determinada coluna de uma linha especfica, estaremos
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
205
SEGMENTOS
No esquema da Figura 2.15, vemos o espao reservado para um determinado tablespace ser utilizado por quatro
segmentos: um segmento Func, um segmento Proj, um segmento de ndice e um segmento de rollback.
Assim, formalizaremos dizendo que um database contm tipos de segmentos dos quais estamos conhecendo trs:
segmentos para armazenamento de dados (Data Segment), segmentos para armazenamento de ndices (Index
Segment) e segmentos para armazenamento de informaes de rollback (Rollback Segment).
Na Figura 2.15, os segmentos Func e Proj so segmentos de dados, o segmento S1 de ndice e o segmento R de rollback.
Fica claro, no esquema, que um segmento pode ser composto de diversas partes de informao, isto , no necessariamente
contnuo. Observe que o segmento Func possui duas partes (extenses), assim como o segmento R e o Proj.
EXTENSO
Uma extenso uma rea contnua para armazenamento de informaes, um conjunto de blocos contguos. Desta
forma, um segmento pode ser composto de uma ou mais extenses.
A primeira extenso alocada tem o nome especial de Initial. As demais so chamadas de Next. Por questes de
performance, serial ideal que todos os dados de uma determinada tabela estivessem armazenados na extenso
Initial. Como isto nem sempre possvel, devemos, na especificao de um segmento qualquer, estimar o tamanho
das extenses Initial e Next e a quantidade de vezes que um segmento pode se esticar, anexando novas extenses
sua rea til.
Estas informaes so fundamentais para que o DBA faa um clculo preciso da rea necessria para cada segmento,
da rea necessria ao tablespace e, conseqentemente, do espao requerido para o banco de dados.
CREATE TABLE
A forma bsica de um comando Create Table apresentada na criao da tabela Empregado da Listagem 2. 309 a seguir.
Neste exemplo, vemos a especificao de uma tabela relacional. Cada coluna definida possui um tipo, que pode ser
escalar ou um tipo definido pelo usurio. Alm do tipo, cada coluna pode ter uma ou mais restries associadas. Na
especificao da tabela, determinamos o tamanho da rea a ser reservada para aquela tabela com a clusula Storage
e o tablespace em que esta rea deve ser reservada.
As restries de integridade tambm podem ser especificadas ao tempo de criao da tabela, inclusive com
especificao do momento da validao (DEFERRED). Quando no determinamos este momento, o default que
a validao seja feita no momento em que o comando executado.
Na Listagem 2.310, criamos uma tabela relacional com organizao do tipo Index. Com este tipo de organizao
obrigatria a especificao de primary key. Os dados desta tabela esto organizados em relao a esta primary key
especificada, como se fosse um ndice. Este tipo de organizao pode ser muito til pois no h necessidade da
criao de um ndice para a primary key em separado, uma vez que a prpria tabela j est organizada desta forma.
TIPOS DE DADOS
Quando especificamos uma coluna em uma tabela relacional ou um atributo em um objeto, devemos especificar o
tipo de dado que ser armazenado naquele elemento. Os tipos de dados predefinidos pelo Oracle so apresentados
a seguir. Os tipos de dados padro Ansi tambm so aceitos.
Char uma string de caracteres de tamanho fixo (mximo de 2000 bytes). Tamanho default e mnimo de 1
byte. A palavra Byte indica que o tamanho ser considerado em bytes enquando Char indica caracteres. Para
ambientes multi-bytes o uso desta informao faz diferena.
Varchar2 uma string de tamanho varivel (mximo de 4000 bytes). O tamanho obrigatrio. A palavra Byte
indica que o tamanho ser considerado em bytes enquando Char indica caracteres. Para ambientes multi-bytes
o uso desta informao faz diferena.
Nchar uma string de caracteres de tamanho fixo (mximo de 2000 bytes). Tamanho default e mnimo de
1 byte. O contedo armazenado deve ser compatvel com o national charset definido para o banco de dados.
Nvarchar2 uma string de tamanho varivel (mximo de 4000 bytes). O tamanho obrigatrio. O contedo
armazenado deve ser compatvel com o national charset definido para o banco de dados.
Number(p,s) dados numricos, onde P varia de 1 a 38 dgitos. A escala S pode variar de 84 a 127.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
207
Long Raw uma string de dados binrios com comprimento varivel at o limite de 2Gb de tamanho.
Raw armazena dados binrios. O tamanho obrigatrio. Semelhante ao VARCHAR2 para dados binrios.
Comprimento mximo de 2000 bytes.
Date armazena data e hora. Consideradas vlidas no intervalo de 01/01/4712 AC. at 31/12/9999 DC. O
formato default dd-mes-aa.
Blob armazena um locator para uma rea que contenha dados binrios (tam. mximo de 4Gb).
Clob armazena um locator para uma rea que contenha dados alfanumricos de comprimento mximo de
4Gb. Usa o database character set.
Nclob armazena um locator para uma rea que contenha dados alfanumricos de comprimento mximo de
4Gb. O contedo armazenado deve ser compatvel com o national charset definido para o banco de dados.
Bfile armazena um locator para um arquivo do sistema operacional (tam. mximo de 4Gb).
Rowid string hexadecimal representando um endereo nico de uma linha na tabela. O tipo usado para
valores retornados pela pseudocoluna ROWID.
Urowid (n) string hexadecimal representando o endereo lgico de uma linha em uma IOT. O tamanho opcional
e corresponde ao tamanho de uma coluna do tipo UROWID. O comprimento mximo e default de 4000 bytes.
Timestamp Ano, ms e dia assim como hora, minuto, segundo e frao de segundo. O parmetro <prc> indica
o nmero de dgitos da parte fracionria do segundo. Os valores podem variar de 0 a 9. O default 6.
A clusula With Time Zone inclui a apresentao da zona de tempo. Onde a zona de tempo corresponde
diferena (em horas e minutos) entre a hora local e UTC (hora de Greenwich).
Se usarmos With Local Time Zone, so vlidos todos os valores. A diferena entre esta opo e a anterior
que a zona de tempo no armazenada no banco de dados. O dado, quando armazenado, normalizado
para a Dbtimezone e, quando recuperado, visualizado pelo usurio com a Time Zone da sesso (ocorre uma
Segunda converso).
Interval Year armazena um perodo de tempo em anos e meses, onde <prc> corresponde ao nmero de dgitos
do campo Year. So aceitos valores de 0 a 9. O default 2.
Interval Day armazena um perodo de tempo em dias, horas, minutos e segundos. O primeiro <prc> determina o
nmero mximo de dgitos no campo Day. So aceitos valores de 0 a 9, sendo o default 2. O segundo <prc> determina
o nmero mximo de dgitos na parte fracionria do campo Second. Os valores vlidos variam de 0 a 9. O default 2.
Sys.AnyData contm uma instncia de um determinado tipo com um conjunto de instncias de dados daquele
tipo. Pode ser usado como parmetro de rotina onde esta flexibilidade necessria. Os valores podem ser builtin datatypes ou user-defined types.
Sys.AnyType este tipo pode conter uma descrio de qualquer tipo SQL nomeado ou transiente.
Sys.AnyDataSet contm uma instncia de um determinado tipo com dado e descrio. Pode ser usado como
coluna para uma tabela onde armazenamos valores heterogneos em uma nica coluna. Os valores podem ser
built-in datatypes ou user-defined types.
Sys.XMLType pode ser usado para armazenamento de dados XML no banco de dados. Possui funes membro
que podemos usar para acesso, extrao e consulta. Internamente, a informao armazenada em Clobs.
Sys.UriType corresponde a um supertipo que pode ser especializado em HttpUriType ou DbUriType. O subtipo
HttpUriType armazena URLs para pginas Web externas ou para arquivos usando o protocolo Http. O subtipo
DbUriType faz referncias a dados (Uri) dentro do DB.
CONSTRAINTS
As constraints so restries estabelecidas para as colunas de uma tabela. Podem ser dos seguintes tipos:
Primary Key Determina uma coluna ou conjunto de colunas como a chave primria da tabela. Esta restrio,
implicitamente, cria um ndice nico que garanta a regra.
Unique Determina uma coluna ou conjunto de colunas como chave nica. No sero admitidas duas linhas
com o mesmo valor para estas colunas.
Foreign Key Determina uma coluna ou conjunto de colunas como possuindo um conjunto vlido de valores presentes
em outra tabela. Corresponde a uma referncia ou integridade referencial. A palavra-chave References identifica a
primary key ou unique key que referenciada por uma foreign key em uma restrio de integridade referencial.
No exemplo da Listagem 2.311, a restrio associada coluna Dep e a restrio associada coluna Sexo s sero
verificadas quando a transao vier a ser concluda. J a restrio referente coluna Empno (primary key) ser
verificada imediatamente; podemos, se desejarmos, adi-la at o trmino da transao. Isto possvel graas
presena da clusula Deferrable, que indica que o adiamento pode ser utilizado (atravs da clusula Set Constraints, vista anteriormente).
CREATE TYPE
O comando Create Type permite a criao de um tipo de dado definido pelo usurio. Utilizamos a criao de tipos
no tpico referente a objetos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
209
CREATE INDEX
J comentamos anteriormente que a criao de uma Constraint do tipo primary key para uma tabela estabelece a
criao implcita de um ndice. Isto tambm ocorre quando a Constraint do tipo Unique.
Desta forma, os ndices criados explicitamente pelo comando Create Index no possuem o objetivo de garantir a
integridade lgica dos dados e sim produzir melhores resultados para as consultas efetuadas sobre a tabela que
mencionem as colunas do ndice como restrio na clusula Where.
Como a criao de ndices adicionais para uma tabela pode trazer tanto benefcios quanto prejuzos, devemos
efetuar uma anlise criteriosa, juntamente com o DBA, para verificarmos a necessidade de tal criao.
Na Listagem 2.302, vemos a criao de um ndice para a coluna Nome do tipo nico.
No exemplo da Listagem 2.313, criamos um database link de nome Centro para estabelecer conexo com um
banco de dados identificado pela string de conexo (Host String) DBCentro. Quando este link for usado, no banco
de dados remoto, estabelecer conexo com o usurio Scott e password Tiger.
A Host String ser analisada na instalao dos aplicativos de desenvolvimento.
CREATE SYNONYM
A criao de um sinnimo objetiva a definio de um nome alternativo para uma tabela ou view, presente no
schema do prprio usurio ou de outro (desde que tenha autorizao para acesso).
Tipo
-----------NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
NUMBER(4)
DATE
NUMBER(7,2)
NUMBER(7,2)
NUMBER(2)
No exemplo da Listagem 2.314, estamos criando um sinnimo para a tabela Scott.Emp no usurio Desenv. Desta
forma, qualquer referncia que fizermos tabela Emp ser associada pelo Oracle tabela Emp do schema Scott.
No exemplo da Listagem 2.315, estamos criando um sinnimo Dept para uma tabela Dept armazenada no schema
do usurio Scott de um banco de dados remoto. A utilizao do sinnimo, neste caso, teve a finalidade de tornar
transparente a localizao de uma tabela.
CREATE SEQUENCE
Seqncias so objetos atualizados pelo Oracle Server com o objetivo de fornecer um nmero sequencial. Este
nmero pode ser usado para a gerao de primary keys em tabelas.
MinValue Determina o menor valor gerado para nmeros seqenciais decrescentes ou valor inicial default
para nmeros seqenciais crescentes.
Cycle Indica que a gerao de nmeros ocorrer aps a seqncia ter atingido seu valor mximo (ou mnimo
para seqncias decrescentes). O prximo nmero a ser gerado ser o valor mnimo (MINVALUE) para seqncias
crescentes e o valor mximo (MAXVALUE) para seqncias decrescentes.
Cache Especifica uma quantidade de nmeros que o Oracle pr-aloca e mantm em memria para acesso mais rpido.
Para obtermos o valor atual da seqncia, devemos usar a palavra-chave CurrVal e, para obtermos o prximo
nmero seqencial, devemos usar a palavra-chave NextVal, como apresentado na Listagem 2.317.
Na Listagem 2.317, usamos o valor gerado seqencialmente para preenchimento do nmero da matrcula da
tabela Func.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
211
Tipo
-----------NUMBER(3)
VARCHAR2(12)
VARCHAR2(30)
Na Listagem 2.318, vemos a utilizao da mesma seqncia para o preenchimento do nmero da atividade.
Na Listagem 2.319, consultamos a view User_Sequences para obter informaes sobre a seqncia criada. Observamos
que a coluna Last_Number j possui valor 410, enquanto o valor atual da seqncia ainda 402. Essa discrepncia
ocorre em funo do valor especificado no atributo Cache. Quando acionamos a numerao pela primeira vez, o
Oracle pr-aloca dez nmeros (no nosso caso) de seqncia, atualiza o dicionrio de dados que possui esta informao
e reserva estes nmeros em memria. medida que vamos utilizando a numerao, estes valores em memria vo
sendo fornecidos.
Existe um risco potencial de perda de numerao seqencial em caso de falha no sistema (em que a memria
perdida) e quando ocorre uma falha de programa e desmanchamos a transao sem, efetivamente, utilizar os
nmeros seqenciais solicitados. O sequence no volta a disponibilizar os nmeros perdidos, pois no tem controle
sobre o uso dado seqncia.
CREATE ROLE
Role um conjunto de privilgios que pode ser adquirido por usurios ou outras roles. O objetivo das roles
auxiliar a administrao de privilgios no banco de dados.
Podemos adicionar diversos privilgios a uma determinada role e, posteriormente, autorizar o uso desta role por
diversos usurios.
Na Listagem 2.321, a role Funcionrio autorizada para o usurio Scott. Aps a conexo, como Scott, podemos
adquirir o uso da role e utilizar os privilgios liberados para ela.
Os privilgios contidos em uma role so adquiridos por um determinado usurio a tempo de login. Esta ao pode
ser automtica ou o usurio pode ser obrigado a executar o comando Set Role explicitamente. Na criao do
usurio, esta diferena determinada (Create User).
CREATE DIRECTORY
Esse comando cria um objeto diretrio no banco de dados e o associa a um diretrio existente no sistema operacional.
Esse objeto ser usado para indicao do diretrio de armazenamento de arquivos associados s colunas do tipo Bfile.
No exemplo da Listagem 2.322, foi criado o objeto Disco_D, cujo diretrio fsico corresponde a D:\teste.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
213
CREATE VIEW
O comando Create View j foi visto anteriormente no item Views Relacionais do tpico Consultas Complexas.
CREATE USER
Este comando cria um usurio para acesso ao banco de dados. Adicionalmente, indica o tablespace onde o usurio
poder criar seus objetos, limita quota de espao por tablespace, determina um profile contendo limites sobre os
recursos do sistema.
Na Listagem 2.323, criamos o usurio Gabriel e autorizamos sua conexo com o Oracle usando a role Connect
(ser vista no item Grant).
A criao do usurio Gabriel utilizou os seguintes parmetros:
Identified By Indica que o usurio deve especificar sua password a tempo de login.
Default Tablespace Indica que, quando o usurio executar um comando Create e no informar o tablespace
onde o objeto deve ser criado, este (indicado no parmetro) ser o tablespace utilizado.
Temporary Tablespace Indica o tablespace a ser utilizado pelo Oracle para alocao de rea temporria para a
execuo de determinados comandos do usurio.
Quota Limita a rea disponvel no tablespace especificado para a criao de objetos do usurio.
Password Expire Indica que a password criada temporria e deve ser substituda quando o usurio fizer o
primeiro login.
Senha alterada
Conectado.
SQL>
No exemplo da Listagem 2.314 no vemos o momento em que a password alterada. O motivo que o Oracle
apresenta um dilogo contendo trs campos para preenchimento: a senha antiga, a nova e uma redigitao da
nova. Com o sucesso da operao retornamos linha de comando do SQL*Plus.
ALTER <OBJETO>
O comando Alter, de um modo geral, permite que faamos modificaes nas especificaes que tivermos feito a
tempo de Create.
Nem todos os objetos permitem modificaes. Por exemplo, no temos comando Alter para Database Link, Synonym e Directory.
No exemplo da Listagem 2.325, o usurio Gabriel recebeu autorizao de uso da role Funcionrio e esta passou a
ser sua role default. Isto significa que, quando este usurio estabelecer conexo com o banco de dados, todas as
autorizaes presentes na role Funcionrio sero adquiridas por ele, automaticamente.
Na Listagem 2.326, fazemos modificaes nas especificaes da seqncia (todos os parmetros podem ser alterados)
e renomeamos o ndice de primary key da tabela Func.
DROP <OBJETO>
O comando Drop remove tanto o objeto quanto sua definio do dicionrio de dados. Esta ao irreversvel, pois
se trata de um comando de SQL DDL.
A sintaxe do comando Drop simples e necessita apenas do tipo do objeto e de seu nome.
Na Listagem 2.327, diversos objetos do banco de dados foram eliminados. Observe que, quando eliminamos a
tabela F, usamos a expresso cascade constraints. Esta expresso fora a eliminao da tabela mesmo havendo
relacionamentos associados a ela (o relacionamento eliminado tambm).
TRUNCATE TABLE
O comando Truncate Table elimina todas as linhas da tabela (como se fosse um comando Delete sem clusula Where)
e pode liberar espao no utilizado de volta para o tablespace. A diferena bsica para um comando Delete que no
gerada nenhuma informao de rollback; desta forma o comando no pode ser desfeito, como o caso do Delete.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
215
Na Listagem 2.328, a tabela G foi truncada (todas as linhas eliminadas) e o espao reservado para ela foi retornado
ao tablespace, podendo ser utilizado por outros objetos. J a tabela Peas foi truncada (todas as linhas eliminadas),
porm o espao j alocado para ela foi preservado, permanecendo associado tabela, porm vazio.
RENAME
Altera o nome de uma tabela, view, sequence ou sinnimo privativo. O objeto deve estar contido no schema do usurio.
GRANT
O propsito do comando Grant ceder privilgios. Temos dois tipos de privilgios: sobre os objetos (que deve ser
cedido pelos usurios donos dos objetos) e de sistema (cedido pelo DBA), que autorizam determinadas aes dos
usurios no banco de dados.
Na Listagem 2.330, autorizamos diversas operaes sobre a tabela Func para os usurios Gabriel e Scott. Permitimos
o uso do diretrio Disco_D pelo usurio Gabriel e autorizamos que este mesmo usurio tivesse livre acesso tabela
Depto. A clusula With Grant Option indica que o usurio Gabriel pode passar os privilgios recebidos sobre a
tabela Depto para outros usurios sua escolha.
A lista a seguir apresenta os privilgios disponveis e a quais objetos se aplica:
Alter Permite que sejam feitas modificaes na tabela (ou sequence). Aplicvel a tabelas e seqncias.
Execute Permite a execuo da rotina especificada ou o acesso a qualquer programa especificado no package
nomeado. Aplicvel a procedures, funes, pacotes, libraries, tipo definido pelo usurio, operator e Index Type.
Query Rewrite Permite que um comando de pesquisa executado sobre uma tabela seja reescrito pelo otimizador
se ele encontrar uma View Materializada que responda pergunta de forma mais eficaz. Aplicvel a tabelas
usadas por views materializadas.
Update Permite que sejam feitas alteraes nos dados da tabela. Aplicvel a tabelas, views e views materializadas
(que sejam atualizveis).
Write Permite a gravao no diretrio. Aplicvel a Directories. No permite que o usurio (ou role) que receber
os privilgios grave Bfiles.
Muitos dos privilgios listados ainda no fazem sentido uma vez que ainda no estudamos objetos (Cap. 4) ou,
especificamente, views materializadas (Cap. 5). O objetivo destes privilgios ficar bem mais claro aps completarmos
estes estudos.
Os privilgios podem ser concedidos para o usurio diretamente ou para uma role.
Na Listagem 2.331, diversos privilgios foram autorizados para a role Funcionrio. Desta forma, todos os usurios
que tiverem autorizao de uso desta role recebero estes privilgios quando fizerem conexo com o banco de
dados novamente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
217
No exemplo da Listagem 2.332, a role Connect foi autorizada para o usurio Gabriel. J o usurio Scott recebeu
dois privilgios de sistema (Alter Session e Drop User) com a possibilidade de repassar estes privilgios a outros
usurios (With Admin Option). No ltimo exemplo o comando autorizou a role Connect para o usurio Novo ao
mesmo tempo que criou este usurio.
Ao instalarmos o Oracle, algumas roles so instaladas tambm:
Connect Alter Session, Create Cluster, Create Database Link, Create Sequence, Create Session, Create Synonym, Create Table, Create View.
DBA Alter Any Cluster, Alter Any Index, Alter Any Library, Alter Any Procedure, Alter Any Role, Alter Any
Sequence, Alter Any Snapshot, Alter Any Table, Alter Any Trigger, Alter Any Type, Alter Database, Alter Profile,
Alter Resource Cost, Alter Rollback Segment, Alter Session, Alter System, Alter Tablespace, Alter User, Analyze Any,
Audit Any, Audit System, Backup Any Table, Become User, Comment Any Table, Create Any Cluster, Create Any
Directory, Create Any Index, Create Any Library, Create Any Procedure, Create Any Sequence, Create Any Snapshot, Create Any Synonym, Create Any Table, Create Any Trigger, Create Any Type, Create Any View, Create
Cluster, Create Database Link, Create Library, Create Procedure, Create Profile, Create Public Database Link, Create Public Synonym, Create Role, Create Rollback Segment, Create Sequence, Create Session, Create Snapshot,
Create Synonym, Create Table, Create Tablespace, Create Trigger, Create Type, Create User, Create View, Delete
Any Table, Drop Any Cluster, Drop Any Directory, Drop Any Index, Drop Any Library,Drop Any Procedure, Drop
Any Role, Drop Any Sequence, Drop Any Snapshot, Drop Any Synonym, Drop Any Table, Drop Any Trigger, Drop
Any Type, Drop Any View, Drop Profile, Drop Public Database Link, Drop Public Synonym, Drop Rollback Segment, Drop Tablespace, Drop User, Execute Any Library, Execute Any Procedure, Execute Any Type, Force Any
Transaction, Force Transaction, Grant Any Privilege, Grant Any Role, Insert Any Table, Lock Any Table, Manage
Tablespace, Restricted Session, Select Any Sequence, Select Any Table, Update Any Table.
Exp_Full_Database Backup Any Table, Execute Any Procedure, Select Any Table.
Imp_Full_Database Alter Any Table, Alter Any Type, Audit Any, Become User, Comment Any Table, Create
Any Cluster, Create Any Directory, Create Any Index, Create Any Library, Create Any Procedure, Create Any
Sequence, Create Any Snapshot, Create Any Synonym, Create Any Table, Create Any Trigger, Create Any Type,
Create Any View, Create Database Link, Create Profile, Create Public Database Link, Create Public Synonym,
Create Role, Create Rollback Segment, Create Tablespace, Create User, Drop Any Cluster, Drop Any Directory,
Drop Any Index, Drop Any Library, Drop Any Procedure, Drop Any Role, Drop Any Sequence, Drop Any Snapshot, Drop Any Synonym, Drop Any Table, Drop Any Trigger, Drop Any Type, Drop Any View, Drop Profile,
Drop Public Database Link, Drop Public Synonym, Drop Rollback Segment, Drop Tablespace, Drop User, Execute Any Procedure, Insert Any Table, Select Any Table.
As roles DBA, Connect e Resource esto mantidas nesta verso apenas para compatibilidade. A Oracle recomenda
que criemos nossas prprias roles para determinarmos privilgios e segurana do banco de dados. Estas roles
predefinidas podem no ser mais criadas em futuras verses do Oracle.
REVOKE
O comando Revoke retira um privilgio previamente fornecido.
Da mesma forma que o Grant, o comando Revoke se refere a privilgios de sistema e privilgios para os objetos.
Na listagem anterior, decidimos retirar todos os privilgios para atualizao na tabela Func tanto do usurio Scott
quanto da role Funcionrio.
Na Listagem 2.334, o usurio Scott perdeu a autorizao de uso da role Connect e, conseqentemente, de todos os
privilgios associados role. Posteriormente, perdeu a possibilidade de alterar sua sesso.
EXERCCIOS
2.106) O que e para que serve o ROLLBACK SEGMENT?
2.107) Crie um usurio de nome PROD com as seguintes caractersticas:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
219
Listagem-resposta 2.01A
SQL> SELECT CD_MAT, NM_FUNC, NM_SOBRENOME, NR_CARGO
2
FROM FUNC
3
WHERE IN_SEXO = 'F'
4
AND NR_CARGO > 55;
2.02) Deseja-se uma lista que contenha nmero de matrcula, nome e sobrenome do funcionrio em cujo sobrenome
no seja encontrada a letra E.
Listagem-resposta 2.02A
SQL> SELECT CD_MAT, NM_FUNC, NM_SOBRENOME
2
FROM FUNC
3
WHERE NM_SOBRENOME NOT LIKE '%E%';
2.03) Repita o exerccio anterior de tal forma que a letra pesquisada seja fornecida por varivel de substituio na
linha do comando.
Listagem-resposta 2.03A
SQL> L 3
3* WHERE NM_SOBRENOME NOT LIKE '%E%'
SQL> C/%E%/%&1%
3* WHERE NM_SOBRENOME NOT LIKE '%&1%'
SQL> SAVE LIKE
Criado file LIKE
SQL> @LIKE O
antigo
3:WHERE NM_SOBRENOME NOT LIKE '%&1%'
NOVO
3:WHERE NM_SOBRENOME NOT LIKE '%O%'
2.04) Deseja-se uma lista contendo cdigo e nome do projeto para todos os projetos que possuam o texto AMA
em algum lugar de seu nome. Como restrio adicional, temos que somente os projetos em cujo cdigo existam os
nmeros 21 como terceiro e quarto caracter devem ser pesquisados.
Listagem-resposta 2.04A
SQL> SELECT CD_PROJ, NM_PROJ
2
FROM PROJ
3
WHERE NM_PROJ LIKE '%AMA%'
4
AND CD_PROJ LIKE '__21%';
Observe que o cdigo do projeto foi comparado com dois sublinhados, os nmeros 21 e %, indicando que as duas
primeiras posies seriam desconhecidas, o terceiro e quarto caracter, 2 e 1 respectivamente, e o % indicando
qualquer nmero de caracteres aps estes valores.
2.05) Obtenha a descrio da tabela Funcionrio.
Listagem-resposta 2.05A
SQL> DESCRIBE FUNC
A descrio apresenta o nome da coluna no banco de dados (Name), seu tipo e tamanho (Type) e a indicao de
obrigatoriedade de preenchimento (Null?). Sabemos, agora, que quando uma coluna no preenchida, no ocupa
espao na linha que gravada no banco de dados; por isso, diz-se que seu contedo NULL (desconhecido,
Listagem-resposta 2.06A
SQL> SELECT DISTINCT CD_DEPTO
2
FROM FUNC
3
WHERE CD_DEPTO IS NOT NULL
4 /
No exerccio, so selecionados apenas os funcionrios que esto alocados a algum departamento, ou seja, cujo
cdigo do departamento est preenchido.
2.07) Deseja-se uma lista contendo cdigo do departamento e nome do departamento de todos os departamentos
em que o cdigo do departamento contbil no est preenchido.
Listagem-resposta 2.07A
SQL> SELECT CD_DEPTO, NM_DEPTO
2
FROM DEPTO
3
WHERE CD_DEPTO_CTB IS NULL;
2.08) Deseja-se uma lista (matrcula, nome e departamento) de todos os funcionrios que estejam alocados aos
departamentos A00, B01 ou C01.
Listagem-resposta 2.08A
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO
2
FROM FUNC
3
WHERE CD_DEPTO IN ('A00', 'B01', 'C01');
Antes de prosseguir, faa outros testes usando BETWEEN, substituindo IN por OR e tentando realizar os exerccios
acima com variveis de substituio.
2.09) Deseja-se saber quais os funcionrios (matrcula, cargo e departamento) que foram cadastrados na partio
Anos95_99 da tabela de histrico de promoes.
Listagem-resposta 2.09A
SQL> SELECT CD_MAT, NR_CARGO, CD_DEPTO
2
FROM HST_PROMO PARTITION (ANOS95_99);
2.10) Deseja-se incluir dois novos empregados na tabela de funcionrios. Este cadastramento preliminar e,
portanto, nem todos os dados so conhecidos. Utilize as duas sintaxes vistas no item Incluindo Novas Linhas
para realizar as incluses.
nome do funcionrio
Joana Rodrigues
Marcelo Salgado
salrio
R$ 1.435,00
R$ 1.743,00
departamento
E21
B01
sexo
feminino
masculino
grau de instruo
17
19
cargo
52
55
Listagem-resposta 2.10A
SQL> INSERT INTO FUNC
2 (NM_FUNC, NM_SOBRENOME, VL_SAL, CD_DEPTO,
3
IN_SEXO, NR_GIT, NR_CARGO, CD_MAT)
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
221
VALUES
('JOANA', 'RODRIGUES', 1435, 'E21',
'F', 17, 52, 1);
1 linha criada.
SQL> INSERT INTO FUNC
2 VALUES
3 (2, 'MARCELO', 'SALGADO', 'B01', NULL, NULL, 55,
4
19, 'M', NULL, 1743, NULL);
1 linha criada.
2.11) Deseja-se, agora, completar as informaes sobre os novos funcionrios. Sabendo-se que a funcionria Joana
recebeu ramal 1512 e data de admisso 15/01/99 e que o funcionrio Marcelo recebeu ramal 1418 e data de
admisso 15/02/99, necessrio que os dados na tabela Func sejam atualizados e que sejam includas as linhas
correspondentes ao valor inicial dos funcionrios na tabela de histrico de promoes.
Listagem-resposta 2.11A
SQL> UPDATE FUNC
2
SET NR_RAMAL = 1512,
3
DT_ADM
= '15/01/99'
4
WHERE CD_MAT = 1;
1 linha atualizada.
SQL> UPDATE FUNC
2
SET NR_RAMAL = 1418,
3
DT_ADM
= '15/02/99'
4
WHERE CD_MAT = 2;
1 linha atualizada.
SQL> INSERT INTO HST_PROMO
2 SELECT DT_ADM, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO,
3
'Informao inicial do funcionrio'
4
FROM FUNC
5
WHERE CD_MAT IN (1,2);
2 linhas criadas.
2.12) Inclua-se como funcionrio. Preencha todas as colunas da tabela. O nmero da matrcula deve corresponder
ao dia do seu aniversrio somado ao ano.
Listagem-resposta 2.12A
SQL> INSERT INTO FUNC
2 VALUES
3 (1994, 'DANIEL', 'FERNANDES', 'A00', 1512,
4
'12/02/99', 55, 19, 'M', '07/03/87', 1700, 'c:\windows\esteira.bmp');
1 linha criada.
2.13) Tente trocar o cdigo do departamento associado a voc para um cdigo de departamento invlido. O que
acontece? Por qu?
Listagem-resposta 2.13A
SQL> UPDATE FUNC
2
SET CD_DEPTO = 'D02'
3
WHERE CD_MAT
= 1994;
UPDATE FUNC
*
ERRO na linha 1:
ORA-02291: restrio de integridade (DESENV.SYS_C002817) violada - chave-pai
no localizada
Listagem-resposta 2.14A
SQL> INSERT INTO FUNC
2 SELECT CD_MAT + 340, NM_FUNC, NM_SOBRENOME, 'D01',
3
NR_RAMAL, DT_ADM, NR_CARGO, NR_GIT,
4
IN_SEXO, DT_NASC, VL_SAL, NM_FOTO
5
FROM FUNC
6
WHERE CD_DEPTO = 'D11';
9 linhas criadas.
Listagem-resposta 2.15A
SQL> UPDATE FUNC
2
SET NR_RAMAL = 1437
3
WHERE CD_DEPTO = 'D11';
9 linhas atualizadas;
Listagem-resposta 2.16A
SQL> DELETE FROM HST_PROMO PARTITION (ANOS80);
2 linhas deletadas;
Listagem-resposta 2.17A
SQL> UPDATE FUNC
2
SET VL_SAL = VL_SAL * 1.1;
45 linhas atualizadas.
2.18) Exclua todos os funcionrios que ganhem mais que o funcionrio cuja matrcula 200. O que ocorre? Por qu?
Listagem-resposta 2.18A
SQL> SELECT VL_SAL FROM FUNC
2
WHERE CD_MAT = 200;
VL_SAL
-----3051,4
SQL> DELETE FROM FUNC
2
WHERE VL_SAL > 3051.40;
DELETE FROM FUNC
*
ERRO na linha 1:
0RA-02292: restrio de integridade (DESENV.SYS_C00650) violada
registro filho localizado
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
223
Listagem-resposta 2.19A
SQL> UPDATE FUNC
2
SET VL_SAL = VL_SAL * 1.05
3
WHERE CD_MAT IN (SELECT CD_GERENTE FROM DEPTO);
8 linhas atualizadas.
Listagem-resposta 2.20A
SQL> DELETE FROM DEPTO
2
WHERE CD_DEPTO NOT IN (SELECT DISTINCT CD_DEPTO
3
FROM FUNC);
1 linha deletada.
2.21) Deseja-se uma lista (matrcula, nome e salrio) de todos os funcionrios que ganhem mais que todos os
funcionrios do departamento parametrizado. Ordene o resultado por salrio. Os funcionrios sem salrio devem
ser apresentados no incio da relao.
Listagem-resposta 2.21A
SQL> SELECT CD_MAT, NM_FUNC, VL_SAL
2
FROM FUNC
3
WHERE VL_SAL > ALL (SELECT VL_SAL FROM FUNC
4
WHERE CD_DEPTO = '&DEPTO')
5 ORDER BY VL_SAL NULLS FIRST;
Entre o valor para depto: D11
antigo
4:
WHERE CD_DEPTO = '&DEPTO')
novo
4:
WHERE CD_DEPTO = 'D11')
2.22) Deseja-se uma lista (matrcula, nome e cargo) dos funcionrios que possuam cargo igual ao cargo de algum
dos funcionrios do departamento D11.
Listagem-resposta 2.22A
SQL> SELECT CD_MAT, NM_FUNC, NR_CARGO
2
FROM FUNC
3
WHERE NR_CARGO = ANY (SELECT NR_CARGO FROM FUNC
4
WHERE CD_DEPTO = 'D11');
2.23) Deseja-se uma lista contendo matrcula, nome, departamento e salrio de todos os funcionrios que sejam
responsveis por projeto (tabela Proj), mas no sejam gerentes (tabela Depto). Ordene o resultado por salrio. Os
funcionrios sem salrio devem ser apresentados no fim da relao.
Listagem-resposta 2.23A
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO, VL_SAL
2
FROM FUNC
3
WHERE CD_MAT
IN (SELECT CD_RESP FROM PROJ)
4
AND CD_MAT NOT IN (SELECT CD_GERENTE FROM DEPTO
5
WHERE CD_GERENTE IS NOT NULL)
6 ORDER BY VL_SAL NULLS LAST;
Observe na Listagem-resposta 2.23 que o subselect apresentado possui na clusula Where uma restrio para que
sejam trazidos apenas os cdigos de gerente preenchidos. Isto necessrio todas as vezes em que for feita a
comparao com NOT IN ou <> ALL, pois a comparao com NULL (= NULL ou <> NULL) retorna FALSE e
nenhuma linha selecionada. Como teste, inclua um departamento sem gerente, retire a restrio e execute
novamente o comando. Nenhuma linha ser selecionada.
2.24) Deseja-se uma lista (cdigo e nome) dos departamentos que iniciaram projetos em janeiro de 1996.
2.25) Deseja-se uma lista contendo matrcula, nome e salrio de todos os funcionrios que ganhem mais que a
mdia salarial da empresa.
Listagem-resposta 2.25A
SQL> SELECT CD_MAT, NM_FUNC, VL_SAL
2
FROM FUNC
3
WHERE VL_SAL > (SELECT AVG(VL_SAL) FROM FUNC);
2.26) Produza uma lista contendo a mdia salarial, total de salrios e quantidade de linhas selecionadas por
departamento, de todos os funcionrios que tenham em seu primeiro nome a letra A.
Listagem-resposta 2.26A
SQL> SELECT AVG(VL_SAL), SUM(VL_SAL), COUNT(*), CD_DEPTO
2
FROM FUNC
3
WHERE NM_FUNC LIKE '%A%' OR
4
NM_FUNC LIKE '%a%'
5
GROUP BY CD_DEPTO;
2.27) Produza uma lista contendo o cargo, a mdia salarial e o nmero de funcionrios grupados por cargo para os
departamentos D01, D11, D21 e E11. Todos os cargos com menos de trs funcionrios devem ser excludos do
resultado. A lista deve vir ordenada descendentemente por mdia salarial.
Listagem-resposta 2.27A
SQL> SELECT NR_CARGO, AVG(VL_SAL), COUNT(*)
2
FROM FUNC
3
WHERE CD_DEPTO IN ('D01', 'D11', 'D21', 'E11')
4
GROUP BY NR_CARGO
5 HAVING COUNT(*) >= 3
6
ORDER BY 2 DESC;
Listagem-resposta 2.28A
SQL> SELECT CD_PROJ, COUNT(DISTINCT CD_ATIV) Atividades
2
FROM PRJATV
3
GROUP BY CD_PROJ;
Listagem-resposta 2.29A
SQL> SELECT AVG(COUNT(*)) Mdia
2
FROM FUNC
3
GROUP BY CD_DEPTO;
2.30) Deseja-se obter uma lista (nr_cargo) de todos os cargos que possuam mais de duas funcionrias.
Listagem-resposta 2.30A
SQL> SELECT NR_CARGO, COUNT(*)
2
FROM FUNC
3
WHERE IN_SEXO = 'F'
4
GROUP BY NR_CARGO
5 HAVING COUNT(*) > 2;
2.31) Deseja-se uma lista (cd_mat, vl_sal, nr_git) dos funcionrios mais graduados (com maior grau de instruo)
da empresa.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
225
2.32) Deseja-se saber qual departamento possui maior mdia salarial da empresa.
Listagem-resposta 2.32A
SQL> SELECT CD_DEPTO, AVG(VL_SAL)
2
FROM FUNC
3
GROUP BY CD_DEPTO
4 HAVING AVG(VL_SAL) = (SELECT MAX(AVG(VL_SAL))
5
FROM FUNC
6
GROUP BY CD_DEPTO);
2.33) Deseja-se saber quais os funcionrios (matrcula, nome, sobrenome e data de admisso) que possuem mais de
nove anos de empresa.
Listagem-resposta 2.33A
SQL> SELECT CD_MAT, NM_FUNC, NM_SOBRENOME, DT_ADM
2
FROM FUNC
3
WHERE DT_ADM > TO_DATE('10031990', 'DDMMYYYY');
2.34) Deseja-se uma relao contendo matrcula, nome completo e idade do funcionrio na data de admisso.
Listagem-resposta 2.34A
SQL> SELECT CD_MAT, CONCAT(NM_FUNC, ' ')||NM_SOBRENOME NOME,
2
DT_ADM, DT_NASC,
3
ROUND((DT_ADM - DT_NASC) / 365.25) Idade Adm
4
FROM FUNC;
2.35) Deseja-se o total salarial e a mdia salarial por quantidade de anos trabalhados e por cargo dos funcionrios
que tenham menos de 10 anos de casa e cargo superior a 50. Devem ser informados, simultaneamente, totais por
cargo e por quantidade de ano, alm de um acumulado geral.
Listagem-resposta 2.35A
SQL> COL CARGO FOR 999
SQL> COL ANOS FOR 999
SQL> SELECT TRUNC((SYSDATE - DT_ADM)/365.25) ANOS,
2
NR_CARGO CARGO,
3
SUM(VL_SAL) TOTAL, AVG(VL_SAL) MEDIA
4
FROM FUNC
5
WHERE (SYSDATE - DT_ADM) < 3652.5
6
AND NR_CARGO > 50
7
GROUP BY ROLLUP(TRUNC((SYSDATE - DT_ADM)/365.25), NR_CARGO);
Listagem-resposta 2.36A
SQL> SELECT TRUNC((SYSDATE - DT_ADM)/365.25) ANOS,
2
IN_SEXO SEXO,
3
COUNT(*) QTD
4
FROM FUNC
5
GROUP BY CUBE(TRUNC((SYSDATE - DT_ADM)/365.25), IN_SEXO);
Neste exemplo nos utilizamos, novamente, de uma expresso dentro da clusula Cube.
Listagem-resposta 2.37A
SQL> SELECT TRUNC((SYSDATE - DT_ADM)/365.25) ANOS,
2
NR_CARGO CARGO,
3
SUM(VL_SAL) TOTAL, AVG(VL_SAL) MEDIA,
4
GROUPING(TRUNC((SYSDATE - DT_ADM)/365.25)) TOTCARGO,
5
GROUPING(NR_CARGO) TOTANO
6
FROM FUNC
7
WHERE (SYSDATE - DT_ADM) < 3652.5
8
AND NR_CARGO > 50
9
GROUP BY ROLLUP(TRUNC((SYSDATE - DT_ADM)/365.25), NR_CARGO);
SQL> SELECT TRUNC((SYSDATE - DT_ADM)/365.25) ANOS,
2
IN_SEXO SEXO,
3
COUNT(*) QTD,
4
GROUPING(IN_SEXO) TOTANOS,
5
GROUPING(TRUNC((SYSDATE - DT_ADM)/365.25)) TOTSEXO
6
FROM FUNC
7
GROUP BY CUBE(TRUNC((SYSDATE - DT_ADM)/365.25), IN_SEXO);
Para identificarmos o total apresentado usamos a funo Grouping. Quando a coluna NR_CARGO, por exemplo,
aparece com NULL no resultado devemos olhar o valor da coluna TOTANO. Se estiver preenchido com 1 significa
que um total para o ano que estiver preenchido na coluna Anos, e caso contrrio indica que uma linha de
agregao para o cargo NULL.
2.38) Um novo funcionrio foi contratado na empresa, o cargo definido para ele foi 55 e seu salrio deve ser 2700,
2800 ou 2900. Determine qual dos trs salrios se enquadra nos requisitos estabelecidos pela gerncia de projetos:
a) Seu salrio deve ser superior ao quarto maior salrio dentre os funcionrios com o mesmo cargo.
b) Pelo menos 60% do grupo de funcionrios com o mesmo cargo deve ter salrio menor que o dele.
Listagem-resposta 2.38A
SQL> SELECT CUME_DIST(2700)
2
CUME_DIST(2800)
3
CUME_DIST(2900)
4
DENSE_RANK(2700)
5
DENSE_RANK(2800)
6
DENSE_RANK(2900)
7
FROM FUNC
8 WHERE NR_CARGO = 55;
WITHIN
WITHIN
WITHIN
WITHIN
WITHIN
WITHIN
GROUP(ORDER
GROUP(ORDER
GROUP(ORDER
GROUP(ORDER
GROUP(ORDER
GROUP(ORDER
BY
BY
BY
BY
BY
BY
VL_SAL
VL_SAL
VL_SAL
VL_SAL
VL_SAL
VL_SAL
S2700
S2800
S2900
R2700
R2800
R2900
---------- ---------- ---------- ---------- ---------- ---------,4
,6
,7
7
5
4
Em relao solicitao B, tanto o salrio de 2800 quanto o de 2900 atendem solicitao pois abaixo de 2800
temos 60% do grupo e abaixo de 2900 temos 70% do grupo. Com relao solicitao A, conclumos que o salrio
do funcionrio deve ser 2900 pois este valor o classifica na quarta posio em relao ordem descendente de
salrio. O valor de 2800 o colocaria logo aps (5) o quarto salrio atual, o que foi solicitado que no acontecesse.
2.39) Para determinar o percentual de promoo dos funcionrios, o departamento Pessoal solicitou:
a) o menor, o maior e a mdia salrial do menor cargo.
b) o menor, o maior e a mdia salrial do maior cargo.
Listagem-resposta 2.39A
SQL> SELECT MAX(VL_SAL)
2
KEEP (DENSE_RANK FIRST ORDER BY NR_CARGO ASC NULLS LAST) XSALMCARGO,
3
MIN(VL_SAL)
4
KEEP (DENSE_RANK FIRST ORDER BY NR_CARGO ASC NULLS LAST) MSALMCARGO,
5
MAX(VL_SAL)
6
KEEP (DENSE_RANK LAST ORDER BY NR_CARGO ASC NULLS LAST) XSALXCARGO,
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
227
MIN(VL_SAL)
KEEP (DENSE_RANK LAST ORDER BY NR_CARGO ASC NULLS LAST) MSALXCARGO
FROM FUNC;
2.40) O novo diretor do Departamento pessoal deseja estabelecer faixas salariais para futuro enquadramento dos
funcionrios. Com este objetivo deseja obter informaes sobre a distribuio salarial atual. Considerando-se
intervalos de 20% (.20, .40, .60, .80 ou 1) deseja-se saber qual o salrio correspondente.
Listagem-resposta 2.40A
SQL> SET NUMWIDTH 7
SQL> SELECT PERCENTILE_CONT(.20) WITHIN GROUP (ORDER BY VL_SAL ASC) PA20,
2
PERCENTILE_DISC(.20) WITHIN GROUP (ORDER BY VL_SAL ASC) PM20,
3
PERCENTILE_CONT(.40) WITHIN GROUP (ORDER BY VL_SAL ASC) PA40,
4
PERCENTILE_DISC(.40) WITHIN GROUP (ORDER BY VL_SAL ASC) PM40,
5
PERCENTILE_CONT(.60) WITHIN GROUP (ORDER BY VL_SAL ASC) PA60,
6
PERCENTILE_DISC(.60) WITHIN GROUP (ORDER BY VL_SAL ASC) PM60,
7
PERCENTILE_CONT(.80) WITHIN GROUP (ORDER BY VL_SAL ASC) PA80,
8
PERCENTILE_DISC(.80) WITHIN GROUP (ORDER BY VL_SAL ASC) PM80,
9
PERCENTILE_CONT(1) WITHIN GROUP (ORDER BY VL_SAL ASC) PA100,
10
PERCENTILE_DISC(1) WITHIN GROUP (ORDER BY VL_SAL ASC) PM100
11
FROM FUNC;
PA20
PM20
PA40
PM40
PA60
PM60
PA80
PM80
PA100
PM100
------- ------- ------- ------- ------- ------- ------- ------- ------- ------2005
1995 2417,6
2384 2759,6
2774 3176,8
3225
5275
5275
Observe o resultado: utilizamos Percentile_Cont e Percentile Disc para os mesmos valores. Somente na faixa 100%
ocorre a paridade entre os dois percentuais. Nas demais faixas isto indica que existe mais de um salrio na posio
20%, sendo que a mdia 2005 e o menor deles 1995. Para a posio 40% encontramos como ponto central da
faixa um valor que no existe como salrio, ou seja, 2417,60. Para chegar a este valor o Oracle fez uma interpolao
entre 2384 e 2468 (prximo salrio). Os demais resultados so similares em raciocnio.
2.41) Deseja-se uma relao contendo matrcula, nome, idade atual e tempo de servio para aqueles funcionrios
que tenham sido admitidos com menos de 21 anos.
Listagem-resposta 2.41A
SQL> SELECT CD_MAT, NM_FUNC||' '||NM_SOBRENOME NOME,
2
ROUND((SYSDATE - DT_NASC)/365.25) Idade Atual,
3
ROUND(MONTHS_BETWEEN(SYSDATE, DT_ADM) / 12) Tempo Servio
4
FROM FUNC
5
WHERE (DT_ADM - DT_NASC) < 21 * 365.25;
2.42) Deseja-se uma relao contendo nome, sobrenome, data e hora do nascimento, ms e ano de admisso em
algarismos romanos e o salrio editado (contendo moeda) para todos os funcionrios que possuam mais de quatro
vogais em seu sobrenome.
Listagem-resposta 2.42A
SQL> SELECT NM_FUNC, NM_SOBRENOME,
2
TO_CHAR(DT_NASC, 'DD/MM/YYYY HH24:MI') Nasc,
3
LTRIM(RTRIM(TO_CHAR(DT_ADM, 'RM'))) || ' - ' ||
4
LTRIM(RTRIM(TO_CHAR(TO_NUMBER(TO_CHAR(DT_ADM, 'YYYY')), 'RN'))) Adm,
5
LTRIM(RTRIM(TO_CHAR(VL_SAL, 'L999G990D00',
6
'NLS_CURRENCY = R$'))) Salrio
7
FROM FUNC
8
WHERE LENGTH(NM_SOBRENOME) 9
LENGTH(TRANSLATE(UPPER(NM_SOBRENOME), 'XAEIOU', 'X')) > 4;
2.43) Deseja-se uma relao contendo nome completo do funcionrio (centralizado sob o ttulo Nome), data de
nascimento formatada com hora, minuto e segundo (alinhado direita sob o ttulo Nascimento), o cdigo do
departamento (alinhado esquerda e de tal forma que o ttulo Depto seja apresentado).
Listagem-resposta 2.43A
SQL> SELECT RPAD(LPAD(NM_FUNC||' '|| NM_SOBRENOME,
2
(20+LENGTH(NM_FUNC||' '||NM_SOBRENOME))/2),20)
3
TO_CHAR(DT_NASC,
Nome,
'DD/MM/YYYY HH24:MI:SS')
RPAD(CD_DEPTO, 5) Depto
FROM FUNC;
Nascimento,
2.44) Deseja-se uma relao contendo o nome e sobrenome de todos os funcionrios, sendo que todas as vogais
devem ser apresentadas em minsculas e as consoantes em maisculas. As informaes sobre salrio devem ser
criptografadas da seguinte forma: 22 ser transformado na letra Z; 0,1 sero transformados na letra A; 2,3 sero
transformados na letra B; 4,5,6 sero transformados na letra C, e os demais nmeros na letra D.
Listagem-resposta 2.44A
SQL> SELECT TRANSLATE(UPPER(NM_FUNC||' '||NM_SOBRENOME), 'AEIOU', 'aeiou') Nome,
2
TRANSLATE(REPLACE(TO_CHAR(VL_SAL), '22', 'Z'),
3
'0123456789', 'AABBCCCDDDD') Salrio
4
FROM FUNC;
2.45) Deseja-se uma relao contendo nome completo do funcionrio usando letras maisculas e minsculas, sexo
por extenso, nmero de dias entre a data de admisso e o ltimo dia do ms da data corrente e o valor do salrio
(se houver definido; caso contrrio, 0) formatado. Esta relao deve ser ordenada do menor salrio para o maior.
Listagem-resposta 2.45A
SQL> UPDATE FUNC
2
SET VL_SAL = NULL
3
WHERE VL_SAL IN (1725, 1775);
2 linhas atualizadas.
SQL> SELECT INITCAP(NM_FUNC||' '||NM_SOBRENOME) Nome,
2
DECODE(IN_SEXO, 'F', 'Feminino',
3
'M', 'Masculino', 'Indefinido') Sexo,
4
ROUND(LAST_DAY(SYSDATE) - DT_ADM) Dias,
5
TO_CHAR(NVL(VL_SAL, 0), 'L999G990D00',
6
'NLS_CURRENCY = R$') Salrio
7
FROM FUNC
8
ORDER BY NVL(VL_SAL, 0);
2.46) Deseja-se uma relao com as seguintes informaes: linguagem em uso no banco de dados, o conjunto de
caracteres nacionais e o do banco de dados, o endereo da linha do funcionrio com matrcula 100, a data de hoje
(com dia, ms e ano por extenso), a data da prxima quinta-feira, o seno, cosseno e tangente do ngulo de 30 graus.
Listagem-resposta 2.46A
SQL> SELECT USERENV('LANGUAGE') Linguagem,
2
NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')) Charset DB,
3
NLS_CHARSET_NAME(NLS_CHARSET_ID('NCHAR_CS')) National,
4
ROWIDTOCHAR(ROWID) Rowid,
5
TO_CHAR(SYSDATE, 'DD-DAY-MONTH-YEAR') Hoje,
6
NEXT_DAY(SYSDATE, 'quinta-feira') Prxima Quinta,
7
SIN(30), COS(30), TAN(30)
8
FROM FUNC
9
WHERE CD_MAT = 100;
2.47) Deseja-se realizar o enquadramento dos funcionrios da empresa em uma faixa salarial. O grupo ser dividido
em 10 faixas iguais, sendo o intervalo salarial aprecivel entre 1500 e 5000. Determine a faixa de cada funcionrio.
Listagem-resposta 2.47A
SELECT CD_MAT, VL_SAL, WIDTH_BUCKET(VL_SAL, 1500, 5000, 10) FAIXAS
FROM FUNC
ORDER BY 2;
Observe, no resultado, que o salrio 5275 (maior salrio da empresa) foi includo na faixa salarial 11 (fora do
intervalo estipulado). Todos os valores acima do limite estabelecido so includos nesta dcima-primeira faixa,
sem distino.
2.48) Deseja-se obter o valor numrico e nome da zona de tempo da sesso e do banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
229
DBTIMEZONE,
SESSIONTIMEZONE,
FROM_TZ(LOCALTIMESTAMP, DBTIMEZONE)) REGIAO_DB,
FROM_TZ(LOCALTIMESTAMP, SESSIONTIMEZONE)) REGIAO_SESSAO
Neste exerccio usamos a funo TZ_OFFSET para retornar a zona de tempo em formato numrico. Usamos a
funo FROM_TZ para montar um Timestamp na zona de tempo especificada (Localtimestamp no tem zona de
tempo) e, em seguida, usamos a funo EXTRACT para obter o nome da zona de tempo que desejvamos.
2.49) Receba um timestamp como parmetro e sua zona de tempo e retorne este timestamp convertido para o
horrio de Greenwich.
Listagem-resposta 2.49A
SQL> SELECT SYS_EXTRACT_UTC(
2
TO_TIMESTAMP_TZ('&DATA '||'&HORA '||'&TZONE',
3
'DD/MM/YYYY HH24:MI:SS TZH:TZM')) HORAGMT
4
FROM DUAL;
Entre o valor para data: 15/03/2001
Entre o valor para hora: 15:30:20
Entre o valor para tzone: -05:00
antigo
2:
TO_TIMESTAMP_TZ('&DATA '||'&HORA '||'&TZONE',
novo
2:
TO_TIMESTAMP_TZ('15/03/2001 '||'15:30:20 '||'-05:00',
HORAGMT
--------------------------15/03/01 20:30:20,000000000
2.50) Deseja-se saber (somente para os cargos 55) o salrio do funcionrio com grau de instruo imediatamente
inferior e superior ao seu; o resultado deve vir ordenado pelo nome do funcionrio.
Listagem-resposta 2.50A
SQL> SELECT cd_mat, nm_func, nr_git,
2
LAG(VL_SAL) over (order by NR_GIT ASC nulls last) ANTERIOR,
3
vl_sal,
4
LEAD(VL_SAL) over (order by NR_GIT ASC nulls last) POSTERIOR
5
FROM FUNC
6
WHERE NR_CARGO = 55
7
ORDER BY 2;
2.51) Ainda estudando uma forma de enquadramento salarial o departamento Pessoal deseja dividir o grupo em
trs faixas, considerando ordenao decrescente de cargo. Apresente o enquadramento para os funcionrios dos
departamentos A00 e D11 e ordene o resultado pelo nome do funcionrio.
Listagem-resposta 2.51A
SQL> SELECT CD_MAT, NM_FUNC, NR_CARGO, VL_SAL,
2
NTILE(3) over (order by NR_CARGO DESC nulls last) FAIXA
3
FROM FUNC
4
WHERE CD_DEPTO IN ('A00', 'D11')
5 ORDER BY 2;
2.52) Deseja-se saber quanto o salrio de cada funcionrio representa (percentualmente) em relao ao seu prprio
departamento e em relao empresa.
Listagem-resposta 2.52A
SQL> SELECT CD_MAT, NM_FUNC, VL_SAL,
2
TRUNC(RATIO_TO_REPORT(VL_SAL)
3
over (PARTITION BY CD_DEPTO)* 100,2) % PARA DEPTO,
4
TRUNC(RATIO_TO_REPORT(VL_SAL)
5
over () * 100, 2) % PARA EMPRESA
6
FROM FUNC;
Listagem-resposta 2.53A
SQL> SELECT cd_mat, nm_func, vl_sal,
2
max(vl_sal) over(order by vl_sal nulls last
3
rows between 2 preceding and 1 preceding) MaxSal,
4
min(vl_sal) over(order by vl_sal nulls last
5
rows between 1 following and 2 following) MinSal,
6
max(nr_cargo) over(order by nr_cargo nulls last
7
rows between 2 preceding and 1 preceding) MaxCrg,
8
min(nr_cargo) over(order by nr_cargo nulls last
9
rows between 1 following and 2 following) MinCrg,
10
dense_rank() over(partition by cd_depto
11
order by vl_sal DESC nulls last) rank_depto,
12
dense_rank() over(order by vl_sal DESC nulls last) rank_emp
13
FROM FUNC
14
ORDER BY 2;
2.54) Deseja-se uma lista contendo o nome do projeto, o nome das atividades e tempo de durao de cada atividade
(fornecido em nmero de horas). Ordene o resultado por projeto e atividade.
Listagem-resposta 2.54A
SQL> SELECT PROJ.NM_PROJ Projeto,
2
ATIV.TX_DESCRICAO Atividade,
3
TRUNC((PRJATV.DT_FIM - PRJATV.DT_INI) * 24) Horas
4
FROM PROJ, ATIV, PRJATV
5
WHERE PRJATV.CD_PROJ = PROJ.CD_PROJ
6
AND PRJATV.CD_ATIV = ATIV.CD_ATIV
7
ORDER BY Projeto, Atividade;
Listagem-resposta 2.54B
SQL> SELECT PROJ.NM_PROJ Projeto,
2
ATIV.TX_DESCRICAO Atividade,
3
TRUNC((PRJATV.DT_FIM - PRJATV.DT_INI) * 24) Horas
4
FROM PRJATV JOIN ATIV USING (CD_ATIV)
5
JOIN PROJ USING(CD_PROJ)
6
ORDER BY Projeto, Atividade;
A subtrao de datas fornece o resultado em nmero de dias (parte inteira). Multiplicamos por 24 para transformar
dias para horas e truncamos o resultado para que no fossem apresentados minutos e segundos. Observe que neste
segundo resultado no usamos a clusula Where pois no havia qualquer restrio especfica, apenas as clusulas
relativas ao Join.
2.55) Deseja-se uma lista contendo o cdigo e nome de cada departamento, nome e sobrenome do gerente, ordenado
por cdigo de departamento.
Listagem-resposta 255A
SQL> SELECT D.CD_DEPTO, D.NM_DEPTO,
2
F.NM_FUNC, F.NM_SOBRENOME
3
FROM DEPTO D, FUNC F
4
WHERE D.CD_GERENTE = F.CD_MAT
5
ORDER BY 1;
Listagem-resposta 255B
SQL> SELECT D.CD_DEPTO, D.NM_DEPTO,
2
F.NM_FUNC, F.NM_SOBRENOME
3
FROM DEPTO D JOIN FUNC F ON D.CD_GERENTE = F.CD_MAT
4
ORDER BY 1;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
231
Listagem-resposta 2.56A
SQL> SELECT F.NM_FUNC, F.NM_SOBRENOME, F.VL_SAL, F.CD_DEPTO
2
FROM FUNC F, DEPTO D, PROJ P
3
WHERE P.CD_RESP
= F.CD_MAT
4
AND D.CD_DEPTO
= F.CD_DEPTO
5
AND D.CD_GERENTE <> F.CD_MAT;
Listagem-resposta 2.56B
SQL> SELECT F.NM_FUNC, F.NM_SOBRENOME, F.VL_SAL, F.CD_DEPTO
2
FROM FUNC F JOIN DEPTO D ON D.CD_DEPTO = F.CD_DEPTO AND
3
D.CD_GERENTE <> F.CD_MAT
4
JOIN PROJ P ON P.CD_RESP = F.CD_MAT;
A ligao com a tabela de departamento foi necessria para que verificssemos se o funcionrio era gerente. Observe que o relacionamento foi feito com o cdigo do departamento do funcionrio e no com o cdigo do
departamento do projeto.
2.57) Deseja-se uma lista contendo o nome e departamento do gerente e nome e salrio de todos os funcionrios
subordinados a ele. Apresente o resultado ordenado por departamento e salrio (descendente).
Listagem-resposta 2.57A
SQL> SELECT G.CD_DEPTO, G.NM_FUNC Gerente,
2
F.NM_FUNC, F.VL_SAL
3
FROM FUNC G, FUNC F, DEPTO D
4
WHERE G.CD_MAT
= D.CD_GERENTE
5
AND F.CD_DEPTO = D.CD_DEPTO
6
ORDER BY 1, 4 DESC;
Listagem-resposta 2.57B
SQL> SELECT G.CD_DEPTO, G.NM_FUNC Gerente,
2
F.NM_FUNC, F.VL_SAL
3
FROM FUNC G INNER JOIN DEPTO D ON G.CD_MAT = D.CD_GERENTE
4
JOIN FUNC F ON F.CD_DEPTO = D.CD_DEPTO
5
ORDER BY 1, 4 DESC;
2.58) Deseja-se uma lista contendo o nome do projeto, o nome do departamento responsvel e o nome do
funcionrio responsvel, desde que ele trabalhe no departamento responsvel pelo projeto.
Listagem-resposta 2.58A
SQL> SELECT P.NM_PROJ Projeto, D.NM_DEPTO Departamento,
2
F.NM_FUNC Responsavel
3
FROM PROJ P, DEPTO D, FUNC F
4
WHERE P.CD_DEPTO = D.CD_DEPTO
5
AND P.CD_DEPTO = F.CD_DEPTO
6
AND P.CD_RESP
= F.CD_MAT
7 UNION
9 SELECT P.NM_PROJ, D.NM_DEPTO,
10
'Outro Depto'
11
FROM PROJ P, DEPTO D, FUNC F
12
WHERE P.CD_DEPTO = D.CD_DEPTO
13
AND P.CD_DEPTO <> F.CD_DEPTO
14
AND P.CD_RESP
= F.CD_MAT;
Neste exerccio, precisamos realizar uma operao de unio, pois no primeiro Select estabelecemos uma restrio
de tal forma que s seriam apresentados os projetos em que o responsvel trabalhasse no mesmo departamento.
Mas foi solicitado que apenas o nome do funcionrio fosse omitido. Por esse motivo, unimos o resultado do
Listagem-resposta 2.59A
SQL> SELECT CD_DEPTO, NM_DEPTO
2
FROM DEPTO
3 MINUS
4 SELECT DEPTO.CD_DEPTO, DEPTO.NM_DEPTO
5
FROM DEPTO, FUNC
6
WHERE FUNC.CD_DEPTO = DEPTO.CD_DEPTO;
2.60) Deseja-se saber quais os departamentos (cdigo e nome) responsveis por mais de dois projetos e que,
simultaneamente, possuam mais de trs funcionrios (usar Intersect).
Listagem-resposta 2.60A
SQL>
2
3
4
5
6
7
8
9
10
11
2.61) Deseja-se saber o cdigo e nome do projeto, cdigo e nome da atividade e o tempo de durao da atividade
durante o ano de 1996. Ordene o resultado por nome do projeto e nome da atividade. Se uma atividade se iniciou
antes de 1996 e terminou durante o ano de 1996, desejamos saber apenas quanto tempo ela durou de 01/01/96 at
a data de trmino. Se uma atividade comeou durante o ano de 1996 e terminou em outro ano, desejamos saber
apenas o tempo da data de incio da atividade at dia 31/12/1996. Se uma atividade comeou antes de 1996 e
terminou depois de 1996, sua durao ser de 01/01 a 31/12, e, finalmente, se uma atividade comeou e terminou
em 1996, sua durao ser desde a data de incio at a data de trmino.
Listagem-resposta 2.61A
SQL> SELECT P.CD_PROJ, P.NM_PROJ,
2
A.CD_ATIV, A.TX_DESCRICAO,
3
DECODE(TO_NUMBER(TO_CHAR(PJ.DT_FIM, 'YYYY')),
4
1996, PJ.DT_FIM, '31/12/96') 5
DECODE(TO_NUMBER(TO_CHAR(PJ.DT_INI, 'YYYY')),
6
1996, PJ.DT_INI, '01/01/96') + 1 Tempo
7
FROM PROJ P, ATIV A, PRJATV PJ
8
WHERE PJ.CD_PROJ = P.CD_PROJ
9
AND PJ.CD_ATIV = A.CD_ATIV
10
AND PJ.DT_FIM > TO_DATE('01/01/96') - 1/86400
11
AND PJ.DT_INI < TO_DATE('01/01/97') - 1/86400;
Nesse exerccio, utilizamos a funo Decode para efetuar a subtrao desejada. Se o ano final do projeto fosse 1996,
ento a funo retornaria dt_fim; caso contrrio, retorna 31/12/96. O mesmo procedimento foi adotado para data
de incio do projeto (considerando a data de 01/01/96). Desta forma, a subtrao entre os dois decodes resulta nas
quatro hipteses formuladas acima. A restrio da clusula Where garante que no sero selecionados projetos que
tenham incio aps 1996 nem trmino anterior a 1996.
2.62) Sabendo-se que os cdigos de departamento so subdivididos em depto (letra) e centro de custo (nmero),
deseja-se uma lista organizada por centro de custo contendo nome e sobrenome do funcionrio, cdigo do
departamento, salrio e cargo. Deve ser apresentada uma nica coluna para nome e sobrenome, salrio deve ser
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
233
Listagem-resposta 2.62A
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
>
SQL>
2
3
4
5
6
SET LINESIZE 70
BREAK ON C.CUSTO SKIP PAGE
COMPUTE SUM LABEL SOMA OF VL_SAL ON C.CUSTO
COL VL_SAL FOR L999G990D00
COL MES_ATUAL NOPRINT NEW_VALUE MES
COL C.CUSTO FOR A7
REPHEADER OFF
TTITLE CENTER MES RIGHT PG.: FORMAT 99 SQL.PNO SKIP 2
SELECT LPAD(SUBSTR(CD_DEPTO,2),7) C.CUSTO,
NM_FUNC||' '||NM_SOBRENOME NOME, CD_DEPTO,
VL_SAL, NR_CARGO,
INITCAP(TO_CHAR(SYSDATE, 'MONTH')) MES_ATUAL
FROM FUNC
ORDER BY SUBSTR(CD_DEPTO,2);
2.63) Gere um arquivo a ser utilizado para carga de dados em outro ambiente contendo as seguintes informaes:
matrcula, nome e sobrenome (nica coluna), salrio, cargo, grau de instruo e data de nascimento. As informaes
devem ser apresentadas alinhadas por coluna e separadas por vrgula. Faa um script para criao deste arquivo
(usar Spool). O arquivo gerado deve ter o nome de carga.sql.
Listagem-resposta 2.63A
SPOOL CARGA.SQL
SET NEWPAGE NONE
SET FEEDBACK OFF
SET HEADING OFF
SET ECHO OFF
SET PAGESIZE 999
SET TAB OFF
SET TERMOUT OFF
SET TRIMSPOOL ON
SET NUMWIDTH 3
SET WRAP OFF
SET COLSEP ,
COL M FOR 099
COL C FOR 09
COL G FOR 09
SELECT CD_MAT M, RPAD(NM_FUNC||' '||NM_SOBRENOME,20),
TO_CHAR(VL_SAL, '9999.99',
'NLS_NUMERIC_CHARACTERS = .,'),
NR_CARGO C, NR_GIT G,
TO_CHAR(DT_NASC, ' DDMMRRRR')
FROM FUNC
/
SPOOL OFF
2.64) Montar uma lista dos aniversariantes por ms, contendo para cada ms (apresentado por extenso em portugus)
o nome, idade e departamento do funcionrio, ordenada por nmero de ms. No deve haver repetio do nome
do ms. A pgina deve ser mudada quando ocorrer a mudana do ms.
Listagem-resposta 2.64A
SQL> SPOOL OFF
SQL> BREAK ON MES SKIP PAGE
SQL> SELECT TO_CHAR(DT_NASC, 'MONTH') MES,
2
NM_FUNC,
3
TRUNC((SYSDATE - DT_NASC)/365.25) IDADE,
4
CD_DEPTO
5
FROM FUNC
6
ORDER BY TO_NUMBER(TO_CHAR(DT_NASC, 'MM'));
2.65) Crie um relatrio que fornea a mdia salarial, o maior salrio e o menor salrio do departamento informado
como parmetro. O usurio poder informar o departamento em letras maisculas ou minsculas e sem aspas. A
solicitao do parmetro deve ser formatada e deve ser enviada mensagem antes do incio da execuo.
'
Listagem-resposta 2.66A
SET LINESIZE 78
REPHEADER CENTER Capa do Relatrio - dt_hoje
TTITLE LEFT VERSO FORMAT 999G999G999G999 SQL.RELEASE RIGHT Pg.: FORMAT 99 SQL.PNO SKIP 2 LEFT dt_hoje SKIP 2 CENTER PRIMEIRO RELATRIO EXEMPLO SKIP 2 CENTER Departamento: nome_antes SKIP 2
BTITLE CENTER Departamento: nome_depois SKIP 2 CENTER CONFIDENCIAL
COL VL_SAL FOR L999G999G990D00
COL NM_DEPTO NEW_VALUE NOME_ANTES OLD_VALUE NOME_DEPOIS FOR A30
COL SYSDATE NEW_VALUE DT_HOJE NOPRINT
BREAK ON NM_DEPTO SKIP PAGE ON REPORT
COMPUTE SUM LABEL SOMA AVG LABEL MDIA OF VL_SAL ON NM_DEPTO REPORT
COMPUTE COUNT LABEL QTD
OF CD_MAT ON NM_DEPTO REPORT
SELECT NM_DEPTO, CD_MAT,
TO_CHAR(DT_ADM, 'DD/MM/YYYY') DT_ADM,
VL_SAL, SYSDATE
FROM FUNC, DEPTO
WHERE FUNC.CD_DEPTO = DEPTO.CD_DEPTO
ORDER BY NM_DEPTO, VL_SAL DESC;
2.67) Criar um arquivo a ser usado toda vez que abrirmos o SQL*Plus com as seguintes caractersticas:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
235
Listagem-resposta 2.67A
SQL> SET LINESIZE 70
SQL> SET FEEDBACK 1
SQL> SET NULL < NULL>
SQL> SET NUMWIDTH 10
SQL> SET PAGESIZE 20
SQL> SET SQLPROMPT Plus>
Plus> SET TIME ON
17:58:51 Plus> SET SUFFIX TXT
17:58:51 Plus> SET SERVEROUT ON SIZE 10000
Para que o arquivo seja executado toda vez que iniciarmos o SQL*Plus, seu nome deve ser Login.Sql.
2.68) Crie um relatrio com as seguintes caractersticas:
Apresentar nome do responsvel (nome e sobrenome alinhados esquerda) e data de admisso (dd/mm/yyyy
centralizado), nome do funcionrio (nome e sobrenome centralizado) e salrio (formatado).
Deve ser apresentado um total salarial e uma mdia por projeto no final do relatrio. Deseja-se, tambm, a
quantidade de funcionrios por projeto e no final do relatrio.
Listagem-resposta 2.68A
TTITLE LEFT VERSO FORMAT 999G999G999G999 SQL.RELEASE RIGHT Pg.: FORMAT 99 SQL.PNO SKIP 2 LEFT DT_HOJE SKIP 2 CENTER Relao de Funcionrios e Projetos SKIP 2 CENTER Projeto: NOME_ANTES SKIP 2
BTITLE CENTER Projeto: NOME_DEPOIS SKIP 2 CENTER CONFIDENCIAL
COL VL_SAL
FOR L999G999G990D00
COL PROJETO
NEW_VALUE NOME_ANTES OLD_VALUE NOME_DEPOIS FOR A30
COL NOME
FOR A20
COL RESPONSAVEL FOR A20
COL SYSDATE
NEW_VALUE DT_HOJE NOPRINT
BREAK ON PROJETO SKIP PAGE ON RESPONSAVEL ON REPORT
COMPUTE SUM LABEL SOMA AVG LABEL Mdia OF VL_SAL ON PROJETO REPORT
COMPUTE COUNT LABEL QTD
OF CD_MAT ON PROJETO REPORT
SELECT NM_PROJ PROJETO,
R.NM_FUNC||' '||R.NM_SOBRENOME REPONSAVEL,
TO_CHAR(F.DT_ADM, 'DD/MM/YYYY') DT_ADM,
LPAD(F.NM_FUNC||' '||F.NM_SOBRENOME,
FROM
WHERE
AND
ORDER
Listagem-resposta 2.69A
sqlplus -s -m html on head '<title>teste de html</title>' body BGCOLOR=#ff0000 entmap off spool on desenv/desenv
@R02_69A.SQL
Com o comando anterior disparamos a execuo do arquivo R02_69A que similar ao script da Resposta 2.68, com a
diferena de que inclumos o comando Spool para que o arquivo HTM fosse gerado. Certamente, voc encontrar ajustes
a fazer para que o resultado fique mais amigvel (troque o fundo da tela para uma cor mais suave, vermelho muito forte).
2.70) Deseja-se uma lista com todos os gerentes e seus respectivos funcionrios, contendo nome e sobrenome do
gerente, cdigo e nome do departamento, nome e sobrenome do funcionrio. Todos os departamentos devem ser
apresentados (mesmo que no haja gerentes ou funcionrios) e todos os funcionrios devem ser apresentados
(mesmo que estejam sem departamento).
Listagem-resposta 2.70A
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
Houve necessidade do Union porque no podemos colocar o sinal indicativo de Outer Join (+) nos dois lados da
igualdade. Tente resolver com a nova sintaxe da verso 9i.
Foram includas linhas em Depto e Func para que fossem apresentadas todas as situaes.
2.71) Deseja-se remover todas as atividades que no estejam em uso.
Listagem-resposta 2.71A
SQL> DELETE FROM ATIV A
2
WHERE NOT EXISTS (SELECT 0 FROM PRJATV
3
WHERE CD_ATIV = A.CD_ATIV);
2.72) Deseja-se uma lista contendo nome, matrcula, cargo e salrio dos funcionrios que possuam o maior salrio
da empresa e daqueles que possuam o menor salrio da empresa.
Listagem-resposta 2.72A
SQL> SELECT CD_MAT, NM_FUNC, NR_CARGO, VL_SAL
2
FROM FUNC
3
WHERE VL_SAL = (SELECT MAX(VL_SAL) FROM FUNC)
4
OR VL_SAL = (SELECT MIN(VL_SAL) FROM FUNC)
5
ORDER BY 4 DESC;
2.73) Deseja-se uma relao hierrquica de todos os departamentos da empresa (cdigo e nome), considerando-se
que os departamentos esto subordinados aos seus respectivos departamentos contbeis. A relao deve apresentar
endentao de trs espaos para identificar subordinao. O departamento no mais alto nvel da hierarquia no
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
237
Listagem-resposta 2.73A
SQL>
SQL>
2
3
4
5
6
2.74) Deseja-se uma lista contendo nome, sobrenome, matrcula, ramal, cdigo e nome do departamento, cdigo
e nome do projeto de todos os funcionrios que sejam responsveis por projeto e, simultaneamente, gerentes.
Listagem-resposta 2.74A
SQL> SELECT F.CD_MAT, F.NM_FUNC||' '||F.NM_SOBRENOME
2
D.CD_DEPTO, D.NM_DEPTO,
3
P.CD_PROJ, P.NM_PROJ
4
FROM FUNC F INNER JOIN DEPTO D ON F.CD_MAT =
5
AND F.CD_DEPTO
6
INNER JOIN PROJ P ON F.CD_MAT =
7
AND P.CD_DEPTO
GER. RESPONSVEL,
D.CD_GERENTE
= D.CD_DEPTO
P.CD_RESP
= D.CD_DEPTO;
2.75) Deseja-se uma lista contendo nome, sobrenome, matrcula, ramal, cdigo e nome do departamento, cdigo
e nome do projeto de todos os gerentes que sejam responsveis por projeto no pertencentes ao seu departamento.
Listagem-resposta 2.75A
SQL> SELECT F.CD_MAT, F.NM_FUNC||' '||F.NM_SOBRENOME GER. RESPONSVEL,
2
D.CD_DEPTO, D.NM_DEPTO,
3
P.CD_PROJ, P.NM_PROJ
4
FROM FUNC F, DEPTO D, PROJ P
5
WHERE F.CD_DEPTO <> D.CD_DEPTO
6
AND F.CD_MAT
= P.CD_RESP
7
AND P.CD_DEPTO
= D.CD_DEPTO
8
AND F.CD_MAT
IN (SELECT CD_GERENTE FROM DEPTO);
O departamento do projeto MA2110 foi substitudo de D11 para D21 para que houvesse alguma linha no resultado.
2.76) Produza uma lista contendo nome, sobrenome, cargo e salrio de todos os funcionrios do sexo feminino
que ganhem mais que todos os funcionrios do sexo masculino.
Listagem-resposta 2.76A
SQL> SELECT NM_FUNC, NM_SOBRENOME, NR_CARGO, VL_SAL
2
FROM FUNC
3
WHERE IN_SEXO = 'F'
4
AND VL_SAL > (SELECT MAX(VL_SAL) FROM FUNC
5
WHERE IN_SEXO = 'M');
Observe que, para receber salrio acima de todos os funcionrios do sexo masculino, basta que ganhe mais que o
maior salrio dos funcionrios do sexo masculino.
2.77) Produza uma lista contendo nome, sobrenome e salrio de todos os funcionrios que possuam mais de cinco
anos de casa e que recebam menos que a mdia dos funcionrios com o mesmo cargo.
Listagem-resposta 2.77A
SQL> SELECT NM_FUNC, NM_SOBRENOME, NR_CARGO
2
FROM FUNC F
3
WHERE (SYSDATE - DT_ADM) > (5 * 365.25)
4
AND VL_SAL < (SELECT AVG(VL_SAL) FROM FUNC
5
WHERE NR_CARGO = F.NR_CARGO);
2.78) Deseja-se obter a mdia de idade, maior e menor salrio e mdia salarial dos funcionrios do sexo feminino,
grupando por grau de instruo e cargo (somente dos cargos com mais de duas funcionrias).
Listagem-resposta 2.79A
SQL> SELECT CD_DEPTO DEPTO, IN_SEXO SEXO, COUNT(*) QTD
2
FROM FUNC
3
GROUP BY CD_DEPTO, IN_SEXO;
2.80) Deseja-se uma lista das atividades que estejam associadas a mais de dois departamentos.
Listagem-resposta 2.80A
SQL> SELECT PA.CD_ATIV, COUNT(DISTINCT PJ.CD_DEPTO)
2
FROM PROJ PJ INNER JOIN PRJATV PA USING (CD_PROJ)
3
GROUP BY PA.CD_ATIV
4 HAVING COUNT(DISTINCT PJ.CD_DEPTO) > 2;
2.81) Atualize o salrio dos funcionrios com mais de cinco anos de casa (exceto os gerentes) para que ganhem salrio
semelhante ao do funcionrio com maior cargo do seu prprio departamento (usar um nico comando UPDATE).
Listagem-resposta 2.81A
SQL> UPDATE FUNC F
2
SET VL_SAL = (SELECT MAX(VL_SAL) FROM FUNC
3
WHERE CD_DEPTO = F.CD_DEPTO
4
AND NR_CARGO = (SELECT MAX(NR_CARGO) FROM FUNC
5
WHERE CD_DEPTO = F.CD_DEPTO))
6
WHERE CD_MAT NOT IN (SELECT CD_GERENTE FROM DEPTO
7
WHERE CD_GERENTE IS NOT NULL);
2.82) Criar uma view sobre a tabela de funcionrios que selecione apenas os funcionrios com salrio superior a R$
2.000,00. Garanta que a atualizao atravs desta view somente possa incluir ou alterar funcionrios cujo salrio
seja superior a R$ 2.000,00.
Listagem-resposta 2.82A
SQL> CREATE VIEW SAL_2000 AS
2 SELECT * FROM FUNC
3
WHERE VL_SAL > 2000
4
WITH CHECK OPTION;
View criada.
SQL> UPDATE SAL_2000
2
SET VL_SAL = 1000;
UPDATE SAL_2000
*
ERRO na linha 1:
ORA-01402: violao da clusula where da view WITH CHECK OPTION
2.83) Incluir dados na tabela Depto provenientes da tabela Dept do usurio Scott, prefixando os departamentos
com D. Caso exista um departamento com o mesmo cdigo, apenas atualize o nome; caso contrrio, inclua o
novo departamento. O valor do departamento contbil para todos os novos departamentos D01.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
239
2.84) Em mais um estudo salarial, o departamento Pessoal solicitou a relao de funcionrios com a indicao de
sexo (por extenso) e uma classificao dos funcionrios por idade, da seguinte forma: funcionrios com menos de
30 anos (jovem), entre 30 e 45 (maduro), entre 46 e 60 (meia idade) e maior que 60 anos (idoso). Ordene o
resultado pelo nome do funcionrio.
Listagem-resposta 2.84A
SQL> SELECT CD_MAT, NM_FUNC, VL_SAL,
2
CASE IN_SEXO WHEN 'F' THEN 'Feminino'
3
WHEN 'M' THEN 'Masculino'
4
ELSE 'Indefinido' END Sexo,
5
CASE WHEN EXTRACT(YEAR FROM CURRENT_TIMESTAMP) 6
EXTRACT(YEAR FROM DT_NASC) > 60 THEN 'IDOSO'
7
WHEN EXTRACT(YEAR FROM CURRENT_TIMESTAMP) 8
EXTRACT(YEAR FROM DT_NASC) BETWEEN 46 AND 60 THEN 'MEIA IDADE'
9
WHEN EXTRACT(YEAR FROM CURRENT_TIMESTAMP) 10
EXTRACT(YEAR FROM DT_NASC) BETWEEN 30 AND 45 THEN 'MADURO'
11
ELSE 'JOVEM' END IDADE
12
FROM FUNC
13
ORDER BY NM_FUNC;
2.85) Deseja-se saber o total salarial por cargo, sexo e departamento. Apresente uma amostragem contendo 30%
do total de funcionrios da empresa.
Listagem-resposta 2.85A
SQL> COL CARGO FOR 9999
SQL> SELECT SUM(VL_SAL), NR_CARGO CARGO,
2
IN_SEXO SEXO, CD_DEPTO DEPTO
3
FROM FUNC SAMPLE(30)
4
GROUP BY NR_CARGO, IN_SEXO, CD_DEPTO;
Listagem-resposta 2.86A
SQL> SELECT T.TABLE_NAME,
2
COUNT(DISTINCT C.COLUMN_NAME) COLUMNS,
3
COUNT(DISTINCT R.CONSTRAINT_NAME) CONSTRAINTS,
4
COUNT(DISTINCT I.INDEX_NAME) INDEXES
5
FROM SYS.USER_TABLES T,
6
SYS.USER_TAB_COLUMNS C,
7
SYS.USER_CONSTRAINTS R,
8
SYS.USER_INDEXES I
9
WHERE T.TABLE_NAME
= C.TABLE_NAME
10
AND T.TABLE_NAME
= R.TABLE_NAME
11
AND R.CONSTRAINT_TYPE = 'R'
12
AND T.TABLE_NAME
= I.TABLE_NAME
13
GROUP BY T.TABLE_NAME;
2.87) Deseja-se obter, para cada restrio de integridade, a tabela associada, a tabela correspondente (no caso de
relacionamento), o nome da restrio, o texto da restrio ordenado por tabela associada e nome da restrio.
Listagem-resposta 2.87A
SQL> SET ECHO ON
SQL> COL CONSTRAINT_NAME
SQL> COL TABLE_NAME
FOR A15
FOR A15
2.88) Determinar, para cada tabela particionada, seu nome, o nome de cada partio e as regras do particionamento.
Listagem-resposta 2.88A
SQL> COL HIGH_VALUE
FOR A50
SQL> COL PARTITION_NAME FOR A15
SQL> SELECT TABLE_NAME, PARTITION_NAME,
2
HIGH_VALUE, PARTITION_POSITION POSITION
3
FROM USER_TAB_PARTITIONS
4
ORDER BY 4;
2.89) Deseja-se informaes sobre as views criadas no schema do usurio, contendo nome, texto associado, colunas
que podem ser atualizadas.
Listagem-resposta 2.89A
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
COL
VIEW_NAME
FOR A11
COL
COLUMN_NAME
FOR A15
COL
TEXT
FOR A35
SET
LONG
1000
SET
LONGCHUNKSIZE 1000
SET
MAXDATA
2000
BREAK ON TEXT
SELECT V.VIEW_NAME,
V.TEXT,
U.COLUMN_NAME, U.UPDATABLE,
U.INSERTABLE, U.DELETABLE
FROM SYS.USER_VIEWS V,
SYS.USER_UPDATABLE_COLUMNS U
WHERE V.VIEW_NAME
= U.TABLE_NAME
AND (U.UPDATABLE = 'YES' OR
U.INSERTABLE = 'YES' OR
U.DELETABLE = 'YES')
ORDER BY 1, 3;
2.90) Coloque outra cpia do SQL*PLUS ativa no usurio DESENV (sesso 2).
Para realizar esta operao, basta efetuar um double-click no cone do SQL*Plus e, aps o login, dimensionar as
janelas para que fiquem lado a lado.
2.91) Atualize sua tabela Depto (sesso 1), mas no d Commit. O que o outro usurio (sesso 2) v? Por qu?
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
241
Sim. Pois a informao modificada se torna disponvel para todos os usurios aps sua efetivao (Commit).
2.93) Atualize sua tabela Depto (sesso 1), mas no d Commit. Atravs da sesso 2, tente atualizar a mesma linha
alterada anteriormente. O que acontece? Por qu? D Rollback nas duas sesses.
O bloqueio se repete. Isto acontece porque a clusula FOR UPDATE adicionada ao comando Select funciona, para
efeito de LOCK, da mesma forma que um comando de atualizao (update, insert, delete). Desta forma, este comando
Listagem-resposta 2.95A
SQL> UPDATE FUNC
3
SET VL_SAL = VL_SAL * 1.10;
33 linhas atualizadas;
SQL> COMMIT;
Validao completa.
Todos os funcionrios da tabela Func tiveram seus salrios aumentados em 10%. Aps esta modificao, os dados
esto sendo efetivados (Commit).
Listagem-resposta 2.95B
SQL> DELETE FROM FUNC WHERE NR_GIT = 21;
1 linhas deletada.
SQL> ROLLBACK;
Rollback completo.
Foi feita a excluso dos funcionrios com grau de instruo igual a 21. Como a transao no havia sido efetivada
(Commit), foi possvel ao usurio desistir deste resultado e desmanchar a modificao (Rollback). Aps o comando
Rollback a tabela fica com as mesmas caractersticas que tinha antes do incio da excluso.
Listagem-resposta 2.95C
SQL> UPDATE DEPTO
2
SET CD_GERENTE = 200
3
WHERE CD_DEPTO = 'A00';
1 linha atualizada.
SQL> SAVEPOINT ALTERA_GERENTE;
Ponto de salvamento criado.
SQL> UPDATE FUNC
2
SET VL_SAL = VL_SAL * 1.5
3
WHERE CD_MAT = 300;
1 linha atualizada.
SQL> ROLLBACK TO SAVEPOINT ALTERA_GERENTE;
Rollback completo.
SQL> UPDATE FUNC
2
SET VL_SAL = VL_SAL * 1.2
3
WHERE CD_MAT = 200;
1 linha atualizada.
Na seqncia, temos:
1. Atualizao da tabela de departamento, com a alterao do gerente para 200 no departamento A00.
2. Marcao de um ponto de controle (Savepoint) de nome Altera_gerente.
3. Atualizao do funcionrio de matrcula 300, com um aumento de 50% em seu salrio.
4. O comando Rollback desfaz a ltima atualizao (item 3). A modificao feita no passo 1 no desmanchada,
porm ainda no foi efetivada; ainda est pendente.
5. Atualizao do funcionrio de matrcula 200, com um aumento de 20% em seu salrio. S no momento do
Commit 1 e 5 sero realmente efetivados.
2.96) Para que serve o comando SET TRANSACTION READ ONLY?
Este comando indica ao Oracle que todos os comandos desta transao devem ter como referncia de tempo o
momento do Set Transaction e no o momento de incio de cada um deles (como o default). Todos os comandos
da transao so apenas de consulta.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
243
Listagem-resposta 2.98A
SQL> ALTER SESSION SET NLS_LANGUAGE = French;
Listagem-resposta 2.99A
SQL> ALTER SESSION
2
SET NLS_DATE_FORMAT = 'DD/MM/RRRR';
2.100) Deseja-se uma relao dos aniversariantes da empresa, contendo o nome e sobrenome de cada funcionrio,
o dia do aniversrio e o ms do aniversrio (por extenso, em portugus). Ordene a relao por nmero de ms e
estabelea quebra de pgina a cada troca de ms.
Listagem-resposta 2.100A
SQL> ALTER SESSION
2
SET NLS_DATE_LANGUAGE = 'BRAZILIAN PORTUGUESE';
Session modifie.
SQL> BREAK ON MES SKIP PAGE
SQL> SELECT TO_CHAR(DT_NASC, 'MONTH') MES,
2
TO_NUMBER(TO_CHAR(DT_NASC, 'DD')) DIA,
3
NM_FUNC || ' ' || NM_SOBRENOME ANIVERSARIANTE
4
FROM FUNC
5
ORDER BY TO_NUMBER(TO_CHAR(DT_NASC, 'MM')), DIA;
2.101) Deseja-se uma relao para a folha de pagamento, contendo a matrcula, nome, sobrenome, salrio bruto,
INSS (8% do salrio), FGTS (10% do salrio), Ticket (8,00 por dia do ms), Vale Transporte (2,00 por dia do ms). O
ms ser fornecido como parmetro. Os valores financeiros devero ser formatados, devendo ser apresentado o
smbolo financeiro (R$).
Listagem-resposta 2.101A
SQL> ALTER SESSION SET NLS_CURRENCY = 'R$';
Session modifie.
SQL> SET LINESIZE 200
SQL> ACCEPT MES PROMPT 'Informe o Ms da folha : '
Informe o Ms da folha : 05
SQL> SELECT CD_MAT MAT, NM_FUNC ||' '||NM_SOBRENOME NOME,
2
TO_CHAR(VL_SAL,'L999G999D99') SAL,
3
TO_CHAR(VL_SAL*.08,'L999G999D99') INSS,
4
TO_CHAR(VL_SAL*.10,'L999G999D99') FGTS,
5
TO_CHAR(8*TO_NUMBER(TO_CHAR(
6
LAST_DAY('01/'||&MES||'/'||TO_CHAR(SYSDATE,'RRRR')), 'DD')), 'L999D99') TICKET,
7
TO_CHAR(2*TO_NUMBER(TO_CHAR(
8
LAST_DAY('01/'||&MES||'/'||TO_CHAR(SYSDATE,'RRRR')), 'DD')), 'L999D99') VALE
9
FROM FUNC
10
ORDER BY CD_DEPTO, CD_MAT;
2.103) Iguale a zona de tempo da sesso zona de tempo do banco de dados. Verifique o resultado em seguida.
Listagem-resposta 2.103A
SQL> ALTER SESSION SET TIME_ZONE = DBTIMEZONE;
Session modifie.
SQL>
DBTI
---GMT
2.104) Incluir dados na tabela TLOB com o formato especificado abaixo, a partir da tabela Func:
f) c_number deve receber cd_mat.
g) c_clob1 deve receber nm_func concatenado com nm_sobrenome.
h) c_clob2 deve receber o nome do departamento em que o funcionrio trabalha.
i) c_nclob1 deve receber o projeto que o funcionrio coordena (se for o caso).
j) c_nclob2 deve receber a concatenao de data de nascimento, data de admisso, cargo, grau de instruo e salrio.
Listagem-resposta 2.104A
SQL> INSERT
2 SELECT
3
4
5
6
FROM
7
35 ligne(s)
Observe que no precisamos determinar nenhum tipo de converso explicitamente para os tipos de dados. A
converso foi feita automaticamente.
2.105) Associar a coluna C_BFILE1 ao arquivo correspondente indicado pela coluna nm_foto.
Listagem-resposta 2.105A
SQL> CREATE DIRECTORY WIN AS 'C:\WINDOWS';
Rpertoire cr.
SQL> UPDATE TLOB T
2
SET C_BFILE1 = (SELECT CASE WHEN NM_FOTO IS NULL THEN NULL
3
ELSE BFILENAME('WIN',
4
LTRIM(UPPER(NM_FOTO),'C:\WINDOWS\'))
5
END
6
FROM FUNC WHERE CD_MAT = T.C_NUMBER);
38 ligne(s) mise(s) jour.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
245
Listagem-resposta 2.107A
SQL> CREATE USER PROD
2
IDENTIFIED BY PROD
3
DEFAULT TABLESPACE USER_DATA
4
TEMPORARY TABLESPACE TEMPORARY_DATA
5
QUOTA ULIMITED ON USER_DATA;
2.108) Transforme este usurio em um usurio comum (acesso role Connect apenas).
Listagem-resposta 2.108A
SQL> GRANT CONNECT TO PROD;
2.109) Autorize o acesso para leitura sobre sua tabela Funcionrio para o user PROD.
Listagem-resposta 2.109A
SQL> GRANT SELECT ON FUNC TO PROD;
2.110) Estabelea conexo como PROD. Crie um sinnimo para a tabela Func do user DESENV.
Listagem-resposta 2.110A
SQL> CONNECT PROD/PROD
Conectado.
SQL> CREATE SYNONYM DFUNC FOR DESENV.FUNC;
2.111) Ainda com a conexo PROD. Faca um select (join) entre sua tabela FUNC e a tabela FUNC do user DESENV,
listando todos os funcionrios (seus) que tenham ou no correspondncia na tabela do outro user. Inverta o teste.
O resultado o mesmo?
Listagem-resposta 2.111A
SQL> CREATE TABLE FUNC
2
AS SELECT * FROM DFUNC
3
WHERE MOD(CD_MAT,4) = 0;
Tabela criada.
SQL> UPDATE FUNC
SET CD_MAT = CD_MAT + 20;
15 linhas atualizadas.
SQL> COMMIT;
Validao completa.
SQL> SELECT DFUNC.CD_MAT DMAT, DFUNC.NM_FUNC DNOME,
2
FUNC.CD_MAT FMAT, FUNC.NM_FUNC FNOME
3
FROM DFUNC, FUNC
4
WHERE DFUNC.CD_MAT (+) = FUNC.CD_MAT;
Na Listagem-resposta 2.111, criamos uma tabela Func baseada na tabela do usurio Desenv. Quando usamos o
sinal de mais (+) na chave da tabela Dfunc (Func do usurio Desenv), obtemos todas as linhas de Func do usurio
Prod mesmo que no tenham correspondncia com as linhas de Dfunc. Quando colocamos o sinal de mais (+) na
chave da tabela Func (do usurio Prod), obtemos todas as linhas de Dfunc do usurio Desenv mesmo que no
tenham correspondncia com as linhas de Func. Esta a regra do Outer Join.
2.112) Agora com a conexo DESENV, autorize a atualizao da tabela Depto pelo user PROD.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
247
CAPTULO 3 PL/SQL
Captulo 3
PL/SQL
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
249
METODOLOGIA
Apresentao inicial da linguagem PL/SQL com anlise de suas vantagens.
INTRODUO
A PL/SQL uma linguagem procedural da Oracle que estende a SQL com comandos que permitem a criao de
procedimentos de programao.
Com ela, podemos usar comandos de SQL DML para manipular os dados da base de dados Oracle e estabelecer
fluxos de controle para processar estes dados.
A linguagem permite a declarao de constantes, variveis, subprogramas (procedures e funes), que favorecem a
estruturao de cdigo, e possui mecanismos para controle de erros de execuo. Incorpora os novos conceitos de
objeto, encapsulamento e, ainda, permite a interface com rotinas escritas em outras linguagens.
ESTRUTURA
A PL/SQL estruturada em blocos. Cada bloco pode conter outros blocos. Em cada um desses blocos, podemos
declarar variveis que deixam de existir quando o bloco termina.
A Sintaxe 3.01 apresenta a estrutura de um bloco PL/SQL, que composto de trs partes:
Uma parte de tratamento de erros, que permite que tenhamos acesso ao erro ocorrido e determinao de uma
ao de correo. Nessa parte, tambm podemos declarar outros blocos subordinados.
MODULARIDADE
Modularidade um conceito que determina a diviso do programa em mdulos com aes bem definidas, que
visam a facilitar o entendimento e a manuteno. Um problema complexo poderia ser subdividido em problemas
menos complexos que, por sua vez, poderiam ser novamente subdivididos at que obtivssemos problemas simples
com solues de fcil implementao.
CAPTULO 3 PL/SQL
A PL/SQL, por possuir uma estrutura de blocos, favorece a modularidade. Alm de blocos annimos, temos a
possibilidade de criar procedures e funes armazenadas na base de dados e compartilhadas por outras aplicaes,
ou packages que permitem que grupemos procedures, funes e variveis relacionadas.
ARQUITETURA
A PL/SQL no um produto independente; podemos consider-la um mdulo executor de blocos e subprogramas.
Esse mdulo pode ser instalado no Oracle Server e nas ferramentas de desenvolvimento da Oracle (Forms Builder,
Report Builder, etc.). Estes dois ambientes so independentes e podem conter at mesmo verses diferentes da PL/SQL.
Esse mdulo, no entanto, trabalha da mesma forma: ele capaz de tratar os comandos de PL/SQL, mas no os
comandos de SQL, que devem ser resolvidos por mecanismos internos do Oracle Server.
Em ferramentas que possuem esse mdulo embutido, a ferramenta passa para seu mdulo executor local o bloco de
PL/SQL que pode ser processado no prprio ambiente, com a exceo dos comandos de SQL encontrados. Grande
parte do trabalho realizada localmente, sem necessidade de envio de informaes para o ambiente servidor.
Em ferramentas que no tm esse mdulo embutido, tais como SQL*Plus e Enterprise Manager, torna-se necessrio o
envio de todo o bloco para o servidor, para que este acione o seu mdulo executor local e processe o bloco de PL/SQL.
VANTAGENS DA PL/SQL
A PL/SQL oferece as seguintes vantagens:
PERFORMANCE
A utilizao da PL/SQL pode reduzir o trfego na rede pelo envio de um bloco contendo diversos comandos de SQL
grupados em blocos para o Oracle. Isto possvel em um Oracle Precompiler ou OCI (Oracle Call Interface).
A PL/SQL tambm adiciona performance s ferramentas que possuem um mdulo executor local, pois no necessitam
enviar comandos de PL/SQL para serem processados pelo servidor, sendo enviados apenas os comandos de SQL.
Adicionalmente, a criao de programas armazenados no banco de dados (stored subprogram) pode reduzir no s
o trfego na rede como tambm a programao quando estabelecemos aes que podem ser compartilhadas em
diversas aplicaes.
PORTABILIDADE
Aplicaes escritas em PL/SQL so portveis para qualquer sistema operacional e plataforma nos quais o Oracle
execute. No h necessidade de customizao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
251
PRODUTIVIDADE
O aprendizado da PL/SQL pode ser aproveitado no desenvolvimento de aplicaes batch, online, relatrios, etc.
No desenvolvimento de um programa utilizando uma ferramenta tal como Forms Builder ou Report Builder, j
estaremos familiarizados com as construes da lgica de programao, pois trata-se da mesma PL/SQL usada para
desenvolvimento das aplicaes em batch.
METODOLOGIA
Apresentao e descrio do formato bsico de um programa PL/SQL com suas caractersticas sintticas.
IDENTIFICADORES
Um identificador consiste em uma letra seguida de outras letras, nmeros, $ (dlar), _ (sublinhado) e # (smbolo
numrico). Possui um limite mximo de 30 caracteres.
As letras podem ser maisculas ou minsculas indiscriminadamente, pois a linguagem no sensvel forma.
Opcionalmente, os identificadores podem ser declarados (e usados) entre aspas. Com essa sintaxe, podemos declarar
variveis com outros caracteres alm daqueles estabelecidos no incio do texto (exceto aspas). O tamanho continua limitado a 30 caracteres (excluindo-se as aspas).
CAPTULO 3 PL/SQL
No exemplo da Listagem 3.01, observamos que, quando declaramos uma varivel entre aspas, seu uso passa a ser sensvel
forma de escrever, ou seja, ficamos limitados forma como declaramos a varivel em relao s maisculas e minsculas.
PALAVRAS RESERVADAS
Alguns identificadores possuem um significado especial em PL/SQL e no devem ser utilizados na declarao de variveis.
Na Listagem 3.02, podemos observar que o uso de um identificador com o nome de END causou vrios erros de
compilao. A utilizao de END como parte do nome de identificadores no causa maiores prejuzos.
Alternativamente, podemos declarar palavras reservadas como identificadores, desde que seu nome seja posto
entre aspas. Essa forma de utilizao das aspas no encorajada pela Oracle.
DECLARE
END
VARCHAR2(10);
END_CASA
VARCHAR2(20);
BEGIN
END
:= 'RUA A';
END_CASA := 'RUA B S/N.';
END;
/
LITERAIS
Corresponde representao explcita de um nmero, caracter, string ou boleano.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
253
NMERO
Podemos usar dois tipos de literais numricos: inteiros e reais. Podemos, ainda, represent-los usando notao cientfica.
CARACTER
Um literal caracter corresponde a um nico caracter apresentado entre aspas simples (apstrofos). Nesse caso PL/
SQL sensvel forma, isto , A e a so diferentes.
Como exemplo de literais caracteres, temos: $, @, S, 8, (, s.
STRING
Literais strings so uma seqncia de zero ou mais caracteres apresentados entre aspas simples (apstrofes).
Como exemplo de literais string, temos: abc,
abc
BOLEANO
Literais boleanos so os valores TRUE, FALSE e a indicao de ausncia de valor NULL.
COMENTRIOS
Um comentrio em PL/SQL pode ser informado de duas formas:
DECLARE
VALOR
VARCHAR2(10);
END_CASA
VARCHAR2(20);
BEGIN
VALOR
:= -- A atribuio ser feita na outra linha
'RUA A';
END_CASA := /* a atribuio vir a seguir */ 'RUA B S/N';
END;
/
FIM DE LINHA
A indicao de fim de linha de comando em PL/SQL feita com um ponto-e-vrgula (;). Observe que o
comportamento do SQL*Plus mudar quando encontrar o primeiro comando de PL/SQL, pois no aguardar mais
CAPTULO 3 PL/SQL
o ponto-e-vrgula (;) para indicao de fim de comando. Para concluirmos a digitao de um programa, deveremos
utilizar a barra (/) para encerrar e executar, ou o ponto (.) para encerrar sem executar.
METODOLOGIA
Apresentao dos tipos de dados vlidos para as variveis declaradas em PL/SQL, subdivididos em grupos (Escalares, Compostos, Reference e Lob).
TCNICA
Exemplificao dos valores armazenveis.
ESCALARES
So um conjunto de tipos de dados predefinidos e que no possuem componentes internos (no so subdivididos).
BINARY_INTEGER
Tipo de dado numrico para armazenamento de inteiros vlidos no seguinte intervalo de valores: de -231 +1 (2147483647) e 231 -1 (2147483647).
Um Binary_Integer possui um conjunto de subtipos (derivado do tipo bsico Binary_Integer):
DECLARE
WNATURAL
WNATURAL_N
WPOSITIVE
WPOSITIVE_N
WSIGNTYPE
BEGIN
WNATURAL
WPOSITIVE
WSIGNTYPE
END;
/
NATURAL;
NATURALN := 0;
POSITIVE;
POSITIVEN := 1;
SIGNTYPE;
:= 0;
:= 1;
:= -1;
No exemplo da Listagem 3.05, a declarao das variveis de tipo NaturalN e PositiveN necessitou de um valor inicial
(:=), uma vez que no admite NULL, e toda varivel de PL/SQL sem valor inicial definido est implicitamente NULL.
NUMBER
Tipo de dado numrico para armazenamento de valores fixos ou em ponto flutuante com preciso de at 38
dgitos e magnitude de 1.0E-130 a 9.99E125.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
255
VARIABLE P1 NUMBER
VARIABLE P2 NUMBER
VARIABLE P3 NUMBER
DECLARE
WNUM1
NUMBER;
WNUM2
NUMBER(38, -4);
WNUM3
NUMBER(38, 127);
BEGIN
WNUM1 := 9.99E125;
WNUM2 := 38925;
WNUM3 := 123456789987654321.0E-130;
:P1
:= WNUM1;
:P2
:= WNUM2;
:P3
:= WNUM3;
END;
/
Na Listagem 3.06, declaramos trs variveis no SQL*Plus para recebermos o resultado das atribuies feitas no programa.
O comando Print (de SQL*Plus) nos mostra o resultado. A varivel wnum1 no teve seu valor alterado, pois a
declaramos sem qualquer restrio quanto preciso ou escala. J a varivel wnum2, por possuir uma escala
negativa, causou o arredondamento da parte inteira do nmero que passou de 38.925 para 40.000. A varivel
wnum3 perde os trs ltimos nmeros informados, pois a escala 127 e o valor multiplicado por 10-130. Observe
o resultado do exemplo da Listagem 3.07.
DECLARE
WNUM1
NUMBER := 1.23456789987654E-113;
WNUM3
NUMBER(38,127);
BEGIN
WNUM3
:= 123456789987654321.0E-130;
IF WNUM3 > WNUM1 THEN
:P1 := 3;
ELSIF WNUM3 = WNUM1 THEN
:P1 := 0;
ELSE
:P1 := 1;
END IF;
END;
/
CAPTULO 3 PL/SQL
O tipo Number tambm possui um conjunto de subtipos (derivados do tipo bsico Number):
Decimal, Dec e Numeric armazenamento em ponto fixo com uma preciso mxima de 38 dgitos decimais.
Double Precision, Float armazenamento em ponto flutuante com uma preciso mxima de 126 dgitos binrios,
o que equivale a 38 dgitos decimais. Para efetuarmos a converso de preciso binria para preciso decimal,
devemos multiplicar a preciso binria por 0.30103 e para realizar a operao inversa devemos multiplicar a
preciso decimal por 3.32193.
Real armazenamento em ponto flutuante com uma preciso mxima de 63 dgitos binrios, o que equivale a
18 dgitos decimais.
Integer, Int e Smallint armazenamento de inteiros com uma preciso mxima de 38 dgitos.
PLS_INTEGER
Tipo de dado numrico para armazenamento de inteiros vlidos no seguinte intervalo de valores: de -231 + 1 (2.147.483.647) e 231 -1 (2.147.483.647).
similar ao tipo Binary_Integer, porm mais rpido para efetuar clculos que um Binary_Integer ou um Number,
pois utiliza machine arithmetic, enquanto os demais usam library arithmetic.
Possui uma outra diferena em relao ao Binary_Integer no que se refere deteco de Overflow. Quando efetuamos
um clculo usando variveis Pls_Integer e o valor ultrapassa a capacidade mxima da varivel, ocorre um erro de
Overflow mesmo que a rea receptora tenha capacidade de armazenamento (seja um Number, por exemplo). J
com Binary_Integer no ocorrer qualquer erro se atribuirmos o resultado a um Number.
A recomendao da Oracle que passemos a utilizar variveis do tipo Pls_Integer nas novas aplicaes para que
possamos obter ganhos de performance.
CHAR
Tipo de dado alfanumrico de tamanho fixo com comprimento de at 32.767 bytes. Podemos especificar o tamanho
mximo na declarao de uma varivel com esse tipo. Caso isso no seja especificado, o comprimento default de 1 byte.
O comprimento especificado em bytes e no em caracteres. Isso importante quando armazenamos valores multibyte.
O conjunto de valores vlidos para armazenamento depende do charset do banco de dados.
A definio de uma coluna do tipo Char no banco de dados est limitada a 2.000 bytes.
O tipo Char tem um nico subtipo Character que possui as mesmas caractersticas de seu tipo bsico.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
257
Na Listagem 3.09, observamos que a varivel completada com brancos direita at atingir o comprimento
especificado pelo tipo.
VARCHAR2
Tipo de dado alfanumrico de tamanho varivel com comprimento de at 32.767 bytes. A especificao de tamanho
obrigatria para uma varivel declarada com esse tipo.
O comprimento especificado em bytes e no em caracteres. Isso importante quando armazenamos valores multibyte.
O conjunto de valores vlidos para armazenamento depende do charset do banco de dados.
A definio de uma coluna do tipo Varchar2 no banco de dados est limitada a 4.000 bytes.
O tipo Varchar2 possui os seguintes subtipos:
VARCHAR2(32767);
VARCHAR(100);
:= 'ABC';
:= WVARCHAR2;
:= '*'||WVARCHAR||'*';
SQL> PRINT P1
P1
------------*ABC*
Observe que, neste caso, somente armazenado para a varivel o que realmente foi atribudo.
LONG
Tipo de dado alfanumrico de tamanho varivel com comprimento de at 32.767 bytes. Podemos especificar o
tamanho mximo na declarao de uma varivel com esse tipo.
Uma coluna Long no banco de dados armazena at 2 GB (2.147.483.647 bytes).
Podemos fazer referncia a colunas Long em comandos de DML Insert, Update e muitos comandos Select, mas no
em expresses, chamadas de funes SQL, ou em certas clusulas, tais como Where, Group By e Connect By.
LONG(32767);
CAPTULO 3 PL/SQL
3
4
5
6
7
BEGIN
WLONG
:P1
END;
/
:= 'ABC';
:= '*'||WLONG||'*';
RAW
Tipo de dado binrio de tamanho varivel com comprimento de at 32.767. A especificao de tamanho na
declarao de uma varivel com esse tipo obrigatria. So semelhantes a colunas Varchar2, porm a PL/SQL no
interpreta seu contedo. O SQL*Net8 no realiza converso entre charsets quando transmitimos dados Raw de um
sistema para outro.
Uma coluna Raw no banco de dados armazena at 2.000 bytes.
LONG RAW
Tipo de dado binrio de tamanho varivel com comprimento de at 32.767. A especificao de tamanho na
declarao de uma varivel com este tipo obrigatria. So semelhantes a colunas Long, porm a PL/SQL no
interpreta seu contedo.
Uma coluna Long Raw no banco de dados armazena at 2 GB (2.147.483.647).
ROWID
Para armazenamento de valores Rowid do banco de dados. Cada tabela criada no banco de dados possui uma
pseudocoluna Rowid que armazena valores hexadecimais que correspondem ao endereo de cada linha (row).
A partir do Oracle8, os Rowids foram estendidos para suportar particionamento de tabelas e ndices. Desta forma,
foi adicionado ao valor j existente na release 7.3 um data object number, que identifica o segmento. Objetos
criados no mesmo segmento, tais como as tabelas criadas em um cluster, possuem o mesmo data object number.
ROWID
-----------------AAAH3bAAIAAAAAyAAA
AAAH3bAAIAAAAAyAAB
AAAH3bAAIAAAAAyAAC
AAAH3bAAIAAAAAyAAD
AAAH3bAAIAAAAAyAAE
AAAH3bAAIAAAAAyAAF
AAAH3bAAIAAAAAyAAG
AAAH3bAAIAAAAAyAAH
AAAH3bAAIAAAAAyAAI
9 linhas selecionadas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
259
UROWID
Armazena um Rowid lgico. Usado para captura do Rowid (lgico) de tabelas Index Organized. Veja no Captulo 2.
NCHAR
Tipo de dado alfanumrico de tamanho fixo com comprimento de at 32.767 bytes. Podemos especificar o tamanho
mximo na declarao de uma varivel com este tipo. Caso isso no seja especificado, o comprimento default de 1 byte.
O comprimento especificado em bytes e no em caracteres. Isto importante quando armazenamos valores multibyte.
O conjunto de valores vlidos para armazenamento depende do national charset (criado na verso 8 do Oracle e
que permite o armazenamento de valores simultaneamente em dois charsets diferentes) definido para o banco de
dados. As colunas alfanumricas Nchar e Nvarchar2 obedecem ao national charset e as colunas Char, Varchar2 e
Long, ao database charset.
A definio de uma coluna do tipo Nchar no banco de dados est limitada a 2.000 bytes.
A definio de uma coluna do tipo Nchar no banco de dados est limitada a 2.000 bytes. Podemos intercambiar
valores entre colunas Nchar e Char, porm pode haver perda de informao se o charset da coluna Char no puder
representar todo o contedo da coluna Nchar (aparecero caracteres com ?).
NVARCHAR2
Tipo de dado alfanumrico de tamanho varivel com comprimento de at 32.767 bytes. A especificao de tamanho
obrigatria para uma varivel declarada com este tipo.
O comprimento especificado em bytes e no em caracteres. Isso importante quando armazenamos valores
multi-byte.
O conjunto de valores vlidos para armazenamento depende do national charset (criado na verso 8 do Oracle e
que permite o armazenamento de valores simultaneamente em dois charsets diferentes) definido para o banco de
dados. As colunas alfanumricas Nchar e Nvarchar2 obedecem ao national charset e as colunas Char, Varchar2 e
Long, ao database charset.
A definio de uma coluna do tipo Nvarchar2 no banco de dados est limitada a 4.000 bytes.
BOOLEAN
um tipo de dado para variveis (no podem ser definidas como colunas em uma base de dados). Armazena
valores lgicos True e False e a ausncia de valor Null. No possui tamanho e nem qualquer tipo de parmetro.
DATE
Tipo de dado para armazenamento de valores de data e hora. Os valores vlidos variam de 01 de janeiro de 4712
A.C. at 31 de dezembro de 9999 D.C.
Na definio de uma varivel de tipo data, no especificamos comprimento.
CAPTULO 3 PL/SQL
Podemos operar com variveis tipo data (da mesma forma que com colunas Date) adicionando ou subtraindo
valores inteiros, usando as funes de SQL para data e subtraindo duas datas para obter o intervalo de dias.
Quando associamos uma data a uma varivel alfanumrica, ocorre a converso automtica de tipo, da mesma
forma que ocorre quando associamos uma varivel alfanumrica a uma varivel de data. O layout default para a
converso depende do valor de Nls_Date_Format em vigor para a sesso.
VARCHAR2(20);
VARCHAR2(20) := '05/02/87';
DATE;
DATE;
TO_DATE('01011987', 'DDMMYYYY');
WDATE;
WVARCHAR2;
WVARCHAR||' - '||TO_CHAR(WDATE2, 'DDMMYYYY');
SQL> PRINT P1
P1
------------------01/01/87 - 05021987
Na Listagem 3.13, percebemos que o formato default de data para a sesso era dd/mm/rr, uma vez que a atribuio
de uma varivel Varchar2 a uma varivel Date foi interpretada corretamente.
TIMESTAMP
Extenso ao tipo Date. Ano, ms e dia assim com hora, minuto, segundo e frao de segundo. Podemos indicar o
nmero de dgitos da parte fracionria do segundo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
261
Na Listagem 3.14 podemos observar que o padro de apresentao para valores de timestamp j compreende data,
hora, minuto, segundo e, para alguns, a zona de tempo. A varivel Day To Second armazena um valor que pode
conter dia (no data), hora, minuto, segundo e frao. J a varivel do tipo Year To Month armazena anos e meses.
LOBS
So um conjunto de tipos de dados predefinidos e que armazenam valores chamados locators, os quais especificam
a localizao dos lobs (large objects) armazenados na linha ou fora dela.
Armazenam valores com comprimento de at 4 GB. Permitem o acesso randmico a trechos do dado.
So diferentes dos tipos Long e Long Raw nos seguintes aspectos:
BLOB
O tipo Blob tem a capacidade de armazenar grandes valores binrios. O tamanho mximo no pode exceder 4 GB.
O armazenamento da informao pode ser feito na prpria linha ou em outro espao especfico.
CLOB
O tipo Clob tem a capacidade de armazenar grandes volumes de dados alfanumricos single-byte. O tamanho mximo
no pode exceder 4 GB. O armazenamento da informao pode ser feito na prpria linha ou em outro espao especfico.
NCLOB
O tipo Nclob tem a capacidade de armazenar grandes volumes de dados alfanumricos single-byte ou multibyte do
tipo Nchar. O tamanho mximo no pode exceder 4 GB. O armazenamento da informao pode ser feito na
prpria linha ou em outro espao especfico.
CAPTULO 3 PL/SQL
BFILE
O tipo Bfile tem a capacidade de armazenar grandes volumes de dados binrios fora do banco de dados. O locator de
um Bfile inclui um diretrio que especifica o caminho completo do arquivo no servidor. O arquivo endereado por
um Bfile fica fora do banco de dados. No banco de dados, armazenamos apenas um locator (endereo) para o arquivo.
Bfiles so read-only. No podemos modific-los. O Oracle no modifica o arquivo fsico associado com o locator. O
locator, naturalmente, pode ser modificado. O nmero mximo de Bfiles abertos determinado pelo parmetro de
inicializao do banco de dados Session_Max_Open_Files.
Bfiles no participam de transaes. A integridade de responsabilidade do sistema operacional do ambiente
servidor. O tamanho do arquivo no pode exceder 4 GB.
O DBA deve garantir que o arquivo exista e que o Oracle tenha permisso para acesso de leitura no diretrio especificado.
COMPOSTOS
So aqueles tipos que possuem componentes internos que podem ser manuseados individualmente.
Nesse grupo, se encontram os tipos definidos pelo usurio: Table, Record e Varray. Sero vistos em tpicos especficos.
REFERENCE
So aqueles tipos que armazenam valores chamados ponteiros, que apontam para outros itens do programa ou do
banco de dados.
Fazem parte deste grupo os tipos Ref Cursor e Ref <object>, que tambm sero vistos em tpicos especficos.
DECLARE
SUBTYPE DATA
IS DATE NOT NULL;
SUBTYPE TEXTO
IS VARCHAR2;
SUBTYPE CODIGO IS NUMBER;
DT_HOJE
DATA := SYSDATE;
DESCRICAO
TEXTO(100);
CD_MAT
CODIGO(5);
BEGIN
DT_HOJE
:= SYSDATE;
DESCRICAO := 'TESTE DE SUBTIPO';
CD_MAT
:= 12345;
:P1
:= DESCRICAO||'-'||CD_MAT||'-'||DT_HOJE;
END;
/
Podemos definir subtipos de um tipo bsico e, posteriormente, uma varivel com aquele tipo. As restries
estabelecidas para o subtipo devem ser respeitadas pelo item (veja Listagem 3.16).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
263
CONVERSO IMPLCITA
Quando atribumos uma varivel de um determinado tipo a uma outra varivel de outro tipo, ocorre uma converso
implcita de tipo de dado.
A converso implcita possvel em PL/SQL, mas no recomendada, porque pode dificultar a performance e,
ainda, sofrer modificaes de uma verso para outra do software.
A tabela a seguir indica o que possvel converter:
Tabela 3.01 Converso Implcita de Tipo de Dado
Tipo
B_Integer
Blob
B_Integer
Char
CLOB
Date
Long
Number
P_Integer
Blob
Char
Urowid
Varchar2
S
S
S
Clob
Date
Long
P_Integer
Urowid
S
S
S
S
S
S
Raw
Number
Varchar2
Raw
S
S
Devemos tomar cuidado adicional com as converses implcitas, pois o PL/SQL utiliza as funes de SQL, porm
com os parmetros de formato defaults. Assim, a execuo de uma rotina em um servidor pode produzir um
resultado, enquanto em outro poder produzir outro em funo de parmetros de ambiente (Nls, por exemplo).
DATE := SYSDATE;
VARCHAR2(100) := '123';
CAPTULO 3 PL/SQL
4
5
6
7
8
9
10
CD_MAT
NUMBER(5)
:= 0;
BEGIN
CD_MAT
:= DESCRICAO;
DESCRICAO := DT_HOJE;
:P1
:= DESCRICAO||'-'||CD_MAT||'-'||DT_HOJE;
END;
/
Na Listagem 3.17, as atribuies no resultaram em erros, pois os valores eram compatveis. Qual o resultado
obtido se a varivel Descrio fosse inicializada com o valor abc em vez de 123?
METODOLOGIA
Descrio da sintaxe necessria declarao de elementos da PL/SQL.
TCNICA
Apresentao de programas simples que contemplem declaraes diferenciadas.
INTRODUO
A parte declarativa de um bloco de PL/SQL precede a parte executiva e deve conter todas as variveis necessrias
execuo do bloco. A PL/SQL no declara, implicitamente, variveis como ocorre em outras linguagens.
VARIVEIS E CONSTANTES
Podemos declarar variveis e constantes na parte declarativa de qualquer bloco, subprograma ou pacote.
A Sintaxe 3.02 permite a declarao de variveis e constantes. Observe que uma constante, obrigatoriamente, deve
ter um valor inicial, e no entanto, seu valor no poder ser alterado ao longo do programa.
O valor inicial poder ser um fixo ou uma expresso, inclusive utilizando funes.
CONSTANT NUMBER(1)
CONSTANT NUMBER(1)
NUMBER(4)
VARCHAR2(100);
DATE NOT NULL
DEFAULT 0;
:= 0;
:= 0;
:= SYSDATE;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
265
BEGIN
V_COD := ZERO;
END;
/
Na Listagem 3.18, declaramos duas constantes informando imediatamente um valor inicial. As variveis podem receber
ou no valor inicial. Caso a declarao da varivel receba a clusula Not Null, a atribuio de valor inicial se torna obrigatria.
Quando no informamos valor inicial para uma varivel, seu valor considerado desconhecido, ou seja, Null.
%TYPE
O atributo %Type copia o tipo de dado de uma varivel ou coluna do banco de dados.
Podemos, desta forma, declarar outra varivel baseada na definio de uma coluna do banco de dados ou baseada
na definio de outra varivel.
Isso particularmente usado quando declaramos variveis que venham a receber informaes de colunas do
banco de dados.
A utilizao de %Type favorece a independncia de dados, uma vez que no precisamos saber exatamente o tipo de
dado da varivel a ser declarada e, caso haja modificaes no objeto original, a modificao da varivel Cpia
feita automaticamente.
0;
SYSDATE;
1234;
SYSDATE;
Observe que a varivel wdata se baseou na varivel v_data, cuja clusula Not Null tambm foi copiada (esta a causa
do erro). J a varivel wdep, que baseada na coluna cd_depto da tabela Depto, no tem a obrigatoriedade de Not
Null, apesar de esta restrio estar presente na coluna do banco de dados.
Conclumos, ento, que, quando a varivel est baseada em uma coluna do banco de dados, so copiados apenas
seu tipo e tamanho, enquanto a restrio existente tambm copiada quando a varivel original local.
ESCOPO E VISIBILIDADE
O escopo de uma varivel a regio (bloco, subprograma ou pacote) onde a referncia a ela vlida. Dentro de um
mesmo escopo, todas as variveis devem ter nomes nicos.
CAPTULO 3 PL/SQL
Uma varivel declarada em um bloco visvel nesse e em todos os blocos subordinados a ele. Se uma varivel
redefinida em um sub-bloco, ambas so acessveis. No sub-bloco, porm, qualquer referncia no qualificada far
acesso varivel de nvel mais interno.
Uma varivel declarada em um bloco deixa de existir quando o bloco termina.
Na Listagem 3.20, pudemos comprovar que no bloco interno, por default, a referncia sempre varivel local. J
na Listagem 3.21 a seguir, fizemos referncia varivel wtotal no bloco principal e recebemos um erro indicando
que neste bloco no havia sido declarada nenhuma varivel wtotal. Esta varivel deixou de existir quando passamos
pelo End do sub-bloco.
QUALIFICAO
Para controlarmos a visibilidade e termos acesso s variveis dos blocos de nvel superior, devemos qualificar
qualquer referncia s variveis externas nos blocos internos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
267
A qualificao pode ser feita com o uso de um Label ou com o nome de um subprograma (ser visto no tpico
referente a subprogramas).
RESTRIES
O PL/SQL no admite referncias a variveis no declaradas, mesmo que elas venham a ser declaradas posteriormente.
Para que utilizemos uma varivel (mesmo sendo na declarao de outra), devemos ter efetuado sua declarao primeiro.
NUMBER := WVAL + 1;
NUMBER := 0;
NUMBER := WVAL + 1;
*
ERRO na linha 2:
ORA-06550: linha 2, coluna
PLS-00320: a declarao do
ORA-06550: linha 2, coluna
PL/SQL: Item ignored
ORA-06550: linha 5, coluna
PLS-00320: a declarao do
ORA-06550: linha 5, coluna
PL/SQL: Statement ignored
30:
tipo desta expresso est incompleta ou incorreta
20:
3:
tipo desta expresso est incompleta ou incorreta
3:
A declarao de variveis deve ser feita de forma unitria. No podemos declarar, de uma vez, diversas variveis
referentes a um mesmo tipo.
DECLARE
A, B, C
NUMBER;
BEGIN
A:= 0;
END;
/
B, C
NUMBER;
na linha 2:
CAPTULO 3 PL/SQL
ORA-06550: linha 2, coluna 4:
PLS-00103: Encontrado o smbolo , quando um dos seguintes smbolos era
esperado:
constant exception <an identifier>
<a double-quoted delimited-identifier> table LONG_ double ref
char time timestamp interval date binary national character
nchar
Na Listagem 3.25 a seguir, fizemos a declarao de trs variveis boleanas. As primeira e segunda formas de atribuio
so ilegais, porque no possvel a converso de valores entre valores numricos e variveis boleanas ou entre valores
alfanumricos e variveis boleanas (veja a tabela de converso apresentada no item Converso Implcita), porm a
terceira forma de atribuio vlida; se a expresso for verdadeira, ser atribudo True varivel, e caso contrrio, False.
METODOLOGIA
Apresentao sinttica dos comandos bsicos da linguagem.
TCNICA
Apresentao de problemas resolvidos utilizando-se estes comandos.
ATRIBUIO
A atribuio de valor a uma varivel feita com a notao :=.
As variveis e constantes so criadas e recebem seu valor inicial cada vez que for iniciado o bloco no qual esto declaradas.
Na ausncia de atribuio de valor inicial, a varivel considerada sem valor ou Null.
muito importante, portanto, que as variveis sejam inicializadas antes do uso.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
269
O resultado do programa apresentado pela Listagem 3.26 foi Null, porque fizemos uma operao incluindo uma
varivel sem valor; desta forma, o resultado torna-se tambm sem valor. Isto ocorrer sempre que fizermos uma
operao incluindo uma varivel sem valor.
IF
O comando IF verifica uma condio, e dependendo do resultado realiza uma ou outra ao. Permite a execuo
condicional de uma determinada ao.
Existem trs sintaxes vlidas de IF em PL/SQL.
Sintaxe 3.03 IF
A Sintaxe 3.03 contm as formas bsicas de um comando IF. Nas trs formas sintticas, observamos a presena do
End If para encerrar o comando. Na terceira forma sinttica (IF..ELSIFEND IF), mais especificamente, apenas um
End If necessrio, independente da quantidade de Elsifs presentes no comando. Devemos considerar que o End
If encerra o IF isolado.
Na Listagem 3.27, declaramos, mais uma vez, uma varivel no ambiente SQL*Plus e a utilizamos dentro do programa
PL/SQL; este tipo de varivel chamado de Bind, pois est declarada no ambiente e no no programa. Usaremos
freqentemente este tipo de varivel para retornar informao para o SQL*Plus.
Listagem 3.27 If
SQL> VARIABLE MSG VARCHAR2(100)
SQL> DECLARE
2
VALOR
NUMBER := &VAL;
3 BEGIN
4
IF VALOR > 0 THEN
5
:MSG := 'Valor maior que zero';
6
ELSIF VALOR = 0 THEN
7
:MSG := 'Valor igual a zero';
8
ELSE
9
:MSG := 'Valor menor que zero';
10
END IF;
11 END;
12 /
Entre o valor para val: -5
antigo
2:
VALOR
NUMBER := &VAL;
novo
2:
VALOR
NUMBER := -5;
Procedimento PL/SQL concludo com sucesso.
SQL> PRINT MSG
MSG
CAPTULO 3 PL/SQL
-------------------Valor menor que zero
A Sintaxe 3.04 complementa a forma bsica do comando IF com a lista de expresses vlidas.
SELECT INTO
Dentro da PL/SQL, o comando Select ganha a clusula Into a fim de obter dados da linha lida para variveis do
programa. Desta forma, poderemos manusear os dados obtidos.
A clusula Into segue imediatamente a lista de variveis da clusula Select e precede a clusula From.
Devemos informar uma rea de recepo capaz de comportar todos os dados lidos; caso contrrio, receberemos
erro na execuo.
O comando Select Into somente faz leitura de uma row. Caso venhamos a selecionar mais de uma row usando este
comando, ocorrer um erro (Too Many Rows) indicando o excesso. A leitura de diversas rows feita com o uso do
Cursor (ser visto mais adiante).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
271
Na Listagem 3.28, fizemos uma leitura e aproveitamos para trazer o Rowid da linha, de tal forma que a atualizao
se processasse de forma mais rpida. O comando Select fez referncia a duas colunas; portanto, na clusula Into,
informamos duas variveis para receber os dados lidos na mesma ordem da seleo.
Nesse Select, tnhamos a certeza da quantidade de linhas retornadas uma vez que a pesquisa foi feita pela PK,
resultando em uma nica linha de retorno.
GOTO
O comando GoTo efetua um desvio incondicional para um Label. O Label deve ser nico dentro do escopo e deve
preceder um comando ou um bloco PL/SQL. Alm de ser usado para desvios, um Label tambm serve como
qualificador de variveis, como foi mostrado no item Qualificao do tpico Declaraes.
Veremos no prximo tpico que a PL/SQL possui diversas estruturas de iterao e que raramente teremos necessidade
de utilizar um comando GoTo.
DECLARE
CONTA
NUMBER := 0;
BEGIN
<<INICIO>>
CONTA := CONTA + 1;
IF CONTA < 5 THEN
GOTO INICIO;
END IF;
END;
/
Na Listagem 3.29, aparece um Label (incio) que deve ser codificado entre << e >>. No comando GoTo, os smbolos
(<< e >>) no devem ser usados.
RESTRIES
Existem algumas situaes em que o comando GoTo no pode ser usado:
CAPTULO 3 PL/SQL
Desvio para dentro de um IF ou Loop (GoTo Proximo_IF).
Desvio para dentro de um sub-bloco (GoTo Subbloco).
Desvio para fora de um subprograma (GoTo Para_Fora).
Desvio para dentro de um bloco a partir da rea de exceo (GoTo Inicio).
DECLARE
PROCEDURE DESVIO IS
BEGIN
GOTO PARA_FORA;
END;
BEGIN
<<INICIO>>
IF TRUE THEN
GOTO PROXIMO_IF;
END IF;
IF FALSE THEN
<<PROXIMO_IF>>
GOTO SUBBLOCO;
END IF;
<<PARA_FORA>>
BEGIN
<<SUBBLOCO>>
NULL;
END;
EXCEPTION
WHEN OTHERS THEN
GOTO INICIO;
END;
/
GOTO PROXIMO_IF;
*
ERRO na linha 9:
ORA-06550: linha 9, coluna 7:
PLS-00375: instruo GOTO invlida; este GOTO no pode ser ramificado para o
label 'PROXIMO_IF'
ORA-06550: linha 11, coluna 13:
PL/SQL: Statement ignored
ORA-06550: linha 4, coluna 5:
PLS-00375: instruo GOTO invlida; este GOTO no pode ser ramificado para o
label 'PARA_FORA'
ORA-06550: linha 6, coluna 1:
PL/SQL: Statement ignored
ORA-06550: linha 22, coluna 5:
PLS-00375: instruo GOTO invlida; este GOTO no pode ser ramificado para o
label 'INICIO'
ORA-06550: linha 22, coluna 5:
PL/SQL: Statement ignored
NULL
Este comando, explicitamente, indica que no h ao a ser feita. Serve para compor certas situaes em que um
comando exigido, mas nenhuma ao , realmente, necessria.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
273
GOTO INICIO;
<<FIM>>
NULL;
END;
/
J vimos anteriormente que todo Label deve preceder um comando ou um bloco de PL/SQL. No exemplo da
Listagem 3.30, a presena do comando Null teve a finalidade de validar o posicionamento do Label Fim. Caso o
comando no fosse adicionado, no poderamos programar o Fim antes de End (no um comando), que , na
verdade, fim de bloco.
FUNES
Em PL/SQL, podemos utilizar quase todas as funes de SQL diretamente nos comandos de atribuio ou em IFs.
Alfanumricas que retornam Valores Numricos Ascii, Instr, Instrb, Length, Lengthb, Nlssort.
Datas Sysdate, Add_Months, Curret_Date, Curret_Timestamp, DBTimezone, Extract, From_Tz, Last_Day,
LocalTimestamp, Months_Between, New_Time, Next_Day, NumToDsInterval, NumToYmInterval, Round,
SessionTimeZone, Sysdate, SysTimestamp, To_DsInterval, To_Timestamp, To_Timestamp_Ltz, To_Timestamp_Tz,
To_YmInterval, Tz_Offset, Trunc.
Converso CharToRowid, Convert, HexToRaw, RawToHex, RowidToChar, To_Blob, To_Char, To_Clob, To_Date,
To_Multi_Byte, To_Nclob, To_Number, To_Single_Byte, Translate Using.
SQLCODE
Retorna o cdigo associado ao ltimo erro ocorrido. S pode ser usada em PL/SQL (no disponvel em SQL).
Quando ocorre um erro na execuo de um programa PL/SQL, podemos ter acesso ao cdigo para adotarmos as
aes apropriadas. Isto se d atravs da clusula Exception.
CAPTULO 3 PL/SQL
6
7
8
9
10
11
Na Listagem 3.32, o comando Select executado no retornou nenhuma linha; desta forma, recebemos o erro
NotFound, que corresponde ao cdigo 100 (SqlCode).
Quando ocorre um erro na execuo de um programa PL/SQL, podemos ter acesso ao cdigo para adotarmos as
aes apropriadas. Isso se d atravs da clusula Exception, que ser tratada em detalhes em outro tpico.
A funo SqlCode obtm o cdigo ocorrido, o que permite o acesso mensagem de erro.
SQLERRM
A funo SqlErrm retorna o texto correspondente ao erro ocorrido. S pode ser usada em PL/SQL (no disponvel em SQL).
Retorna o texto correspondente ao erro ocorrido. Recebe como parmetro o cdigo do erro que desejamos decodificar.
DECLARE
SAL
NUMBER;
BEGIN
SELECT VL_SAL INTO SAL
FROM FUNC
WHERE CD_MAT > 17000;
EXCEPTION
WHEN OTHERS THEN
:MSG := SQLERRM(SQLCODE);
END;
/
O exemplo da Listagem 3.33 o mesmo da anterior, com a diferena de que, alm do cdigo do erro, obtivemos
tambm a mensagem correspondente.
A funo SqlErrm recebe como parmetro o cdigo do erro que desejamos decodificar. O default SqlCode.
CASE
A clusula Case permite a montagem de uma estrutura similar a IF..THEN ELSE. Ao observarmos a Sintaxe 3.05
veremos que existem duas formas sintticas de utilizarmos o comando.
Na primeira forma usamos uma expresso que ser comparada em cada uma das clusulas When, funcionando
como um seletor indicativo dos comandos a serem executados. Caso no venhamos a definir uma clusula Else
e nenhuma das expresses for compatvel com a expresso seletora, o retorno ser Null.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
275
Na Segunda forma no temos uma expresso de comparao; neste caso, cada clusula When conter uma condio
a ser verificada. Cada clusula When executada uma nica vez e em ordem de apresentao. Quando uma condio
satisfeita, os comandos subordinados so executados e as clusulas When subseqentes no so avaliadas. Caso
nenhuma condio seja satisfeita e no tenhamos definido uma clusula Else, ocorrer a exception Case_Not_Found.
Nesta primeira forma a comparao feita pela igualdade. Se valor = 0 ou valor = 1 ou etc.
CAPTULO 3 PL/SQL
-------------------Valor menor que zero
Nesta forma sinttica, podemos definir uma condio diferente para cada clusula When.
EXERCCIOS
Neste conjunto de exerccios, passaremos informaes para os programas usando variveis de substituio e o
retorno da informao ser feito atravs de variveis Bind. Antes de iniciar, para que as tabelas no fiquem
demasiadamente cheias, refaa a base de dados com o script L01_17.
3.01) Observe as declaraes a seguir. Indique quais delas no esto corretas e por qu.
Listagem-resposta 3.01A
DECLARE
ID
X, Y, Z
END
IND_ESTOQUE
99_MES
%TOTAL
TOTAL_DE_PECAS_VENDIDAS_POR_SEMESTRE
BEGIN
NULL;
END;
/
NUMBER(04);
VARCHAR2(10) := ABC;
DATE NOT NULL;
BOOLEAN
:= 1;
DATE;
NUMBER := 21V99;
NUMBER := 0;
3.02) Observe o programa PL/SQL apresentado na Listagem-resposta 3.02A e avalie o escopo das variveis, como se pede.
Listagem-resposta 3.02A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE
PESO
MSG
BEGIN
VARCHAR2(3) := '600';
VARCHAR2(255);
DECLARE
PESO
NUMBER(3) := 1;
MSG
VARCHAR2(255);
LOCAL
VARCHAR2(50) := 'RIO DE JANEIRO';
BEGIN
PESO := PESO + 1;
-MSG := PESO || ' EST ACIMA DO PADRO'; -LOCAL:= 'SO PAULO '|| LOCAL;
-END;
PESO := PESO + 1;
-MSG := PESO || ' EST ACIMA DO PADRO';
-LOCAL:= 'SO PAULO '|| LOCAL;
-END;
/
(A)
(B)
(C)
(D)
(E)
(F)
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
277
CAPTULO 3 PL/SQL
a) o timestamp atual;
b) o nome por extenso da timezone do banco de dados;
c) o ms e o dia em que o exerccio est sendo feito.
3.17) Repita o exerccio anterior usando expresso case .
METODOLOGIA
Apresentao dos comandos capazes de gerar processamento repetitivo e dos artifcios que permitiro a leitura e manipulao de diversas linhas de uma
tabela.
TCNICA
Criao de procedimentos que contemplem os comandos definidos.
CURSOR
As linguagens convencionais, tais como Cobol e PL/1, no esto preparadas para trabalhar com tabelas. Sabemos,
no entanto, que o resultado de uma operao relacional sempre uma tabela composta de zero, uma ou mais rows,
de acordo com o critrio de restrio informado.
A fim de solucionar este problema, foi criado um artifcio chamado cursor, que permitisse s linguagens
convencionais fazerem acesso a uma base de dados relacional.
A PL/SQL utiliza este artifcio para acesso a um conjunto de linhas resultante de uma operao com o banco de dados.
DECLARAO
Na declarao de um cursor, j feita a associao com o comando Select capaz de obter as linhas do banco de dados.
O cursor deve ser criado antes de ser usado, e por isso necessrio que a declarao esteja presente no bloco em que
usaremos o cursor ou em um bloco mais externo.
O tipo do retorno deve representar um registro correspondendo s colunas trazidas pelo comando Select.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
279
DECLARE
CURSOR C1 IS SELECT CD_DEPTO FROM DEPTO;
CURSOR C2 (PDEPTO IN VARCHAR2 := 'A00') IS
SELECT COUNT(*), MAX(VL_SAL)
FROM FUNC
WHERE CD_DEPTO = PDEPTO;
CURSOR C3 (PDEPTO IN VARCHAR2 := 'B01')
RETURN FUNC%ROWTYPE IS
SELECT * FROM FUNC
WHERE CD_DEPTO = PDEPTO
ORDER BY VL_SAL DESC;
BEGIN
NULL;
END;
/
ABERTURA
A abertura de um cursor realizada com o comando Open. Os parmetros devem ser fornecidos a tempo de Open
para que seja possvel a execuo do comando Select.
Os parmetros declarados com valor inicial podem, a tempo de Open, no receber nenhum valor e utilizar os
valores iniciais previamente declarados.
Para a passagem dos parmetros, podemos usar a notao posicional ou a notao nomeada.
A notao nomeada aparece na Listagem 3.37. Quando utilizamos o nome do parmetro e o smbolo =>, podemos
passar os parmetros em qualquer ordem.
CAPTULO 3 PL/SQL
FETCH
Associa os valores da linha atual s variveis do programa e, posteriormente, posiciona o cursor na prxima linha
do conjunto de linhas resultantes da operao de Select.
As variveis devem ser informadas no Fetch na mesma ordem das expresses correspondentes no comando Select.
Para cada expresso, deve haver uma varivel receptora. O tipo de dado da varivel e da expresso deve ser compatvel.
DECLARE
CURSOR C1 IS SELECT CD_DEPTO FROM DEPTO;
CURSOR C2 (PDEPTO IN VARCHAR2 := 'A00') IS
SELECT COUNT(*), MAX(VL_SAL)
FROM FUNC
WHERE CD_DEPTO = PDEPTO;
CURSOR C3 (PDEPTO IN VARCHAR2 := 'B01')
RETURN FUNC%ROWTYPE IS
SELECT * FROM FUNC
WHERE CD_DEPTO = PDEPTO
ORDER BY VL_SAL DESC;
CURSOR C4 (P1 IN VARCHAR2, P2 IN NUMBER) IS
SELECT * FROM FUNC
WHERE CD_DEPTO = P1 AND NR_CARGO = P2;
-VCD_DEPTO DEPTO.CD_DEPTO%TYPE;
VQTD
NUMBER;
VMAX
NUMBER;
BEGIN
OPEN C1;
<<INICIO>>
FETCH C1 INTO VCD_DEPTO;
OPEN C2(VCD_DEPTO);
FETCH C2 INTO VQTD, VMAX;
OPEN C3 (VCD_DEPTO);
OPEN C4 (P2 => 20, P1 => 'A00');
<<LOOP>>
NULL;
END;
/
%ROWTYPE
A fim de facilitar a recepo de informaes das linhas lidas, a PL/SQL implementa o atributo %Rowtype, que gera
uma rea (registro) capaz de armazenar, exatamente, uma linha com o layout da linha de uma tabela do banco de
dados ou com o layout apenas das colunas (ou expresses) referenciadas no Select associado a um cursor.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
281
No exemplo da Listagem 3.39, foram declarados dois registros: um baseado no layout dos dados selecionados pelo
cursor C2 (Rtotal) e outro no layout da linha da tabela Func (Rfunc).
Observe que a referncia s colunas presentes no registro declarado feita com o nome da coluna ou expresso
selecionada precedida do nome da rea (rtotal.count).
Quando o comando Select for composto por expresses, importante que utilizemos alias para as expresses a fim
de termos condies de referenci-las posteriormente.
Na Listagem 3.40, no abrimos o cursor C1 (verbo Open). Neste caso, a rea (Rowtype) est com Null, assim como
todas as variveis de PL/SQL. Como sabemos, qualquer comparao com Null retorna False.
FECHAMENTO
Para fecharmos um cursor, devemos utilizar o verbo Close. Esse verbo libera a rea reservada para a montagem do
conjunto de dados selecionados.
CAPTULO 3 PL/SQL
CURSORES IMPLCITOS
Existem dois tipos de cursores em PL/SQL: um explcito, que acabamos de conhecer e que declarado nos programas
de aplicao, e outro implcito, que declarado implicitamente pelo Oracle.
O Oracle implicitamente abre um cursor para cada comando de SQL que no tenha associado um cursor explcito,
inclusive para Select Into. Podemos referenciar este cursor usando a palavra SQL.
No podemos usar esta referncia para executar os comandos Open, Fetch ou Close, porm podemos utiliz-la
para obter informaes sobre o ltimo comando executado.
Essas informaes, as quais veremos a seguir, esto disponveis tanto para cursores implcitos quanto para cursores
explcitos e so ditas atributos de cursor.
%FOUND
um atributo de cursor que indica se a ltima operao de Fetch foi bem-sucedida (para cursores explcitos) ou se
alguma linha foi afetada pelo ltimo comando Insert, Update ou Delete ou, ainda, se o comando Select Into
retornou uma ou mais linhas (para cursores implcitos).
Antes do primeiro Fetch, o valor do atributo Null para cursores explcitos e tambm Null antes de o comando
(Insert, Update, Delete ou Select Into) ser executado.
%NOTFOUND
um atributo de cursor com lgica inversa ao atributo %Found. %Notfound retornar False se o ltimo comando
Fetch retornar uma linha (para cursores explcitos) ou se o ltimo comando Insert, Update ou Delete no afetar
nenhuma linha ou, ainda, se o ltimo comando Select Into no retornar nenhuma linha (para cursores implcitos).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
283
Antes do primeiro Fetch, o valor do atributo Null para cursores explcitos e tambm Null antes de o comando
(Insert, Update, Delete ou Select Into) ser executado.
%ISOPEN
Permite que se verifique se um cursor est aberto ou no. Para cursores implcitos, o resultado ser sempre False
uma vez que o Oracle fecha o cursor imediatamente aps a operao e antes de a ao retornar ao programa.
%ROWCOUNT
Indica o nmero de linhas j lidas (Fetched) para os cursores explcitos ou o nmero de linhas afetadas por um
comando Insert, Update ou Delete ou, ainda, o nmero de linhas retornadas por um comando Select Into (para
cursores implcitos).
CAPTULO 3 PL/SQL
Listagem 3.44 Atributos de cursor
SQL> DECLARE
2
VCD_DEPTO
VARCHAR2(3) := '&DEPTO';
3
CURSOR C1
IS SELECT * FROM FUNC
4
WHERE CD_DEPTO = VCD_DEPTO;
5
RC1
C1%ROWTYPE;
6 BEGIN
7
:MSG := 'Matrculas = ';
8
OPEN C1;
9
<<LOOP>>
10
FETCH C1 INTO RC1;
11
IF C1%NOTFOUND OR C1%ROWCOUNT > 5 THEN
12
GOTO FIM;
13
END IF;
14
:MSG := :MSG ||' - '||RC1.CD_MAT;
15
GOTO LOOP;
16
<<FIM>>
17
IF C1%ISOPEN THEN
18
CLOSE C1;
19
END IF;
20 END;
21 /
Entre o valor para depto: A00
antigo
2:
VCD_DEPTO
VARCHAR2(3) := '&DEPTO';
novo
2:
VCD_DEPTO
VARCHAR2(3) := 'A00';
Procedimento PL/SQL concludo com sucesso.
SQL> PRINT MSG
MSG
-----------------------------Matrculas = - 10 - 110 - 120
Quando o cursor aberto, o atributo %Rowcount zerado. Antes do primeiro Fetch, o atributo continua com zero.
O valor s incrementado aps o Fetch ter sido efetuado com sucesso.
At que o primeiro comando de DML seja executado, o valor do atributo Null para cursores implcitos.
A clusula Where Current OF indica que ser atualizada a linha atualmente apontada pelo cursor. Para que esta
operao seja legal, devemos utilizar a clusula For Update no comando Select do cursor associado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
285
DECLARE
CURSOR C1
RC1
BEGIN
OPEN C1;
<<LOOP>>
FETCH C1 INTO RC1;
IF C1%FOUND THEN
IF RC1.VL_SAL < 3000 THEN
UPDATE FUNC SET VL_SAL = VL_SAL * 1.3
WHERE CURRENT OF C1;
END IF;
GOTO LOOP;
END IF;
COMMIT;
END;
/
A clusula For Update adicionada ao comando Select indica que todas as linhas escolhidas atravs da condio
presente na clusula Where devem sofrer bloqueio (Lock) contra atualizaes concorrentes. A sintaxe OF (presente
na clusula For Update) indica que a coluna vl_sal ser modificada na clusula Set do comando Update. Poderamos,
alternativamente, ter utilizado apenas For Update sem mencionar qualquer coluna, que o efeito seria o mesmo. A
sintaxe que inclui a palavra OF compatvel com o padro ANSI.
No caso do exemplo da Listagem 3.45, todas as linhas da tabela Func foram bloqueadas e impedidas de ser atualizadas
at que o programa efetue um Commit.
Precisamos garantir que a linha a ser removida esteja bloqueada contra atualizaes concorrentes antes de efetuarmos
o comando Delete. Desta forma, a clusula For Update deve ser usada no comando Select do cursor.
CAPTULO 3 PL/SQL
7
8
9
10
11
12
13
14
15
16
17
<<LOOP>>
FETCH C1 INTO RC1;
IF C1%FOUND THEN
IF RC1.VL_SAL IS NULL THEN
DELETE FROM FUNC WHERE CURRENT OF C1;
END IF;
GOTO LOOP;
END IF;
COMMIT;
END;
/
A clusula For Update adicionada ao comando Select indica que todas as linhas escolhidas atravs da condio
presente na clusula Where devem sofrer bloqueio (Lock) contra atualizaes concorrentes. A sintaxe OF neste
caso no foi usada. Seu uso possvel, da mesma forma que ocorreu no comando Update. Poderamos ter mencionado
qualquer coluna na indicao de bloqueio uma vez que o comando Delete no faz meno a qualquer coluna
especificamente. A sintaxe que inclui a palavra OF compatvel com o padro ANSI.
No caso do exemplo da Listagem 3.46, todas as linhas da tabela Func foram bloqueadas e impedidas de ser atualizadas
at que o programa efetue um Commit.
LOOP
A seqncia de comandos executada um nmero infinito de vezes ou at que seja interrompida por um comando Exit.
EXIT
O comando Exit tem a finalidade de encerrar um Loop (qualquer das formas). Quando o comando Exit executado,
o loop completado incondicionalmente e o controle passa para o prximo comando.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
287
END IF;
END LOOP;
END;
/
O exemplo da Listagem 3.47 usa a forma bsica do comando Exit. Nos prximos exemplos, usaremos sintaxes alternativas.
WHILE
O comando While corresponde a uma outra forma de Loop em que estabelecemos uma condio de interrupo
na prpria sintaxe do comando.
SET LINESIZE 80
DECLARE
CURSOR C1
RC1
BEGIN
OPEN C1;
:MSG := 'Matrculas = ';
FETCH C1 INTO RC1;
WHILE C1%FOUND LOOP
EXIT WHEN C1%ROWCOUNT > 10;
:MSG := :MSG||RC1.CD_MAT||' - ';
FETCH C1 INTO RC1;
END LOOP;
END;
/
No exemplo da Listagem 3.48, o comando While estabelece que o loop deve prosseguir enquanto houver linhas a
serem lidas. J o comando Exit determina que, quando efetuarmos a leitura da dcima primeira linha, o
processamento deve ser interrompido. O comando Exit est, desta forma, associado a uma condio. Somente
quando a condio se tornar verdadeira, o comando Exit acionado.
CAPTULO 3 PL/SQL
FOR LOOP
O comando For Loop determina que a seqncia de comandos seja executada um nmero fixo de vezes. O nmero
de iteraes conhecido (determinado) antes de o Loop ter incio.
Na sintaxe, observamos que deve ser fornecido um valor inferior e um valor superior que correspondero,
respectivamente, ao valor inicial e ao valor final de contador, que incrementado de 1 a cada iterao. Caso a
palavra Reverse seja utilizada na sintaxe, o valor inicial de contador ser o valor superior e a cada iterao o
contador ser decrementado de 1 at atingir o valor inferior.
A varivel Contador implicitamente declarada como varivel local ao Loop e com tipo de dado Integer. No pode
ser utilizada fora da iterao, porque sua declarao se extingue quando o processamento executar o End Loop.
Os valores referentes a valor inferior e valor superior podem ser fornecidos por constantes ou variveis.
BEGIN
<<BLOCO1>>
DECLARE
VEZES
NUMBER := 0;
I
NUMBER := 0;
BEGIN
FOR I IN 1..3 LOOP
BLOCO1.I := I + VEZES;
VEZES := VEZES + 1;
END LOOP;
:MSG := 'O valor de I = '||I;
END;
END;
/
No exemplo da Listagem 3.49, usamos o Label do bloco externo para qualificar a varivel i declarada fora da
iterao. A varivel i interna, utilizada na soma, no precisa de qualificao. A seqncia de comandos realizada
trs vezes, com i sendo declarado com valor inicial igual a 1, incremento de 1 e o valor limite 3.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
289
No exemplo apresentado na Listagem 3.50, utilizamos variveis no lugar de constantes para determinar os valores
inicial e final. A primeira iterao executada quatro vezes, com i variando de 1 a 4.
A segunda iterao no executada, porque o valor inicial de i 3 e o valor final 1, inferior, portanto, ao valor
inicial. Nesta situao, a iterao no realizada.
No exemplo da Listagem 3.51, utilizamos a clusula Reverse para que I adquirisse valor inicial 5 e fosse decrementado
de 1 at atingir 1.
O label foi usado para qualificao do comando Loop e serviu para que a interrupo da iterao se processasse
simultaneamente para os dois Loops. Quando o teste (J > I) resulta em verdadeiro, tanto o Loop interno quanto o
externo so encerrados, passando o controle para o comando presente aps o End do Loop externo (linha 19).
CURSOR LOOP
Este comando similar ao comando For Loop, mas especfico para utilizao com cursores.
CAPTULO 3 PL/SQL
O registro presente na sintaxe declarado implicitamente pelo Oracle (como um registro tipo <cursor>%rowtype)
e tem vida til at o End ser atingido. Esse comando realiza todas as operaes vistas relativas a cursor: quando a
iterao inicia, o cursor aberto e feito Fetch na primeira linha; se a operao (de leitura) for bem-sucedida,
executada a seqncia de comandos presente entre o Loop e o End Loop. Esse processo se repete at que a ltima
linha seja processada. Aps este processamento, o cursor automaticamente fechado.
O cursor pode ser declarado previamente e utilizado no comando, ou pode ser includo o comando Select desejado
no prprio comando For.
DECLARE
CURSOR C1
IS SELECT * FROM FUNC;
VEZES
NUMBER := 0;
BEGIN
FOR RC1 IN C1 LOOP
VEZES := VEZES + 1;
END LOOP;
:MSG := 'VEZES = '||VEZES;
FOR RC1 IN (SELECT * FROM FUNC) LOOP
VEZES := VEZES + 1;
END LOOP;
:MSG := :MSG||' - VEZES = '||VEZES;
END;
/
Nos dois exemplos de iterao da Listagem 3.52, o comando For leu todas as linhas da tabela Func. No primeiro
caso, declaramos explicitamente o cursor c1 e, no segundo, declaramos o cursor dentro do comando For. A segunda
sintaxe perde a possibilidade de utilizarmos os atributos do cursor uma vez que no declaramos um nome de
cursor para utilizar. O cursor implcito SQL no se aplica ao caso.
Este comando permite at a passagem de parmetros caso o comando Select associado ao cursor seja executado em
relao a um valor parametrizado.
EXERCCIOS
Todos os exerccios deste grupo devem ser feitos utilizando-se os atributos %ROWTYPE ou %TYPE.
3.18) Leia os n maiores salrios da tabela de funcionrios e apresente-os em ordem ascendente.
3.19) Crie uma tabela com o comando apresentado abaixo para receber os n maiores salrios da tabela de
funcionrios. O parmetro n deve ser recebido atravs de Accept. Na coluna total deve ser armazenado o somatrio
de todos os salrios lidos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
291
Inclua todos os dados e posteriormente atualize a coluna total com o valor obtido na soma.
3.20) Faa um programa PL/SQL que receba um cdigo de departamento como parmetro e apresente o nome do
gerente do departamento e todos os funcionrios (matrcula e nome) alocados quele departamento.
Utilize cursor com parmetro.
3.21) Crie um bloco de PL/SQL que faa o enquadramento dos funcionrios de acordo com os seguintes critrios:
O piso salarial ser de 1.000,00 para os cargos inferiores a 51. Para os demais, o piso salarial ser de 1.500,00.
Para cada nvel de cargo superior a 55, dever ser acrescido 250 ao salrio.
Para cada nvel de instruo superior a 15, dever ser acrescido 30 ao salrio.
O salrio do funcionrio no poder ser diminudo. Se o funcionrio j receber acima do valor calculado, deve-se
manter o salrio anterior.
Deve-se apresentar, simultaneamente, todos os enquadrados (com o velho e novo salrio) e aqueles no enquadrados
(com o salrio antigo).
3.22) Crie uma tabela com o comando apresentado abaixo para receber a quantidade de funcionrios por
departamento. O cdigo do departamento dever ser convertido (de alfanumrico para numrico).
Utilize Loop e Exit When. Use a funo AscII para a converso do cdigo.
Listagem-resposta 3.22A
SQL> CREATE TABLE RESULTADO
2 (CD_DEPTO
NUMBER,
3
QT_FUNC
NUMBER,
4
VL_SAL
NUMBER,
5
AV_SAL
NUMBER);
Tabela criada.
CAPTULO 3 PL/SQL
METODOLOGIA
Descrio da parte da linguagem capaz de efetuar tratamento de erro.
TCNICA
Anlise das diversas opes disponibilizadas atravs de pequenos programas.
INTRODUO
Cada bloco de PL/SQL possui uma rea especfica para tratamento de erro. Toda vez que ocorre um erro no programa, a
seqncia de execuo interrompida e o controle transferido para esta rea especial do bloco onde o erro foi adquirido.
Os erros, em um programa PL/SQL, so chamados de exceptions. Estas exceptions podem corresponder a erros
predefinidos, como por exemplo No_Data_Found, ou a erros definidos pelo usurio, como por exemplo Salario_Invalido.
Os erros predefinidos so de conhecimento do Oracle e, portanto, quando o erro ocorre, a PL/SQL percebe a
ocorrncia do erro e faz o desvio para a rea de tratamento. J os erros do usurio no so percebidos pela PL/SQL,
a no ser que o programa explicitamente cause o erro.
No exemplo da Listagem 3.53, foi previsto tratamento para dois tipos de erro passveis de ocorrer na seleo de dados da
tabela Func: nenhum funcionrio ser encontrado no departamento especificado ou mais de um funcionrio ser encontrado.
Os dois tipos de erro so predefinidos e conhecidos pela PL/SQL, correspondendo aos cdigos +100 e -1422.
Quando ocorre um desvio para a rea de exception de um determinado bloco, no possvel o retorno para a rea de lgica do mesmo bloco.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
293
DEFININDO EXCEPTIONS
Uma exception corresponde a uma condio de erro. Podemos declarar estas condies de erro na parte declarativa
de qualquer bloco PL/SQL.
Apesar de a declarao de uma exception ser similar declarao de uma varivel, elas no podem ser utilizadas em
comandos de atribuio nem em comandos de SQL; seu uso bem especfico.
No exemplo da Listagem 3.54, observamos a declarao da condio E_Length que foi utilizada na rea de tratamento
da mesma forma que as exceptions predefinidas (When E_Length Then).
A diferena est na presena do comando Raise E_Length, que tem a finalidade de causar o erro quando o
comprimento da varivel for diferente de 3.
EXCEPTIONS PREDEFINIDAS
Quando criamos um programa PL/SQL, so incorporadas a ele algumas condies de erro predefinidas, que
conheceremos a seguir.
Tabela 3.02 Exceptions predefinidas.
Exception
Oracle Error
SQLCode
Condio
Access_into_null
ORA-06530
-6530
Case_not_found
ORA-6592
-6592
causada se nenhuma das opes da clusula When for satisfeita e no houver sido declarada
nenhuma clusula Else.
Collection_is_null
ORA-06531
-06531
causada se forem aplicados mtodos (exceto Exists) ou associao de valores a uma Nested
Table ou Varray no-inicializados.
Cursor_already_open
ORA-06511
-6511
CAPTULO 3 PL/SQL
continuao
Exception
Oracle Error
SQLCode
Condio
Dup_val_on_index
ORA-00001
-1
causada se for tentada a incluso de valores duplicados em uma coluna do banco de dados
que contm uma restrio de unicidade.
Invalid_cursor
ORA-01001
-1001
causada se for tentada uma operao ilegal com um cursor. Como, por exemplo, fechar um
cursor no aberto.
Invalid_number
ORA-01722
-1722
causada se algum comando de SQL tentou uma converso de string para numrico quando a
string no representava um nmero vlido. Em comandos procedurais, a exception adquirida
Value_Error.
Login_denied
ORA-01017
-1017
No_data_found
ORA-01403
+100
causada se num comando Select Into nenhuma linha foi retornada ou foi feita referncia a um
elemento inexistente (deletado) de uma Nested Table ou uma referncia a um elemento no
inicializado em uma tabela PL/SQL.
Not_logged_on
ORA-01012
-1012
causada se um programa de PL/SQL tenta fazer acesso ao banco de dados sem estabelecer conexo.
Program_error
ORA-06501
-6501
Rowtype_mismatch
ORA-06504
-6504
causada se a host varivel cursor e a PL/SQL varivel cursor usadas em uma associao
tiverem tipos de retorno incompatveis.
Self_is_null
ORA-30625
-30625
Storage_error
ORA-06500
-6500
Subscript_beyond_count
ORA-06533
-6533
causada se for feita uma referncia a um elemento de uma Nested Table ou Varray usando
um nmero maior que o nmero de elementos da coleo.
Subscript_outside_limit
ORA-06532
-6532
causada se for feita uma referncia a um elemento de uma nested Table ou Varray usando um
nmero fora do intervalo legal (por exemplo, -1).
Sys_invalid_rowid
ORA-1410
-1410
Timeout_on_resource
ORA-00051
-51
Too_many_rows
ORA-01422
-1422
Value_error
ORA-06502
-6502
Zero_divide
ORA-01476
-1476
Uma vez que estas condies de erro j esto previamente definidas, podemos utiliz-las livremente nos programas.
DECLARE
MATRICULA
NUMBER := '&MAT';
BEGIN
:MSG := '';
<<INICIO>>
:MSG := :MSG || 'INCIO - ';
BEGIN
INSERT INTO FUNC(CD_MAT) VALUES(MATRICULA);
:MSG := :MSG || 'INSERT - ';
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
:MSG := :MSG || 'DUPLICATES - ';
SELECT MAX(CD_MAT) + 1 INTO MATRICULA
FROM FUNC;
GOTO INICIO;
END;
END;
/
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
295
NUMBER := '&MAT';
NUMBER := '10';
Na Listagem 3.55, criamos um bloco externo que contm o label <<Inicio>> e um bloco interno para realizar o tratamento
do erro no caso da duplicidade. Quando o erro foi adquirido, foi dada uma soluo de contorno (Max), porm havia
necessidade de retornarmos ao processo de incluso. Como o retorno para o mesmo bloco no possvel (como
veremos na Listagem 3.56), o programa foi construdo com dois blocos para que o retorno fosse possvel.
O VERBO RAISE
Este verbo causa a exception no momento em que aplicado. Isso pode ser feito tanto para uma exception definida
pelo usurio quanto para uma exception predefinida.
CAPTULO 3 PL/SQL
10
RAISE INVALID_NUMBER;
11 EXCEPTION
12 WHEN E_MATRICULA OR INVALID_NUMBER THEN
13
:MSG := 'Matrcula no informada ou j existente';
14 WHEN NO_DATA_FOUND THEN
15
INSERT INTO FUNC(CD_MAT) VALUES(MATRICULA);
16
:MSG := 'Matrcula includa';
17 END;
18 /
Entre o valor para mat: 10
antigo
2:
MATRICULA
NUMBER := '&MAT';
novo
2:
MATRICULA
NUMBER := '10';
Procedimento PL/SQL concludo com sucesso.
SQL> PRINT MSG
MSG
--------------------------------------Matrcula no informada ou j existente
No exemplo da Listagem 3.57, utilizamos o verbo Raise para causar uma exception definida pelo usurio (E_Matricula)
e tambm para causar a exception predefinida Invalid_Number.
EXCEPTION_INIT
A lista de exceptions predefinidas limitada e muitas vezes desejamos controlar a ocorrncia de outros erros
conhecidos do ambiente, tais como deadlock ou constraint error.
Como no temos condies de erro predefinidas para tratamento destas situaes, muito comum encontrarmos
nos programas o uso de testes do cdigo do erro ocorrido para efetuar uma ou outra ao (Sqlcode e When Others,
que sero vistos mais adiante).
As pragmas so diretivas de compilao, isto , so instrues fornecidas ao compilador, que modifica a forma de
execuo do programa.
A pragma Exception_Init nos proporciona uma forma mais legvel de realizarmos o controle dos erros previstos,
mas sem condies de erro predefinidas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
297
No exemplo da Listagem 3.58, associamos o cdigo de erro ORA-2291 varivel de exception E_Relation, indicando
ao compilador PL/SQL que na ocorrncia do erro -2291 deveria ser causada a exception E_Relation. Desta forma,
pudemos realizar o tratamento adequado para que o programa no fosse abortado.
Observe que a diretiva Pragma definida na parte declarativa do bloco, pois ser usada pelo compilador e no a
tempo de execuo.
A PROCEDURE RAISE_APPLICATION_ERROR
Esta procedure permite que seja feito o fornecimento de mensagens de erro a partir de subprogramas armazenados
no banco de dados ou de database triggers.
Onde:
<erro> Corresponde ao nmero do erro, podendo variar de -20000 a -20999. Deve ser um nmero inteiro.
Neste intervalo de valores, no existem erros do Oracle. Este intervalo foi reservado para erros do usurio.
<mensagem> Corresponde mensagem que desejamos enviar. Pode ser uma string de at 2.048 bytes de
comprimento.
TRUE / FALSE O terceiro parmetro opcional. Se for enviado True, indica que o erro ser colocado na pilha de
erros anteriores. Caso o valor seja False (default), o erro substituir todos os erros anteriores.
Se uma aplicao executar uma stored procedure que use a raise_application_error, esta (a aplicao) receber o
cdigo e a mensagem de erro enviada pelo subprograma e poder realizar o tratamento adequado, da mesma
forma que faz com os demais erros do Oracle.
CAPTULO 3 PL/SQL
*
ERRO na linha 1:
ORA-20000: Matrcula no informada ou j existente
ORA-06512: em line 9
Na Listagem 3.59, quando a matrcula j existe na tabela Func, o programa abortado com a mensagem adequada.
Observe que a mensagem de erro aparece na forma ORA-20000, da mesma forma que as mensagens de erro do
banco de dados.
PROPAGAO DA EXCEO
Quando uma exception adquirida em um determinado bloco e tratada, a condio de erro cancelada. Se no
for dado tratamento, o erro propagado para o bloco imediatamente superior (onde o atual est contido) com a
condio de erro marcada, ocorrendo, ento, o desvio para a rea de tratamento de erro desse bloco em busca de
tratamento para o erro.
Este procedimento se repete enquanto houver blocos embutidos. Quando atinge o bloco principal, sem tratamento,
o programa abortado.
O exemplo da Listagem 3.60 foi executado trs vezes para que possamos acompanhar todas as ocorrncias.
Nesta primeira execuo, a varivel Vnum recebeu o valor 1. A exception A foi causada e tratada no bloco mais
interno. O programa seguiu terminando normalmente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
299
Nesta segunda execuo, a varivel Vnum recebeu o valor 2. A exception B foi causada no bloco mais interno,
porm no foi encontrado tratamento para essa condio de erro nesse bloco. Desta forma, a exception foi propagada
para o bloco externo. Como neste momento foi encontrado tratamento, o programa termina normalmente.
Na terceira execuo, a varivel Vnum recebeu o valor 3. A exception C foi causada no bloco mais interno, porm
no foi encontrado tratamento para essa condio de erro nesse bloco. A exception foi propagada para o bloco
externo e tambm a no foi encontrado tratamento; mais uma vez o erro foi propagado, desta vez para o ambiente,
abortando o programa.
WHEN OTHERS
Podemos utilizar a sintaxe When Others se desejarmos capturar, dentro do programa, qualquer outra ocorrncia
no prevista dentro da lista de exceptions (predefinidas ou do usurio). muito comum a utilizao conjunta da
sintaxe When Others e das funes SqlCode e SqlErrm.
CAPTULO 3 PL/SQL
Listagem 3.65 When Others
SQL> DECLARE
2
MAT
NUMBER := '&MAT';
3 BEGIN
4
INSERT INTO FUNC(CD_MAT) VALUES(MAT);
5 EXCEPTION
6 WHEN DUP_VAL_ON_INDEX THEN
7
:MSG := 'Matrcula j existente';
8 WHEN OTHERS THEN
9
:MSG := SQLERRM(SQLCODE);
10 END;
11 /
Entre o valor para mat:
Procedimento PL/SQL concludo com sucesso.
SQL> PRINT MSG
MSG
-------------------------------------------------------------------ORA-01400: no possvel inserir NULL em (DESENV.FUNC.CD_MAT)
No exemplo da Listagem 3.66, s foi possvel a captura do erro no bloco externo (criado por fora da aplicao da
Listagem 3.65). Como teste, execute o exemplo da Listagem 3.65 passando para a varivel MAT o valor A.
EXERCCIOS
Os exerccios deste tpico ainda utilizaro variveis de substituio para recebimento das informaes.
3.26) Considerando-se o programa de PL/SQL da Listagem-resposta 3.26A, responda:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
301
DECLARE
X
NUMBER(3) := '&X';
A
EXCEPTION;
B
EXCEPTION;
C
EXCEPTION;
BEGIN
-- INICIO BLOCO PRINCIPAL
BEGIN
-- INICIO BLOCO INTERNO
IF X = 1 THEN
RAISE A;
ELSIF X = 2 THEN
RAISE B;
ELSIF X = 3 THEN
RAISE C;
END IF;
:VALOR := 100;
EXCEPTION
WHEN A THEN
:VALOR := 300;
END;
-- FIM BLOCO INTERNO
EXCEPTION
WHEN B THEN
:VALOR := 400;
END;
-- FIM BLOCO EXTERNO
/
O funcionrio no deve existir no banco de dados. Para tal, consulte por nome e sobrenome.
O cdigo do departamento deve existir na tabela de departamentos.
S sero admitidos funcionrios com menos de 50 anos.
S sero admitidos funcionrios com grau de instruo entre 12 e 18.
O cargo dever estar, garantidamente, entre 55 e 60.
Sexo dever estar preenchido com F ou M.
Os parmetros informados so: nome e sobrenome do funcionrio, cdigo do departamento, grau de instruo,
data de nascimento, cargo e sexo.
Para cada um dos erros encontrados, o programa dever ser interrompido com a mensagem adequada.
Obrigatoriamente, o tratamento dever utilizar a rea de Exception.
3.28) Para o programa apresentado na Listagem-resposta 3.28A, identifique e explique por que ocorreu o erro.
Listagem-resposta 3.28A
SQL> DECLARE
2
DUMMY
NUMBER := '&NUMERO';
3 BEGIN
4
IF DUMMY > 5 THEN
5
:VALOR := 0;
6
END IF;
7 EXCEPTION
8 WHEN OTHERS THEN
9
RAISE_APPLICATION_ERROR(-20999, 'ERRO DE ATRIBUIO NA DECLARAO');
10 END;
11 /
Entre o valor para numero: A
antigo
2:
DUMMY
NUMBER := '&NUMERO';
novo
2:
DUMMY
NUMBER := 'A';
CAPTULO 3 PL/SQL
DECLARE
*
ERRO na linha 1:
ORA-06502: PL/SQL: error: erro de converso de caractere em nmero numrico ou
de valor
ORA-06512: em line 2
3.29) Qual a soluo de contorno que permita que controlemos o tipo de erro do Exerccio 3.28?
3.30) Crie um programa para cadastramento de funcionrios. Somente informe dois parmetros: Matrcula e Cdigo
do departamento. O programa no deve abortar se a matrcula j existir (Dup_Val_On_Index) ou se o cdigo do
departamento no existir na tabela Depto (use a diretiva Exception_Init para definir este controle).
3.31) Faa um programa que receba trs nmeros e os apresente em ordem ascendente. Para tal, estabelea todas as
crticas necessrias para que o usurio fornea dados corretos.
METODOLOGIA
Apresentao terica dos conceitos coleo e registro, seguida da sintaxe necessria ao seu uso.
TCNICA
Apresentao de exemplos que utilizem a sintaxe apresentada.
INTRODUO
Uma coleo um grupo ordenado de elementos todos do mesmo tipo. Cada elemento possui um nico subscrito
que determina o posicionamento do elemento na coleo.
A PL/SQL trabalha com trs tipos de colees: Nested Tables, Varrays e Index-By Tables (tambm chamadas de
tabelas de PL/SQL).
As colees Nested Tables e Varrays podem ser criadas no banco de dados e utilizadas em PL/SQL ou criadas
diretamente em PL/SQL. Consideramos que para melhor entendimento seu estudo deve ser feito aps a conceituao
e estudo de objetos no banco de dados; portanto, este assunto foi includo no Captulo 4. Neste tpico estudaremos
apenas a coleo nativa da prpria PL/SQL, isto , a Index-By Table.
INDEX-BY TABLES
Index-By Tables so semelhantes s outras colees em diversos pontos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
303
Para estender uma Index-By Table, basta que especifiquemos subscritos maiores.
As procedures Extend e Trim no podem ser aplicadas nas Index-By Tables.
DECLARAO E ATRIBUIO
No exemplo da Listagem 3.67 a seguir, declaramos um tipo referente coleo. Aps a declarao do tipo de dados
desejado, devemos declarar as variveis com o tipo definido.
IS TABLE OF VARCHAR2(10)
INDEX BY BINARY_INTEGER;
TTABLE;
NULL THEN
'A coleo foi considerada NULL';
'A coleo foi implicitamente inicializada';
'AA';
Observe que a Index-By Table foi inicializada implicitamente, e por este motivo j podemos utiliz-la imediatamente
aps a declarao; e s fazer a atribuio a cada elemento do array em particular.
Na Listagem 3.68, podemos observar que a referncia a um determinado elemento da coleo (Index-By Table)
feita com o uso de um indexador. A Index-By Table inicializada diretamente com a atribuio de valor a um
ndice qualquer, que no precisa ser seqencial.
CAPTULO 3 PL/SQL
Na Listagem 3.69, efetuamos a comparao para Null atribuindo um valor a uma das posies da coleo e, em
seguida, fizemos a atribuio de uma coleo para outra. Isto possvel porque ambas so do mesmo tipo (Ttable).
DECLARE
TYPE TTABLE
IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
NTEXTO1
TTABLE;
NTEXTO2
TTABLE;
BEGIN
NTEXTO1(2) := 'AAA';
NTEXTO2 := NTEXTO1;
IF NTEXTO1 = NTEXTO2 THEN
NTEXTO2(1) := NTEXTO1(2);
END IF;
:MSG := 'TRMINO NORMAL';
EXCEPTION
WHEN OTHERS THEN
:MSG := SQLERRM(SQLCODE);
END;
/
NTEXTO1 = NTEXTO2 THEN
*
ERRO na linha 8:
ORA-06550: linha 8, coluna 14:
PLS-00306: nmero incorreto de tipos de argumentos na chamada para '='
ORA-06550: linha 8, coluna 3:
PL/SQL: Statement ignored
O erro que aparece na Listagem 3.70 indica que uma coleo no pode ser comparada com outra, mesmo que as duas
correspondam ao mesmo tipo. Podemos, no entanto, comparar posies especficas do array de cada uma delas.
MTODOS
As colees possuem mtodos, que so funes predefinidas com aes especficas que agem sobre as colees
facilitando sua manipulao.
Os seguintes mtodos so aplicveis a colees. Nem todos os mtodos, porm, so aplicveis a Index-By Tables.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
305
Tipo
Parmetro
Significado
Exists
Function
ndice do elemento
Count
Function
Limit
Function
Retorna a quantidade mxima de elementos da coleo. Para Nested Tables retorna Null.
First e Last
Function
Prior e Next
Function
ndice do elemento
Retorna o ndice vlido anterior (ou posterior) relativo ao ndice recebido como parmetro.
Extend
Procedure
Trim
Procedure
Delete
Procedure
EXISTS
Este mtodo retorna True se o elemento correspondente ao parmetro existe na coleo.
DECLARE
TYPE TTABLE
IS TABLE
OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
TTABLE;
NUMBER := 0;
IS SELECT NM_FUNC FROM FUNC;
TTEXTO
I
CURSOR C1
BEGIN
FOR RC1 IN C1 LOOP
I := I + 1;
IF NOT TTEXTO.EXISTS(I) THEN
TTEXTO(I) := RC1.NM_FUNC;
END IF;
END LOOP;
END;
/
Observe pela Listagem 3.71 que o mtodo Exists verifica a inicializao de um elemento qualquer em uma IndexBy Table. Caso faamos acesso a um elemento sem que tenhamos feito uma atribuio anterior a este ndice,
receberemos um erro. Veja o exemplo da Listagem 3.72 a seguir.
CAPTULO 3 PL/SQL
11
TTEXTO(I) := RC1.NM_FUNC;
12
END IF;
13
END LOOP;
14 END;
15 /
DECLARE
*
ERRO na linha 1:
ORA-01403: dados no encontrados
ORA-06512: em line 10
Para que possamos utilizar uma determinada posio do array devemos ter atribudo dados a ele ou utilizar o
mtodo Exists para verificar o preenchimento.
COUNT
Este mtodo retorna o nmero de elementos que a coleo contm atualmente e ignora os elementos deletados.
DECLARE
TYPE TTABLE
IS TABLE
OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
TTABLE;
NUMBER := 0;
IS SELECT NM_FUNC FROM FUNC;
TTEXTO
I
CURSOR C1
BEGIN
FOR RC1 IN C1 LOOP
I := I + 1;
TTEXTO(I) := RC1.NM_FUNC;
END LOOP;
:MSG := 'Quantidade de elementos lidos : '||TTEXTO.COUNT;
END;
/
MSG
---------------------------------Quantidade de elementos lidos : 43
Podemos usar o mtodo Count em todos os locais em que uma expresso inteira permitida (como, por exemplo,
em um For i in 1..Ttexto.Count Loop).
O mtodo Count retorna a quantidade de elementos ativos, que poder ser inferior ao ndice do ltimo elemento.
A atribuio de Null a um determinado elemento no o remove da lista de elementos ativos. Somente o mtodo Delete realiza esta ao.
LIMIT
Este mtodo somente retorna um valor para Varrays. Para as demais colees, o resultado Null, pois nem Nested
Tables nem Index-By Tables possuem limite.
FIRST E LAST
Retorna o ndice do primeiro e/ou do ltimo elemento preenchido da coleo. Se a coleo estiver vazia, estes
mtodos retornam Null. Se a coleo contiver um nico elemento, First e Last retornam o mesmo ndice.
O mtodo First retornar o ndice do primeiro elemento ativo e o mtodo Last o ndice do ltimo elemento ativo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
307
Neste exemplo, ao preenchermos a Index-By Table, no utilizamos ndices seqenciais; o incremento foi 10. Isso
s possvel para Index-By Tables.
PRIOR E NEXT
Retorna o ndice que precede ou sucede o ndice passado como parmetro. Se o ndice passado como parmetro for
o primeiro, o mtodo Prior (n) retornar Null, o mesmo ocorrendo para Next (n), onde n o ltimo elemento ativo
da coleo. Estes mtodos ignoram os elementos Null.
SET LINESIZE 60
DECLARE
TYPE TTABLE
IS TABLE OF VARCHAR2(20)
INDEX BY BINARY_INTEGER;
TTABLE;
NUMBER := 0;
IS SELECT NM_FUNC FROM FUNC;
TTEXTO
I
CURSOR C1
BEGIN
:MSG := '';
FOR RC1 IN C1 LOOP
I := I + 10;
TTEXTO(I) := RC1.NM_FUNC;
END LOOP;
I := TTEXTO.FIRST;
WHILE I IS NOT NULL LOOP
:MSG := :MSG ||I||'-';
I := TTEXTO.NEXT(I);
END LOOP;
END;
/
MSG
-----------------------------------------------------------10-20-30-40-50-60-70-80-90-100-110-120-130-140-150-160-170-1
80-190-200-210-220-230-240-250-260-270-280-290-300-310-320-3
30-340-350-360-370-380-390-400-410-420-430-
Na Listagem 3.75, preenchemos os elementos com intervalos no indexador de 10. O mtodo Next foi utilizado
para navegao pelos elementos da coleo e, ainda, para controlar o trmino da pesquisa.
Esse mtodo aplicvel s trs colees da PL/SQL.
CAPTULO 3 PL/SQL
EXTEND
Este mtodo incrementa o tamanho de uma coleo. Esse mtodo no aplicvel Index-By Tables.
TRIM
Este mtodo remove um ou mais elementos do fim da coleo. Se utilizado sem parmetros, remove um elemento.
O parmetro, se usado, indica a quantidade de elementos finais a serem removidos. Este mtodo no aplicvel a
Index-By Tables.
DELETE
Este mtodo admite trs sintaxes:
Condio
Collection_is_null
causada se forem aplicados mtodos (exceto Exists) ou associao de valores a uma Nested Table ou Varray no-inicializados.
No_data_found
causada se foi feita referncia a um elemento inexistente (deletado) de uma Nested Table ou uma referncia a um elemento
no inicializado em uma Index-By Table.
Subscript_beyond_count
causada se for feita uma referncia a um elemento de uma coleo usando um ndice maior que o nmero de elementos da coleo.
Subscript_outside_limit
causada se for feita uma referncia a um elemento de uma Nested Table ou Varray usando um nmero fora do intervalo legal
(por exemplo 1).
Value_error
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
309
No exemplo da Listagem 3.77, fizemos uma tentativa de acesso a uma posio que no recebeu atribuio inicial.
O tratamento similar a uma pesquisa sem sucesso a tabelas de SQL. A exception No_Data_Found adquirida na
linha 5 do exemplo e tratada adequadamente.
CRIANDO MATRIZES
A partir da verso 9i podemos criar um array dentro de outro array, isto , podemos criar uma Index-By Table cujo
elemento uma coleo (do tipo Index-By table ou no).
Neste exemplo declaramos uma matriz para receber 3 colunas da tabela Func (nome, sobrenome e nascimento).
Pudemos observar que o mtodo First utilizado sem indicao de posio se refere ao nvel mais externo da matriz,
assim como o mtodo Next. Se desejssemos navegar em uma linha especfica, deveramos usar Mtexto(i).First e
Mtexto(i).Next(j).
CAPTULO 3 PL/SQL
Listagem 3.79 Criando Matrizes
SQL> DECLARE
2
TYPE TTABLE
IS TABLE OF VARCHAR2(25) INDEX BY BINARY_INTEGER;
3
TYPE TMATRIZ
IS TABLE OF TTABLE INDEX BY BINARY_INTEGER;
4
TYPE TTRI
IS TABLE OF TMATRIZ INDEX BY BINARY_INTEGER;
5
MTRI
TTRI;
6 BEGIN
7
FOR I IN 1..3 LOOP
8
FOR J IN 1..4 LOOP
9
FOR K IN 1..6 LOOP
10
MTRI(I)(J)(K) := 'P-'||I||'-'||J||'-'||K;
11
END LOOP;
12
END LOOP;
13
END LOOP;
14
:MSG := 'MTRI.LAST='||MTRI.LAST||CHR(10);
15
:MSG := :MSG||'MTRI(2).LAST='||MTRI(2).LAST||CHR(10);
16
:MSG := :MSG||'MTRI(2)(3).LAST='||MTRI(2)(3).LAST||CHR(10);
17
:MSG := :MSG||MTRI(2)(3)(6);
18 END;
19 /
Procedimento PL/SQL concludo com sucesso.
MSG
---------------------------------MTRI.LAST=3
MTRI(2).LAST=4
MTRI(2)(3).LAST=6
P-2-3-6
No exemplo da Listagem 3.79 criamos uma matriz tridimensional. Observe o uso do mtodo Last aplicvel a cada
nvel da matriz.
REGISTROS
Um registro nada mais que uma rea estruturada, um grupo de itens de dados relacionados e armazenados em
campos contendo seu prprio nome e tipo de dados.
O atributo %Rowtype permite a declarao de um registro com o layout de uma tabela definida no banco de dados
ou das colunas selecionadas em um cursor.
A definio de registro permite total flexibilidade na declarao da rea. Podemos definir nomes prprios e tipos e
tamanhos que desejarmos.
DECLARAES
Na declarao de um registro, podemos associar nessa estrutura elementos com os tipos escalares, Varrays, Nested
Tables e objetos.
VARCHAR2(30),
NUMBER NOT NULL := 0,
VARCHAR2(20),
DEPTO.CD_DEPTO%TYPE,
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
311
RAMAL
NUMBER(04) );
VREG
TREG;
CURSOR C1 IS SELECT NM_FUNC||' '||NM_SOBRENOME, CD_MAT,
TO_CHAR(DT_NASC, 'DD-MM-YYYY'),
CD_DEPTO, NR_RAMAL FROM FUNC;
BEGIN
OPEN C1;
FETCH C1 INTO VREG;
END;
/
No exemplo da Listagem 3.80, definimos um registro semelhante linha a ser lida atravs do cursor.
DECLARE
TYPE TTAB
TYPE TREG
VREG
BEGIN
NULL;
END;
/
Na Listagem 3.81, definimos um registro que contm um elemento que uma coleo.
Observe que em ambos os exemplos a declarao de tipo no cria uma rea para recepo dos dados. Apenas cria
o layout da rea. indispensvel a criao da varivel com o tipo Treg para que seja possvel a utilizao da rea.
A coluna Mat foi definida como Not Null, tornando obrigatria a especificao de um valor inicial.
REFERENCIANDO REGISTROS
Os campos em um registro so referenciados pelo nome.
SET LINESIZE 70
DECLARE
TYPE TREG IS RECORD (NOME
VARCHAR2(30),
MAT
NUMBER NOT NULL := 0,
DEP
DEPTO.CD_DEPTO%TYPE);
VREG
TREG;
CURSOR C1 IS SELECT NM_FUNC||' '||NM_SOBRENOME, CD_MAT,
CD_DEPTO FROM FUNC;
BEGIN
OPEN C1;
:MSG := '';
LOOP
FETCH C1 INTO VREG;
EXIT WHEN C1%NOTFOUND;
IF VREG.MAT > 200 AND VREG.DEP IN ('D11', 'E11') THEN
:MSG := :MSG || VREG.NOME ||'; ';
END IF;
END LOOP;
END;
/
MSG
---------------------------------------------------------------------WILIAM JONES; JOANA LUZ; ELINE SEVERO; JOAO PONTES; FELIPE SARAIVA; MA
RINA SALGADO;
CAPTULO 3 PL/SQL
No exemplo da Listagem 3.82, fazemos referncia aos elementos do registro Vreg usando o nome do elemento
qualificado pelo nome do registro Vreg.Nome, Vreg.Mat e Vreg.Dep.
DECLARE
TYPE TTAB
TYPE TREG
VREG
BEGIN
VREG.VARR(1) := 'teste';
VREG.NTAB(-5) := 'negativo';
VREG.IXTAB(0) := 'zero';
END;
/
No exemplo da Listagem 3.83, fazemos referncia aos elementos Index-By Table da mesma forma que aos elementos
escalares, ou seja, qualificando o elemento com o nome do registro.
DECLARE
TYPE TTABLE
TYPE TOBJ
TYPE TREG
IS TABLE OF VARCHAR2(100)
INDEX BY BINARY_INTEGER;
IS RECORD (NOME
VARCHAR2(30),
NTAB
TTABLE);
IS RECORD (MAT
NUMBER NOT NULL := 0,
REG
TOBJ);
TREG;
VREG
BEGIN
VREG.REG.NTAB(1) := 'POSITIVO';
VREG.MAT
:= 1;
VREG.REG.NOME
:= 'TESTE';
END;
/
No exemplo da Listagem 3.84, criamos um registro como elemento de outro registro. Desta forma, houve necessidade
de dupla qualificao: Vreg faz referncia varivel com o tipo Treg e Reg corresponde ao campo do registro Treg
que do tipo Tobj, que tambm um registro.
Assim a referncia ao elemento Mat feita com a qualificao Vreg.Mat, pois est diretamente definido em Treg. J
Nome um elemento de Tobj, que por sua vez um elemento de Treg; sua referncia ento feita com Vreg.Reg.Nome.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
313
No exemplo da Listagem 3.85, invertemos as definies feitas at agora; declaramos um registro como elemento de
uma Index-By Table. Com isso, cada elemento da Index-By Table possui o layout do registro Treg. Observe que a
qualificao feita pelo elemento da tabela Ntab(n).
MANIPULANDO REGISTROS
A manipulao de um registro similar utilizao do %RowType que corresponde, na verdade, a um registro
(com o layout da tabela ou das colunas selecionadas pelo cursor).
Neste primeiro exemplo, declaramos um registro (%RowType) como elemento da Index-By Table. Os nomes dos
elementos deste registro correspondem s colunas selecionadas do banco de dados.
CAPTULO 3 PL/SQL
28
29
30
31
32
33
34
35
No exemplo da Listagem 3.87, repetimos a mesma operao realizada anteriormente, substituindo o registro implcito
(%RowType) pela definio explcita de Treg. Os nomes dos elementos foram alterados, mas sintaticamente no
houve diferena de utilizao.
Observe que acrescentamos um array dentro do registro, o qual foi includo dentro de outro array. Esta forma
sinttica somente permitida a partir da verso 9i.
A leitura realizada nos dois exemplos permitiu que toda a tabela fosse carregada na memria para manipulao.
DECLARE
CURSOR C1
TYPE TREG
REG1
REG2
BEGIN
OPEN C1;
FETCH C1 INTO REG1;
REG2 := REG1;
IF REG1 = REG2 THEN
:MSG := 'Registros iguais';
END IF;
END;
/
REG1 = REG2 THEN
*
ERRO na linha 12:
ORA-06550: linha 12, coluna 11:
PLS-00306: nmero incorreto de tipos de argumentos na chamada para
'='
ORA-06550: linha 12, coluna 3:
PL/SQL: Statement ignored
Na Listagem 3.88, observamos que a atribuio de um registro para outro possvel se as duas variveis fizerem
referncia ao mesmo tipo registro. A comparao, porm, no possvel.
EXERCCIOS
3.32) Quais os trs tipos de colees existentes em PL/SQL? Cite duas caractersticas das Index-By Tables.
3.33) O que so registros em PL/SQL?
3.34) Crie um bloco de PL/SQL que receba nmeros (quantidade qualquer) e apresente-os em ordem ascendente. O
programa deve receber um nico parmetro alfanumrico contendo os nmeros separados por vrgula (use coleo).
3.35) Leia a tabela de funcionrios e preencha a seguinte tabela em memria:
TabCargo cujo layout composto do nmero do cargo e quantidade e cdigo do departamento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
315
METODOLOGIA
Apresentao terica dos conceitos referentes a Bulk Bind, seguida da sintaxe necessria ao seu uso.
TCNICA
Apresentao de situaes resolvidas com as sintaxes apresentadas.
CONCEITOS
A associao de valores a variveis de PL/SQL em comandos de SQL chamada Bind. A associao de uma coleo
inteira de uma nica vez chamada Bulk Bind.
O objetivo de um Bulk Bind aumento de performance. Observe o bloco de PL/SQL apresentado na Listagem 3.89.
DECLARE
TYPE L_NUM
IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
WCD_LISTA
L_NUM;
BEGIN
FOR I IN 1..2000 LOOP
WCD_LISTA(I) := I;
END LOOP;
FOR I IN 1..2000 LOOP
DELETE FROM FUNC WHERE CD_MAT = WCD_LISTA(I);
END LOOP;
END;
/
No exemplo da Listagem 3.89, o comando Delete executado 2.000 vezes; isto significa que o PL/SQL (Engine)
envia um comando SQL Delete para cada valor da lista. Cada vez que a PL/SQL Engine tem necessidade de estabelecer
uma interrupo para acionar a SQL Engine, ocorre um overhead. Sendo assim, quando trabalhamos com colees
(Nested Tables, Index-By, Varray e Host Arrays) e utilizamos iteraes (loops) usando elementos destas colees
como variveis Bind (em comandos de SQL), adicionamos um overhead nossa execuo.
Se a iterao afetar cinco ou mais linhas do banco de dados, o uso de Bulk Binds pode aumentar a performance
consideravelmente.
Observe o mesmo trecho de programa em que substitumos o comando For pelo comando ForAll.
CAPTULO 3 PL/SQL
Listagem 3.90 ForAll
SQL>
2
3
4
5
6
7
8
9
10
11
DECLARE
TYPE L_NUM
IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
WCD_LISTA
L_NUM;
BEGIN
FOR I IN 1..2000 LOOP
WCD_LISTA(I) := I;
END LOOP;
FORALL I IN 1..2000
DELETE FROM FUNC WHERE CD_MAT = WCD_LISTA(I);
END;
/
No exemplo da Listagem 3.90, a coleo Wcd_Lista passada inteira de uma nica vez para a SQL Engine.
NUMBER,
VARCHAR2(200));
SQL> DECLARE
2
TYPE L_NUM
IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
3
TYPE L_CHAR
IS TABLE OF VARCHAR2(200) INDEX BY BINARY_INTEGER;
4
WCD_LISTA
L_NUM;
5
WTX_LISTA
L_CHAR;
6
T1
NUMBER;
7
T2
NUMBER;
8
T3
NUMBER;
9 BEGIN
10
Preenche as tabelas em memria
11
FOR I IN 1..20000 LOOP
12
WCD_LISTA(I) := I;
13
WTX_LISTA(I) := 'TEXTO DA LINHA '||TO_CHAR(I);
14
END LOOP;
15
Inclui as linhas na tabela usando For Loop
16
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'SSSSS') INTO T1 FROM DUAL;
17
FOR I IN 1..20000 LOOP
18
INSERT INTO LISTA VALUES (WCD_LISTA(I), WTX_LISTA(I));
19
END LOOP;
20
Inclui as linhas na tabela usando ForAll
21
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'SSSSS') INTO T2 FROM DUAL;
22
FORALL I IN 1..20000
23
INSERT INTO LISTA VALUES(WCD_LISTA(I), WTX_LISTA(I));
24
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'SSSSS') INTO T3 FROM DUAL;
25
:MSG := 'Tempo para Insert com For Loop = '||TO_CHAR(T2 - T1)||CHR(10)||
26
'Tempo para Insert com ForAll = '||TO_CHAR(T3 - T2);
27 END;
28 /
Procedimento PL/SQL concludo com sucesso.
MSG
----------------------------------Tempo para Insert com For Loop = 33
Tempo para Insert com ForAll = 3
Este exemplo mostra uma significativa diferena de tempo entre as duas operaes. claro que esta diferena ter
variaes para maior ou menor de acordo com a configurao do equipamento; no entanto, no devemos nos
esquecer que a performance das aplicaes pode ser melhorada com o uso deste recurso.
O COMANDO FORALL
Este comando indica PL/SQL Engine para preparar toda a coleo de entrada (Bulk Bind) antes de envi-la SQL Engine.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
317
O comando SQL presente na sintaxe pode ser Insert, Update ou Delete, fazendo referncia a elementos da
coleo (a SQL Engine executa um comando Select para cada ndice no intervalo).
As fronteiras (<valor inferior> e <valor superior>) devem especificar um intervalo vlido de ndices numricos
consecutivos (no precisa ser a coleo inteira, pode ser parte da coleo desde que seja consecutiva).
A SQL Engine montar todas as linhas da tabela Lista (40.000) em uma Index-By Table antes de retornar esta
coleo para a PL/SQL Engine.
CAPTULO 3 PL/SQL
15
:MSG := :MSG || WCD_LISTA(I) ||'; ';
16
END LOOP;
17 END;
18 /
Procedimento PL/SQL concludo com sucesso.
MSG
---------------------------------------------------------Cgidos lidos: 30; 33; 36; 39; 42; 45; 48; 51; 54; 57; 60;
Na Listagem 3.93, utilizamos o comando Fetch juntamente com a clusula Bulk Collect Into. Observe que no foi
necessrio um Loop para obteno de todas as linhas. A leitura das informaes para a PL/SQL Engine foi realizada
em um nico passo.
A clusula Bulk Collect juntamente com o comando Fetch permite que limitemos a quantidade de linhas lidas. A
clusula Limit estabeleceu que apenas 200 linhas seriam lidas uma vez que somente nos interessvamos por uma
parte do contedo do arquivo.
O ATRIBUTO %BULK_ROWCOUNT
Para processar qualquer comando de SQL, a PL/SQL Engine abre um cursor implcito (isto j sabemos) de nome
SQL. Posteriormente, podemos usar os atributos do cursor (%Found, %IsOpen, %NotFound e %RowCount) para
obter informaes sobre as operaes realizadas. Este cursor implcito SQL ganha agora um atributo composto
chamado %Bulk_RowCount, que indica o resultado do processamento para cada elemento da coleo.
No exemplo da Listagem 3.94, a coleo Index-By Table criada possui cinco elementos, preenchida com os valores 1 a 5.
Quando ocorre a execuo do comando ForAll, para cada elemento da lista iniciada a execuo de um comando
Update para o banco de dados que pode atualizar n linhas. O atributo %Bulk_RowCount nos indicar quantas
linhas foram atualizadas para cada uma das posies da coleo.
Como resultado, temos que para a posio 1 ocorreram 34 atualizaes; para a posio 2 ocorreram 33 atualizaes
e para as demais, nenhuma atualizao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
319
O ATRIBUTO %BULK_EXCEPTIONS
Durante a execuo de um comando For All podemos decidir interromper a execuo do comando quando a primeira
exception for encontrada ou podemos prosseguir e armazenar todas as exceptions ocorridas para posterior tratamento.
Para esta segunda forma devemos incluir a clusula Save Exceptions na execuo do comando For All. A presena
da clusula Save Exceptions far com que a execuo prossiga at o fim e todas as exceptions sejam armazenadas
(em ordem de ocorrncia) em uma coleo.
O acesso a esta coleo feito com o atributo %Bulk_Exceptions. Nesta coleo encontraremos um registro para
cada erro adquirido. O ndice desta coleo navega seqencialmente pela lista de erros encontrados. A propriedade
Count do atributo %Bulk_Exceptions indica a quantidade total de erros; desta forma o primeiro erro obtido com
SQL%Bulk_Exceptions(1) e o ltimo com SQL%Bulk_Exceptions(SQL%Bulk_Exceptions.Count).
Cada registro da coleo possui dois campos:
Neste exemplo da Listagem 3.95 repetimos o exemplo anterior, porm atribumos um texto bastante longo
coluna Tx_Lista no momento do Update para forar a ocorrncia de algum erro.
A incluso do texto Save Exceptions garantiu que a interrupo no ocorresse no primeiro erro e sim no fim de
toda a operao (no caso de atualizao). Houve o desvio para a rea de tratamento de erro e l obtivemos a
CAPTULO 3 PL/SQL
quantidade total de erros ocorridos com sql%bulk_exceptions.count e as duas informaes sobre os erros: a iterao
com erro e o cdigo do erro.
No nosso caso a iterao com erro coincide com o indexador I pois foram, exatamente, os trs primeiros comandos
Update que geraram erro; no entanto se alterssemos o preenchimento do array Wcd_lista (invertendo a ordem de
preenchimento), as iteraes com erro seriam 3, 4 e 5. Neste caso voc notaria a diferena entre o indexador e a
iterao. Teste substituindo a linha 8 do programa por wcd_lista(I) := 6 - I;
OS DEMAIS ATRIBUTOS
Podemos utilizar os demais atributos de cursor (%Found, %IsOpen, %NotFound e %RowCount) juntamente com
Bulk Binds:
%RowCount Retorna o nmero total de linhas processadas por todas as execues do comando SQL.
%Found e %NotFound Referem-se apenas ltima execuo do comando SQL.
Para sabermos se uma determina execuo no produziu resultados, podemos utilizar %Bulk_Rowcount, que, para
o elemento indicado (se nenhuma linha for afetada), retornar zero.
CARACTERSTICAS OU RESTRIES
Como caractersticas ou restries, temos:
Quando a SQL Engine inicializa a coleo, ela destri (grava por cima) qualquer elemento preexistente e comea
o preenchimento da coleo pelo elemento 1, e consecutivamente de 1 em 1.
A coleo Bulk Bind deve ser uma coleo de valores escalares. No podem ser valores compostos.
No podemos Bulk Fetch de um cursor em um Registro (Record), mesmo que este Record faa referncia a uma
coleo (Nested Table, Varray ou Index-By).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
321
Na Listagem 3.96, a cada atualizao, a SQL Engine guarda todas as modificaes ocorridas em cada uma das linhas
envolvidas e as vai adicionando ao fim da lista da atualizao anterior. Desta forma, obtivemos informao de
todas as linhas atualizadas e no apenas da ltima.
EXERCCIOS
3.39) Crie um bloco de PL/SQL que receba como parmetro uma srie de matrculas separadas por vrgula em um
nico parmetro. Monte este nmero em um array e faa uma consulta ao banco de dados, obtendo o nome e
salrio de todos os funcionrios que existam na lista. Use ForAll e Bulk Collect.
METODOLOGIA
Apresentao terica dos conceitos de subprograma, seguida da sintaxe necessria ao seu uso.
TCNICA
Apresentao de situaes resolvidas com as sintaxes apresentadas.
CONCEITO
Subprogramas so blocos de PL/SQL que tm nome e, portanto, podem ser chamados de outros blocos. Alm desta
caracterstica, os subprogramas podem receber parmetros formais em vez das variveis de substituio que foram
usadas at agora.
A PL/SQL possui dois tipos de subprogramas: Procedures e Functions.
Os subprogramas, como todos os blocos de PL/SQL, tambm possuem uma rea para declarao de variveis,
uma rea para desenvolvimento da lgica e uma rea opcional para tratamento de erros.
Os subprogramas podem ser armazenados no banco de dados e acionados por qualquer programa aplicativo
que tenha autorizao de execuo.
CAPTULO 3 PL/SQL
Uma procedure acionada como um comando de PL/SQL, isto , isolada. No faz parte de expresses.
Uma funo, para ser acionada, deve fazer parte de uma expresso PL/SQL (por exemplo, uma atribuio a
uma varivel).
Uma funo deve, obrigatoriamente, executar o comando Return para transferir a informao de volta para o
programa acionador.
A Sintaxe 3.21 nos mostra que as definies de procedure e function so bastante similares, diferindo apenas na
presena da clusula Return para funes onde devemos determinar o tipo de retorno esperado.
DECLARE
CURSOR C1
IS SELECT VL_SAL, NM_FUNC FROM FUNC;
FUNCTION INSS (SAL IN NUMBER, LIMITE IN NUMBER) RETURN NUMBER IS
VINSS
NUMBER;
BEGIN
VINSS := SAL * 0.08;
IF VINSS > LIMITE THEN
VINSS := LIMITE;
END IF;
RETURN VINSS;
END INSS;
BEGIN
:MSG := '';
FOR RC1 IN C1 LOOP
IF INSS(RC1.VL_SAL, 1000) > 400 THEN
:MSG := :MSG || RC1.NM_FUNC || '; ';
END IF;
END LOOP;
END;
/
No exemplo da Listagem 3.97, vemos a declarao de uma funo dentro de um bloco annimo. A funo recebe
dois parmetros de entrada (IN) e retorna um valor numrico (Return Number). O comando de PL/SQL Return
(Return Vinss) foi usado para retornar o resultado do clculo para o bloco de onde a funo foi acionada.
No bloco annimo, a funo foi utilizada em uma expresso IF. Isso pode ser feito porque a funo retorna um
valor. A varivel Vinss foi declarada localmente na funo Inss e tem vida til at o End da funo. A clusula End
da funo foi acompanhada do nome da funo Inss (isso opcional).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
323
DECLARE
VINSS
NUMBER;
CURSOR C1
IS SELECT VL_SAL, NM_FUNC FROM FUNC;
PROCEDURE INSS (SAL IN NUMBER, LIMITE IN NUMBER, VALOR IN OUT NUMBER) IS
VINSS
NUMBER;
BEGIN
VALOR := SAL * 0.08;
IF VALOR > LIMITE THEN
VALOR := LIMITE;
END IF;
END INSS;
BEGIN
:MSG := '';
FOR RC1 IN C1 LOOP
INSS(RC1.VL_SAL, 1000, VINSS);
IF VINSS > 400 THEN
:MSG := :MSG || RC1.NM_FUNC || '; ';
END IF;
END LOOP;
END;
/
MSG
---------------------------------CRISTINA;
No exemplo da Listagem 3.98, utilizamos uma procedure para realizar a mesma tarefa anterior. Primeiramente,
tivemos de incluir um novo parmetro na procedure (tipo In Out) que pudesse retornar informao para o bloco
principal. A chamada da procedure no pode ser feita diretamente no comando IF. Desta forma, a procedure foi
acionada e atribuiu varivel Vinss (declarada no bloco principal) o clculo do Inss realizado dentro da procedure.
PARMETROS
Os subprogramas recebem informao dos blocos que os acionaram atravs de parmetros. Esses parmetros so
ditos formais. Nesse item, trataremos dos modos como um parmetro pode ser passado, a notao para chamada
dos subprogramas que possuem parmetros e valores defaults.
IN Indica um parmetro de entrada. Dentro do subprograma, um parmetro do tipo IN funciona como uma
constante, isto , podemos ler seu valor, porm no podemos fazer qualquer tipo de atribuio a eles. Caso o
modo no seja informado, este o modo default.
CAPTULO 3 PL/SQL
14
15
16
CALC(VPREC);
END;
/
VALOR := 5;
*
ERRO na linha 8:
ORA-06550: linha 8, coluna 8:
PLS-00363: a expresso 'VALOR' no pode ser usada como um destino de atribuio
ORA-06550: linha 8, coluna 8:
PL/SQL: Statement ignored
No exemplo da Listagem 3.99, tentamos atribuir 5 ao parmetro Valor e recebemos um erro de compilao pois
esta ao no vlida para este modo de parmetro. Observe, ainda, que a transferncia de informaes entre o
bloco principal e a procedure pode ser feita de duas formas: com o valor (30) ou atravs de uma varivel (Vprec).
Essas duas sintaxes so vlidas porque o parmetro de entrada.
OUT Indica um parmetro de sada. Dentro do subprograma, um parmetro do tipo OUT pode receber
atribuies, funciona como uma varivel local que tanto pode receber atribuies como pode ser lida.
No exemplo da Listagem 3.100 o parmetro valor pode ser usado, internamente na procedure, como se fosse uma
varivel local, tanto para atribuio como para leitura. O contedo da varivel VINSS, no entanto, foi perdido (observe que ela possui um valor inicial) porque a passagem do parmetro no feita por referncia. Na verdade criada
uma varivel local cujo valor (aps o trmino do subprograma) copiado para a varivel externa (no caso, VINSS).
Outra caracterstica do modo Out que, ao iniciar o subprograma, o Oracle associa Null ao parmetro Out. Desta
forma, se associarmos, dentro do subprograma, um valor ao parmetro, ao encerrarmos a rotina o valor atribudo
ser retornado ao bloco chamador; porm, se esta ao no for feita, ser retornado Null.
IN OUT Indica um parmetro que ser usado simultaneamente como entrada e como sada. Dentro do
subprograma, poderemos ler seu valor e atribuir um novo valor a ele.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
325
Na Listagem 3.101, modificamos o modo do parmetro para IN OUT; desta forma, para passarmos valor do bloco
principal para o subprograma, obrigatoriamente, devemos passar o parmetro atravs de uma varivel (Vinss),
porque o valor, apesar de ser lido, tambm receber uma atribuio. E, para que o resultado seja transferido para o
bloco principal, h necessidade de se informar uma varivel.
Isto pode trazer ganhos de performance para aplicaes que passem grandes estruturas de dados, como parmetros
IN OUT e OUT.
VALOR DEFAULT
Quando definimos um parmetro com o modo IN, podemos atribuir um valor default para o caso de o parmetro
no ser informado.
CAPTULO 3 PL/SQL
10
UPDATE FUNC
11
SET VL_SAL = (VL_SAL * VALOR) / 100 + VL_SAL;
12
END IF;
13
END CALC;
14 BEGIN
15
:MSG := '';
16
CALC(30);
17
CALC(VPREC);
18
CALC;
19 END;
20 /
Procedimento PL/SQL concludo com sucesso.
MSG
---------------------------------030,00- 000,07- 000,10-
Na Listagem 3.103, acionamos a procedure Inss de trs formas diferentes: passando um valor diretamente, passando
uma varivel e no passando parmetro.
No terceiro caso, o valor recebido pelo subprograma ser exatamente o valor definido como default (0.10).
Posicional Indica que a passagem se dar exatamente na ordem da declarao dos parmetros, no podendo
haver falhas, exceto para os parmetros finais e se forem de entrada e tiverem um valor default definido.
Na Listagem 3.104, acionamos a rotina CALC de 5 formas diferentes: na primeira, sem parmetros, pois os dois
parmetros so de entrada e possuem valor default; na segunda, informamos apenas o primeiro parmetro, pois o
segundo de entrada e possui valor default; na terceira, informamos os dois parmetros; a quarta forma invlida
em PL/SQL; a quinta forma invlida em PL/SQL.
Nomeada Indica que a passagem se dar em uma ordem aleatria de acordo com o nome do parmetro que
ser informado na passagem.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
327
Na Listagem 3.105, acionamos a rotina Inss de duas formas: na primeira, informamos os dois parmetros usando
a notao posicional; na segunda, informamos apenas o segundo parmetro e usamos a notao nomeada, isto ,
o nome do parmetro seguido dos smbolos igual e maior (=>) e do valor a ser transferido. Observe que o segundo
parmetro no pode deixar de ser informado, pois um parmetro de sada.
Esta sintaxe permite, adicionalmente, que informemos os parmetros na ordem que desejarmos.
DECLARAES FORWARD
A PL/SQL exige que se declare um subprograma antes de podermos utiliz-lo. Se desejssemos criar dois
procedimentos mutuamente recursivos, esta regra impediria esta forma de utilizao.
Como soluo de contorno para este tipo de situao, a PL/SQL fornece uma forma de declarao parcial chamada
de declarao Forward, que interrompe a declarao da procedure ou funo aps a definio dos parmetros (para
as procedures) ou do tipo de retorno (para as funes), permitindo que o compilador realize a validao da chamada
do subprograma mesmo sem ter informaes sobre o corpo (ou lgica) deste.
Posteriormente, repete-se a definio do subprograma, agora contendo a chamada e a lgica.
CAPTULO 3 PL/SQL
Observe na Listagem 3.106 que a procedure B foi declarada duas vezes. Na primeira declarao, foram especificados
apenas o nome da procedure e os parmetros formais. Na segunda declarao, foi repetida a especificao do nome
e dos parmetros e completada com a definio do corpo da procedure.
Este procedimento foi necessrio uma vez que a procedure B chamava a procedure A e a procedure A chamava a
procedure B. No poderamos, portanto, realizar este tipo de utilizao sem o recurso da declarao Forward.
A declarao Forward pode ser til para outras situaes, tais como:
OVERLOADING
A PL/SQL permite a definio de dois subprogramas com o mesmo nome, desde que seus parmetros formais
sejam diferentes em nmero, ordem ou tipo familiar (por exemplo, Integer e Real so tipos diferentes, porm
pertencem ao mesmo grupo familiar). Essa caracterstica chamada de Overloading.
Como restrio, temos que esta tcnica s se aplica a subprogramas locais ou subprogramas definidos em pacotes
(sero vistos em outro tpico). Alm disso, no podemos overload dois subprogramas se seus parmetros diferirem
apenas em relao aos nomes ou aos modos dos parmetros. E, finalmente, no podemos overload duas funes
em que a nica diferena entre elas seja o tipo de retorno (mesmo que estejam em grupos familiares diferentes).
Na Listagem 3.107, criamos duas rotinas com o nome de CALC subordinadas ao mesmo programa principal. Os
parmetros das duas so diferentes (na primeira, varchar e number e, na segunda, number e number), o que
tornou o overloading possvel.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
329
STORED SUBPROGRAM
O objetivo de armazenarmos uma procedure ou function no banco de dados permitir que a rotina seja
compartilhada por diversas aplicaes.
Na Sintaxe 3.22, observamos que a forma de criao de uma rotina no banco de dados semelhante sintaxe para
criao de uma rotina dentro de um bloco principal. A diferena est na clusula Create, que estabelece o
armazenamento da rotina no banco de dados.
Como vantagem do armazenamento no banco de dados, temos:
A produtividade pode ser incrementada medida que uma determinada rotina pode ser compartilhada por
diversas aplicaes, reduzindo a redundncia de codificao.
A performance pode ser incrementada uma vez que as rotinas armazenadas no banco de dados podem diminuir
a necessidade de trfego de informaes pela rede. Elas so executadas no ambiente servidor e, quando acionadas,
executam os vrios comandos de SQL e PL/SQL diretamente no servidor sem necessidade de transitar essas
informaes pela rede.
Em relao segurana, tambm podemos ter vantagens uma vez que o DBA pode restringir o acesso direto a
determinadas tabelas e autorizar a utilizao apenas de rotinas que faam acesso, dentro de regras previamente
estabelecidas, a essas tabelas.
CAPTULO 3 PL/SQL
Na Listagem 3.108, vemos a criao de uma funo no banco. A utilizao dessa funo pode ser feita em outras
aplicaes que utilizem PL/SQL ou diretamente em um comando de SQL.
DEPARTAMENTO
------------------------------DIRETORIA DA EMPRESA
ASSESSORIA
CENTRO DE INFORMACAO
DIRETORIA DE SUPORTE/PRODUCAO
GERENCIA DE SISTEMAS COMERCIAIS
Funes podem ser utilizadas em comandos de SQL (Insert, Update, Select e Delete), como vemos no exemplo da
Listagem 3.109. Procedures no retornam valores, e desta forma devem ser utilizadas em outros blocos de PL/SQL.
ERROR
------------------------------------------------------PL/SQL: Statement ignored
PLS-00201: o identificador 'PERCENT' deve ser declarado
No exemplo da Listagem 3.110, o procedimento criado contm erros de compilao. Para verificarmos quais os
erros encontrados, devemos usar o comando Show (de SQL*Plus). Veja a sintaxe completa no Captulo 2.
A sintaxe Or Replace permite que faamos modificaes na rotina e executemos o processo de criao de novo. O
Oracle far o armazenamento no banco de dados se a rotina no existir (mesmo com erros de compilao), ou a
modificao se a rotina j existir anteriormente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
331
No exemplo da Listagem 3.111, criamos dois usurios (Davi e Daniel). Em seguida, criamos a rotina Salrio (no
usurio Desenv Owner da rotina). Os usurios Davi e Daniel receberam autorizao de execuo sobre a funo
Salrio, porm no receberam autorizao de uso da tabela Func.
Observe, no entanto, que ambos puderam executar a rotina e efetuar a leitura da tabela Func, cujo dono Desenv.
Observe ainda que o Oracle descobriu que a tabela Func, a ser usada na funo, pertencia ao usurio Desenv
(mesmo que houvesse uma tabela Func no schema de Davi ou Daniel, a tabela Func lida seria a de Desenv).
CAPTULO 3 PL/SQL
8 EXCEPTION
9 WHEN NO_DATA_FOUND THEN
10
RETURN -1;
11 END;
12 /
Funo criada.
SQL> GRANT EXECUTE ON SALARIO TO DAVI, DANIEL;
Operao de Grant bem-sucedida.
SQL> CONNECT DANIEL/DANIEL@DESENV
Conectado.
SQL> SELECT DESENV.SALARIO(200) FROM DUAL;
SELECT DESENV.SALARIO(200) FROM DUAL
*
ERRO na linha 1:
ORA-00942: a tabela ou view no existe
ORA-06512: em DESENV.SALARIO, line 5
No exemplo acima, suponha que tenhamos retornado ao usurio Desenv e feito a criao da rotina Salrio utilizando
a clusula AuthId Current_User.
Quando o usurio Daniel tentou executar a funo, recebeu um erro (no em relao funo) em relao tabela
Func a que a funo faz acesso. A mensagem de erro indica que a tabela (ou view) no foi encontrada no schema
do usurio Daniel, onde a pesquisa foi feita.
REFERNCIAS EXTERNAS
Quando especificamos a clusula AuthId Current_User, os privilgios do executor da rotina so verificados a tempo
de execuo e as referncias externas so resolvidas no schema deste executor, presentes em:
CUIDADOS ADICIONAIS
Neste tpico, listaremos alguns cuidados que deveremos observar na criao e uso da clusula AuthId com a
opo Current_User.
Apesar de a rotina ser executada com os privilgios do executor, o criador da rotina precisa ter os privilgios
referentes aos objetos acionados pela rotina a tempo de compilao, pois esta verificao ser feita. Suponha,
portanto, que os usurios Davi e Daniel possuam uma tabela Func em seus schemas e que o usurio Desenv no
possua essa tabela. A criao da rotina Salario no seria possvel, apesar de a tempo de execuo cada usurio
(Davi e Daniel) fazer acesso sua prpria tabela. Uma soluo de contorno para este problema seria a criao de
uma tabela Func no schema do usurio Desenv, contendo pelo menos as colunas utilizadas na rotina.
Outra questo a ser analisada seria a situao inversa a esta anterior. Suponhamos que desejssemos que os
usurios que executassem esta rotina fizessem acesso exatamente tabela Func do usurio Desenv. Para tal
deveramos usar, na clusula From, o texto Desenv.Func para ter esta garantia ou, ainda, criar um sinnimo
pblico para a tabela (esta segunda opo s no resolveria a situao se o usurio executor tivesse uma tabela
prpria com o nome de Func).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
333
FROM DUAL;
DUAL
existe
line 5
Observe no exemplo da Listagem 3.113 que o usurio Davi recebeu o privilgio de acesso tabela Func do usurio
Desenv, mas esta ao no foi suficiente para que a execuo da rotina Salrio fosse bem-sucedida. Houve necessidade
da criao do sinnimo que indicasse ao Oracle (a tempo de execuo) a que tabela Func deveria ser feito o acesso.
CAPTULO 3 PL/SQL
No exemplo da Listagem 3.114, criamos uma rotina no banco de dados chamada Teste. Essa rotina declara
internamente uma procedure (Aumento) que recebe como parmetro uma Index-By Table derivada de um Record.
Os dois tipos so declarados dentro da procedure Teste, antes da declarao da procedure Aumento.
De um modo geral, devemos declarar os tipos, as variveis e os cursores antes das procedures e functions em
qualquer bloco de PL/SQL. As rotinas devem ser as ltimas definies presentes na parte declarativa.
Da mesma forma que nesse exemplo, poderamos definir um tipo que fosse usado na clusula Return de uma funo.
Observe que a passagem de parmetro ocorre da mesma forma que para um escalar. A varivel passada como
parmetro possui o tipo da Index Table.
No exemplo da Listagem 3.115, observamos a criao de uma procedure Verifica que declara internamente a
funo Nome. Essa funo recebe como parmetro uma Index-By Table baseada em um escalar (varchar2) e retorna
outra Index-By Table tambm baseada em um escalar (varchar2).
A chamada da funo, nesse caso, pode ser feita de duas formas (linhas 26 e 27). Na primeira, usamos uma rea
receptora de formato idntico ao retorno da funo, isto , uma Index-By Table baseada em um Varchar2. No
segundo caso, utilizamos como rea receptora um escalar simples (Texto) que receber a segunda posio da Nested
Table retornada e no a tabela inteira. A segunda sintaxe, apesar de menos elegante e primeira vista confusa,
pode ser usada se desejarmos obter apenas uma determinada informao do array retornado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
335
Nesse caso, utilizamos a soma das colunas cargo e grau de instruo na criao do ndice.
Finalmente, no exemplo da Listagem 3.118, criamos um ndice baseado em uma funo definida pelo usurio.
Observe que a funo possui a clusula Deterministic; esta utilizao necessria, pois esta clusula indica que se
repetirmos os mesmos parmetros para a funo ela produzir o mesmo resultado.
Se o ndice far o clculo da funo para todas as linhas da tabela, indispensvel que o valor gerado pela funo
se mantenha constante independentemente do ambiente ou do usurio que estiver executando.
EXERCCIOS
3.40) Qual a diferena entre Procedures e Functions?
3.41) Crie uma funo armazenada no banco de dados que retorne o nome do departamento, cujo cdigo deve ser
passado como parmetro. Caso o departamento no exista, a funo deve retornar Departamento Inexistente.
3.42) Crie uma funo ou procedure na base de dados que determine o departamento que possui menos funcionrios.
3.43) Crie uma funo ou procedure na base de dados que receba como parmetro um cdigo de departamento e
determine o ramal do gerente do departamento. Caso o departamento no tenha gerente, dever ser escolhido o
ramal do funcionrio com maior cargo deste departamento (se existir mais de um, obtenha o ramal do funcionrio
mais velho e com maior cargo).
3.44) Crie uma funo ou procedure na base de dados que receba como parmetro um grau de instruo e um
cdigo de departamento e determine o cargo e o salrio correspondentes a estes parmetros. Se existir mais de um,
escolha o do funcionrio mais novo. Se no existir nenhum, retorne Null.
3.45) Crie um programa na base de dados que realize a admisso dos funcionrios. Esse programa dever receber
como parmetro nome completo (nome e sobrenome), data de nascimento, sexo e grau de instruo.
Para a construo do programa, as seguintes regras devem ser estabelecidas:
CAPTULO 3 PL/SQL
3.46) Crie uma funo que receba como parmetro uma Index-By Table e retorne os dados da Index-By Table em
ordem crescente.
3.47) Faa uma rotina que receba como parmetro um nmero de cargo e determine o nome do funcionrio mais
velho com aquele cargo. Se no houver ningum, o programa deve abortar com o erro Oracle correspondente.
Faa um programa que acione o programa anterior, e de acordo com seu resultado mostre o nome do funcionrio
ou a mensagem Nenhum funcionrio para o cargo Informado.
3.48) Crie um programa para gravar informaes na tabela criada na Listagem-resposta 3.48A.
Listagem-resposta 3.48A
SQL> CREATE TABLE RESULTADO
2 (COD
NUMBER,
3
QTD
NUMBER);
Tabela criada.
Criar uma funo ou procedure interna ao programa que receba como parmetro o cdigo do departamento e
retorne a quantidade de funcionrios que trabalham neste departamento.
Criar uma funo ou procedure que receba como parmetro um cdigo de departamento e transforme-o em
numrico (use Translate).
A primeira funo recebe como parmetro um cdigo de cargo e calcula o nmero de funcionrios com aquele
cargo. Caso a quantidade de funcionrios seja mpar, deve ser acionada a outra funo.
A segunda funo recebe como parmetro um cargo. Se o nmero for mpar, deve retornar a quantidade de
funcionrios do sexo feminino com o cargo informado. Se o nmero for par, deve retornar a quantidade de
funcionrios do departamento D11 com aquele cargo. Neste caso tambm deve ser acionada a primeira funo.
O programa principal deve acionar a primeira funo ou a segunda de acordo com o parmetro opo:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
337
TCNICA
Apresentao de exemplos que abordem a amplitude de uso dos pacotes.
CONCEITO
Um package uma rea para armazenamento de subprogramas, tipos, constantes, cursores e variveis de PL/SQL.
Um package definido em duas partes: uma parte de especificao e uma parte de corpo.
PACKAGE SPECIFICATION
A especificao a interface com as aplicaes. nela que declaramos os tipos, variveis, constantes, excees,
cursores e subprogramas que desejamos que sejam visveis e compartilhveis pelas aplicaes. Tudo que for definido
na parte de especificao pode ser compartilhado.
A definio dos subprogramas e cursores no completa; fazemos apenas uma definio do tipo Forward uma vez
que as aplicaes s necessitam saber quais os parmetros a serem passados para a rotina (ou cursor) e quais os
retornos fornecidos. No h necessidade de se saber como a rotina efetua a operao.
Na Sintaxe 3.23, est definida a parte de especificao de um pacote. Apesar de a sintaxe do pacote lembrar a
sintaxe de definio de rotinas, os pacotes diferem das rotinas nos seguintes aspectos: no podem ser chamados,
parametrizados ou definidos dentro de outros pacotes.
O objetivo de empacotar primeiramente organizacional. O pacote oferece a possibilidade de juntarmos itens e
subprogramas que realizam aes associadas.
Na Listagem 3.119, criamos um pacote contendo as rotinas necessrias para a manuteno da tabela Func. Podemos
incluir novos funcionrios e remov-los. O cursor definido permite a consulta das informaes.
Observe que as informaes declaradas no pacote determinam quais os nomes das rotinas e itens, os parmetros
recebidos e o retorno esperado. No definimos detalhes de implementao. Isto ser feito no corpo.
CAPTULO 3 PL/SQL
PACKAGE BODY
Na parte de corpo do pacote, definimos por completo todas as rotinas. No s aquelas declaradas na parte de
especificao como tambm todas aquelas rotinas que sero chamadas pelas outras, mas que no desejamos
disponibilizar diretamente para as aplicaes.
Definimos tambm, agora, os cursores por completo, alm de todas as variveis que venham a ser usadas pelas
rotinas e que no desejamos disponibilizar para as demais aplicaes.
O corpo implementa detalhes e declaraes privadas que so invisveis pelas aplicaes.
Na Listagem 3.120, vemos parte da definio do corpo do pacote Pfunc, onde completamos a definio do cursor
e das rotinas declaradas na especificao.
Uma vez que apenas a parte de especificao utilizada para compilao dos programas que faam uso dos pacotes,
podemos alterar o corpo do pacote sem haver necessidade de recompilar os programas que o usam.
RESTRIES
Como restries definio e acesso a pacotes, temos:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
339
No podemos fazer referncia a variveis Bind dentro de pacotes. Variveis Bind so aquelas variveis definidas
no ambiente do aplicativo (por exemplo, :msg no SQL*Plus).
USANDO PACKAGES
Para fazermos referncia aos tipos, objetos e subprogramas definidos dentro da rea de especificao de um pacote,
devemos mencionar o nome do pacote como qualificador do item, como no exemplo da Listagem 3.121.
No exemplo da Listagem 3.121, fizemos uma referncia ao cursor Cfunc definido dentro do pacote Pfunc usando
o nome do pacote como qualificador (Pfunc.Cfunc).
A Oracle organiza as rotinas utilitrias (predefinidas) em pacotes. Nos tpicos seguintes, conheceremos alguns
destes pacotes que possuem rotinas de grande utilidade para o desenvolvimento de aplicaes no ambiente Oracle.
No exemplo da Listagem 3.121 usamos a rotina Put_Line de um pacote chamado Dbms_Output com o objetivo de
obter o valor da coluna Nome lida no comando Select (associado ao cursor Cfunc declarado no pacote).
Tipo
In/Out Default?
-------------------- ------------- -------NUMBER
IN
Tipo
In/Out Default?
-------------------- ------------- -------VARCHAR2
IN
DATE
IN
VARCHAR2
IN
NUMBER
IN
PFUNC.CFUNC%ROWTYPE;
FUNC.CD_MAT%TYPE := &MAT;
CAPTULO 3 PL/SQL
5
OPEN PFUNC.CFUNC(MAT);
6
FETCH PFUNC.CFUNC INTO RFUNC;
7
IF PFUNC.EXCLUI(MAT) THEN
8
:MSG := TO_CHAR(RFUNC.NASC, 'DD/MM/YYYY');
9
END IF;
10
CLOSE PFUNC.CFUNC;
11 EXCEPTION
12
WHEN OTHERS THEN
13
CLOSE PFUNC.CFUNC;
14 END;
15 /
Entre o valor para mat: 140
antigo
3:
MAT
FUNC.CD_MAT%TYPE := &MAT;
novo
3:
MAT
FUNC.CD_MAT%TYPE := 140;
Procedimento PL/SQL concludo com sucesso.
MSG
----------------------------19/01/1956
Observe a criao da rea Rfunc com o layout do cursor Cfunc declarado no package Pfunc. O cursor no precisa
ser declarado no programa uma vez que sua especificao j est feita no package. Dentro do programa, faremos
apenas a abertura do cursor, obteno das linhas e fechamento do cursor. Observe que houve uma preocupao
com o fechamento do cursor (em caso de qualquer erro, o cursor fechado). Isto foi feito porque as variveis do
pacote e o estado do cursor permanecem disponveis at que a sesso seja fechada.
Observe que na Listagem 3.124 o programa foi executado a primeira vez e no houve fechamento do cursor. Na
segunda execuo, recebemos um erro indicando que o cursor ainda permanecia aberto.
Isso ocorre exclusivamente com objetos de pacotes. Quando mencionamos pela primeira vez um elemento de um
pacote em uma sesso, todo o pacote carregado na memria. Os elementos definidos no pacote podem ser
compartilhados pelos diversos procedimentos que forem executados nesta sesso. Seus valores no so reinicializados
at que a sesso conclua. Desta forma podemos utilizar pacotes para troca de informaes entre processos que
executem na mesma sesso.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
341
VARCHAR2(100);
NUMBER;
RETURN FUNC%ROWTYPE;
As variveis foram inicializadas na parte de inicializao do pacote da seguinte forma: a data recebeu a data corrente,
o nome indica vazio e o nmero foi inicializado com zero.
Na Listagem 3.126, apresentamos um programa que consulta e modifica o valor das variveis do pacote. O primeiro
passo do programa verificar o valor atual das trs variveis (a funo CHR com o valor 10 inclui uma quebra de
linha no texto armazenado na varivel MSG). O segundo passo do programa modificar o valor das trs variveis
de acordo com um valor de matrcula recebido como parmetro.
Na primeira execuo, verificamos que o valor das variveis do pacote correspondem aos valores da inicializao.
Em seguida, repetimos a execuo e observamos que os valores apresentados correspondem aos dados do funcionrio
de matrcula 120, passado como parmetro na primeira execuo.
CAPTULO 3 PL/SQL
Qualquer referncia s variveis definidas nesse pacote durante a sesso atual recuperar os valores correntes
destas variveis. Seus valores somente sero perdidos quando houver uma troca de sesso. Veja Listagem 3.128.
OVERLOADING
J sabemos que a PL/SQL permite a definio de dois subprogramas com o mesmo nome, desde que seus parmetros
formais sejam diferentes em nmero, ordem ou tipo familiar (por exemplo, Integer e Real so tipos diferentes,
porm pertencem ao mesmo grupo familiar). Essa caracterstica chamada de Overloading.
Como restrio, temos que esta tcnica s se aplica a subprogramas locais ou subprogramas definidos em pacotes.
A caracterstica de Overloading pode ser bastante explorada quando definimos as rotinas dentro de pacotes.
Na Listagem 3.129, criamos trs funes todas com o nome de Display. A primeira recebe como parmetro uma
data, a segunda um texto e a terceira um nmero.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
343
Na Listagem 3.130, verificamos que as trs execues da rotina Display retornaram informaes diferentes, de acordo
com o parmetro informado. O Oracle determina o tipo do parmetro recebido e aciona a rotina Display correspondente.
NVEL DE PUREZA
Para que uma funo possa ser utilizada em um comando de SQL DML, ela deve respeitar determinadas regras:
A funo no pode modificar tabelas do banco de dados, ou seja, no pode executar os comandos INSERT,
UPDATE ou DELETE.
Funes que lem ou modificam os valores de variveis em pacotes no podem ser executadas remotamente ou
em paralelo.
Somente funes chamadas nas clusulas SELECT, VALUES ou SET podem modificar o valor de variveis de pacotes.
A funo no poder chamar outro subprograma que fira uma das regras acima. Da mesma forma, a funo no
poder fazer referncia a uma VIEW que fira uma das regras acima (o Oracle substitui a referncia a uma VIEW
por um stored SELECT que pode incluir uma chamada de funo).
As funes isoladas, isto , armazenadas diretamente no banco de dados podem ter estas regras verificadas quando
acionadas por alguma aplicao (ou diretamente por um comando de SQL), ou seja, quando uma aplicao (ou
comando de SQL) menciona uma funo armazenada no banco de dados, o Oracle faz a verificao do nvel de
pureza da funo e retorna ou no um erro, dependendo do emprego (ver as regras do nvel de pureza).
Quando armazenamos funes em pacotes, a verificao no possvel uma vez que, para efeito de compilao de
uma aplicao ou de um comando de SQL, tudo que precisamos ter definido a parte de especificao do pacote. Na
parte de especificao no sabemos, ainda, se a rotina atualiza ou no o banco de dados, se modifica ou no variveis
de pacotes, etc.; seria necessria uma verificao do corpo da rotina. Para que essa ao no seja necessria (o que
feriria todo o conceito de package), devemos adicionar na parte de especificao uma pragma (diretiva de compilao,
j comentada anteriormente) chamada Restrict_References a fim de garantir o nvel de pureza que desejarmos. Quando
o corpo do pacote for compilado, as restries que tivermos estabelecido sero verificadas. Houve modificaes no
uso desta pragma como veremos mais adiante (a partir da 8i). Seu uso foi bastante reduzido.
CAPTULO 3 PL/SQL
Listagem 3.131 A pragma Restrict-References
SQL> CREATE OR REPLACE PACKAGE PDML IS
2
FUNCTION DISPLAY (DATA IN DATE) RETURN VARCHAR2;
3
PRAGMA RESTRICT_REFERENCES(DISPLAY, WNDS, WNPS, RNDS, RNPS);
4 END PDML;
5 /
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY PDML IS
2
FUNCTION DISPLAY (DATA IN DATE) RETURN VARCHAR2 IS
3
BEGIN
4
RETURN 'DATA = '||TO_CHAR(DATA, 'DD/MM/YY HH24:MI');
5
END;
6 END PDML;
7 /
Corpo de Pacote criado.
Na Listagem 3.131, observamos que a pragma includa na parte de especificao possui cinco parmetros que
indicam qual o nvel de pureza desejado.
O primeiro parmetro determina o nome da funo que estamos verificando e de preenchimento obrigatrio.
O segundo parmetro (WNDS Write no database state) indica que a funo no atualizar o banco de dados e
tambm obrigatrio se desejarmos que a funo possa vir a ser utilizada em algum comando de SQL. Os demais
parmetros so opcionais e indicam:
WNPS write no package state indica que a funo no dever modificar variveis de pacotes.
RNDS read no database state indica que a funo no far leituras de tabelas do banco de dados.
RNPS read no package state indica que a funo no far leituras a variveis de pacotes.
Por exemplo, se desejarmos que a funo seja utilizada remotamente em comandos de SQL DML, devemos garantir
que ela no leia ou modifique o valor de variveis de pacotes (WNPS e RNPS).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
345
DATA
TEXTO
SALARIO
------------------------- --------------- --------------------- -----------DATA = 14/08/53 00:00
TEXTO = TESTE
NUMERO =
Cr$16.537,99
FROM DUAL;
DUAL
O fato de no precisarmos utilizar a pragma no quer dizer que podemos atualizar o banco de dados em um
comando Select. O exemplo da Listagem 3.134 nos mostra que a leitura foi executada normalmente, pois no feria
CAPTULO 3 PL/SQL
o nvel de pureza; porm, a gravao foi impedida. No precisamos, no entanto, definir a pragma para que essas
validaes sejam realizadas.
A pragma Restrict_References permanece disponvel para garantir que a rotina desenvolvida possua apenas os
efeitos desejados.
RESTRIES
Quando um comando de SQL executado, algumas verificaes so feitas para saber se o comando est logicamente
embutido dentro da execuo de um comando SQL j em execuo. Isto ocorre se o comando est sendo executado
de um trigger ou de uma funo que j foi chamada de um outro comando SQL. Estas verificaes so realizadas,
implicitamente, sem a necessidade da Pragma (se desejarmos restries adicionais, devemos usar a pragma).
Nestes casos, as seguintes restries so aplicveis:
Uma funo chamada de uma query ou um comando DML no pode encerrar a transao corrente, criar um
savepoint ou retornar (rollback) para um savepoint. Nem efetuar um comando Alter System ou Alter Session.
Uma funo chamada de uma query (SELECT) ou de um comando DML executado em paralelo no pode
executar um comando de DML que modifique o banco de dados.
Uma funo chamada de um comando DML no pode ler ou modificar uma tabela que esteja sendo modificada
pelo comando DML que a chamou.
Estas restries se aplicam independentemente de qual mecanismo for usado para a execuo do comando de SQL
dentro da funo ou trigger:
Se aplicam a comandos SQL chamados de PL/SQL quando embutidos diretamente no texto (de uma rotina ou trigger)
ou que estejam embutidos em strings para execuo dinmica (usando Execute Immediate ou o pacote Dbms_Sql).
Se aplicam a comandos embutidos em Java com sintaxe SQLJ ou que executem usando JDBC.
Se aplicam a comandos executados com OCI usando CallBack Context de dentro de uma funo External C.
Como soluo de contorno para estas situaes temos o uso de transaes Autnomas, que so executadas em uma
sesso independente daquela que a chamou (ver tpico deste assunto).
O ARGUMENTO TRUST
A Pragma Restrict_References ganhou mais um argumento, alm dos quatro anteriores (WNDS, WNPS, RNPS,
RNDS). O argumento Trust facilita a chamada de funes que tenham a declarao Restrict_References para aquelas
que no tm. Este argumento promete ao compilador que as restries declaradas na pragma sero respeitadas,
no havendo necessidade real de o compilador efetuar a verificao.
Isto pode ser til quando temos um cdigo que est usando a pragma e que aciona outro que no est. Temos duas
formas de resolver esta situao:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
347
VL_SAL = SALARIO
CD_MAT = MAT;
SQL%ROWCOUNT;
CALL_GRAVA(MAT IN NUMBER) RETURN VARCHAR2 IS
GRAVA(MAT, 5000);
criado.
No exemplo da Listagem 3.135, observamos que a rotina Grava utilizou a pragma Restrict_References com a
finalidade de permitir a compilao do pacote (ela mentiu para o compilador).
Como teste, retire o texto PRAGMA RESTRICT_REFERENCES (GRAVA, WNDS, TRUST); da especificao do pacote
e verifique o erro de compilao recebido. Este erro ocorre porque a rotina chamadora (Call_Grava) possui a
indicao da pragma sem a nova clusula Trust. Isto faz com que o compilador verifique no s o cdigo dela
como tambm o cdigo dos programas chamados por ela.
A soluo apresentada na Listagem 3.135 uma das formas de resolver a questo. A segunda opo seria a colocao
da pragma apenas para a rotina Call_Grava, porm com a incluso da opo Trust.
A execuo apresentada pela Listagem 3.137 indica que a chamada funcionou. No houve erro porque, nas condies
de uso da rotina, a atualizao do banco de dados permitida.
A utilizao feita pela Listagem 3.138, no entanto, retorna um erro, porque houve violao do nvel de pureza.
CAPTULO 3 PL/SQL
PACKAGE STANDARD
Esse pacote define o ambiente PL/SQL. Todas as funes de SQL que se aplicam a PL/SQL esto nele definidas.
A parte de especificao desse pacote define tipos, condies de erro e subprogramas que se tornam disponveis,
automaticamente, para cada aplicao escrita em PL/SQL.
Como o contedo do pacote diretamente visvel pelas aplicaes, podemos acion-lo de um database trigger
(veremos mais adiante), um subprograma armazenado na base de dados, uma aplicao escrita em uma linguagem
Host (usando Oracle Precompiler), uma aplicao OCI e de vrias ferramentas, incluindo Forms Builder, Reports
Builder e SQL*Plus.
Nas aplicaes, no temos necessidade de mencionar o nome do pacote para que as funes sejam utilizadas
(Standard.To_Char). No entanto, este procedimento pode ser feito sem problemas.
Na Listagem 3.139, criamos uma funo ABS local e comparamos o resultado desta funo com o resultado da
funo ABS presente no pacote Standard.
PACKAGE DBMS_STANDARD
Este pacote fornece facilidades para a linguagem PL/SQL que ajudam as aplicaes a interagirem com o Oracle Rdbms.
In/Out Default?
------------------IN
In/Out Default?
------------------IN
DEFAULT
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
349
Na Listagem 3.140, vemos uma parte das funes e procedures presentes no pacote Dbms_Standard.
PACKAGE DBMS_OUTPUT
Com este pacote, podemos trocar informao entre aplicaes ou obter informaes (display) para efeito de
depurao. Podemos visualizar as informaes enviadas por uma aplicao PL/SQL no SQL*Plus se usarmos o
comando SET com a opo SERVEROUTPUT ON.
No exemplo da Listagem 3.141, usamos o comando Set Serveroutput On no SQL*Plus e a execuo do bloco de PL/
SQL utilizou a procedure Put_Line do pacote DBMS_OUTPUT. Ao trmino do programa, o texto Funo Correta
foi apresentado. Essa forma de utilizao muito til para depurao de aplicaes.
PACKAGE DBMS_PIPE
Este pacote permite a troca de informaes entre aplicaes de diferentes sesses e at de diferentes usurios
atravs de uma rea de memria chamada Pipe.
PACKAGE UTL_FILE
Com este pacote podemos gerar e/ou ler informaes de arquivos de texto externos ao banco de dados. Oferece
uma variedade de rotinas que nos permitem a abertura, leitura, fechamento e gravao de dados no arquivo.
CAPTULO 3 PL/SQL
PACKAGE DBMS_SQL
Tem a finalidade de permitir que aplicaes executem comandos de SQL DML e DDL dinamicamente a tempo de
execuo. A execuo de um comando dinamicamente significa que o comando que desejamos executar ser
passado para o Oracle em uma string e no explicitamente codificado dentro do aplicativo.
PACKAGE DBMS_ALERT
Permite que acionemos database triggers quando valores especficos forem modificados no banco de dados.
PACKAGE DBMS_RANDOM
Permite a gerao de nmeros randmicos.
PACKAGE DBMS_FLASHBACK
Permite que tenhamos acesso a informaes anteriores ao Commit que efetivou a alterao.
PACKAGE DBMS_LOB
Manipulao de Lobs.
PACKAGE DBMS_ROWID
Consulta e converso de valores de Rowid.
PACKAGE UTL_HTTP
Esse pacote permite que programas PL/SQL faam chamadas HTTP. Podemos us-lo para recuperar dados da Internet
ou efetuar chamada ao Oracle Web Server.
EXERCCIOS
3.52) Crie um pacote que tenha uma rotina que receba como parmetro:
A) Um numrico e retorne um alfanumrico com o valor editado para o formato monetrio brasileiro e smbolo
financeiro R$.
B) Um alfanumrico e retorne um alfanumrico com o texto apresentado de trs para a frente.
C) Uma data e retorne um alfanumrico com as seguintes caractersticas: dia da semana, dia no ano, ms por
extenso, ms em algarismos romanos, ano por extenso e ano ISO.
Use Overloading.
3.53) Crie duas funes em um pacote. A primeira dever ler o funcionrio cuja matrcula foi recebida como
parmetro. Se o funcionrio tiver mais de dez anos de casa, salrio inferior a 2.500,00 e no tiver recebido promoo
no ltimo ano, a segunda rotina dever ser acionada. A segunda rotina recebe como parmetro um cdigo de
matrcula e efetua a promoo do funcionrio gerando um aumento de 10% e registrando esta atualizao no
histrico. Garanta que estas rotinas sejam disponibilizadas para todos os usurios, mas que somente aqueles com
acesso s tabelas mencionadas possam atualiz-las.
3.54) Crie uma funo em um pacote que receba um texto e retorne o mesmo texto com todas as letras maisculas.
Essa funo deve ser testada em um comando Update para atualizao dos nomes e sobrenomes dos funcionrios.
3.55) Crie um pacote que declare uma varivel Date, uma varivel Varchar2(100) e uma varivel Number.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
351
METODOLOGIA
Apresentao e descrio dos componentes do pacote.
TCNICA
Apresentao prtica da utilizao dos componentes do pacote.
CONCEITO
Este pacote tem a finalidade de enviar mensagens a partir de procedures, packages ou triggers. Ele se utiliza de um
buffer em memria para transferncia das mensagens.
CAPTULO 3 PL/SQL
Quando um programa envia mensagens atravs do pacote Dbms_Output, essas mensagens so armazenadas na
rea de buffer e somente apresentadas ao trmino do programa.
Caso estejamos executando o programa no SQL*Plus ou Server*Manager, basta que executemos o comando Set
Serveroutput On para que todas as mensagens enfileiradas pelo programa sejam apresentadas.
Se estivermos executando rotinas encadeadas ou blocos annimos, podemos obter as linhas geradas pelo programa
anterior usando a rotina Get_Line do prprio pacote.
Tipo
Descrio
Enable
Procedure
Disable
Procedure
Put
Procedure
New_Line
Procedure
Put_Line
Procedure
Inclui uma informao na rea de buffer e adiciona, simultaneamente, o caracter para quebra de linha.
Get_line
Procedure
Get_lines
Procedure
Chararr
Type
Tipo tabela de varchar2(255). Pode ser usado para obteno de diversas linhas da rea de buffer.
A Sintaxe 3.25 mostra as rotinas que compem o pacote com seus respectivos parmetros.
A seguir, detalharemos cada uma das rotinas que compem o pacote.
ENABLE
Esta procedure habilita chamadas para Put, Put_Line, New_Line, Get_Line e Get_Lines.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
353
Devemos especificar o tamanho da rea de buffer em bytes. Esse tamanho pode variar de 2.000 (default) at
1.000.000. Se esse tamanho for excedido, receberemos uma mensagem de erro (ORU-10027: Buffer overflow, Limit
of buffer_limit bytes).
Podemos executar essa procedure diversas vezes. O maior valor de buffer especificado dentre as mltiplas chamadas
o que ser utilizado.
Na Listagem 3.142, a procedure Enable alocou uma rea de buffer de 2.000 bytes. Seu uso dispensado para
tamanhos inferiores a 20000 bytes pois este o tamanho default da rea de buffer. A procedure Put_Line incluiu o
texto Teste na rea de buffer e esse texto foi apresentado ao trmino da execuo do programa.
DISABLE
Esta procedure desabilita as chamadas para Put, Put_Line, New_Line, Get_Line e Get_Lines e limpa o buffer.
Na Listagem 3.143, utilizamos a procedure Disable. Observe que, mesmo executando um Put_Line posteriormente,
nenhum resultado foi apresentado. A utilizao dessa procedure pode ser til quando estivermos depurando um programa
e no desejarmos mais que algumas mensagens sejam informadas. Como a chamada da rotina Disable um comando,
este pode ser includo dentro de um IF estabelecendo uma situao condicional de aparecimento ou no das mensagens.
PUT
Estas procedures esto overloading no pacote. So trs rotinas, cada qual recebendo um tipo de parmetro. O
parmetro enviado ser armazenado na rea de buffer imediatamente aps a ltima informao. No includo
qualquer caracter indicativo de fim de linha.
O uso da rotina Put deve levar em considerao que, a tempo de leitura, as procedures Get_Line e Get_Lines no
retornam uma linha que no tenha sido terminada com o caracter newline.
Se o tamanho especificado pelo buffer for excedido, ser recebida uma mensagem de erro.
Devemos lembrar que, ao passarmos uma data ou um numrico para a rotina Put (ou Put_Line) correspondente,
esta far a converso default (To_Char) para string. Se desejarmos um formato especfico, devemos usar
explicitamente a rotina To_Char e passar o parmetro como alfanumrico.
CAPTULO 3 PL/SQL
Listagem 3.144 A rotina Put
SQL> SET SERVEROUT ON
SQL> BEGIN
2
DBMS_OUTPUT.PUT('T');
3
DBMS_OUTPUT.PUT('E');
4
DBMS_OUTPUT.PUT('S');
5
DBMS_OUTPUT.PUT('T');
6
DBMS_OUTPUT.PUT('E');
7
DBMS_OUTPUT.NEW_LINE;
8 END;
9 /
TESTE
Procedimento PL/SQL concludo com sucesso.
Neste exemplo (Listagem 3.144), usamos a procedure Put cinco vezes, cada uma delas com uma letra da palavra
Teste. O resultado foi apresentado em uma nica linha contendo todos os caracteres armazenados individualmente.
NEW_LINE
Esta procedure coloca uma marca de fim de linha no buffer. Normalmente, usamos esta procedure aps uma ou
mais chamadas procedure Put para indicar fim de mensagem.
Cada chamada a New_Line gerar uma linha a ser retornada pelo Get_Line.
PUT_LINE
Estas procedures enviam o parmetro informado para a rea de buffer, acrescentando, automaticamente, um caracter
indicativo de fim de linha aps o texto enviado.
Devemos lembrar que, ao passarmos uma data ou um numrico para a rotina Put (ou Put_Line) correspondente,
esta far a converso default (To_Char) para string. Se desejarmos um formato especfico, devemos usar
explicitamente a rotina To_Char e passar o parmetro como alfanumrico.
Na Listagem 3.145, utilizamos o mesmo exemplo anterior, substituindo a procedure Put pela Put_Line. O resultado
apresentou cinco linhas, pois aps cada texto enviado para o buffer foi acrescido um indicador de fim de linha.
GET_LINE
Esta procedure recupera uma nica linha da informao do buffer, excluindo o caracter newline final. O tamanho
mximo da linha de 255 bytes.
Se a procedure concluir com sucesso, o status retornado zero, e caso contrrio 1, indicando que no existem linhas
no buffer.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
355
Na Listagem 3.146, criamos dois blocos dentro de um programa. No primeiro bloco, preenchemos o buffer com
Sysdate, um nmero, um texto, uma data formatada e um nmero formatado. No segundo bloco, utilizamos a
rotina Get_Line para obter uma linha de cada vez e concatenamos a linha obtida na varivel de ambiente msg.
Observe a diferena de formatao quando enviamos diretamente a data (ou nmero) e quando formatamos o
resultado. Observe, ainda, que, quando recuperamos a linha do buffer, a rotina Get_Line remove o caracter indicativo
de quebra de linha do texto retornado.
GET_LINES
Esta procedure recupera um conjunto de linhas e pode ser usada no lugar da Get_Line para reduzir o nmero de
chamadas ao servidor. Devemos especificar o nmero de linhas que desejamos recuperar do buffer.
A procedure retorna tambm o nmero real de linhas recuperado. Se esse nmero for menor que o nmero de
linhas requisitado, significa que no existem mais linhas no buffer.
Quando reutilizamos a rea de buffer aps uma leitura, todas as linhas restantes ainda presentes no buffer so
descartadas para que a rea possa ser preenchida novamente.
Cada linha no array pode ter at 255 bytes de comprimento.
CAPTULO 3 PL/SQL
12
BEGIN
13
:MSG := '';
14
DBMS_OUTPUT.GET_LINES(LINHAS, ACHOU);
15
FOR I IN 1..ACHOU LOOP
16
:MSG := :MSG || LINHAS(I) || '; ';
17
END LOOP;
18
END;
19 END;
20 /
Procedimento PL/SQL concludo com sucesso.
MSG
------------------------------------------------------18/11/01; 12345; TESTE; 18/11/2001 17:41; Cr$12.345,00;
No exemplo (Listagem 3.147), substitumos o uso da rotina Get_Line pela chamada da Get_Lines. Solicitamos a
leitura de dez linhas (valor inicial da varivel Achou). O resultado mostrou que havia apenas trs linhas na rea de
buffer. Observe que o tipo da varivel Linhas Dbms_Output.Chararr, ou seja, um tipo Table definido dentro do
pacote Dbms_Output. Cada linha desta tabela PL/SQL tem comprimento mximo de 255 bytes.
Funo criada.
Na Listagem 3.148, criamos uma funo de base que est preenchendo a rea de buffer com dados da leitura da
tabela Func.
Na Listagem 3.149, fizemos uma execuo da funo no SQL*Plus para verificar o resultado acumulado.
As mensagens so apresentadas na linha do SQL*PLUS.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
357
Neste bloco annimo, fizemos uma chamada funo Deptosal gerada anteriormente. A funo preenche a rea de
buffer. Essa rea visvel pelo bloco (ou rotina) que acione a rotina ou bloco que preenche o buffer. Com a rotina
Get_Lines, fizemos a leitura das linhas presentes no buffer e atribumos as diversas linhas varivel de ambiente Msg.
EXERCCIOS
3.59) Descreva com suas palavras o pacote DBMS_OUTPUT.
3.60) Crie um programa que receba como parmetro um nmero de ms e emita uma carta parabenizando o
funcionrio pela data do seu aniversrio (use DBMS_OUTPUT). No deve ser usada stored procedure.
3.61) Usando o pacote DBMS_OUTPUT, gere um arquivo contendo o nome, data de nascimento e salrio dos
funcionrios. Alinhe os dados por coluna.
3.62) Faa uma rotina que usa a DBMS_OUTPUT para colocar no buffer o nome dos aniversariantes do ms (recebido
como parmetro).
3.63) Faa um programa que leia a rea de buffer do programa anterior e verifique se o funcionrio cujo nome ser
fornecido como parmetro aniversariante. Informe o resultado em uma varivel Bind.
3.64) Faa um script que coloque no prompt do SQL*PLUS o nome do usurio e a linguagem em que est o banco
de dados atualmente. Garanta que este script seja executado todas as vezes em que o SQL*Plus for acionado (utilize
seus conhecimentos de SQL*Plus).
3.65) Gere uma rea de buffer com o seguinte layout: nome, sobrenome, data de nascimento (formato dd/mm/
yyyy), sexo e salrio.
Os dados devem ser separados pelo smbolo #.
Caso uma determinada coluna no tenha valor (Null), deve ser substitudo por ** para colunas alfanumricas e
-1 para colunas numricas.
CAPTULO 3 PL/SQL
Use DBMS_OUTPUT para gerar o buffer.
3.66) Faa um programa que leia o buffer gerado pelo programa anterior e crie novas linhas na tabela Func. O
nmero da matrcula deve ser gerado a partir do ltimo armazenado em Func.
METODOLOGIA
Apresentao e descrio dos componentes do pacote.
TCNICA
Apresentao prtica da utilizao dos componentes do pacote.
CONCEITO
O pacote Utl_File possui um conjunto de rotinas que tm a finalidade de permitir o acesso ou gerao de arquivos
externos ao banco de dados. As rotinas so similares aos processos de manipulao de arquivos convencionais.
Para utilizao deste package o DBA deve acrescentar o parmetro UTL_FILE_DIR ao arquivo de inicializao INIT.ORA a fim de determinar quais
diretrios esto disponveis para acesso.
Sabemos que a PL/SQL executa no ambiente Server; desta forma, os arquivos lidos ou gravados com o uso deste pacote sero lidos ou gerados
no ambiente servidor (no ambiente em que se acha o banco de dados).
Este pacote no declara apenas procedures e funes, so declaradas excees e tipos tambm.
O quadro abaixo apresenta um resumo dos diversos objetos presentes no pacote.
Tabela 3.06 Componentes do Package UTL_FILE
Componente
Tipo
Descrio
Invalid_Path
Exception
Invalid_Mode
Exception
Invalid_Filehandle
Exception
Invalid_Operation
Exception
Read_Error
Exception
Write_Error
Exception
Internal_Error
Exception
Fopen
Function
Is_Open
Function
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
359
Componente
Tipo
Descrio
Fclose
Procedure
Fclose_All
Procedure
Get_Line
Procedure
Put
Procedure
Put_Line
Procedure
New_Line
Procedure
Putf
Procedure
Fflush
Procedure
File_Type
Tipo
O contedo do tipo File_Type privativo do pacote Utl_File. Os usurios do pacote no devem fazer referncia ou
modificar seus componentes.
A Sintaxe 3.26 a seguir apresenta as rotinas presentes no pacote e seus respectivos parmetros.
Esse pacote trabalha de forma semelhante ao pacote Dbms_Output no que se refere rea de trabalho. Ele se utiliza
de um buffer em memria para transferncia dos dados a serem armazenados ou lidos do arquivo em disco.
Quando um programa envia linhas para gravao atravs do pacote Utl_File, essas linhas so armazenadas na rea
de buffer e transferidas para disco quando o buffer se enche ou quando acionamos a rotina Fflush, que fora a
gravao do buffer para disco.
A seguir, veremos cada uma das rotinas que compem o pacote, sua ao e as condies de erro que podem ser
adquiridas em cada caso.
CAPTULO 3 PL/SQL
Para que possamos ler e gravar arquivos com este pacote, nosso primeiro passo ser modificar o arquivo Init.ora
presente no diretrio C:\oracle\admin\oracle. Esse arquivo contm diversos parmetros para inicializao do
banco de dados.
Na Figura 3.01, apresentamos um trecho deste arquivo em que acrescentamos a linha Utl_File_Dir = *. Esta sintaxe
permite o acesso a qualquer diretrio da mquina. Como estamos trabalhando com o Personal Oracle9i, a mquina
cliente e a servidora so uma s; desta forma o diretrio a ser utilizado para leitura ou gravao pode ser o disco corrente.
Se desejarmos limitar o acesso para determinados diretrios, devemos usar a sintaxe Utl_File_Dir = <nome dos diretrios>.
O arquivo init.ora somente lido uma vez pelo banco de dados quando o Oracle entra em atividade. Desta forma
no temos outra alternativa a no ser retirar o banco do ar e coloc-lo novamente. Voc pode executar o programa
Services (Iniciar Painel de Controle Ferramentas Administrativas Servios) e selecionar o servio OracleServiceORACLE (se voc tiver instalado o banco de dados mantendo os mesmos nomes sugeridos no Captulo 1). Na parte
superior da janela pressione o boto Reiniciar Servio que ir interromper o servio e ativ-lo novamente ou faa
isso voc mesmo com os botes Interromper Servio e Iniciar Servio. O banco de dados ser encerrado e ativado
juntamente com o servio.
FOPEN
A funo Fopen abre um arquivo para leitura ou gravao. O Path do diretrio j deve existir, uma vez que no
feita criao pelo Fopen.
A funo retorna um file handle que deve ser usado em todas as operaes de I/O subseqentes no arquivo.
Na sintaxe apresentada, observamos que essa funo recebe trs parmetros, a saber:
<max_linesize> na verso 9i foi criada uma outra funo Fopen com um quarto parmetro que indica o tamanho
mximo da linha lida ou gravada. O valor default para este parmetro 1023 bytes e o valor mximo 32767.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
361
DECLARE
SAIDA
UTL_FILE.FILE_TYPE;
LINHA
VARCHAR2(1022);
BEGIN
SAIDA := UTL_FILE.FOPEN('D:\TESTE', 'SAIDA.TXT', 'A');
UTL_FILE.PUT_LINE(SAIDA, 'GRAVAO EXEMPLO 1');
UTL_FILE.FFLUSH(SAIDA);
UTL_FILE.FCLOSE(SAIDA);
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
RAISE_APPLICATION_ERROR(-20000, 'Caminho invlido');
WHEN UTL_FILE.INVALID_MODE THEN
RAISE_APPLICATION_ERROR(-20001, 'Modo de uso invlido');
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20002, 'Operao incompatvel');
END;
/
Na Listagem 3.151, fizemos um pequeno programa que grava uma linha em um arquivo de sada. Como primeiro
passo do programa, declaramos o file handle (Sada) com o tipo Utl_File.File_Type. A segunda etapa definir como
o arquivo deve ser aberto usando-se a rotina Fopen. No nosso caso, usamos a opo A, indicando que se o
arquivo no existir deve ser criado e se j existir os dados devem ser adicionados.
As condies de erro definidas dizem respeito apenas abertura.
A funo Fopen pode causar uma das seguintes condies de erro:
FOPEN_NCHAR
A funo Fopen_Nchar abre um arquivo para leitura ou gravao. Sua sintaxe e forma de trabalho similar da
funo Fopen vista anteriormente, a diferena que o arquivo de entrada formato Unicode em vez do formato
do charset do banco de dados.
IS_OPEN
Testa um file handle para ver se ele identifica um arquivo aberto. Essa funo indica apenas se o arquivo est aberto
ou no, ou seja, se o file handle vlido ou no. Ela no garante que uma operao de I/O posterior usando o file
handle no venha a receber um erro de sistema operacional.
Essa funo no adquire qualquer tipo de condio de erro.
FCLOSE
A procedure Fclose fecha um arquivo identificado por um file handle.
A funo Fclose pode causar uma das seguintes condies de erro:
CAPTULO 3 PL/SQL
Podemos receber uma exceo do tipo WRITE_ERROR se existirem buffers de dados ainda no gravados quando o comando Fclose for executado.
DECLARE
SAIDA
UTL_FILE.FILE_TYPE;
LINHA
VARCHAR2(1022);
BEGIN
SAIDA := UTL_FILE.FOPEN('D:\TESTE', 'SAIDA.SQL', 'A', 2000);
UTL_FILE.PUT_LINE(SAIDA, 'GRAVAO EXEMPLO 2');
UTL_FILE.FFLUSH(SAIDA);
UTL_FILE.FCLOSE(SAIDA);
EXCEPTION
WHEN UTL_FILE.WRITE_ERROR THEN
RAISE_APPLICATION_ERROR(-20003, 'Gravao com erro');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20004, 'Arquivo no identificado');
END;
/
O exemplo da Listagem 3.152 semelhante ao anterior, com a diferena de que o tratamento das condies de erro
diz respeito agora aos possveis erros gerados a tempo de close do arquivo. Observe, tambm, que determinamos
um tamanho mximo de 2000 bytes para a linha a ser gravada.
FCLOSE_ALL
Esta procedure fecha todos os file handle abertos na sesso. A procedure Fclose_All no altera o estado de um file
handle adquirido (aberto) pelo usurio. Isto significa que um teste com Is_Open poder retornar True mesmo aps
o arquivo ter sido fechado, porm nenhuma operao de leitura ou gravao ser vlida at que um novo Fopen
seja realizado para aquele file handle.
A funo Fclose_All pode causar a seguinte condio de erro:
No exemplo da Listagem 3.153, substitumos o fechamento especfico pela rotina Fclose_All. Aps o fechamento,
testamos o estado do file handle e percebemos que ele indica que o arquivo est aberto. Esta situao no ocorre se
usarmos o fechamento especfico de um arquivo empregando Fclose.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
363
GET_LINE
Esta procedure l uma linha de texto de um arquivo aberto identificado pelo file handle e coloca o texto no buffer
de sada (parmetro).
O tamanho default do texto para leitura de 1.023 bytes. Para que venhamos a obter uma linha maior que esta devemos
ter informado este limite ao tempo de abertura do arquivo. A leitura de uma linha em branco gerar uma string vazia.
A operao de leitura pode receber uma das seguintes excees:
DECLARE
SAIDA
UTL_FILE.FILE_TYPE;
LINHA
VARCHAR2(2000);
BEGIN
SAIDA := UTL_FILE.FOPEN('D:\TESTE', 'SAIDA.SQL', 'R', 2000);
:MSG := '';
LOOP
UTL_FILE.GET_LINE(SAIDA, LINHA);
:MSG := :MSG || LINHA || CHR(10);
END LOOP;
EXCEPTION
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20004, 'Arquivo no identificado');
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20002, 'Operao incompatvel');
WHEN UTL_FILE.READ_ERROR THEN
RAISE_APPLICATION_ERROR(-20005, 'Erro de Leitura');
WHEN NO_DATA_FOUND THEN
UTL_FILE.FCLOSE_ALL;
WHEN VALUE_ERROR THEN
RAISE_APPLICATION_ERROR(-20006, 'Verifique o tamanho da linha');
END;
/
MSG
------------------------------GRAVAO EXEMPLO 2
GRAVAO EXEMPLO 2
Na Listagem 3.154, lemos as linhas geradas pelas execues dos exemplos anteriores. Observe que a utilizao das condies
de erro Invalid_Filehandle, Invalid_Operation e Read_Error precisam da presena do nome do pacote precedendo o nome
da exception, uma vez que estas condies esto declaradas dentro do pacote. J as exceptions Value_Error e No_Data_Found
no necessitam deste prefixo, pois so condies de erro predefinidas para todos os blocos de PL/SQL.
A condio de erro No_Data_Found ocorre quando for feita uma tentativa de leitura e j no houver linhas a serem
lidas. Quando isto ocorre no programa, aproveitamos para fechar o arquivo.
CAPTULO 3 PL/SQL
GET_LINE_NCHAR
Esta procedure similar em funcionalidade e sintaxe procedure Get_Line vista anteriormente. Deve ser usada
quando abrirmos o arquivo com Fopen_Nchar (arquivos Unicode).
PUT
Esta procedure armazena o texto presente no buffer no arquivo identificado pelo file handle. A linha includa no
recebe nenhum caracter de fim de linha. necessria a execuo da rotina New_Line para gerar este caracter quando
desejado. Esta rotina tem a mesma funcionalidade da rotina com o mesmo nome existente no pacote Dbms_Output.
A operao de gravao pode receber uma das seguintes excees:
DECLARE
SAIDA
UTL_FILE.FILE_TYPE;
LINHA
VARCHAR2(2000);
BEGIN
SAIDA := UTL_FILE.FOPEN('D:\TESTE', 'SAIDA.SQL', 'A', 2000);
UTL_FILE.PUT(SAIDA, 'T');
UTL_FILE.PUT(SAIDA, 'E');
UTL_FILE.PUT(SAIDA, 'S');
UTL_FILE.PUT(SAIDA, 'T');
UTL_FILE.PUT(SAIDA, 'E');
UTL_FILE.PUT(SAIDA, 'S');
UTL_FILE.NEW_LINE(SAIDA);
UTL_FILE.FFLUSH(SAIDA);
UTL_FILE.FCLOSE(SAIDA);
EXCEPTION
WHEN UTL_FILE.WRITE_ERROR THEN
RAISE_APPLICATION_ERROR(-20003, 'Gravao com erro');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20004, 'Arquivo no identificado');
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20002, 'Operap incompatvel');
END;
/
No exemplo da Listagem 3.155, anexamos ao buffer as letras T, E, S, T, E, S separadamente, uma em cada comando Put.
DECLARE
SAIDA
UTL_FILE.FILE_TYPE;
LINHA
VARCHAR2(2000);
BEGIN
SAIDA := UTL_FILE.FOPEN('D:\TESTE', 'SAIDA.SQL', 'R', 2000);
:MSG := '';
LOOP
UTL_FILE.GET_LINE(SAIDA, LINHA);
:MSG := :MSG || LINHA || CHR(10);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
UTL_FILE.FCLOSE_ALL;
END;
/
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
365
Ao repetirmos o programa de leitura do arquivo, observamos que o resultado foi gravado em uma nica linha
dentro do arquivo.
PUT_NCHAR
Esta procedure similar em funcionalidade e sintaxe procedure Put vista anteriormente. Deve ser usada quando
abrirmos o arquivo com Fopen_Nchar (arquivos Unicode).
NEW_LINE
Esta procedure grava um ou mais caracteres de fim de linha para o arquivo identificado pelo file handle.
A operao de gravao pode receber uma das seguintes excees:
PUT_LINE
Esta procedure grava o texto presente no buffer para o arquivo. Esse comando j adiciona um caracter de fim de
linha ao texto.
A operao de gravao pode receber uma das seguintes excees:
CAPTULO 3 PL/SQL
17
RAISE_APPLICATION_ERROR(-20003, 'Gravao com erro');
18
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
19
RAISE_APPLICATION_ERROR(-20004, 'Arquivo no identificado');
20
WHEN UTL_FILE.INVALID_OPERATION THEN
21
RAISE_APPLICATION_ERROR(-20003, 'Operao incompatvel');
22 END;
23 /
Procedimento PL/SQL concludo com sucesso.
Na Listagem 3.157, utilizamos o mesmo exemplo criado para teste da rotina Put. Veremos a seguir o resultado
gravado no arquivo.
DECLARE
SAIDA
UTL_FILE.FILE_TYPE;
LINHA
VARCHAR2(2000);
BEGIN
SAIDA := UTL_FILE.FOPEN('D:\TESTE', 'SAIDA.SQL', 'R', 2000);
:MSG := '';
LOOP
UTL_FILE.GET_LINE(SAIDA, LINHA);
:MSG := :MSG || LINHA || CHR(10);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
UTL_FILE.FCLOSE_ALL;
END;
/
MSG
------------------------------GRAVAO EXEMPLO 2
GRAVAO EXEMPLO 2
TESTES
T
E
S
T
E
S
Observe que cada uma das letras foi includa em uma linha diferente e, ao fim do arquivo, foi anexado mais um
caracter de fim de linha, gerando uma linha em branco final.
PUT_LINE_NCHAR
Esta procedure similar em funcionalidade e sintaxe procedure Put_Line vista anteriormente. Deve ser usada
quando abrirmos o arquivo com Fopen_Nchar (arquivos Unicode).
FFLUSH
Esta procedure grava fisicamente todos os dados pendentes para aquele arquivo. O Fflush faz com que os dados no
buffer sejam descarregados em disco.
A operao de gravao pode receber uma das seguintes excees:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
367
PUTF
Essa procedure age de forma similar procedure Put, com a diferena de que realiza formataes na linha a ser
includa no arquivo. Trabalha de forma semelhante a um printf (do C), porm com limitaes. A string de
formatao pode conter qualquer texto.
Os caracteres %s e \n tm um significado especial neste comando:
DECLARE
SAIDA
UTL_FILE.FILE_TYPE;
LINHA
VARCHAR2(1022);
BEGIN
SAIDA := UTL_FILE.FOPEN('D:\TESTE', 'SAIDA.SQL', 'A');
UTL_FILE.PUTF(SAIDA, 'Neste exemplo %s sero enviados %s argumentos %s',
'A', '3', ':');
UTL_FILE.NEW_LINE(SAIDA,2);
UTL_FILE.PUTF(SAIDA, 'J neste os argumentos so: %s, %s, \n %s, %s',
'primeiro', 'segundo', 'terceiro', 'quarto');
UTL_FILE.FFLUSH(SAIDA);
UTL_FILE.FCLOSE(SAIDA);
EXCEPTION
WHEN UTL_FILE.WRITE_ERROR THEN
RAISE_APPLICATION_ERROR(-20003, 'Gravao com erro');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20004, 'Arquivo no identificado');
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20003, 'Operao incompatvel');
END;
/
Na Listagem 3.159, utilizamos o comando Putf duas vezes para gerao de linhas formatadas. No primeiro caso,
fizemos a substituio de trs argumentos no texto e utilizamos a rotina New_Line para encerrar a linha impressa
e ainda deixar uma linha em branco. No segundo caso, quebramos a linha usando o smbolo \n para que os
argumentos fossem gravados em linhas distintas. Observe que, ao trmino da execuo, no definimos o caracter
de fim de linha. Esta ao feita, automaticamente, quando o Fflush descarrega o restante do buffer.
CAPTULO 3 PL/SQL
6
7
8
9
10
11
12
13
14
15
:MSG := '';
LOOP
UTL_FILE.GET_LINE(SAIDA, LINHA);
:MSG := :MSG || LINHA || CHR(10);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
UTL_FILE.FCLOSE_ALL;
END;
/
PUTF_NCHAR
Esta procedure similar em funcionalidade e sintaxe procedure Putf vista anteriormente. Deve ser usada quando
abrirmos o arquivo com Fopen_Nchar (arquivos Unicode).
UM EXEMPLO DE LEITURA
Criaremos agora um exemplo completo de um programa que far a carga de dados na tabela de Projetos e Atividades
(PrjAtv) a partir de um arquivo externo ao banco de dados. O layout do arquivo de entrada apresentado a seguir:
Informao
Coluna
Cdigo do projeto
1a6
Cdigo da atividade
7a9
Data de incio
10 a 19 (dd/mm/yyyy)
Data de fim
20 a 29 (dd/mm/yyyy)
Na Listagem 3.161, vemos o contedo do arquivo a ser lido, de acordo com o layout estabelecido anteriormente.
UTL_FILE.FILE_TYPE;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
369
LINHA
VARCHAR2(50);
R1
PRJATV%ROWTYPE;
BEGIN
ARQ := UTL_FILE.FOPEN('D:\TESTE', 'CARGA.SQL', 'R');
LOOP
UTL_FILE.GET_LINE(ARQ, LINHA);
R1.CD_PROJ := SUBSTR(LINHA, 1, 6);
R1.CD_ATIV := TO_NUMBER(SUBSTR(LINHA, 7, 3));
R1.DT_INI := TO_DATE(SUBSTR(LINHA, 10, 10), 'DD/MM/YYYY');
R1.DT_FIM := TO_DATE(SUBSTR(LINHA, 20, 10), 'DD/MM/YYYY');
INSERT INTO PRJATV (CD_PROJ, CD_ATIV, DT_INI, DT_FIM)
VALUES (R1.CD_PROJ, R1.CD_ATIV, R1.DT_INI, R1.DT_FIM);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
COMMIT;
UTL_FILE.FCLOSE_ALL;
END;
/
Na Listagem 3.162, temos um programa que faz a leitura de uma linha e prepara a gravao da tabela PrjAtv
utilizando uma varivel com o mesmo layout de uma linha da tabela (RowType). De acordo com o layout fornecido
utilizamos a funo Substr para recortar a linha nas diversas colunas da tabela.
UM EXEMPLO DE GRAVAO
No exemplo a seguir, desejamos enviar uma carta para todos os funcionrios aniversariantes do ms a ser fornecido como
parmetro. Para cada funcionrio, ser gerado um arquivo em separado de tal forma que possa ser transmitido via e-mail.
Na Listagem 3.163, vemos o layout da carta que deve ser gerada individualmente por funcionrio.
CAPTULO 3 PL/SQL
25
END LOOP;
26 END;
27 /
Entre o valor para mes: 5
Procedimento PL/SQL concludo com sucesso.
Na Listagem 3.164, apresentamos o programa criado para a gerao do arquivo conforme o layout estabelecido.
Observe a seguir o resultado de um dos arquivos gerados.
18/11/2001
EXERCCIOS
3.67) Faa um programa que gere um arquivo contendo as seguintes colunas da tabela de funcionrios: cd_mat,
nm_func, nm_sobrenome, dt_nasc, vl_sal.
3.68) Faa um programa que leia um arquivo e realize a carga na tabela de funcionrios, completando os dados de
acordo com as seguintes especificaes: Data de admisso (ser igual data do cadastramento), Ramal (fixo igual a
1354), salrio (fixo igual a 1.000,00) e cargo (fixo igual a 55).
O layout do arquivo de entrada o seguinte: Colunas 1 a 12 (nome), colunas 13 a 24 (sobrenome), colunas 25 a 32
(data de nascimento no formato ddmmyyyy), colunas 33 a 34 (grau de instruo) e coluna 35 (sexo).
3.69) Gere um arquivo a partir da tabela Func com as seguintes informaes: nome, sobrenome, data de nascimento
(formato dd/mm/yyyy), sexo e salrio.
Os dados devem ser separados pelo smbolo # (no deve haver alinhamento de colunas).
Caso uma determinada coluna esteja sem valor (Null), deve ser feita substituio por: ** para as colunas
alfanumricas e -1 para as colunas numricas.
Use o pacote UTL_FILE para gerar o arquivo.
3.70) Leia o arquivo gerado pelo exerccio anterior e crie novas linhas na tabela Func. O nmero da matrcula deve
ser gerado com o uso de um Sequence de valor inicial 400.
Use o pacote UTL_FILE para ler o arquivo.
METODOLOGIA
Apresentao e descrio dos componentes do pacote.
TCNICA
Apresentao prtica da utilizao dos componentes do pacote.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
371
INTRODUO
O pacote DBMS_PIPE permite que duas ou mais sesses na mesma instncia se comuniquem. As informaes so
enviadas atravs de uma rea de memria chamada Pipe. Estas reas so armazenadas na SGA.
De acordo com os requisitos de segurana de nossa instalao, podemos usar pipes pblicos ou privados.
PIPES PBLICOS
Podemos criar um Pipe pblico explicita ou implicitamente.
A criao implcita ocorre quando fizermos a primeira referncia ao Pipe e desaparecer quando no mais contiver dados.
A criao explcita ocorre quando utilizamos a funo Create_Pipe e informamos o parmetro Private com o valor
False. Sua destruio tambm dever ser explcita com a rotina Remove_Pipe.
O domnio do Pipe pblico o schema no qual ele foi criado, implicitamente ou explicitamente.
Cada Pipe pblico trabalha assincronamente. Qualquer nmero de usurios (schemas) poder gravar para um Pipe
pblico (se tiver permisso de Execute no pacote Dbms_Pipe e conhecer seu nome).
Qualquer usurio com os privilgios e conhecimentos apropriados poder ler informaes de um Pipe pblico.
Porm, uma vez que a informao lida, o Pipe esvaziado e a informao no fica mais disponvel para outros
leitores do mesmo Pipe.
O pacote Dbms_Pipe fornece as rotinas necessrias aos procedimentos de criao, leitura e gravao de informaes
em um Pipe (seja ele Pblico ou Privativo).
PIPES PRIVATIVOS
A criao de Pipe privativo explcita atravs da chamada da funo Create_Pipe. Uma vez criado, o Pipe privativo
permanece na memria compartilhada (SGA) at que seja explicitamente removido (Remove_Pipe ou que a instncia
seja shutdown).
No poderemos criar um Pipe privativo se existir na memria um Pipe Pblico com o mesmo nome.
O acesso a um Pipe privativo restrito a:
Sesses que estiverem executando sob o mesmo userid que o criador do Pipe.
Stored subprograms executando no mesmo privilgio de domnio do userid criador do Pipe.
Os usurios que estabeleceram conexo como SYSDBA ou INTERNAL.
FUNCIONAMENTO DO PACOTE
Este pacote funciona com uma rea de buffer local, da mesma forma que os pacotes estudados at agora. As
mensagens a serem enviadas para um determinado Pipe devem ser armazenadas localmente e posteriormente
enviadas, como um pacote, para o Pipe desejado.
CAPTULO 3 PL/SQL
Inicialmente, usamos a procedure Pack_Message, que armazena a mensagem para a rea de buffer local da sesso.
Aps termos juntado todas as mensagens desejadas no buffer, podemos envi-las com a procedure Send_Message.
Esta rotina envia todas as mensagens armazenadas no buffer local.
A leitura se processa de forma inversa: devemos obter a informao do Pipe, usando a procedure Receive_Message,
e armazen-la no buffer local da sesso e, em seguida, desmembr-la com a procedure Unpack_Message.
O quadro a seguir apresenta os diversos componentes deste pacote.
Tabela 3.07 Componentes do Package Dbms_Pipe
Componente
Tipo
Descrio
Create_Pipe
Function
Pack_Message
Procedure
Send_Message
Function
Esta funo envia uma mensagem para o Pipe. No caso de o Pipe no existir, feita a criao implcita como pblico.
Receive_Message
Function
Esta funo recebe uma mensagem do Pipe e a coloca no buffer local da sesso.
Next_Item_Type
Function
Unpack_Message
Procedure
Remove_Pipe
Function
Purge
Procedure
Reset_Buffer
Procedure
Unique_Session_Name
Function
Esta funo retorna um nome que nico para todas as sesses que estiverem atualmente com conexo
estabelecida ao banco de dados.
CREATE_PIPE
Esta funo cria explicitamente um Pipe, que pode ser pblico ou privado, dependendo do valor do parmetro <privativo>.
Se este parmetro receber o valor True, indicamos que o Pipe ser privativo e somente poder ser utilizado pelos
seguintes grupos de usurios:
Sesses que estiverem executando sob o mesmo userid que o criador do Pipe.
Stored subprograms executando no mesmo privilgio de domnio do userid criador do Pipe.
Os usurios que estabeleceram conexo como SYSDBA ou INTERNAL.
No devemos usar nomes de pipes comeando com ORA$, uma vez que estes nomes so reservados pela Oracle.
Esta funo pode receber at trs parmetros, sendo o primeiro de preenchimento obrigatrio correspondendo ao
nome do Pipe, que deve ser nico em relao a toda a instncia. Os demais tm os significados a seguir:
<maxpipesize> Especifica o tamanho mximo (em bytes) do Pipe. O tamanho total de todas as mensagens no
Pipe no poder exceder a este tamanho. O <maxpipesize> torna-se uma parte das caractersticas do Pipe e
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
373
<private> Com o valor default (True), criaremos um Pipe privado. Os Pipes pblicos podem ser implicitamente
criados quando usarmos a Send_Message.
O resultado dessa funo, ou seja, seu retorno, ser zero se a criao for realizada com sucesso. Ocorrer um erro
(ORA-23322) se houver conflito de nome.
DECLARE
PIPE1
VARCHAR2(20) := 'TESTE';
PIPE2
VARCHAR2(20) := 'TESTE';
PIPE3
VARCHAR2(20) := 'PUBLICO';
RETORNO
NUMBER;
BEGIN
RETORNO := DBMS_PIPE.CREATE_PIPE(PIPE1,
:MSG := 'Pipe1 = '|| RETORNO || '; ';
RETORNO := DBMS_PIPE.CREATE_PIPE(PIPE3,
:MSG := :MSG || 'Pipe3 = '|| RETORNO ||
RETORNO := DBMS_PIPE.CREATE_PIPE(PIPE2,
EXCEPTION
WHEN OTHERS THEN
:MSG := :MSG || 'Pipe2 = '|| RETORNO ||
END;
/
' E
' || SQLCODE;
CAPTULO 3 PL/SQL
MSG
------------------------------------------Pipe1 = 0; Pipe3 = 0; Pipe2 = 0 E -23322
Na Listagem 3.166, criamos um Pipe privativo com o nome de Teste. Criamos um Pipe pblico com o nome de
Pblico. Quando tentamos criar um Pipe pblico com o nome de Teste, ocorreu conflito de nome e recebemos um
erro de execuo que foi capturado pela condio de erro Others.
Para que possamos nomear os parmetros, devemos obter o nome com que foram definidos na criao de cada uma das rotinas. Para tal,
devemos usar o comando Desc do SQL*Plus que nos fornecer a descrio correta do pacote e das rotinas definidas dentro dele (veja uma parte
destas rotinas na Listagem 3.167).
In/Out Default?
------------------IN
IN
DEFAULT
IN
DEFAULT
In/Out Default?
------------------IN
In/Out Default?
------------------IN
In/Out Default?
------------------IN
In/Out Default?
------------------IN
In/Out Default?
------------------IN
PACK_MESSAGE
Existem quatro procedures Pack_Message definidas no pacote Dbms_Pipe e duas procedures especficas chamadas
Pack_Message_Raw e Pack_Message_Rowid.
Todas elas tm a mesma finalidade, diferindo apenas em seus parmetros formais.
O objetivo dessas rotinas enviar o parmetro recebido para a rea de buffer local com a finalidade de posterior
envio ao Pipe.
Os itens enviados para o buffer local no so convertidos para o formato texto. So armazenados incluindo um
byte extra indicativo do tipo e dois bytes extras para armazenamento do tamanho.
O tamanho do buffer local de 4.096 bytes e no pode ser redimensionado. Desta forma, devemos controlar o
tamanho da mensagem armazenada e, se necessrio, efetuar um envio parcial para o Pipe (podemos enviar diversas
mensagens). O SqlCode recebido em caso de estouro no tamanho do buffer local -6558.
VARCHAR2(20) := 'TESTE';
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
375
Na Listagem 3.168, usamos diversas rotinas Pack_Message para armazenamento no buffer de uma rea varchar2,
um numrico, uma data e um rowid.
SEND_MESSAGE
Esta funo envia uma mensagem para um determinado Pipe. Se o Pipe no existir, crie-o como pblico.
Pode receber at trs parmetros, sendo o primeiro obrigatrio e indicativo do nome do Pipe para onde a mensagem
deve ser enviada. Os demais tm o seguinte significado:
<timeout> Especifica o tempo (em segundos) de espera (mximo) enquanto so feitas tentativas de envio da mensagem
para o Pipe. O valor default a constante MAXWAIT, que definida como 86.400.000 segundos (1.000 dias).
<maxpipesize> Especifica o tamanho mximo (em bytes) do Pipe. O tamanho total de todas as mensagens no
Pipe no poder exceder a este tamanho. O <size> torna-se uma parte das caractersticas do Pipe e persiste pela
vida deste. Chamadas funo Send_Message com tamanhos maiores fazem com que <size> seja incrementado.
As chamadas com tamanhos de mensagem menores simplesmente usam o tamanho existente.
Os valores retornados por esta funo podem ser:
0 Indica que o Pipe (implcito) foi criado com sucesso. Se o Pipe j existia e o usurio tentou recri-lo, foi
autorizado a faz-lo. Qualquer dado existente no Pipe mantido. Se um usurio privilegiado (SYSDBA ou SYSOPER)
recriar um Pipe, o Oracle retorna 0, mas o Owner (dono) do Pipe permanece inalterado.
1 Indica que o Pipe sofreu um timeout. Isto pode ter ocorrido porque no foi possvel a obteno de um lock
para o Pipe ou porque o Pipe est muito cheio para ser usado. Se o Pipe tiver sido criado implicitamente e estiver
vazio, ele removido.
3 Indica que ocorreu uma interrupo. Se o Pipe foi criado implicitamente e estiver vazio, ele removido.
Erro ORA-23322 Indica insuficincia de privilgios para gravar no Pipe. Se um Pipe com o mesmo nome j
existir e tiver sido criado por outro usurio, o Oracle sinaliza com este erro, indicando conflito de nome.
CAPTULO 3 PL/SQL
11
DBMS_PIPE.PACK_MESSAGE(123456789);
12
DBMS_PIPE.PACK_MESSAGE_ROWID(VROWID);
13
RETORNO := DBMS_PIPE.SEND_MESSAGE(PIPE, 20);
14
:MSG := :MSG ||'Envio = '||RETORNO||'; ';
15 EXCEPTION
16 WHEN OTHERS THEN
17
:MSG := :MSG ||'ERRO = '||SQLCODE;
18 END;
19 /
Procedimento PL/SQL concludo com sucesso.
MSG
--------------------------Pipe = 0; Envio = 0;
Na Listagem 3.169, completamos o programa que vinha sendo montado at ento com o envio da mensagem para
o Pipe privativo Teste. Iniciaremos o processo inverso para leitura da informao armazenada.
RECEIVE_MESSAGE
Esta funo recebe uma mensagem do Pipe e a coloca no buffer local do usurio. Quando executamos esta funo,
a mensagem tambm removida do Pipe. Isso significa que a mensagem s pode ser recebida uma vez. Se o Pipe foi
criado implicitamente, ele removido aps o ltimo registro ser removido do mesmo.
Se o Pipe informado no existir, o Oracle cria o Pipe e aguarda pela chegada da mensagem at que <tempo> tenha
expirado. Caso isso acontea (isto , o tempo expire) e nenhuma mensagem seja recebida, o programa recebe um
erro e o Pipe removido.
Na Listagem 3.170, recebemos a mensagem do Pipe Teste, porm no fazemos o desmembramento. Esta ao
necessria para que possamos obter as diversas partes da mensagem. At esse ponto, apenas retiramos a mensagem
do Pipe e a colocamos na rea de buffer local.
Na sintaxe referente a esta funo, verificamos os seguintes parmetros:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
377
NEXT_ITEM_TYPE
Aps termos utilizado a funo Receive_Message para colocar a informao do Pipe no buffer local, devemos usar
a funo Next_Item_Type para determinar o tipo de dado do prximo item no buffer local.
Quando o resultado da funo for zero, indica que o buffer local est vazio.
Os valores retornados por essa funo podem ser:
UNPACK_MESSAGE
As procedures Unpack_Message tm a finalidade de desmembrar a mensagem recebida no buffer local. A cada vez
que acionarmos Unpack_Message, uma parte da mensagem transferida para a rea do programa.
Para realizarmos o desmembramento apresentado na Listagem 3.171, repetimos o exemplo da Listagem 3.169 a
fim de preencher o Pipe Teste com dados de diferentes tipos.
';
CAPTULO 3 PL/SQL
28
:MSG := :MSG || 'DATA = ' || DATA || '; ';
29
ELSIF RETORNO = 11 AND VEZ = 0 THEN
30
VEZ := VEZ + 1;
31
DBMS_PIPE.UNPACK_MESSAGE_ROWID(VROWID);
32
:MSG := :MSG || 'ROWID = ' || VROWID || '; ';
33
ELSIF RETORNO = 23 THEN
34
DBMS_PIPE.UNPACK_MESSAGE_RAW(VRAW);
35
:MSG := :MSG || 'RAW = ' || VRAW || '; ';
36
ELSIF RETORNO = 0 THEN
37
EXIT;
38
ELSE
39
DBMS_OUTPUT.PUT_LINE(RETORNO);
40
EXIT;
41
END IF;
42
END LOOP;
43
<<FIM>>
44
NULL;
45 END;
46 /
Procedimento PL/SQL concludo com sucesso.
MSG
----------------------------------------------------------------------------------MENSAGEM RECEBIDA NA REA LOCAL; TEXTO = Texto a ser enviado para o pipe privativo;
DATA = 30/08/99; NUMERO = 123456789; ROWID = AAAACsAABAAAATmAAA;
No trecho de programa apresentado na Listagem 3.171, verificamos que a funo Next_Item_Type utilizada para
determinar o trecho de dado que ser copiado para o programa. Quando o cdigo identificado, ocorre o
desmembramento e uma prxima pesquisa. Quando o cdigo de retorno no identificado, o Loop encerrado
com uma apresentao do nmero de retorno.
Aps cada identificao, executamos uma das procedures Unpack_Message que retorna o trecho de mensagem
identificado e, simultaneamente, efetua o posicionamento no buffer para o prximo item de dado.
Se executarmos uma procedure Unpack_Message quando no existirem mais trechos de mensagem ou quando o
item no corresponder ao tipo esperado, ocorrer uma mensagem de erro.
O valor de retorno para Nchar, nesta verso, tambm 9 (o mesmo de Varchar2), porm como o parmetro da
rotina Unpack_Message diferente, no devemos misturar estes dois tipos em uma mesma mensagem. Nos scripts,
adicionais ao livro, foram includos os nmeros 169a e 171a para que voc possa testar a recepo de Nchar.
REMOVE_PIPE
Quando criamos um Pipe implicitamente e o esvaziamos, ele removido automaticamente.
J os Pipes criados atravs da rotina Create_Pipe devem ser removidos explicitamente (ou quando a instncia for
shutdown). Todos os registros no utilizados existentes no Pipe so removidos antes de o Pipe ser removido.
Os valores retornados por esta funo podem ser:
0 Indica que o Pipe foi removido com sucesso. Se no existir ou se existir e o usurio possuir autorizao para
remoo, o Oracle retornar 0 e remover no s o Pipe como qualquer mensagem existente no mesmo.
erro ORA-23322 Indica uma falha na remoo. Se o Pipe existir, mas o usurio no tiver autorizao para
acesso, o Oracle sinaliza com ORA-23322, indicando insuficincia de privilgios.
PURGE
Esta procedure esvazia o contedo do Pipe e aciona a funo Receive_Message para transferncia do contedo do
Pipe para a rea de buffer local antes de limpar seu contedo.
Caso faamos a tentativa de esvaziar o contedo de um Pipe para o qual no tenhamos privilgios, receberemos a
condio de erro ORA-23322.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
379
RESET_BUFFER
Esta rotina limpa o buffer local e posiciona os indicadores de incio de mensagem em zero.
Uma vez que todos os Pipes a que o usurio tenha acesso enviam as mensagens para o mesmo buffer local da
sesso, conveniente que, antes de efetuarmos acesso a um novo Pipe, esvaziemos o buffer local para que no
ocorra a possibilidade de enviarmos uma mensagem invlida que ainda permanea no buffer.
UNIQUE_SESSION_NAME
Esta funo retorna um nome nico (dentre todas as sesses ativas).
Mltiplas chamadas a esta mesma funo na mesma sesso retornaro o mesmo valor.
O valor retornado pode ter at 30 bytes.
Este nome pode ser usado como nome do Pipe.
CREATE OR REPLACE
PROCEDURE ENVIA (TEXTO IN VARCHAR2, FIM IN BOOLEAN := FALSE) IS
RETORNO
NUMBER;
BEGIN
DBMS_PIPE.PACK_MESSAGE(TEXTO);
IF FIM THEN
RETORNO := DBMS_PIPE.SEND_MESSAGE('TESTE');
IF RETORNO <> 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'ERRO NO ENVIO DA MENSAGEM - '||RETORNO);
END IF;
END IF;
END;
/
Procedimento criado.
Para a criao de um procedimento usando o pacote Dbms_Pipe necessrio que o usurio tenha autorizao explcita de uso do pacote (Grant
execute on Dbms_Pipe to Desenv); portanto estabelea conexo como Sys(password change_on_install) e execute o comando Grant.
Na Listagem 3.172, criamos a procedure. Podemos enviar vrias mensagens at que o segundo parmetro receba
True quando, ento, todo o contedo do buffer ser enviado ao Pipe. Observe que no fizemos a criao explcita
do Pipe. Nesse caso, ele ser criado implicitamente e ser pblico.
CAPTULO 3 PL/SQL
3
WHERE CD_MAT = 10;
4 END;
5 /
Procedimento PL/SQL concludo com sucesso.
VROWID
-----------------AAAH5dAAIAAAAAyAAA
SQL> EXECUTE ENVIA('Rowid = '||:VROWID);
Procedimento PL/SQL concludo com sucesso.
VROWID
-----------------AAAH5dAAIAAAAAyAAA
SQL> EXECUTE ENVIA('ltimo Texto', TRUE);
Procedimento PL/SQL concludo com sucesso.
Na Listagem 3.173, executamos a rotina diversas vezes a fim de enviar vrios trechos de mensagem para o Pipe.
Procedimento criado.
Observe que o programa ficar em Loop enquanto houver trechos de mensagens a serem desmembrados. Quando
todo o trecho tiver sido manuseado, o programa terminar.
Todas as mensagens sero apresentadas no vdeo devido ao uso do pacote Dbms_Output.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
381
Uma segunda execuo da rotina Recebe causa o erro de execuo previsto (-20002), indicando que o Pipe j no
tem mais mensagens a enviar.
EXERCCIOS
3.71) Faa uma rotina que envie mensagem para um Pipe pblico de nome Publico. Pode-se enviar dados
numricos, alfanumricos ou datas.
Foram criadas trs rotinas Envia dentro do pacote PIPE, uma para enviar dados alfanumricos, outra para envio de
dados numricos e a ltima para datas.
3.72) Faa uma rotina que envie mensagem para um Pipe privativo de nome Interno. Pode-se enviar dados
numricos, alfanumricos ou datas.
3.73) Faa uma rotina que receba dados de um Pipe informado como parmetro. Se no for informado o nome do
Pipe, faa a leitura do Pipe pblico.
3.74) Teste as rotinas usando os usurios Desenv e System (password = manager).
METODOLOGIA
Apresentao e descrio dos componentes do pacote.
TCNICA
Apresentao prtica da utilizao dos componentes do pacote.
ROWID
Cada linha no banco de dados tem um endereo. Esse endereo fornecido pela pseudocoluna Rowid.
Ao consultarmos o valor de Rowid para uma determinada linha, obtemos uma informao que representa seu endereo.
O Rowid das verses anteriores a 8 era composto de:
<bloco> Nmero do bloco, em relao ao arquivo, onde se encontra a linha que est sendo endereada.
<linha> Nmero da linha dentro do bloco (iniciando em zero).
<arquivo> Nmero do arquivo onde se acha a linha.
A partir da verso 8, o formato da verso 7 (e anteriores) ganhou o nome de Rowid restrito, uma vez que seu
formato foi estendido para incorporar um data object number, que corresponde a um nmero associado a cada
segmento do banco de dados. As views do dicionrio de dados User_Objects, Dba_Objects e All_Objects fornecem
o valor desse nmero para cada segmento criado no banco de dados.
Esse nmero foi incorporado para suporte a tabelas e ndices particionados.
CAPTULO 3 PL/SQL
Na verso 8, ainda so aceitas manipulaes com o formato da verso 7, porm para qualquer acesso que venhamos
a fazer nesta pseudocoluna para tabelas no banco de dados receberemos a verso estendida.
Este pacote ainda foi mantido nesta verso do livro em virtude de muitos usurios ainda trabalharem com a
verso 7, porm a tendncia de que seu uso seja decrescente medida que formos migrando para verses mais
recentes do Oracle.
A Listagem 3.177 mostra a diferena nos formatos das duas verses para o mesmo endereo de linha.
O PACOTE
Este pacote tem a finalidade de desmembrar esta pseudocoluna chamada Rowid. Podemos obter informaes
sobre cada uma das partes que compem essa pseudocoluna ou, ainda, convert-la do formato restrito (verso 7 e
anteriores) para o formato estendido desta verso (ou vice-versa).
O quadro a seguir apresenta um resumo de todos os componentes desse pacote e sua finalidade.
Tabela 3.08 Componentes do Package Dbms_Rowid
Componente
Tipo
Descrio
Rowid_Create
Function
Rowid_Info
Procedure
Rowid_Type
Function
Retorna o tipo do Rowid. Ser zero (0) se o Rowid for restrito e 1 (um) se estendido.
Rowid_Object
Function
Rowid_Relative_Fno
Function
Rowid_Block_Number
Function
Rowid_Row_Number
Function
Rowid_To_Absolute_Fno
Function
Rowid_To_Extended
Function
Rowid_To_Restricted
Function
Rowid_Verify
Function
Rowid_Invalid
Exception
Ser adquirida se o SqlCode retornado da execuo de uma das rotinas for 1410.
A maioria das rotinas desse pacote composta de funes. Essas funes podem ser usadas tanto em PL/SQL quanto em comandos de SQL.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
383
ROWID_CREATE
Esta funo cria um Rowid com as informaes passadas como parmetro. Seu uso est restrito a teste.
Se desejarmos criar um Rowid restrito, o parmetro Rowid_Type deve receber o valor 0 (nesse caso, o valor de
<object_number> ser ignorado) e para um Rowid estendido, 1.
Listagem 3.178
SQL> SELECT DBMS_ROWID.ROWID_CREATE(0,0,1,10,2) Restrito,
2
DBMS_ROWID.ROWID_CREATE(1,5,1,10,2) Extendido
3
FROM DUAL;
RESTRITO
EXTENDIDO
------------------ -----------------0000000A.0002.0001 AAAAAFAABAAAAAKAAC
ROWID_INFO
Esta rotina desmembra o valor de Rowid passado como parmetro. Como se trata de uma procedure, deve ser
usada apenas em PL/SQL.
DECLARE
RROWID
ROWID;
EROWID
ROWID;
TIPO
NUMBER;
OBJETO
NUMBER;
FNO
NUMBER;
BLOCO
NUMBER;
LINHA
NUMBER;
BEGIN
SELECT ROWID, DBMS_ROWID.ROWID_TO_RESTRICTED(ROWID, 1)
INTO EROWID, RROWID
FROM DUAL;
DBMS_ROWID.ROWID_INFO(EROWID, TIPO, OBJETO, FNO, BLOCO, LINHA);
DBMS_OUTPUT.PUT_LINE('TIPO = '||TIPO||' OBJETO = '||OBJETO||
' FNO = '||FNO||' BLOCO = '||BLOCO||' LINHA = '||LINHA);
DBMS_ROWID.ROWID_INFO(RROWID, TIPO, OBJETO, FNO, BLOCO, LINHA);
DBMS_OUTPUT.PUT_LINE('TIPO = '||TIPO||' OBJETO = '||OBJETO||
' FNO = '||FNO||' BLOCO = '||BLOCO||' LINHA = '||LINHA);
END;
/
= 1 OBJETO = 221 FNO = 1 BLOCO = 871 LINHA = 0
= 0 OBJETO = 0 FNO = 1 BLOCO = 871 LINHA = 0
CAPTULO 3 PL/SQL
Na Listagem 3.179 vemos um exemplo com um Rowid restrito e/ou estendido.
As prximas cinco funes retornam um valor independente para cada um dos parmetros de retorno desta procedure.
ROWID_TYPE
Esta funo retornar 0 se o Rowid passado como parmetro for restrito e 1 se estendido.
ROWID_OBJECT
Esta funo retorna o nmero do objeto. Se o Rowid passado como parmetro for estendido, o objeto ter um valor
no retorno. Caso o Rowid passado como parmetro seja restrito, o nmero do objeto voltar zerado.
ROWID_RELATIVE_FNO
Retorna o nmero do arquivo em relao ao Tablespace para o Rowid informado como parmetro.
ROWID_BLOCK_NUMBER
Esta funo retorna o nmero do bloco dentro do arquivo, de acordo com o Rowid passado como parmetro.
ROWID_ROW_NUMBER
Esta funo extrai o nmero da linha relativamente ao Rowid passado como parmetro.
Na Listagem 3.180, apresentamos a execuo de cada uma das rotinas anteriores, executadas para um Rowid
estendido e para um Rowid restrito.
ROWID_TO_ABSOLUTE_FNO
Esta funo obtm o nmero absoluto do arquivo a partir de um Rowid. Este nmero absoluto para uma
determinada linha em um determinado schema e tabela.
ROWID_TO_EXTENDED
Esta funo converte um Rowid restrito, que corresponde ao endereo de uma linha em um schema e tabela, para
um Rowid estendido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
385
ROWID_TO_RESTRICTED
Esta funo converte um Rowid estendido em um Rowid restrito.
ROWID_VERIFY
Esta funo retorna zero se o Rowid restrito informado como parmetro de entrada puder ser convertido para o
formato estendido (a partir do nome da tabela e schema). Retorna 1 se a converso no for possvel.
CAPTULO 3 PL/SQL
O exemplo da Listagem 3.181 obtm um Rowid do banco de dados (estendido), transforma-o em restrito e comea
a verificar para cada uma das tabelas do schema se a converso vlida. Se for possvel, converte considerando a
tabela testada.
No final da Listagem 3.181, vemos o resultado da execuo do programa. Observe que para a tabela Func (de onde
foi obtido o Rowid original) o resultado confere.
EXERCCIOS
3.75) Faa um programa que ordene as linhas da tabela Func por bloco e linha. Estabelea uma quebra por bloco.
3.76) Suponhamos que regularmente recebssemos para atualizao o seguinte arquivo de layout:
Informao
Coluna
Operao
1-1
Rowid (verso 7)
3-20
Nome
22-33
Sobrenome
35-46
Salrio
48-59
METODOLOGIA
Apresentao e descrio dos componentes do pacote.
TCNICA
Apresentao prtica da utilizao dos componentes do pacote.
LOBS
Large Objects ou Lobs so tipos de dados que podem armazenar informaes de at 4 GB de dados binrios
(imagens, sons, vdeos, etc.) ou caracteres.
Podem ser subdivididos em duas categorias:
Internos So aqueles armazenados em tablespaces, dentro do banco de dados (Blob, Clob ou Nclob).
Externos So armazenados fora do banco de dados (Bfiles). Na coluna com este tipo, existe uma referncia ao
arquivo existente no sistema operacional (Bfile).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
387
TIPOS DE LOBS
Os tipos de lobs so os seguintes:
LOCATOR
Um lob composto de duas partes:
LOB INDEX
O Lob Index criado implicitamente. usado para encontrar o dado do lob em seu segmento.
O lob index contm o Rowid (endereo) da tabela que contm a coluna Lob, o offset e o endereo da parte de dados.
Na Listagem 3.182, observamos que podemos determinar um nome para este ndice. Isto pode ser interessante
para obtermos informaes fsicas a respeito do ndice gerado e, se necessrio, alter-las.
SOBRE O PACOTE
O pacote DBMS_LOB possui um conjunto de rotinas que visam a facilitar a manipulao de lobs.
Para lobs dos tipos Blob, Clob e Nclob as rotinas deste pacote permitem tanto consultas quanto atualizaes. Para
Bfiles poderemos efetuar consultas.
Todas as rotinas do pacote esperam tratar de um locator j existente. Desta forma, a manipulao prev a criao
e inicializao prvia das colunas deste tipo.
CAPTULO 3 PL/SQL
A clusula %CHARSET, presente em muitos dos parmetros, indica que a forma dos parmetros com %CHARSET
deve ser compatvel com a forma dos parmetros ANY_CS correspondente, isto , se uma funo recebe um buffer
e um lob e o lob do tipo NCLOB, o buffer deve conter dados NCHAR ou se o lob do tipo CLOB, o buffer deve
conter dados CHAR, e assim por diante.
COMPONENTES DO PACOTE
A tabela a seguir apresenta as rotinas, condies de erro e constantes componentes do pacote Dbms_Lob.
Tabela 3.09 Componentes do Package Dbms_Lob
Componente
Tipo
Aplicvel a
Descrio
Call
Constante
Lobs Temporrios
File_readonly
Constante
Bfiles
Determina se o arquivo deve ser usado somente para leitura. O valor atual 0,
indicando que somente leituras so permitidas.
Lobmaxsize
Constante
Todos
Read_Only
Constante
Todos
Read_Write
Constante
Todos
Session
Constante
Lobs Temporrios
Access_Error
Exception
Todos
Invalid_argval
Exception
Todos
Indica que o parmetro informado invlido, fora do intervalo possvel ou Null (-21560).
Invalid_directory
Exception
Todos
Invalid_operation
Exception
Todos
No_Data_Found
Exception
Todos
Noexist_Directory
Exception
Todos
Nopriv_Directory
Exception
Todos
Open_TooMany
Exception
Todos
Unopened_file
Exception
Todos
Compare
Function
Fileexists
Function
Bfiles
Fileisopen
Function
Bfiles
GetChunkSize
Function
Blobs e Clobs
Getlength
Function
Todos
Instr
Function
Todos
IsOpen
Function
Todos
Esta funo indica se o Lob j est aberto. Esta rotina aplicvel a Lobs internos e externos.
IsTemporary
Function
Lobs Temporrios
Substr
Function
Todos
Append
Procedure
Close
Procedure
Todos
Copy
Procedure
continua
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
389
Componente
Tipo
Aplicvel a
Descrio
CreateTemporary
Procedure
Blobs e Clobs
Erase
Procedure
Fileclose
Procedure
Bfiles
Filecloseall
Procedure
Bfiles
Filegetname
Procedure
Bfiles
Fileopen
Procedure
Bfiles
FreeTemporary
Procedure
Lobs Temporrios
Loadfromfile
Procedure
Open
Procedure
Todos
Read
Procedure
Todos
Trim
Procedure
Write
Procedure
Blobs e Clobs
WriteAppend
Procedure
Blobs e Clobs
As funes do pacote DBMS_LOB retornam Null se quaisquer dos valores dos parmetros para estas rotinas forem Null ou invlidos. J as
procedures causam exceptions.
CAPTULO 3 PL/SQL
APPEND
Esta procedure tem a finalidade de adicionar o contedo de um Lob (<lob_origem>) ao fim de outro Lob (<lob_destino>).
Os parmetros desta rotina indicam:
Observe que no foi necessrio efetuar um Update na tabela TLOB. Isto ocorre porque, ao lermos um Lob, o que
obtemos um locator; portanto, o que a rotina faz copiar o contedo do Lob apontado pelo locator origem para
o fim da rea apontada pelo locator.
CLOSE
Essa rotina fecha um Lob (interno ou externo) aberto previamente. Nenhum erro retornado se o Bfile existir mas
no estiver aberto. Ocorrer um erro se o Lob no estiver aberto.
Onde:
COMPARE
Esta funo tem a finalidade de comparar dois Lobs. Essa comparao poder ser total ou parcial de acordo com os
parmetros fornecidos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
391
Os arquivos so abertos a tempo de leitura da linha do arquivo. Quando feita a atribuio varivel local, o
arquivo continua aberto.
Somente ao trmino do programa os arquivos abertos so fechados. No caso do exemplo, temos oito linhas na
tabela com duas colunas Bfile para cada, no total de 16 arquivos fechados ao trmino do programa.
CAPTULO 3 PL/SQL
O fechamento do arquivo um ponto de preocupao da programao pois existe um limite mximo de arquivos
abertos, que, se ultrapassado, causa erro no programa.
COPY
Copia parte (ou todo) de um Lob para um Lob de destino. Os Lobs origem e destino devem ser de mesmo tipo
(Blob ou Clob). Esta procedure no est disponvel para Bfiles.
CARACTERSTICAS
Esta rotina faz a cpia de <lob_src> a partir do ponto <offset-2> para o ponto <offset-1> do <lob_dest>. A quantidade
de bytes copiada fornecida pelo parmetro <qtd>.
Se a quantidade de bytes especificada por <amount> for maior que o tamanho de <lob_src>, no haver erro; ser
copiada apenas a quantidade de bytes existente.
A procedure poder receber uma das seguintes exceptions:
COMENTRIOS
No caso de Clob, os charsets origem e destino devem ser iguais.
Observe que se <offset-1> for anterior ao final de <lob_destino>, parte de seu contedo ser recoberto pela cpia.
Caso ocorra o inverso, <offset-1> for posterior ao final de <lob_destino>, a diferena ser completada com espaos.
C_NUMBER
-------3
1
2
3 linhas
C_CLOB1
-------------------------------------------ABCD
TEXTO QUALQUER
NOVO TESTE DE ATUALIZAO
selecionadas.
C_CLOB2
--------------------TRANSFERNCIA DE LOB
ORACLEORACLE
TESTE DE COPIA DE LOB
SQL> DECLARE
2
CURSOR C1 IS SELECT C_CLOB1, C_CLOB2
3
FROM TLOB FOR UPDATE;
4 BEGIN
5
FOR R1 IN C1 LOOP
6
DBMS_LOB.COPY (R1.C_CLOB1, R1.C_CLOB2, 10, DESTINO = OFFSET-1, ORIGEM = OFFSET-2);
7
DBMS_LOB.COPY (R1.C_CLOB2, R1.C_CLOB1, 10, DESTINO = OFFSET-1, ORIGEM = OFFSET-2);
8
END LOOP;
9 END;
10 /
Procedimento PL/SQL concludo com sucesso.
SQL>
SQL>
SQL>
SQL>
2
C_NUMBER C_CLOB1
C_CLOB2
-------- -------------------------------------------- ---------------------------------
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
393
TRANSFERN
TEXTO QUALORACLEORAC
NOVO TESTE DE ATUALIZTESTE DE C
selecionadas.
CREATETEMPORARY
Essa rotina cria um Blob ou Clob temporrio e seu correspondente ndice no tablespace temporrio default do usurio.
Onde:
No exemplo da Listagem 3.186, criamos um Lob de trabalho sem qualquer associao com tabelas do banco de
dados. Adicionamos dados a esse Lob (rotina WriteAppend) e verificamos seu tamanho final.
ERASE
Esta rotina tem a finalidade de esvaziar totalmente ou parcialmente o contedo de um Lob (Blob ou Clob).
Os parmetros desta rotina indicam:
CAPTULO 3 PL/SQL
Listagem 3.187 Limpando trechos de Lobs
SQL>
2
3
4
5
6
7
8
9
10
11
DECLARE
CURSOR C1
TAMANHO
BEGIN
FOR R1 IN C1 LOOP
DBMS_LOB.ERASE(R1.C_CLOB1, TAMANHO, 3);
DBMS_LOB.ERASE(R1.C_CLOB2, TAMANHO, 1);
END LOOP;
END;
/
C_CLOB1
C_CLOB2
-------------------------------------------- --------------------------------TR SFERN
ANSFERNCIA DE LOB TRANSFERN
TE O QUALORACLEORAC
ACLEORACLE TEXTO QUAL
NO
TESTE DE ATUALIZTESTE DE C
STE DE COPIA DE LOB NOVO TESTE
selecionadas.
COMENTRIO
Quando esvaziamos o incio ou o centro de um Lob, o valor presente neste ponto substitudo por brancos.
FILECLOSE
Esta rotina fecha um determinado Bfile aberto previamente.
O parmetro <arquivo> corresponde ao locator do arquivo (no o nome).
Essa rotina pode gerar as seguintes condies de erro:
FILECLOSEALL
Esta rotina fecha todos os Bfiles abertos na sesso.
Pode gerar a exception Unopened_File se nenhum arquivo tiver sido aberto na sesso.
FILEEXISTS
Essa funo indica se um determinado locator aponta para um arquivo existente no sistema operacional.
Retorna 1 se o arquivo existir, zero se no existir e Null se <arquivo> (locator) for Null ou se no tivermos os
privilgios de sistema operacional necessrios no diretrio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
395
FILEGETNAME
Esta rotina retorna o diretrio (objeto diretrio do Oracle) e o nome do arquivo associado a um determinado locator.
No exemplo anterior, executamos a rotina e obtivemos o diretrio Local, que corresponde a um objeto do banco de dados.
Se desejarmos saber a que diretrio de disco esse objeto corresponde, devemos consultar a view do dicionrio de
dados Dba_Directories.
Nulo?
-------NOT NULL
NOT NULL
Tipo
-------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
DIRECTORY_NAME
-------------------LOCAL
DISCO_D
DIRECTORY_PATH
-------------D:\TESTE
D:\TESTE
CAPTULO 3 PL/SQL
FILEISOPEN
Esta funo indica se o Bfile foi aberto com o locator passado como parmetro.
Os valores retornados por esta funo so 1 quando o locator j foi aberto anteriormente e zero quando no.
Essa rotina pode gerar as seguintes condies de erro:
FILEOPEN
Esta rotina abre um arquivo Bfile, identificado pelo locator, para leitura. O Oracle no grava os arquivos do sistema
operacional (Bfile). So utilizados apenas para leitura.
O parmetro <open_mode> indica o modo de abertura do arquivo. Atualmente, apenas leitura permitida (0).
Essa rotina pode gerar as seguintes condies de erro:
FREETEMPORARY
Essa rotina libera o Lob temporrio (Blob ou Clob) do tablespace temporrio default do usurio. Aps a execuo
dessa rotina, o locator liberado marcado como invlido.
Se um Lob locator (A) invlido for associado a outro Lob locator (B) atravs de uma atribuio (em PL/SQL), o Lob
receptor (B) tambm ser liberado e marcado como invlido.
Onde:
GETCHUNKSIZE
Quando fazemos a especificao da tabela, podemos especificar um Chunking Factor (quantidade de bytes para
manipulao do Lob), que deve ser um mltiplo de Oracle Block especificado. Esse tamanho utilizado para
acesso ou modificao do valor do Lob. Parte do Chunk usada para armazenamento de informaes do sistema
e o restante para armazenamento do valor.
Essa funo retorna a quantidade de espao usado em um Lob Chunk para armazenamento do valor do Lob.
Onde:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
397
GETLENGTH
Esta funo retorna o comprimento em bytes (ou caracteres, dependendo do charset) de um determinado Lob.
O retorno da funo ser Null se o parmetro de entrada for Null.
Para Bfiles, o retorno da funo tambm ser Null em um dos seguintes casos:
O locator Null.
No tivermos os privilgios necessrios para acesso ao diretrio ou relativos ao sistema operacional.
Na ocorrncia de um erro de I/O na leitura.
CAPTULO 3 PL/SQL
INSTR
Esta funo semelhante funo Instr de PL/SQL. Retorna a n-sima <nth> de <pattern> dentro de <lob_loc>,
comeando na posio <offset>.
No caso de Bfiles, o arquivo j deve ter sido aberto anteriormente.
A funo retorna a posio inicial de <pattern> dentro do <lob_loc>. Caso no seja encontrada, ser retornado zero.
Ser retornado Null se um dos parmetros for Null ou invlido, se <offset> for menor que 1 ou maior que LobMaxSize
ou se <nth> for menor que 1 ou maior que LobMaxSize.
Esta funo, para Bfiles, pode gerar as seguintes condies de erro:
ISOPEN
Essa funo indica se o Lob j est aberto. Essa rotina aplicvel a Lobs internos e externos.
Onde:
ISTEMPORARY
Indica se o Lob temporrio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
399
LOADFROMFILE
Esta rotina copia um arquivo endereado por um locator (Bfile) para um lob interno (Blob ou Clob).
A cpia pode ser parcial ou total, dependendo do valor dos parmetros (<dest_offset> e <src_offset>) e do nmero
de bytes a ser copiado (parmetro <bytes>).
Os parmetros desta rotina indicam:
OBSERVAES
No feita nenhuma converso implcita se carregarmos um arquivo binrio para um Clob.
O dados do arquivo Bfile devem possuir o mesmo charset que a coluna Clob do banco de dados. No feita
nenhuma verificao quanto a isto.
CAPTULO 3 PL/SQL
DIR = LOCAL ARQ = VIEWS.SQL; DIR = LOCAL ARQ = VIEWS.SQL;
DIR = LOCAL ARQ = VIEWS.SQL; DIR = LOCAL ARQ = VIEWS.SQL;
DIR = LOCAL ARQ = SAIDA.HTM; DIR = LOCAL ARQ = VIEWS.SQL;
A alterao feita diretamente no banco de dados, no havendo necessidade de execuo de um comando Update,
porm a utilizao de Commit no dispensada.
OPEN
Essa rotina abre um Lob (interno ou externo) no modo indicado. Os valores vlidos para <open_mode> so:
Dbms_Lob.Read_Only e Dbms_Lob.Read_Write.
As seguintes restries devem ser observadas:
O programa apresentado na Listagem 3.193 l um arquivo gravado no ambiente servidor para um Lob temporrio
e apresenta seu contedo. Observe que a abertura do Lob temporrio e seu fechamento so opcionais. J a abertura
do Bfile e fechamento so obrigatrios.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
401
READ
Esta rotina obtm uma determinada quantidade de bytes de <lob_loc> a partir da posio <offset> e armazena no
parmetro de sada <buffer>.
A quantidade de bytes realmente lida retornada no parmetro <amount>. Caso o fim do Lob seja atingido antes
do tamanho especificado, o parmetro <amount> receber 0 e ser causada a exception No_Data_Found.
Observe que o resultado desta rotina ser do tipo Raw se <lob_loc> for do tipo Bfile ou Blob e Varchar2 se <lob> for
do tipo Clob.
Esta procedure pode causar uma das seguintes exceptions:
No_Data_Found se o fim do Lob for atingido e no existirem mais dados a serem lidos.
Para Bfiles, ainda pode gerar, adicionalmente, as exceptions:
SUBSTR
Obtm um trecho de um Lob. Similar funo Substr de PL/SQL (porm com os parmetros relativos posio
inicial e quantidade de bytes invertidos sintaticamente). O comprimento mximo de 32.767 bytes.
Esta funo retorna Raw se o parmetro de entrada for um Blob ou um Bfile. Caso seja um Clob, o retorno ser Varchar2.
O retorno da funo ser Null se qualquer dos parmetros for Null ou se <bytes> for inferior a 1 ou superior a
32.767 ou, ainda, se <inicio> for inferior a 1 ou superior a LobMaxSize.
Para Bfiles, esta funo pode gerar as exceptions:
CAPTULO 3 PL/SQL
TRIM
Esta rotina trunca (ou corta) o Lob para o comprimento especificado no parmetro.
Se tentarmos truncar um Lob vazio, no ocorre erro; porm se o novo comprimento for maior que o comprimento
atual, ocorrer uma exception.
As seguintes exceptions podem ser causadas por esta procedure:
WRITE
A procedure Write grava uma determinada quantidade de dados em um Lob a partir da posio <offset> determinada.
Essa procedure substitui qualquer dado j existente na posio determinada at o comprimento informado.
Ocorrer um erro se <amount> for maior que o tamanho de <buffer>. Se, pelo contrrio, <bytes> for menor que o
tamanho de <buffer>, somente o tamanho de <amount> ser copiado.
Da mesma forma que na rotina Read, se <lob_loc> for do tipo Blob, <buffer> deve ser do tipo Raw. Caso <lob_loc>
seja do tipo Clob, <buffer> deve ser do tipo Varchar2.
Se especificarmos o parmetro <offset> posterior ao final do Lob, a diferena ser completada com brancos.
Essa procedure pode causar uma das seguintes exceptions:
WRITEAPPEND
Esta rotina grava uma determinada quantidade de dados ao fim de um Lob interno. Ocorrer um erro se a quantidade
de dados informada no parmetro <amount> for maior que o tamanho da informao passada pelo parmetro
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
403
RESTRIES
O uso de Lob est sujeito a algumas restries:
Lobs distribudos no so permitidos. Isto significa que no podemos usar um locator remoto nas clusulas
Select e Where ou nas rotinas do pacote Dbms_Lob.
Em uma operao de Insert ou Update podemos colocar dados de qualquer tamanho a uma coluna Lob, porm
isto no possvel para um atributo Lob de um tipo objeto. Em um comando InsertAs Select podemos colocar
at 4000 bytes de dado em colunas Lob.
Se uma tabela possui uma coluna Long e colunas Lob, no podemos tratar mais de 4000 bytes para ambas as
colunas no mesmo comando de SQL, porm podemos manuserar, isoladamente, mais de 4000 bytes para cada
uma das colunas.
Lobs no podem ser usados nos seguintes locais:
Lobs no podem ser PKs e nem fazer parte, diretamente, de chave de ndice; no entanto podemos construir um
ndice baseado em uma funo que leia e manuseie Lobs.
EXERCCIOS
Para desenvolvimento dos exerccios deste tpico crie as tabelas Tlob_E e Func_Lob. Preencha a tabela Func_Lob a
partir das tabelas Func e Depto. Use o script R03_00.SQL.
Id
C_Blob
S_Blob
C_BFile
S_BFile
C_Clob
S_Clob
Number(03)
Blob
Number
BFile
Number
Clob
Number
CAPTULO 3 PL/SQL
SQL> CREATE TABLE TLOB_E
2 (C_ID
NUMBER PRIMARY KEY,
3
C_BLOB
BLOB,
4
S_BLOB
NUMBER,
5
C_BFILE
BFILE,
6
S_BFILE
NUMBER,
7
C_CLOB
CLOB,
8
S_CLOB
NUMBER);
Tabela criada.
Nome_Func
Nome_Depto
Mat
Clob
Clob
Number (PK)
CLOB,
CLOB,
NUMBER PRIMARY KEY);
3.78) Faa um bloco de PL/SQL que receba como parmetro uma matrcula e um texto. Adicione o texto ao fim do
nome do funcionrio. Use Dbms_Lob.Write (tabela Func_Lob).
3.79) Faa um bloco de PL/SQL que apresente o nome do funcionrio e o nome do departamento em que ele
trabalha. O programa recebe como parmetro a matrcula do funcionrio. Use Dbms_Lob.Read (tabela Func_lob).
3.80) Faa um bloco de PL/SQL que receba como parmetro uma letra e uma matrcula. Verifique quantas vezes a
letra recebida existe em Nome_Depto. Use Dbms_Lob.Instr (tabela Func_Lob).
3.81) Faa uma rotina que receba como parmetro um ID e um nome de arquivo (o diretrio em uso ser Windows). Carregue esse arquivo para a coluna Bfile e para a coluna Blob do ID especificado. Se este ID j existir efetue
uma alterao. Calcule o tamanho dos objetos includos ou recalcule para os alterados.
3.82) Faa um programa que receba como parmetro um texto e um ID e atualize o Clob do ID correspondente.
No deve ser feita substituio, somente adio permitida. Recalcule o tamanho do objeto.
3.83) Faa um programa que pesquise um texto em um Clob ou pesquise um trecho binrio em um Blob. Determine:
A) A quantidade de elementos encontrados.
B) Para os textos, os dez primeiros bytes aps o texto e a posio inicial.
C) Para os binrios, a posio encontrada.
3.84) Faa um programa que copie o Clob de uma linha para outra da tabela Tlob_E. Os parmetros so: ID da
origem, ID do destino e posio inicial da origem.
3.85) Suponhamos que desejssemos salvar os fontes dos programas dentro do banco de dados. Os fontes podem
ser texto ou arquivos binrios, com as extenses: Txt, Fmb (binrio), Mmb (binrio). Faa um programa que receba
como parmetro o diretrio, o nome do arquivo (sem a extenso) e seu tipo (corresponde extenso do arquivo)
e carregue-o para a coluna Blob ou para a coluna Clob, dependendo do tipo do arquivo.
Utilize as tabelas apresentadas na Listagem-resposta 3.85A.
Listagem-resposta 3.85A
SQL> CREATE TABLE COFRE
2 (FONTE
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
405
BLOB,
CLOB);
3.86) Obtenha todos os textos presentes na tabela Tlob, retire os brancos encontrados e concatene em um nico
campo. Apresente o tamanho do texto resultante.
METODOLOGIA
Apresentao e descrio dos componentes do pacote.
TCNICA
Apresentao prtica da utilizao dos componentes do pacote.
INTRODUO
Este pacote tem a finalidade de gerar nmeros randmicos. Este gerador produz nmeros inteiros de 8 dgitos.
Para que a gerao tenha sucesso, devemos, como primeira etapa, inicializar a gerao fornecendo um nmero de
mais de 5 dgitos.
Ao trmino da etapa de obteno dos nmeros randmicos devemos encerrar a execuo do pacote com o uso da
rotina Terminate.
Tabela 3.10 Componentes do Package Dbms_Random
Componente
Tipo
Descrio
Initialize
Procedure
Inicializa o gerador. Deve-se fornecer como parmetro um nmero com mais de 5 dgitos.
Seed
Procedure
Random
Function
Terminate
Procedure
Se voc executou o comando Desc Dbms_Random no SQL*PLUS, observar que o pacote possui mais rotinas que estas apresentadas pela Sintaxe
3.31. Porm, como as demais rotinas no esto presentes na documentao desta verso, elas no sero abordadas neste livro.
CAPTULO 3 PL/SQL
O primeiro exemplo (Listagem 3.195) aborda os requisitos necessrios gerao randmica; utilizamos a rotina de
inicializao e ao trmino a rotina de encerramento (conforme as regras).
Observe que os nmeros gerados tanto podem ser positivos quanto negativos. Voc pode usar a funo ABS para j
obter os nmeros somente positivos aps a gerao, se necessrio.
Neste exemplo usamos a funo ABS para que o resultado fosse sempre positivo. Observe tambm que apesar de
no termos executado a rotina Initialize no encontramos problemas na gerao dos nmeros randmicos (talvez
em virtude de estarmos na mesma sesso, j que se trata de um package); no entanto, isto pode no acontecer na
sua verso do software. O primeiro exemplo mais seguro de uso, em todas as circunstncias.
EXERCCIOS
3.87) Faa uma rotina que, aleatoriamente, escolha 3 funcionrios para premiao de Natal da empresa.
3.88) Sabendo-se que uma roleta contm 25 nmeros vermelhos (mpares) e 25 nmeros pretos (pares). Determine
o nmero ganhador e se ele vermelho ou preto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
407
METODOLOGIA
Apresentao e descrio dos componentes do pacote.
TCNICA
Apresentao prtica da utilizao dos componentes do pacote.
SOBRE O PACOTE
Este pacote tem a finalidade de habilitar ou desabilitar um ponto especfico do tempo para acesso a informaes j
modificadas no banco de dados.
Podemos obter informaes de uma verso (ou momento) do banco de dados anterior ao momento atual. Quando
habilitamos este pacote, a sesso do usurio utiliza uma verso Flashback do banco de dados
Este pacote pode ser usado para recuperarmos dados removidos (Delete) incorretamente, verso original de dados
que foram modificados, etc.
Para realizarmos estas aes com sucesso, o DBA deve ser informado, para que tenhamos autorizao de uso do
pacote e para habilitar a reteno das informaes pelo perodo de tempo de que viermos a necessitar.
Tabela 3.11 Componentes do Package Dbms_Flashback
Componente
Tipo
Descrio
Enable_At_Time
Procedure
Habilita a sesso para o modo de Flashback. O controle do tempo feito em relao ao SCN mais prximo
da data e hora informados como parmetro.
Enable_At_System_Change
Procedure
Habilita a sesso para o modo de Flashback. Passamos como parmetro, diretamente, o SCN desejado.
Get_System_Change_Number
Function
Disable
Procedure
Quando uma transao que modifica o banco de dados encerrada com sucesso ela recebe um nmero de controle
chamado SCN (System Change Number). Este nmero gravado no arquivo de Log e era usado, at esta verso,
para controle do processo de recuperao.
Na verso 9i, podemos usar o SCN, tambm, para identificar um ponto dentro do arquivo de Log onde desejamos
estabelecer uma imagem do banco de dados para obteno de informaes do passado. Este pacote se utiliza desta
informao para determinao deste ponto no tempo.
CAPTULO 3 PL/SQL
Sesso alterada.
SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;
CURRENT_TIMESTAMP
-----------------------------------------------19/11/2001 08:53:56,000001 -02:00
SQL> SELECT VL_SAL FROM FUNC WHERE CD_MAT = 150;
VL_SAL
---------7925,7
SQL> UPDATE FUNC
2
SET VL_SAL = VL_SAL * 1.5 WHERE CD_MAT = 150;
1 linha atualizada.
SQL> COMMIT;
Validao completa.
EXECUTE DBMS_FLASHBACK.ENABLE_AT_TIME(TO_TIMESTAMP('19/11/2001 08:53:56,000001'));
Procedimento PL/SQL concludo com sucesso.
SQL> SELECT
VL_SAL
---------7925,7
Neste primeiro exemplo obtivemos o timestamp atual antes de realizar os procedimentos de atualizao. Na verdade,
no dia-a-dia talvez no tenhamos toda esta preciso em relao ao momento desejado e no temos essa necessidade,
pois o que precisamos informar algum momento antes do ponto de atualizao do banco de dados.
Esta rotina atua por sesso, o que significa que no afeta os trabalhos dos demais usurios. Para que voc comprove
esta atuao, abra outra sesso do SQL*Plus e faa a consulta tabela Func (voc ver os dados de salrio atualizados).
No exemplo anterior podemos perceber, tambm, que a partir do momento em que executamos a rotina
Enable_At_Time, todas as consultas s informaes se processam como se estivssemos retornado no tempo (Flashback). Estamos estacionados, temporalmente, no dia 19/11 s 8:53 hs. Qualquer modificao feita na base de
dados aps este momento no perceptvel pelas consultas que fizermos aos dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
409
No exemplo da Listagem 3.199 tentamos executar a rotina de Flashback novamente sem desabilitar o estado de
Flashback e recebemos um erro.
Neste exemplo verificamos que o encerramento da sesso (com o Connect), automaticamente, desabilita o estado
de Flashback. Um commit encerra apenas a transao e no a sesso.
Este mesmo resultado pode ser obtido sem que tenhamos de sair da sesso, bastando executarmos a rotina Disable
do pacote Dbms_FlashBack (como no exemplo da Listagem 3.201).
Listagem 3.202
SQL> EXECUTE DBMS_FLASHBACK.ENABLE_AT_TIME(TO_TIMESTAMP('13/10/2001 07:20:00,000000'));
BEGIN DBMS_FLASHBACK.ENABLE_AT_TIME(TO_TIMESTAMP('13/10/2001 07:20:00,000000')); END;
*
ERRO na linha 1:
ORA-08180: nenhum snapshot encontrado com base no tempo especificado
ORA-06512: em SYS.DBMS_FLASHBACK, line 0
ORA-06512: em line 1
CAPTULO 3 PL/SQL
Para que seja possvel termos acesso a dados mais antigos, devemos, previamente, informar ao DBA de que
precisaremos utilizar este tipo de informao em nossas aplicaes futuramente.
O DBA dever criar um tablespace de UNDO para que as informaes possam ser consultadas. Este tablespace ter
um tamanho to longo quanto forem as necessidades de regresso. Alguns parmetros de inicializao do banco de
dados tambm devero ser modificados (Undo_Retention = <perodo de reteno limite>, undo_management=
AUTO, undo_tablespace=<nome do tablespace de Undo, no caso do Personal: Undotbs).
Com o banco preparado para armazenar as modificaes dentro dos limites estabelecidos poderemos incluir estas
rotinas em nossas aplicaes normais para, por exemplo, comparar dados atuais com dados do passado. Veja o
exemplo da Listagem 3.203.
Neste exemplo habilitamos o mecanismo de Flashback, abrimos um cursor no passado, encerramos o mecanismo
de Flashback e consultamos, normalmente, a base de dados. Com esta opo pudemos obter e comparar dados
antigos e atuais referentes ao mesmo elemento.
No script 3.203a, alm de consultar, atualizamos a base atual com os dados do passado. Use-o e faa um teste.
Nosso ltimo exemplo utiliza uma outra forma de determinar o ponto exato do retorno, que o SCN. Cada
transao no banco de dados recebe um SCN (system change number) que identifica a transao. Se soubermos
este SCN, a preciso de retorno ser maior que a especificao de tempo, se isto for uma necessidade.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
411
EXERCCIOS
3.89) Faa uma rotina que coloque no SQL*Prompt, a cada vez que o usurio quiser ou quando este abrir o SQL*Plus
o ltimo SCN.
3.90) Faa uma rotina que a partir de um SCN recebido como parmetro gere um arquivo com as diferenas
encontradas, na tabela de Funcionrios, entre a verso na data do SCN e a atual.
METODOLOGIA
Apresentao e descrio do utilitrio Wrapper.
TCNICA
Apresentao prtica da aplicabilidade do utilitrio.
INTRODUO
Muitas vezes necessitamos enviar aplicaes de PL/SQL para instalao em ambientes externos ao de nossa instalao.
O cdigo enviado, de um modo geral, fica exposto e passvel de modificaes indesejveis.
A rotina Wrapper tem a finalidade de criptografar o cdigo-fonte de tal forma que somente o Oracle tenha condies
de ler e compilar o texto gerado.
CARACTERSTICAS
A rotina Wrapper converte o cdigo-fonte de PL/SQL em uma forma intermediria de cdigo-objeto.
O cdigo-objeto gerado portvel como se fosse o prprio fonte. O compilador PL/SQL reconhece e carrega o
cdigo gerado pelo Wrapper automaticamente.
VANTAGENS
Algumas vantagens da utilizao do cdigo-objeto gerado:
CAPTULO 3 PL/SQL
No deve haver espao nem antes nem depois dos sinais de igual.
A extenso default para o arquivo de entrada .SQL e para o arquivo de sada, .PLB.
Caso o arquivo de sada no seja especificado, ser gerado com o mesmo nome do arquivo de entrada, com a
diferena apenas da extenso.
RESTRIES
Como restrio temos que no podemos passar para a rotina Wrapper um bloco annimo de PL/SQL.
Apenas fontes contendo os comandos a seguir podem ser codificadas:
Create Procedure.
Create Function.
Create Package.
Create Package Body.
Todos os outros comandos so passados intactos para o arquivo de sada. As linhas com comentrios (contendo
REM ou ) so removidas do cdigo gerado a menos que estejam includas na parte de especificao.
A Listagem 3.205 apresenta o comando a ser passado para a rotina Wrap. Nos parmetros INAME e ONAME
podemos informar o diretrio completo onde se acham os programas. No exemplo isto no foi feito pois a execuo
do comando (no DOS) foi feita dentro do diretrio onde se achava o fonte a ser convertido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
413
EXERCCIOS
3.91) Crie uma stored procedure que faa a atualizao dos salrios dos funcionrios de acordo com os parmetros:
cargo e percentual.
Se o funcionrio for lder de projeto (cd_resp da tabela Proj), deve ser feito um acrscimo de 3% ao percentual
fornecido. Se o funcionrio for gerente de departamento (cd_gerente da tabela Depto), deve ser feita uma adio
de 4% ao percentual acumulado.
Aps a criao da rotina, consulte a tabela User_Source. Qual o nvel de visibilidade do cdigo?
Autorize o uso desta rotina por outro usurio do seu banco, por exemplo, Scott (password Tiger). Estabelea conexo
como Scott e consulte a tabela All_Source. Qual o nvel de visibilidade do cdigo?
Converta o fonte desta rotina usando o aplicativo Wrapper.
Crie novamente a rotina no usurio Desenv.
Refaa os testes de visibilidade local no usurio Desenv e no usurio Scott.
Qual a concluso a que chegamos?
3.92) Crie um pacote contendo a rotina anterior e uma varivel chamada Bloqueio tipo Number.
Aps a criao do pacote, consulte a tabela User_Source. Qual o nvel de visibilidade do cdigo?
Autorize o uso deste pacote por outro usurio do seu banco, por exemplo, Scott (password Tiger). Estabelea
conexo como Scott e consulte a tabela All_Source. Qual o nvel de visibilidade do cdigo?
Converta o fonte deste pacote usando o aplicativo Wrapper. Crie novamente a rotina no usurio Desenv.
Refaa os testes de visibilidade local no usurio Desenv e no usurio Scott.
Qual a concluso a que chegamos?
CAPTULO 3 PL/SQL
METODOLOGIA
Apresentao e descrio dos procedimentos necessrios criao de rotinas externas ao banco de dados.
INTRODUO
Neste tpico, trataremos da utilizao de rotinas criadas fora do banco de dados e utilizadas em PL/SQL. Essas
rotinas so chamadas de External Procedures. A abordagem deste assunto neste material ser superficial. Focaremos
principalmente o conceito. Para maiores informaes, consulte o Captulo 10 do manual Application Developers
Guide Fundamentals.
Uma External Procedure nada mais que uma rotina escrita em uma linguagem de terceira gerao e armazenada
em uma DLL (Dynamic Link Library) ou libunit no caso de Java e registrada com a PL/SQL.
Isto significa que existir um mecanismo controlado pela PL/SQL que acionar a rotina externa. As aplicaes que
desejarem fazer uso de uma rotina externa acionaro uma rotina especial declarada em PL/SQL, mas que na verdade
servir de interface para a verdadeira rotina externa. Veremos a seguir como se dar esta interface.
Quando acionarmos esta rotina PL/SQL, a prpria PL/SQL acionar a execuo da DLL como se fosse uma subrotina interna sua, passando e recebendo no s os parmetros como tambm os erros e transferindo o resultado
para o programa que a acionou. Desta forma, para o programa chamador indiferente (sintaticamente) a utilizao
de uma rotina PL/SQL ou externa.
Atualmente, rotinas chamadas de um cdigo C e Java so suportadas.
CRIANDO A INTERFACE
Para a utilizao de rotinas externas, duas etapas so necessrias:
Inicialmente o DBA deve criar uma library no banco de dados que identifique a localizao da biblioteca de
rotinas (ou seja, da DLL ou classe).
A segunda etapa refere-se especificao da rotina para que a PL/SQL possa ativ-la; chama-se registrar o
procedimento (rotina PL/SQL de interface).
DEFININDO A BIBLIOTECA
O comando Create Library identifica o arquivo em disco onde se encontram as rotinas (funes e procedures) que
desejamos ativar.
A especificao de <caminho> deve ser completa para que a DLL possa ser efetivamente encontrada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
415
Na Listagem 3.208, criamos uma Library no banco de dados que faz referncia a uma biblioteca (DLL) existente em
disco e uma referncia a uma classe (Util) existente em disco.
Esta clusula identifica a biblioteca onde est a rotina, seu nome, sua linguagem de programao, parmetros, etc.
Na Sintaxe 3.35, temos as seguintes informaes:
Language Java Name <string> Especifica que a linguagem em que a rotina externa est escrita Java. A
clusula Name identifica o mtodo dentro da classe. Observe no exemplo que usamos o nome da classe como
qualificador do mtodo, alm de incluirmos a especificao dos parmetros recebidos (como se fosse a assinatura
do mtodo, lembra de declarao forward ?). Caso a classe estivesse em um package, deveramos, tambm, usar
o nome do package como por exemplo <packagename>.<classname>.<metod>. No se esquea que os nomes
em Java so case sensitive.
Library <nome> Especifica o nome da Library (definida no comando Create Library). Quando a library for criada,
deve ser autorizada (Grant Execute) para todos os usurios (users) que vierem a utilizar as rotinas desta DLL.
Agent in (<argumento>) O nome do processo agent corresponde ao nome do database link, o que permitir (se
as especificaes de tnsnames e listener estiverem adequadas) que a procedure externa seja acionada em outra
mquina. Quando o nome do agente especificado nesta clusula, este nome se sobrepe ao nome do agente
especificado na library. Se nenhum agente for especificado, o default extproc, agente na mesma mquina
que o programa chamado.
CAPTULO 3 PL/SQL
With Context Especifica que um ponteiro de uma rea contendo uma srie de informaes de ambiente ser
passado para a rotina externa. O layout desta rea no est disponvel para a rotina externa; no entanto, poder
ser utilizada por rotinas de servio disponibilizadas pela Oracle para a realizao de aes especiais (inclusive
acesso ao banco de dados).
Parameters Especifica a posio e tipo dos parmetros passados para a rotina externa. Em funo das diferenas
entre as linguagens, podemos especificar propriedades dos parmetros tais como o comprimento atual, o
comprimento mximo e a forma de transferncia dos dados (por valor ou por referncia).
Neste primeiro exemplo, identificamos uma rotina fictcia chamada calcula que est declarada dentro da library
OraSql (na verdade, da DLL Orasql.DLL). Como o nome da rotina est entre aspas, desta forma que o Oracle
procurar por esta rotina dentro da DLL.
A referncia a funes de Java bem mais simples devido compatibilidade entre os datatypes de Java e PL/SQL,
a passagem de parmetros simplificada e no precisa de maiores explicaes na criao da funo, como vimos
acima. No exemplo a seguir j podemos utilizar, no SQL*Plus, os mtodos presentes na classe Util.
PARMETROS
CARACTERSTICAS DAS LINGUAGENS
Existem diferenas relativas aos parmetros entre as linguagens C e PL/SQL:
O conjunto de tipos da PL/SQL no corresponde exatamente aos tipos de uma rotina C. A tabela a seguir mostra
a compatibilidade entre os tipos da PL/SQL e os do C.
Os parmetros de PL/SQL podem ser Null, uma vez que o banco de dados possui este conceito. J os parmetros
de C no podem.
A rotina C pode necessitar do tamanho atual ou mximo dos parmetros tipo Char, Varchar2, etc., uma vez que
a linguagem C trata uma string como uma array de caracteres (portanto, necessita saber o tamanho).
A rotina C pode necessitar de informaes relativas a charset dos parmetros Char, Varchar2 e Clob.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
417
Int
Unsigned Int
Float, Real
Float
Float
Double Precision
Double
Double
Char
Character
Long
Nchar
Nvarchar2
Rowid
Varchar
Varchar2
String
Ocistring
String
Long Raw
Raw
Raw
Ociraw
Raw
Number
Dec
Decimal
Int
Integer
Numeric
Smallint
Ocinumber
Ocinumber
Date
Ocidate
Ocidate
Timestamp
Timestamp with time zone
Timestamp with local time zone
Ocidatetime
Ocidatetime
Ociinterval
Ociinterval
Adts
Dvoid
Dvoid
Collections (varrays,
Nested Tables, index-by Tables
Ocicoll
Ocicoll
Bfile OciloblocatorOciloblocator
Blob
Clob
Nclob
Tipos compostos:
CAPTULO 3 PL/SQL
A CLUSULA PARAMETERS
Cada subprograma PL/SQL que registra uma rotina externa, ou seja, que serve de interface para a chamada da
rotina externa, pode declarar uma lista de parmetros formais. A declarao destes parmetros envolve a especificao
de nome, modo e tipo PL/SQL.
Quando especificamos a clusula Parameters, podemos:
Substituir o tipo de dado default mapeado. A tabela anterior apresenta para cada tipo de dado da PL/SQL a
correspondncia default gerada caso nenhuma especificao adicional seja informada.
Definir que seja passado como parmetro para a rotina externa o comprimento atual e mximo de determinados
parmetros. Isto pode ser especialmente til para parmetros alfanumricos.
PROPRIEDADES
A ligao entre os parmetros formais da PL/SQL e os parmetros do C feita atravs das propriedades presentes na
clusula Parameters.
CREATE OR REPLACE
FUNCTION DADOS (X IN BINARY_INTEGER, Y IN OUT CHAR) RETURN CHAR AS
LANGUAGE C
LIBRARY ORASQL
NAME dados
PARAMETERS (
X,
-- transfere o contedo do parmetro X
X INDICATOR,
-- transfere a indicao de ausncia (Null) ou no de X
Y,
-- transfere o contedo do parmetro Y
Y LENGTH,
-- transfere o comprimento atual de Y
Y MAXLEN,
-- transfere o comprimento mximo de Y
RETURN INDICATOR,
-- retorna a indicao de ausncia(Null) ou no do retorno da funo
RETURN);
-- retorna o contedo do retorno da funo
/
Funo criada.
No exemplo da Listagem 3.211, criamos uma rotina de interface (registramos) e especificamos explicitamente cada
informao transferida ou retornada entre as partes.
A rotina C correspondente a esta interface teria o formato:
x,
x_ind,
*y,
*y_len
*y_maxlen
*retind);
------
X,
X INDICATOR,
Y,
Y LENGTH,
Y MAXLEN,
Observe que a correspondncia dos parmetros feita posicionalmente em relao clusula Parameters.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
419
INDICATOR
Um Indicator tem a finalidade de definir se o parmetro que ele indica ou no Null. A PL/SQL no necessita de
indicadores, porque o banco de dados possui o conceito de nulidade na linguagem.
Uma rotina externa (escrita em uma linguagem de terceira gerao) necessita saber se um determinado parmetro
ou resultado de funo ou no Null.
No programa C, os indicadores recebero um valor que identificar se o parmetro associado ou no Null. Os
valores-padro informados pela PL/SQL so OCI_IND_NULL e OCI_IND_NOTNULL, ou seja, se um indicador tiver
o valor igual a OCI_IND_NULL o parmetro associado est ausente (Null).
A Oracle sugere que associemos um indicador para cada parmetro formal que possa receber Null. Caso esta
atitude no seja tomada, a PL/SQL assumir que o parmetro no receber Null em nenhuma situao.
LENGTH E MAXLEN
Em PL/SQL, no existe forma de indicarmos o comprimento de um parmetro raw ou string. Porm, eventualmente,
podemos desejar passar o comprimento de um parmetro para e de uma rotina externa.
As propriedades Length e MaxLen fornecem informaes sobre o tamanho atual, que est sendo transferido, e o
comprimento mximo de um parmetro formal.
Quando houver parmetros do tipo Char, Long Raw, Raw ou Varchar2 a serem transferidos para um programa C,
conveniente que utilizemos a propriedade Length uma vez que na linguagem C strings so arrays de 1 caracter
(char * por exemplo), cujo comprimento definido pela presena de um \0.
CHARSETID E CHARSETFORM
Se estivermos utilizando parmetros Char, Clob ou Varchar2, pode ser interessante informarmos o charset em que
os valores sero informados. Isto pode ser obtido com as propriedades CharSetId e CharSetForm.
O atributo OCI para estas propriedades OCI_ATTR_CHARSET_ID e OCI_ATTR_CHARSET_FORM.
SELF
Self corresponde a um argumento sempre presente na passagem de uma funo ou procedure membro de um tipo
objeto. Voc ver, no Captulo 4, que um mtodo nada mais que uma rotina que tem acesso direto ao objeto
correspondente. Formalmente, o que ocorre a passagem implcita de um parmetro (SELF) para esta rotina
(mtodo), de tal forma que o objeto possa ser referenciado normalmente em PL/SQL.
Em muitos casos este argumento implcito e no apresentado na lista de argumentos da procedure PL/SQL.
Porm, SELF deve ser, explicitamente, especificado como um argumento da clusula PARAMETERS.
CAPTULO 3 PL/SQL
Tabela 3.13 Tipos de dados Default para troca de parmetros do PL/SQL com C
Propriedade
Parmetros para C
Parmetros PL/SQL
Tipo Default
Tipos Permitidos
Modos Permitidos
Modos
Indicator
Short
Todos os escalares
in,
in out,
out,
return
By Value
By Reference
By Reference
By Reference
Length
[Unsigned] Short,
[Unsigned] Int,
[Unsigned] Long
Int
Char,
Long Raw,
Raw,
Varchar2
in,
in out,
out,
return
By Value
By Reference
By Reference
By Reference
MaxLen
[Unsigned] Short,
[Unsigned] Int,
[Unsigned] Long
Int
Char,
Long Raw,
Raw,
Varchar2
In Out,
Out,
Return
By Reference
By Reference
By Reference
CharsetId,
CharsetForm
[Unsigned] Short,
[Unsigned] Int,
[Unsigned] Long
[Unsigned] Int
Char,
Clob,
Varchar2
in,
in out,
out,
return
By Value
By Reference
By Reference
By Reference
CREATE OR REPLACE
FUNCTION COMPARA(STR1 IN VARCHAR2, STR2 IN VARCHAR2) RETURN BINARY_INTEGER AS
LANGUAGE C
LIBRARY ORASQL
NAME compara
WITH CONTEXT
PARAMETERS
(CONTEXT,
STR1
STRING,
STR1
INDICATOR SHORT,
STR2
STRING,
STR2
INDICATOR SHORT,
RETURN INDICATOR SHORT,
RETURN);
/
Funo criada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
421
CREATE OR REPLACE
PROCEDURE PESQUISA(X IN REAL) AS
LANGUAGE C
LIBRARY ORASQL
NAME find_root
PARAMETERS (X
BY REFERENCE);
/
Procedimento criado.
Em vez do default:
Void find_root (float x);
CAPTULO 3 PL/SQL
A PL/SQL necessita de informaes sobre o tamanho atual, tamanho mximo e status (Null) dos valores retornados
pela rotina externa.
CREATE OR REPLACE
FUNCTION NUMERO(X IN REAL) RETURN BINARY_INTEGER AS
LANGUAGE C
LIBRARY ORASQL
NAME get_num
WITH CONTEXT
PARAMETERS
(CONTEXT,
X
BY REFERENCE,
RETURN INDICATOR);
/
Funo criada.
Apesar de o layout desta rea de informaes no ser disponibilizado pela Oracle, seu contedo pode ser obtido e
disponibilizado para as rotinas de servio que podem ser chamadas pela rotina externa.
Se incluirmos a clusula Parameters, devemos especificar o parmetro Context, que indica a posio do ponteiro para
a rea de contexto na lista de parmetro, que pode ser includa em qualquer posio desejada. Se omitirmos a
clusula Parameters, o ponteiro para a rea de contexto ser o primeiro parmetro passado para a External Procedure.
No caso do exemplo da Listagem 3.217, a rotina C correspondente teria o formato:
Procedimento criado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
423
A PL/SQL avisa ao processo Listener que dever acionar um processo especfico (agente default) chamado ExtProc.
A PL/SQL passa para este processo o nome da DLL, da rotina externa e dos parmetros.
A ExtProc carrega a DLL e executa a rotina externa. O resultado da execuo retornado para a PL/SQL.
O Listener executa a ExtProc na mesma mquina em que o Oracle Server executa. A execuo da ExtProc em outra
mquina j suportada com a identificao do agente.
OCIEXTPROCALLOCCALLMEMORY
Esta rotina aloca n bytes de memria durante a execuo da rotina externa. Qualquer memria alocada por ela
liberada logo que o controle retorna ao PL/SQL.
Para alocarmos ou liberarmos memria em uma rotina externa C, a Oracle recomenda que usemos esta rotina.
O programa C para esta funo da seguinte forma:
Os parmetros representam respectivamente o ponteiro para a rea de contexto e a quantidade de bytes a ser alocada.
CAPTULO 3 PL/SQL
A funo retorna um ponteiro para a rea de memria alocada. Se o valor retornado for zero, indica que ocorreu um erro.
OCIEXTPROCRAISEEXCP
Esta rotina de servio causa uma condio de erro predefinida, a qual deve ter um nmero (Oracle error number)
vlido no intervalo de 1 a 32.767. Nenhum valor associado aos parmetros Out ou In Out. Aps a execuo desta
rotina, a rotina externa deve encerrar imediatamente.
O programa C para esta funo da seguinte forma:
O parmetro error_number corresponde ao nmero do erro Oracle. O valor retornado OCIEXTPROC_ SUCCESS e
OCIEXTPROC_ERROR indica sucesso ou falha.
OCIEXTPROCRAISEEXCPWITHMSG
Esta rotina de servio causa uma condio de erro do usurio e retorna uma mensagem de erro.
O programa C para esta funo da seguinte forma:
*with_context,
error_number,
*error_message,
len);
Os parmetros representam, respectivamente, o ponteiro para a rea de contexto, o nmero do erro, a mensagem.
O parmetro len armazena o comprimento da mensagem. Se a mensagem null, o comprimento zero. Os valores
OCIEXTPROC_SUCCESS e OCIEXTPROC_ERROR indicam sucesso ou falha.
EXERCCIOS
3.93) Faa um programa que receba como parmetro uma opo e um nmero. Se a opo for Q retorne o
quadrado do nmero e se a opo for D retorne o dobro do nmero. Utilize a classe Util.class externa para a
montagem deste exerccio.
METODOLOGIA
Apresentao conceitual do tipo de varivel, seguida da sintaxe para sua utilizao.
TCNICA
Apresentao de exemplos resolvidos com o uso da sintaxe descrita.
CONCEITO
Uma varivel cursor (como um cursor) aponta para a linha corrente da tabela resultante gerada por uma query
que retorne um nmero indefinido de linhas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
425
VANTAGENS
A principal vantagem a possibilidade de passar o resultado de uma query entre um PL/SQL armazenado na base
e as vrias aplicaes-cliente. Nem o PL/SQL nem qualquer das aplicaes-cliente duplicam ou recebem a query
resultante. Eles simplesmente compartilham um ponteiro para a rea de trabalho resultante da query. Por exemplo,
um cliente OCI, uma aplicao Oracle Forms e o Oracle Server podem fazer referncia mesma rea de trabalho.
DEFINIO
A criao de uma varivel cursor similar declarao de outros tipos (Index-By Table, Record). Inicialmente,
devemos definir o tipo e posteriormente as variveis com aquele tipo.
Na Sintaxe 3.36, temos o formato para definio de um tipo cursor. O <tipo retorno> que aparece na sintaxe
representa o layout da rea de retorno, podendo ser definido como um record ou uma row em uma tabela do
banco de dados.
Observe que a clusula Return opcional, indicando que o tipo pode determinar ou no o layout do retorno.
DECLARE
TYPE CTYPE_FUNC
IS REF CURSOR RETURN FUNC%ROWTYPE;
TYPE CTYPE_LIVRE
IS REF CURSOR;
VFUNC
CTYPE_FUNC;
VLIVRE
CTYPE_LIVRE;
BEGIN
OPEN VFUNC FOR SELECT * FROM FUNC
WHERE CD_DEPTO = 'D11';
OPEN VLIVRE FOR SELECT CD_MAT, NM_FUNC FROM FUNC
WHERE CD_DEPTO = 'D11';
OPEN VLIVRE FOR SELECT * FROM DEPTO;
END;
/
Na Listagem 3.223, definimos dois tipos e duas variveis cursor. No primeiro tipo definido, declaramos o layout
esperado para o retorno. No segundo, deixamos sem especificao o layout da rea de retorno.
A tempo de Open da varivel cursor que determinamos a query a ser associada varivel.
Observe que para a varivel baseada no primeiro tipo, o comando Select associado, obrigatoriamente, deve selecionar
todas as colunas da tabela Func uma vez que o tipo determina que o layout da rea de retorno corresponde a uma
row da tabela Func.
Para a varivel baseada no segundo tipo, o layout livre e definido apenas no momento da associao do comando Select.
CAPTULO 3 PL/SQL
Na Sintaxe 3.37, vemos os trs comandos para manipulao de variveis do tipo cursor. Para variveis cursor no
temos o comando Cursor Loop.
Na Listagem 3.224 vemos o exemplo completo do programa iniciado anteriormente. De acordo com o parmetro
recebido, abrimos uma varivel cursor especfica e realizamos a leitura da primeira linha obtida.
Veremos a seguir alguns exemplos simples de utilizao das variveis cursor em subprogramas, packages, passagem
de parmetros.
Inicialmente, definimos tipos em um pacote e em seguida podemos, livremente, utiliz-los dentro de subprogramas
ou em parmetros.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
427
A Listagem 3.226 apresenta a criao de dois procedimentos independentes. O primeiro recebe como parmetro
uma varivel cursor e l todas as linhas retornadas por ela. O segundo recebe como parmetro uma varivel cursor
e fecha esta varivel.
Observe que para que pudssemos detectar o fim do processo de leitura utilizamos o atributo Notfound com a
varivel cursor. Todos os atributos de cursor esto autorizados para utilizao com varivel cursor.
Na Listagem 3.227 temos a definio de um procedimento que declara uma varivel cursor e passa essa varivel
para os demais programas.
CAPTULO 3 PL/SQL
No exemplo da Listagem 3.229, definimos uma varivel REFCURSOR no SQL*Plus. Este tipo do SQL*Plus permite
que declaremos variveis cursor com o objetivo de retornar os resultados de uma query armazenada em subprogramas
no banco de dados.
NM_FUNC
-----------I DT_NASC
-----------MIGUEL
M 02/02/68
NM_SOBRENOME CD_
NR_RAMAL DT_ADM
NR_CARGO
------------------ -------- ---------- -------VL_SAL NM_FOTO
------------------ -------- ---------- -------TEIXEIRA
B01
3476 10/10/93
61
12932,57 c:\windows\egito.bmp
No exemplo da Listagem 3.230, declaramos duas variveis cursor, abrimos uma delas e com o comando de atribuio
apontamos a segunda varivel para a mesma rea da primeira. Observe tambm que usamos uma varivel de
sistema chamada SYS_REFCURSOR. Ela representa uma declarao do tipo type sys_refcursor is ref cursor, sem
definio de retorno. Podemos us-la para passagem de parmetro sem necessidade de declarar um tipo cursor.
Quando declaramos uma varivel cursor como parmetro formal de um subprograma que obtm linhas desta varivel, devemos especificar o
parmetro no modo IN (ou IN OUT). Se o subprograma tambm abrir a varivel cursor, devemos especificar o modo IN OUT.
No podemos declarar variveis cursor em pacotes, apenas os tipos podem ser definidos.
Subprogramas remotos em outros servidores no podem aceitar os valores de variveis cursor. Assim, no podemos
usar chamadas a programas remotos para passar variveis cursor entre servidores.
A query associada com uma varivel cursor no pode ser do tipo For Update.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
429
DECLARE
V1
SYS_REFCURSOR;
V2
GLOBAL.CTYPE_FUNC;
AREA
FUNC%ROWTYPE;
BEGIN
OPEN V1 FOR SELECT * FROM FUNC WHERE CD_DEPTO = 'D11';
OPEN V2 FOR SELECT * FROM FUNC;
IF V1 = V2 THEN
DBMS_OUTPUT.PUT_LINE('IGUAIS');
END IF;
IF V1 IS NULL THEN
DBMS_OUTPUT.PUT_LINE('V1 NULL');
ELSE
DBMS_OUTPUT.PUT_LINE('V1 NO NULL');
END IF;
END;
/
V1 = V2 THEN
*
ERRO na linha 8:
ORA-06550: linha 8, coluna 9:
PLS-00306: nmero incorreto de tipos de argumentos na chamada para '='
ORA-06550: linha 8, coluna 3:
PL/SQL: Statement ignored
SQL> DECLARE
2
V1
SYS_REFCURSOR;
3
V2
GLOBAL.CTYPE_FUNC;
4
AREA
FUNC%ROWTYPE;
5 BEGIN
6
OPEN V1 FOR SELECT * FROM FUNC WHERE CD_DEPTO = 'D11';
7
OPEN V2 FOR SELECT * FROM FUNC;
8
IF V1 IS NULL THEN
9
DBMS_OUTPUT.PUT_LINE('V1 NULL');
10
ELSE
11
DBMS_OUTPUT.PUT_LINE('V1 NO NULL');
12
END IF;
13 END;
14 /
V1 NO NULL
Procedimento PL/SQL concludo com sucesso.
EXPRESSES CURSOR
Uma expresso CURSOR retorna um cursor embutido. Cada linha no conjunto resultante poder ser composta de
dois valores esperados das expresses comuns e, ainda, cursores, resultantes das expresses do tipo CURSOR que
apontam para as subqueries envolvidas na query principal.
A PL/SQL suporta queries com expresses CURSOR como parte da declarao de um cursor, e variveis cursor.
Tambm podemos usar estas expresses em SQL dinmico.
A sintaxe CURSOR (<subquery>) indica que ser retornado da query pai um ponteiro que far a manipulao da subquery.
O cursor embutido aberto quando a linha contendo o cursor obtida, na query pai. O cursor embutido ser
fechado somente quando for explicitamente closed ou quando o cursor pai for reexecutado ou o cursor pai for
fechado ou o cursor pai for cancelado ou ocorrer um erro durante a operao de fetch de um dos pais do cursor.
CAPTULO 3 PL/SQL
Neste exemplo inclumos duas expresses do tipo CURSOR, uma para obter o departamento do funcionrio e
outra para obter os projetos que este funcionrio em questo coordenava. No houve necessidade de fecharmos as
variveis cursor porque uma nova linha da tabela FUNC era lida e um novo ponteiro gerado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
431
Neste exemplo embutimos uma expresso cursor em outra expresso cursor; observe que, para cada funcionrio,
para cada linha de projeto foi obtido o nome do departamento associado ao projeto (no exemplo anterior obtnhamos
o departamento do funcionrio).
Observe que a mudana na definio da expresso CURSOR tambm acompanhou uma modificao na lgica: o
loop de departamento est embutido no loop de projeto.
EXERCCIOS
3.94) Faa um programa que receba como parmetro o tipo de informao a ser apresentada:
A) Nome e sobrenome.
B) Matrcula, cargo e salrio.
C) Nome, grau de instruo e data de nascimento.
Use uma nica varivel cursor e DBMS_OUTPUT para mostrar os resultados.
3.95) Faa trs programas, cada um deles dever receber uma varivel cursor e abri-la para as situaes apresentadas
no Exerccio 3.94.
3.96) Faa um programa que declare uma varivel cursor e, de acordo com o parmetro recebido, acione cada um
dos programas do Exerccio 3.95 e mostre as informaes selecionadas.
CAPTULO 3 PL/SQL
METODOLOGIA
Apresentao terica dos conceitos relativos a SQL Dinmico.
TCNICA
Apresentao de situaes resolvidas com as sintaxes apresentadas.
CONCEITO
De um modo geral, construmos programas em PL/SQL nos quais inclumos comandos de SQL estticos, isto ,
comandos que so conhecidos e passveis de ser compilados durante o desenvolvimento do programa.
Eventualmente, temos aplicaes que necessitam processar comandos de SQL que s se completam a tempo de
execuo. Por exemplo: imagine que um mesmo programa faa acesso a tabelas residentes em servidores diferentes
(todas com o mesmo layout), sendo a indicao do servidor informada como parmetro da rotina. A tempo de
execuo, o programa tomaria a deciso de estabelecer acesso tabela desejada. Uma forma de resolver esta situao
seria a construo de um comando SQL que somente fosse parseado a tempo de execuo, de tal forma que o
programa considerasse a existncia de apenas uma tabela. Este tipo de construo chamado de SQL dinmico.
Para processarmos comandos de SQL, tais como Insert, Update, Delete ou blocos de PL/SQL, usaremos o comando
Execute Immediate.
Para processarmos SQL Select, usaremos os comandos Open-For, Fetch e Close.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
433
<string dinmica> Representa um comando SQL qualquer, exceto queries que retornem mltiplas linhas (sem
terminao) ou um bloco de PL/SQL (com terminao). Esta string pode conter referncias a argumentos Bind.
No podemos, porm, usar argumentos Bind para substituir nomes de objetos dentro da string.
<bind> uma expresso cujo valor passado dinamicamente para o comando SQL ou bloco de PL/SQL (o hint
NoCopy no permitido em um EXECUTE IMMEDIATE). Se no for especificado o modo do parmetro, o default IN.
SQL dinmico suporta todos os tipos de dados de SQL (colees, Lobs, Refs, objetos), mas no suporta tipos especficos de PL/SQL (boleanos e
tabelas Index-By). Desta forma, tanto <varivel> quanto <argumento Bind> devem obedecer a esta regra.
No exemplo da Listagem 3.235, usamos a expresso SYSDATE como argumento para a varivel Bind :DT includa
no texto do comando SQL. Todo o comando foi passado, dinamicamente, durante a execuo do programa. O
comando foi preenchido na varivel TEXTO. Ao tempo de execuo, o trecho de comando foi analisado (Parse) e
executado (Execute).
A utilizao de variveis Bind dentro do texto do comando no obrigatria, poderamos ter concatenado o valor
na string dentro da lgica do programa principal; no entanto esta forma de uso mais flexvel pois o tipo da
varivel preservado.
CAPTULO 3 PL/SQL
Neste segundo exemplo, a execuo dinmica foi de um trecho de PL/SQL. Nos utilizamos da varivel local GRAU
como argumento para a varivel Bind :G referenciada no comando.
No exemplo da Listagem 3.237, o trecho de programa executado retornou um valor (Rowid). Sendo assim, a
sintaxe usada para os argumentos indicaram que o primeiro referia-se a um argumento de entrada (Sysdate :DT)
e o segundo a um argumento de sada (:R :MSG).
Observe que utilizamos uma varivel do ambiente SQL*Plus (msg) para receber o Rowid. No foi necessrio que
transferssemos a informao para uma varivel local do programa.
Onde:
<varivel cursor> Corresponde a uma varivel definida a partir de um tipo (Type) sem retorno (Return) especificado.
<host varivel cursor> uma varivel definida em ambiente Host para o PLSQL (por exemplo OCI).
<string dinmica> uma string que contm um comando Select que retorna diversas linhas.
< Bind> uma expresso cujo valor passado dinamicamente para o comando SQL.
Qualquer argumento Bind na consulta avaliado somente quando o cursor aberto. Desta forma, para obtermos dados do cursor usando
diferentes valores de argumento, devemos reabrir a varivel cursor com os argumentos Bind contendo os novos valores desejados.
O comando Fetch retorna uma linha referente ao resultado da consulta de mltiplas linhas, associando os valores
presentes na lista de seleo s variveis correspondentes na clusula INTO, incrementando o atributo %Rowcount
e avanando o cursor para a prxima linha.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
435
Onde:
Para cada valor retornado pela consulta (associado varivel cursor), deve existir uma varivel de tipo correspondente compatvel com o valor
a ser-lhe atribudo.
O comando Close desabilita a varivel cursor. Aps esta ao, o conjunto resultado associado a ela fica indefinido.
No exemplo da Listagem 3.238, usamos um comando Select que recebe uma varivel Bind como parmetro e para
a qual passamos a expresso Sysdate. Para cada linha obtida, efetuamos a concatenao na varivel do SQL*Plus
chamada MSG.
VARCHAR2(1000) := '&COLUNA';
VARCHAR2(1000) := '&TABELA';
VARCHAR2(1000) := '&VAL';
VARCHAR2(1000);
IS REF CURSOR;
RC;
CAPTULO 3 PL/SQL
9
OPEN C1 FOR 'SELECT '||COL||' FROM '||TAB||' WHERE CD_MAT > :VAL'
10
USING VAL;
11
:MSG := 'LINHAS OBTIDAS: ';
12
LOOP
13
FETCH C1 INTO TEXTO;
14
EXIT WHEN C1%NOTFOUND;
15
:MSG := :MSG || TEXTO || '; ';
16
END LOOP;
17
CLOSE C1;
18 END;
19 /
Entre o valor para coluna: CD_MAT||'' - ''||NM_FUNC
antigo
2:
COL
VARCHAR2(1000) := '&COLUNA';
novo
2:
COL
VARCHAR2(1000) := 'CD_MAT||'' - ''||NM_FUNC';
Entre o valor para tabela: FUNC
antigo
3:
TAB
VARCHAR2(1000) := '&TABELA';
novo
3:
TAB
VARCHAR2(1000) := 'FUNC';
Entre o valor para val: 300
antigo
4:
VAL
VARCHAR2(1000) := '&VAL';
novo
4:
VAL
VARCHAR2(1000) := '300';
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------------------------------------------LINHAS OBTIDAS: 310 - MARINA; 320 - ROBERTO; 330 - WILSON; 340 - DILSON; 7369 SMITH; 7499 - ALLEN; 7521 - WARD; 7566 - JONES; 7654 - MARTIN; 7698 - BLAKE; 778
2 - CLARK; 7788 - SCOTT; 7839 - KING; 7844 - TURNER; 7845 - ;
Neste exemplo, desejvamos que a coluna a ser obtida e a tabela fossem variveis tambm. Este tipo de ao no
pode ser feito atravs de variveis Bind; utilizamos, ento, a concatenao para transformar o texto. Para o valor de
salrio, pudemos usar, normalmente, um parmetro Bind. Por este motivo, o comando Open-For s contm
referncia a um argumento Bind.
A forma sinttica apresentada na Listagem 3.241 recebe um erro porque o literal Null no permitido na clusula
Using. Uma forma de resolvermos o problema seria a concatenao do texto e retirada da varivel Bind.
A varivel Valor poderia receber qualquer valor, inclusive o texto NULL (como no exemplo).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
437
DECLARE
A_NULL NUMBER;
BEGIN
EXECUTE IMMEDIATE 'UPDATE func SET NR_CARGO = :x'
USING A_NULL;
END;
/
BULK DINMICO
Neste tpico faremos uma juno de assuntos j estudados anteriormente isoladamente, isto , uniremos a operao
de Bulk Bind com SQL dinmico. Com pequenas variaes nos comandos Execute Immediate, Fetch e ForAll, para
a incluso da clusula Bulk Collect, estaremos aptos a manusear listas de valores dinamicamente. Cada um dos
exemplos a seguir abordar uma clusula em separado.
Com este exemplo (Listagem 3.243) verificamos que o retorno de um conjunto de linhas pode ser feito diretamente
com o comando Execute Immediate sem a necessidade de definio de varivel cursor.
CAPTULO 3 PL/SQL
14
DBMS_OUTPUT.PUT_LINE('ROWID = '||VROWID(I));
15
END LOOP;
16 END;
17 /
Entre o valor para depto: A00
antigo
7:
DEP
VARCHAR2(3)
:= '&DEPTO';
novo
7:
DEP
VARCHAR2(3)
:= 'A00';
Entre o valor para pct: 0,25
antigo
8:
PCT
NUMBER
:= '&PCT';
novo
8:
PCT
NUMBER
:= '0,25';
ROWID = AAAH5dAAIAAAAAyAAA
ROWID = AAAH5dAAIAAAAAyAAI
ROWID = AAAH5dAAIAAAAAyAAJ
Procedimento PL/SQL concludo com sucesso.
A sintaxe do Execute Immediate (com returning bulk collect) apresentada na listagem 3.244 somente poder ser
usada para os comandos Insert, Update e Delete, pois somente estes comandos podem ter sada com variveis Bind
(por exemplo :R).
Este exemplo similar quele estudado na Listagem 3.243. A diferena est na troca do Execute Immediate pelo
Open-For e Fetch. Observe que no houve necessidade de loop para o fetch pois todos os dados do resultado foram
grupados (Bulk Collect) para as duas tabelas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
439
:= '&PCT';
:= '0,25';
No exemplo acima executamos dinamicamente um comando de atualizao que recebia como parmetro de
entrada uma lista das matrculas a serem atualizadas e um valor constante para todas as linhas. Este comando
retornou em uma coleo todas as linhas atualizadas.
EXERCCIOS
3.97) Faa um programa que receba como parmetro o nome da tabela, as colunas a serem criadas e a indicao de
permanncia ou no. Faa a criao do objeto no schema do usurio.
3.98) Faa um programa que receba como parmetro o nome das colunas a serem lidas da tabela Func (podem ser
informadas at trs colunas separadas por vrgula). Apresente os dados lidos.
METODOLOGIA
Apresentao e descrio do comando de SQL responsvel pela implementao de um Trigger.
TCNICA
Apresentao prtica da aplicabilidade do comando e suas diversas particularidades.
CONCEITO
Triggers so cdigos de PL/SQL armazenados no banco de dados, associados a uma tabela especfica e executados
implicitamente pelo Oracle na ocorrncia de um determinado evento.
Os triggers podem ser usados para:
Logar modificaes.
Garantir crticas complexas.
Gerar o valor de colunas.
Implementar nveis de segurana mais complexos.
Manter tabelas duplicadas.
A Oracle recomenda que limitemos o tamanho do cdigo de PL/SQL do trigger para algo em torno de 60 linhas.
Caso tenhamos necessidade de definir um trigger mais complexo, devemos criar stored procedures com aes
especficas e acionar estas rotinas dentro do trigger.
Na Sintaxe 3.41 apresentado o formato para criao de um database trigger. Esta sintaxe subdividida em trs partes:
CAPTULO 3 PL/SQL
Evento.
Tipo (s aplicvel a eventos de DML).
Ao.
Cada uma das partes ser analisada separadamente.
EVENTO
O evento corresponde ao momento em que o database trigger deve ser acionado pelo Oracle.
A Sintaxe 3.42 mostra a parte referente ao evento, que pode ser de DML (o mais comum), de DDL ou Database.
Podemos acionar o bloco de PL/SQL associado ao trigger quando o usurio, utilizando qualquer meio de acesso ao
banco de dados, fizer um Update, um Delete ou um Insert na tabela qual o database trigger est associado.
O bloco pode ser executado antes ou depois de o comando disparado pelo usurio ser executado (Before ou After).
Create (o trigger disparado quando um comando Create adiciona um novo objeto ao dicionrio de dados).
Alter (o trigger disparado quando um objeto do dicionrio de dados modificado).
Drop (o trigger disparado quando um objeto do dicionrio de dados removido).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
441
Associate Statistics (o trigger disparado quando houver associao de estatsticas de determinado tipo a um
objeto do dicionrio de dados).
Audit (o trigger disparado quando ocorrer a auditoria sobre um objeto do dicionrio de dados).
Comment (o trigger disparado quando forem adicionados comentrios a um objeto do dicionrio de dados).
Disassociate Statistics (o trigger disparado quando houver desassociao de estatsticas de um objeto do
dicionrio de dados).
Grant (o trigger disparado quando um usurio der autorizao a outro usurio ou role).
Noaudit (o trigger disparado quando houver interrupo do processo de auditoria sobre um objeto do
dicionrio de dados).
Gatilho criado.
No exemplo da Listagem 3.247, o trigger criado ser executado quando o usurio fizer um comando de insert, delete
ou, no caso da atualizao, update da coluna vl_sal. O usurio poder realizar esta modificao usando o SQL*Plus,
Forms, Reports ou qualquer outra ferramenta que estabelea conexo com o banco de dados. Esta caracterstica
garante que a ao definida no trigger ser realizada toda vez que o evento ocorrer, independente de quem o acionou.
No nosso caso, o trigger ser executado antes de o evento que causou o disparo do trigger ser executado.
CAPTULO 3 PL/SQL
3
WHERE CD_MAT IN (100, 200);
MAT = 200
SAL OLD = 8000 SAL NEW = 9600
MAT = 100
SAL OLD = 2049,62 SAL NEW = 2459,54
2 linhas atualizadas.
Na Listagem 3.248, alteramos a coluna Salrio dos funcionrios de matrcula 100 e 200. O trigger foi acionado e
apresentou os valores de salrio antes e depois da modificao.
Gatilho criado.
A Listagem 3.249 mostra um script com a criao da view Vfunc e do trigger Evento1, que ser acionado quando
for feita alguma atualizao usando a view Vfunc.
A finalidade deste tipo de trigger permitir que atualizemos a tabela principal quando a view associada a ela no
puder ser atualizada diretamente (por exemplo, possui uma agregao, um produto cartesiano, no apresenta
todas as colunas, etc.). Esse tipo de trigger substitui a ao associada: Instead of Update, significa que o comando
Update disparado pelo usurio no ser executado e sim o programa PL/SQL criado por ns no trigger.
Como vemos no exemplo, quando acionada a atualizao atravs da view, efetuamos a atualizao desejada na tabela.
Na Listagem 3.250, as modificaes feitas usando a view atualizaram a tabela. Quando esta atualizao ocorre o
trigger da tabela acionado tambm. Veja os resultados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
443
TIPO
Um trigger pode ser de dois tipos: Comando ou Linha.
COMANDO
Um trigger de comando acionado de acordo com o evento, mas associado ao comando como um todo. Ou seja, ser
acionado antes ou depois de um determinado comando, independente de o comando atualizar uma ou mais linhas.
Este tipo de trigger no tem acesso s linhas atualizadas.
Sintaticamente, para indicao deste tipo de trigger basta que no especifiquemos a clusula For Each Row.
Na Listagem 3.251, criamos um trigger do tipo Comando e verificaremos a seguir como ocorrer seu acionamento.
Na Listagem 3.252, observamos que a mensagem includa no trigger somente foi executada uma vez, apesar de 32
linhas serem atualizadas.
LINHA
Um trigger do tipo Row acionado de acordo com o evento, mas uma vez para cada linha afetada pelo comando
disparado pelo usurio. Isto traz algumas conseqncias que analisaremos a seguir.
Sintaticamente, para indicao deste tipo de trigger basta que especifiquemos a clusula For Each Row. Observe,
porm, que para este tipo de trigger outras partes da sintaxe podem ser especificadas, tais como Referencing e When.
Quando especificamos um trigger deste tipo, automaticamente, o Oracle cria duas reas de trabalho associadas ao
bloco de PL/SQL. Essas reas so do tipo Rowtype da tabela a qual o trigger se refere.
CAPTULO 3 PL/SQL
4 BEGIN
5
DBMS_OUTPUT.PUT_LINE('MAT = '||:OLD.CD_MAT);
6
DBMS_OUTPUT.PUT_LINE('SAL OLD = '||:OLD.VL_SAL||' SAL NEW = '||:NEW.VL_SAL);
7 END;
8 /
Gatilho criado.
Na Listagem 3.253 no PL/SQL do trigger criado, fazemos referncia a duas reas, OLD e NEW. Se fossem criadas
dentro do cdigo de PL/SQL teriam a seguinte sintaxe: <nome area> <tabela>%Rowtype;. Os nomes de rea
padres seriam OLD e NEW. Estas reas so preenchidas pelo Oracle com a imagem anterior e posterior da linha
(antes e depois da modificao). Caso o evento seja Insert, haver valor apenas em NEW (OLD estar Null). Caso o
evento seja Delete, haver valor apenas em OLD (NEW estar Null).
Estas reas podem ter seus nomes modificados se utilizarmos a clusula Referencing, mostrada na sintaxe.
Dentro do cdigo do bloco de PL/SQL, estas reas devem ser referenciadas com dois-pontos na frente (:), indicando
que no se trata de uma rea declarada no bloco, e sim uma rea do ambiente.
Na Listagem 3.254, ao criarmos o trigger, estabelecemos que faremos referncia rea OLD com o qualificador V e
que faremos referncia rea NEW com o qualificador N. Internamente no bloco de PL/SQL usamos:V.cd_mat.
Observe no resultado que o trigger de comando tambm foi acionado ao trmino das atualizaes.
Imaginemos, agora, que desejamos acionar o trigger a cada atualizao da coluna VL_SAL da tabela Func, porm
apenas para os funcionrios que trabalham do departamento D11.
Esta caracterstica implica a necessidade de incluirmos uma restrio sobre as linhas atualizadas pelo comando. Essa
restrio feita na clusula When. Ela no restringe as linhas a serem atualizadas, apenas aquelas que acionaro o trigger.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
445
Na Listagem 3.255, definimos que somente se o departamento da linha original (OLD) fosse D11 o trigger deveria
ser acionado.
Das trs linhas modificadas pelo comando Update, apenas a de matrcula 200 acionou o trigger.
AO
A ltima parte de um trigger composta do bloco de PL/SQL associado ao evento e sobre o qual veremos algumas
particularidades.
PREDICADOS CONDICIONAIS
Quando criamos um trigger associado a mais de um comando de DML (Insert, Update ou Delete), muitas vezes
temos necessidade, dentro do cdigo de PL/SQL, de saber qual o evento causador da execuo do trigger. Isso
possvel se usarmos os predicados condicionais:
Inserting Retorna True se o trigger foi disparado por causa de um comando Insert.
Updating Retorna True se o trigger foi disparado por causa de um comando Update.
Deleting Retorna True se o trigger foi disparado por causa de um comando Delete.
No trigger criado na Listagem 3.256, de acordo com o evento acontecido a mensagem diferente.
CAPTULO 3 PL/SQL
MAT = 2
SAL OLD = 2000
1 linha deletada.
Na Listagem 3.257 vemos o resultado das diversas atualizaes, com este trigger ativo.
RESTRIES
Dentro da PL/SQL associada ao trigger temos as seguintes restries:
Quando o Oracle detecta uma situao de conflito entre uma transao com um comando Update (ou Delete)
e outra transao com um comando Update, ele realiza um Rollback implcito de um dos comandos e sinaliza
transao para que o comando possa ser reexecutado. Quando essa situao ocorre e existe um trigger associado
ao evento Before <comando>, o Oracle reexecuta esse trigger a cada vez que o comando for disparado (mesmo
na rechamada). Todas as aes realizadas por este trigger na primeira execuo so desmanchadas, exceto as
modificaes que ele fizer a variveis de um package. Se no desejarmos que essa modificao se repita, devemos
criar uma varivel de controle que consiga detectar essa situao.
Para testarmos esta ltima restrio, criamos um pacote com duas variveis e um trigger que adiciona 1 ao valor da
varivel I (do pacote Global).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
447
Os comandos SQL de um trigger no podem ler ou modificar a tabela em mutao associada ao prprio trigger.
CAPTULO 3 PL/SQL
Os comandos de um trigger no podem modificar as colunas primary key, foreign key ou unique key de uma
tabela sob restrio associada ao prprio trigger. Como exceo a essa restrio, temos o caso de um nico
comando Insert em que a execuo de um trigger Before Row ou After Row no considerado modificando uma
tabela em mudana. Um comando Insert contendo um Select no considerado um nico comando Insert
mesmo que o comando Select retorne apenas uma linha.
Na Listagem 3.260, criamos um trigger que efetua leitura na mesma tabela em que ocorrem as atualizaes.
CD_
VL_SAL
----- -------D11
7673,34
D21
14681,05
C01
3297,8
A00
1136,99
A execuo deste trigger recebe o erro ORA-04091: a tabela DESENV.FUNC mutante; indicando que a tabela
est em mudana quando o comando de leitura foi disparado.
Uma forma bastante utilizada como soluo de contorno a criao de uma tabela de trabalho capaz de armazenar
todas as informaes necessrias realizao da operao que precisaramos fazer. No trigger de linha, em vez de
lermos ou modificarmos a tabela mutante, gravamos as informaes necessrias nessa tabela, por exemplo, todas
as linhas que o usurio atualizou ou incluiu ou excluiu e, num trigger de comando, disparado aps o evento, lemos
os dados dessa tabela e efetuamos a modificao ou leitura desejada.
COMPILANDO TRIGGERS
Antes da verso 7.3 (do banco de dados), um trigger era compilado todas as vezes em que era disparado, como se
fosse um comando de SQL.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
449
ALTER TRIGGER
O comando Alter Trigger permite que explicitamente faamos a compilao do trigger invlido para que a compilao
no ocorra durante o processamento normal.
Lembre-se, porm, que um trigger diferente de uma constraint. Ao habilitarmos o trigger novamente, nenhuma ao de verificao sobre os
dados da tabela realizada. Ele passa a ficar ativo a partir do ponto em que foi habilitado, no verificando qualquer incongruncia que possa
existir nos dados armazenados (uma constraint s se torna habilitada se todas as linhas da tabela forem compatveis com a restrio).
CAPTULO 3 PL/SQL
A Oracle disponibilizou um conjunto de funes que permitem que obtenhamos informaes sobre o usurio que
realizou a ao, qual a ao, qual o objeto, em que owner e diversas outras. A lista completa com as devidas
explicaes voc encontrar no Captulo 16 do manual Oracle9i Application Developers Guide Fundamentals.
Neste exemplo, como primeiro passo criamos uma tabela para armazenamento das ocorrncias geradas pelo trigger. Observe o uso das funes ORA_DICT_OBJ_TYPE (retorna o tipo do objeto criado, truncado ou renomeado),
ORA_LOGIN_USER (retorna o nome do usurio que causou o disparo do trigger), etc. Com o uso destas rotinas
podemos monitorar determinadas aes especficas sobre o banco de dados.
Uma vez que o trigger ser disparado para todo o banco de dados (pois escolhemos o escopo como ON DATABASE),
faremos algumas intervenes usando o usurio Scott.
NUMBER);
SQL> RENAME X TO Y;
Tabela renomeada.
SQL> TRUNCATE TABLE Y;
Tabela truncada.
No exemplo da Listagem 3.265 efetuamos quatro aes diferentes que causaro a chamada do trigger TDDL quatro vezes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
451
19/11/01 21:21:43,000001
19/11/01 21:21:49,000000
No resultado verificamos as informaes gravadas na tabela Tlogs (do usurio Desenv) aps os eventos.
Na Listagem 3.268 a seguir encontramos o resultado da incluso de uma linha na tabela Func.
TRANSAES AUTNOMAS
Uma transao autnoma uma transao independente iniciada por uma outra transao. Pode executar operaes
como Commit ou Rollback sem afetar a transao principal. Ela no compartilha recursos, locks nem commits
com a transao que a disparou. totalmente independente.
Para definirmos uma transao autnoma, devemos usar a pragma Autonomous_Transaction. Essa pragma (pragmas so
diretivas para o compilador, lembra?) indica ao compilador PL/SQL que marque a rotina como autnoma (ou independente).
Aplicvel a:
Blocos annimos de PL/SQL, porm somente aqueles de nvel mais externo (Top-Level). No se aplica a blocos internos.
Funes e procedimentos isolados no banco de dados.
CAPTULO 3 PL/SQL
Funes e procedimentos presentes em pacotes.
Mtodos de um objeto.
Database Triggers.
Nosso primeiro exemplo cria um trigger usando a caracterstica de autonomia.
Gatilho criado.
O trigger da Listagem 3.269 foi associado ao comando Insert na tabela Func e, para cada linha includa, uma linha
gravada na tabela Tlogs. Observe que o bloco de PL/SQL do trigger contm o comando Commit. Isso no seria
possvel em situaes normais. Essa caracterstica somente vlida quando usamos a pragma Autonomous_Transaction.
Nosso prximo passo ser a incluso de linhas em Func. Acompanhe o exemplo da Listagem 3.270.
No exemplo da Listagem 3.270, criamos uma linha na tabela Func e, conseqentemente, a trigger Isolado criou
uma linha da tabela Tlogs. At a, nada demais. Quando, porm, fizemos o Rollback, esperaramos que ambas as
aes fossem desmanchadas. No entanto, a linha includa na tabela Logs permanece gravada, enquanto a da tabela
Func foi desmanchada.
Uma transao autnoma no compartilha recursos, tais como Locks, com a transao principal.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
453
Todas as modificaes feitas pela transao autnoma so visveis por outras transaes imediatamente aps
essa ter efetuado um Commit. Em uma transao dependente, essa visibilidade s ocorreria quando a transao
principal realizasse um Commit.
Um comando Rollback executado em uma transao autnoma desfaz somente as modificaes realizadas por
ela, no afetando a transao principal (que a chamou).
No exemplo da Listagem 3.271, criamos um pacote contendo uma funo autnoma.
Observe que a funo s foi definida com a pragma Restrict_References usando os parmetros Wnds (Write no
database state no atualiza o banco de dados) e Wnps (write no package state no atualiza variveis de pacote).
No entanto, o corpo do pacote foi criado sem erros de compilao e existem um comando Insert e um comando
Commit no corpo da funo.
Isto ocorre porque uma rotina autnoma sempre tem direito de acesso para leitura e gravao no banco de dados
(elas nunca violam as regras WNDS e RNDS). Observe a execuo do pacote na Listagem 3.272.
TEXTO
------------1 - NOVO ITEM
2 - FUNO S
Executamos a rotina em um comando Select (atualizando o banco de dados). A linha de funcionrio foi includa.
Quando listamos a tabela Logs, verificamos que uma linha tambm foi includa nesta tabela, proveniente da
trigger Isolado (outra transao autnoma).
CAPTULO 3 PL/SQL
ERROS POSSVEIS
As observaes a seguir indicam as possibilidades de erro quando utilizamos transaes autnomas:
Se uma transao autnoma tentar obter um recurso bloqueado (lock) pela transao principal, que no termina
aguardando o retorno da transao autnoma, pode ocorrer um DeadLock.
O banco de dados possui um parmetro de inicializao chamado Transactions que especifica o nmero mximo
de transaes concorrentes. O nmero de transaes concorrentes poder ser significativamente incrementado
(voc j percebeu isso com os exemplos anteriores) com o uso de transaes autnomas, uma vez que estas
executam concorrentemente com a transao principal.
EXERCCIOS
3.99) Faa um trigger para controlar as modificaes feitas nos salrios dos funcionrios.
Para tal crie uma tabela de log com o seguinte layout: operao (I, E ou A), valor anterior, valor atual, matrcula,
timestamp (data + hora).
Se for feita uma incluso, apenas o valor atual deve ser preenchido. Para alterao, ambos os valores devem ser
preenchidos; para excluso, apenas o valor anterior deve ser preenchido.
3.100) Crie um trigger associado tabela Func que:
Determine o departamento que tiver menos funcionrios e atribua ao cdigo do departamento se este estiver Null.
Preencha a data de admisso em caso de incluso.
Altere os nomes para maisculas.
3.101) Crie um trigger que critique a incluso ou alterao de dados na tabela Func:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
455
char(03)
number
number
number
number
METODOLOGIA
Apresentao e descrio conceitual dos mtodos para controle da transao.
TCNICA
Apresentao de exemplos resolvidos abordando cada um dos mtodos.
INTRODUO
Neste tpico, trataremos do controle do processamento realizado em batch.
Os programas de PL/SQL so freqentemente utilizados para realizar processamentos de atualizao, carga de
dados, gerao de arquivos, enfim, diversos tipos de processamento longos que necessitam de controles precisos
de checkpoint e restart.
Quando estudamos a linguagem SQL, conhecemos os mecanismos disponveis que permitiro a criao de
alternativas para reincio. Faremos, agora, uma reviso dos mecanismos que poderemos utilizar em PL/SQL.
COMMIT
O comando Commit garante a efetivao de todas as aes realizadas at o momento de sua execuo, tornandoas permanentes no banco de dados.
At que executemos o comando Commit, as modificaes realizadas no programa atual ficam bloqueadas para
atualizao por outras sesses. Essas sesses obtm uma verso do dado com imagem anterior s modificaes
realizadas no programa. Quando o programa efetua um Commit e as modificaes se tornam permanentes no
banco de dados, simultaneamente, todas as modificaes tornam-se visveis pelas demais sesses.
CAPTULO 3 PL/SQL
11
END IF;
12
IF PCARGO IS NOT NULL THEN
13
RC1.NR_CARGO := PCARGO;
14
END IF;
15
UPDATE FUNC
16
SET NR_CARGO = RC1.NR_CARGO,
17
VL_SAL
= RC1.VL_SAL
18
WHERE CURRENT OF C1;
19
COMMIT;
20
END LOOP;
21
END IF;
22 END;
23 /
Procedimento criado.
Neste primeiro exemplo, ao trmino da atualizao da linha, o programa efetua um Commit de tal modo que as
modificaes realizadas ficam, automaticamente, liberadas e visveis por outras transaes.
Observe, porm, que bloqueamos e atualizamos apenas uma linha. O impacto desta modificao durante um dia de
processamento insignificante. Imagine, entretanto, o que aconteceria se atualizssemos 500, 1.000 ou mais linhas.
Dois caminhos poderiam ser seguidos com conseqncias diferentes.
COMMIT NO FIM
Poderamos bloquear todas as linhas a serem modificadas e realizar um Commit apenas no fim de todo o
processamento.
Essa opo de ao traria como conseqncia a diminuio na concorrncia.
Quanto mais linhas bloqueadas (locked) um programa mantm, mais a concorrncia reduzida e mais gasto de
CPU feito.
Isso ocorre porque todos os processos que tentarem atualizao em uma das linhas bloqueadas ficaro aguardando
que a linha seja liberada para uso, interrompendo seu processamento.
COMMIT FREQENTE
Num ambiente com diversos usurios atualizando simultaneamente o banco de dados, devemos tentar manter
disponibilidade nos recursos para que as aplicaes no sejam enfileiradas a fim de aguardarem o recurso.
Desta forma, um programa de aplicao que altera o contedo de uma ou mais linhas deve, periodicamente, fixar
essas modificaes executando um Commit.
Essa alternativa, porm, traz um outro problema. Caso o programa, por alguma razo, seja interrompido (termine
anormalmente), como saber o que j foi processado e o que ainda no o foi? Como estabelecer um ponto de reincio?
ROLLBACK
Ao contrrio do Commit, o comando Rollback desfaz as modificaes efetuadas pelo programa que ainda no
foram efetivadas no banco de dados. Isso libera todas as linhas bloqueadas para que possam ser atualizadas por
outras sesses.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
457
O exemplo apresentado na Listagem 3.274 mostra um processamento de diversas linhas em uma nica transao.
Caso acontea algum erro no meio do processo, toda a transao desfeita. Todas as aes de atualizao realizadas,
mas no efetivadas, so desmanchadas (pelo comando Rollback).
SAVEPOINT
O comando Savepoint determina um ponto dentro da transao para onde o programa pode retornar. O Rollback, neste
caso, parcial. Todas as modificaes realizadas antes do ponto de Savepoint continuam pendentes aguardando que
haja um Commit que os efetive. Todos os comandos realizados aps este ponto so desmanchados e os locks, liberados.
CAPTULO 3 PL/SQL
No exemplo da Listagem 3.275, a cada dez linhas estabelecido um ponto de controle. Quando o contador atinge
dez, marcamos um Savepoint e, quando atinge 20, efetivamos a transao at o momento. Desta forma, a cada 20
atualizaes ocorre um trmino de transao.
Caso ocorra um erro enquanto o contador estiver entre zero e dez, realizado um Rollback puro. Quando o
contador maior que dez, ocorre um Rollback para o Savepoint.
Observe que nos dois casos feita uma nova leitura do banco de dados. O cursor aberto novamente. Em vez de
iniciar a leitura no primeiro funcionrio, a leitura se inicia a partir do ponto de interrupo. Isso possvel pois
armazenamos o valor da matrcula atual em ambos os pontos de controle. Assim, a leitura se inicia a partir do
funcionrio imediatamente posterior ao ponto de retorno.
Nesse exemplo, no utilizamos leitura com a clusula For Update uma vez que, quando ocorresse o primeiro
Commit, todos os locks adquiridos seriam liberados; desta forma, as linhas ainda no obtidas pelo programa no
estariam mais bloqueadas, tornando-se um cursor simples. Preferimos, ento, efetuar o tratamento sem bloqueio.
A cada leitura obtemos o Rowid da linha. A tempo de atualizao, a busca no precisa ser repetida, uma vez que
informamos, diretamente, o endereo da linha a ser atualizada (Rowid).
Com este tipo de lgica, estabelecemos uma regra de reincio em caso de erro controlado e delimitamos pontos de
efetivao e sincronismo da transao. Se o programa fosse descontinuado, perderamos o ponto da interrupo,
pois a ltima matrcula atualizada no est sendo armazenada em disco.
ROLLBACK IMPLCITO
Antes de cada comando de atualizao processado pelo Oracle marcado um Savepoint interno, implcito. Caso
ocorra algum erro no comando, o Oracle realiza, automaticamente, um Rollback para esse Savepoint implcito,
desmanchando qualquer ao realizada pelo comando.
PRJATV%ROWTYPE;
UTL_FILE.FILE_TYPE;
IS SELECT ID_PROGRAMA, DT_TIMESTAMP,
TX_RESTART, ROWID
FROM RESTART
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
459
Como primeira etapa do programa, faremos a leitura da tabela de Restart para verificarmos se esse programa j
esteve ativo e foi interrompido. Veremos posteriormente que, quando isto acontece, permanece um registro na
tabela de Restart. A leitura feita apenas pelo nome do programa.
Se for encontrada uma linha na tabela de Restart para este programa, os dados so lidos na rea de trabalho (R1).
Caso contrrio (C1%Notfound), devemos criar o registro de controle. As informaes gravadas so: o cdigo do
programa, o timestamp e a rea de Restart. No nosso caso, precisamos saber apenas quantos registros (do arquivo
de entrada) foram efetivamente gravados no banco. Por esse motivo, a coluna chamada Tx_Restart receber apenas
um valor numrico referente ao ltimo registro gravado no banco de dados. Como estamos gerando o registro de
Restart neste momento, o valor gravado zero.
Iniciaremos, ento, a leitura das linhas do arquivo. A varivel Posio recebeu o valor da quantidade de linhas lidas
e j atualizadas. A varivel Lidos recebe a cada leitura a linha atualmente lida do arquivo de entrada. A partir do
CAPTULO 3 PL/SQL
momento em que a posio do registro lido for maior que a quantidade de registros gravados, podemos reiniciar o
processo de atualizao. Se no existirem registros de Restart, o valor inicial das duas variveis zero, e, portanto,
quando o primeiro registro for lido, j poder ser gravado.
As modificaes para a tabela PrjAtv so feitas inicialmente para um Rowtype de nome Reg e, posteriormente,
fazemos a incluso dos dados na tabela. Esse procedimento repetido diversas vezes at que todas as linhas
tenham sido lidas e atualizadas.
Quando atingimos um mltiplo de 20 registros lidos (de 20 em 20), devemos efetuar um Commit e liberar os
registros bloqueados. Ao efetuarmos o Commit, devemos, simultaneamente, atualizar a tabela de Restart para
refletir o estado atual. Desta forma, fazemos uma atualizao na tabela de Restart e efetuamos o Commit. Neste
momento, tanto as linhas da tabela PrjAtv so fixadas no banco como tambm o a linha da tabela de Restart,
garantindo o reincio a partir deste ponto se algum problema ocorrer.
Quando efetuamos um Commit, todas as linhas bloqueadas so liberadas, inclusive a linha de controle da tabela
de Restart. Por este motivo, repetimos o lock a cada 20 linhas.
Quando recebemos a condio No_Data_Found, significa que atingimos o fim do arquivo de entrada. Devemos,
ento, remover o registro do arquivo de reincio e efetuar as ltimas modificaes no banco de dados (Commit).
Essa primeira forma de controle simples, porque o posicionamento em relao a um arquivo de entrada ,
relativamente, fcil. S h necessidade de armazenamento da posio do registro lido no arquivo de entrada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
461
Na Listagem 3.279, criamos um script para acionamento do programa Intervalo (como exemplo).
O recurso de gerar um arquivo de Spool permite que verifiquemos, ao trmino da execuo do bloco, se ocorreu
algum problema e se linhas deixaram de ser processadas, como uma auditoria.
CONCLUSES
Nos exemplos apresentados, oferecemos idias bastante simples das solues possveis de controle de processamento.
Existem dezenas de outras formas mais sofisticadas, seguras e eficientes que garantem o reincio em caso de falha,
sem que seja necessrio que todo o processamento seja feito de uma nica vez (Commit no final).
Nossa maior preocupao garantir um ambiente com a maior possibilidade de concorrncia e com o mnimo
possvel de contenes, permitindo um processamento eficiente.
SET TRANSACTION
No captulo de SQL, estudamos o mecanismo de consistncia do Oracle e sabemos que ele se restringe a um
nico comando.
Para que ampliemos essa consistncia em nvel de diversos comandos, temos o recurso do comando Set Transaction Read Only. Esse comando garante que a consistncia seja considerada em relao ao momento da execuo
do comando Set Transaction e no de cada comando individualmente.
As regras de utilizao desse comando e suas caractersticas tambm foram estudadas no Captulo 2.
A Sintaxe 3.44 indica que podemos determinar que a transao seja apenas de consulta, garantindo a consistncia
conjunta para todos os comandos executados na transao. Podemos estabelecer que a transao seja de atualizao
(este o default). Neste caso, a consistncia se d em nvel de comando.
CAPTULO 3 PL/SQL
Outra opo desse comando indicarmos o nome de um Segmento de Rollback para a transao. Essa opo pode
ser usada com a finalidade de direcionarmos uma transao muito longa para um segmento de rollback maior a
fim de garantirmos (por exemplo) que no haver falta de espao para Rollback.
Na Listagem 3.280, aps os procedimentos de atualizao (rotina Intervalo), efetuamos um Commit para encerrar
a transao anterior, e como primeiro comando da nova transao executamos um Set Transaction Read Only. A
partir desse ponto, realizamos apenas comandos de consulta. Para encerrar a transao de consulta, efetuamos
novamente um Commit. Se desejssemos alguma ao de atualizao poderamos realiz-la ento, pois o default
da transao Read Write.
A Listagem 3.281 apresenta um exemplo de direcionamento do segmento de Rollback para execuo de uma
determinada transao. Consulte seu DBA para determinar qual o segmento de Rollback mais adequado ao
processamento que deseja efetuar.
Podemos adquirir o erro ORA-30019: Operao de Segmento de Rollback ilegal no modo Undo Automtico. Isto
ocorre em funo das modificaes feitas no init.ora para utilizao do pacote Dbms_Flashback. Consulte seu DBA
para determinar a melhor forma de resolver a questo.
EXERCCIOS
3.104) Faa um programa que leia a tabela de Projetos e Atividades e gere um arquivo em disco com as seguintes informaes:
cdigo e nome do projeto, cdigo e nome da atividade, data de incio da atividade, data de fim da atividade.
Estabelea um procedimento que garanta o reincio deste programa.
Faa um ponto de controle a cada oito linhas lidas.
3.105) Faa um programa que receba como parmetro um percentual de aumento para todos os funcionrios.
Deve ser garantido o reincio do programa em caso de falha e a cada oito atualizaes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
463
Number(6)
Date
Varchar2(30)
Date
Number(10,2)
Number(2)
Number(2)
Varchar2(3)
Varchar2(1)
A incluso de linhas nesta tabela pode ser feita a qualquer momento durante o dia pelos programas de carga.
Imediatamente aps sua incluso, o status de cada registro C.
Faa um programa que realize a atualizao da base de dados baseado nos dados do movimento.
A atualizao dos dados na tabela Func deve efetuar uma crtica e gerar uma tabela de erros contendo o Rowid da
linha e a mensagem de erro. Caso o registro contenha erros, o status deve ser alterado para E. Caso seja feita a
atualizao de Func, mude o status para A.
Crticas:
COMENTRIOS FINAIS
Alguns dos programas de PL/SQL que encontramos neste material apresentam comandos em uma nica linha e
outros artifcios para diminuir o tamanho do cdigo gerado, de tal forma que, na maioria das vezes, o programa
ocupasse poucas linhas.
Quando voc estiver programando, no siga este pssimo exemplo.
Utilize apenas um comando por linha, trabalhe com endentao bem definida, nomes de variveis coerentes com
a ao a ser realizada e comentrios sempre que a ao for mais complexa.
Procure tornar o cdigo o mais limpo e claro possvel!
Isso vai facilitar o entendimento do cdigo para voc e para qualquer outra pessoa que vier a fazer manuteno
nele futuramente.
CAPTULO 3 PL/SQL
Listagem-resposta 3.01A
DECLARE
ID
X, Y, Z
DATA_HOJE
END
IND_ESTOQUE
99_MES
%TOTAL
TOTAL_DE_PECAS_VENDIDAS_POR_SEMESTRE
BEGIN
NULL;
END;
/
NUMBER(04);
VARCHAR2(10) := ABC;
DATE NOT NULL;
VARCHAR@(10);
BOOLEAN
:= 1;
DATE;
NUMBER := 21V99;
NUMBER := 0;
Listagem-resposta 3.02A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE
PESO
MSG
BEGIN
VARCHAR2(3) := '600';
VARCHAR2(255);
DECLARE
PESO
NUMBER(3) := 1;
MSG
VARCHAR2(255);
LOCAL
VARCHAR2(50) := 'RIO DE JANEIRO';
BEGIN
PESO := PESO + 1;
-MSG := PESO || ' EST ACIMA DO PADRO'; -LOCAL:= 'SO PAULO '|| LOCAL;
-END;
PESO := PESO + 1;
-MSG := PESO || ' EST ACIMA DO PADRO';
-LOCAL:= 'SO PAULO '|| LOCAL;
-END;
/
(A)
(B)
(C)
(D)
(E)
(F)
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
465
Listagem-resposta 3.03A
SQL> VARIABLE MSG VARCHAR2(200)
SQL> SET AUTOPRINT ON
SQL> DECLARE
2
VALOR
NUMBER := TO_NUMBER('&VALOR');
3 BEGIN
4
IF VALOR IS NULL THEN
5
:MSG := 'Valor no informado';
6
ELSIF VALOR > 0 THEN
7
:MSG := 'Valor maior que zero - '||TO_CHAR(VALOR);
8
ELSIF VALOR = 0 THEN
9
:MSG := 'Valor igual a zero';
10
ELSE
11
:MSG := 'Valor menor que zero - '||TO_CHAR(VALOR);
12
END IF;
13 END;
14 /
Entre o valor para valor:
antigo
2:
VALOR
NUMBER := TO_NUMBER('&VALOR');
novo
2:
VALOR
NUMBER := TO_NUMBER('');
Procedimento PL/SQL concludo com sucesso.
MSG
------------------Valor no informado
3.04) Crie um bloco PL/SQL para incluir linhas na tabela de departamentos. O cdigo e o nome do departamento
devem ser recebidos como parmetro (usar Accept). A coluna cdigo de gerente no deve receber valor na incluso.
O cdigo do departamento de preenchimento obrigatrio, mas o nome opcional. Se no for informado, deve
ser gravado Departamento sem valor.
Listagem-resposta 3.04A
SQL> ACCEPT CODIGO PROMPT 'Informe o cdigo do Departamento : '
Informe o cdigo do Departamento : F01
SQL> ACCEPT NOME PROMPT 'Informe o nome do Departamento : '
Informe o nome do Departamento :
SQL> DECLARE
2
CODIGO
CHAR(03)
:= '&CODIGO';
3
NOME
VARCHAR2(40) := '&NOME';
4 BEGIN
5
IF CODIGO IS NULL THEN
6
:MSG := 'Cdigo do departamento no informado';
7
GOTO FIM;
8
ELSIF NOME IS NULL THEN
9
NOME := 'Departamento sem valor';
10
END IF;
11
INSERT INTO DEPTO (CD_DEPTO, NM_DEPTO)
12
VALUES (CODIGO, NOME);
13
:MSG := 'Incluso de novo departamento realizada';
14
COMMIT;
15 <<FIM>>
16
NULL;
17 END;
CAPTULO 3 PL/SQL
18 /
antigo
2:
CODIGO
CHAR(03)
:= '&CODIGO';
novo
2:
CODIGO
CHAR(03)
:= 'F01';
antigo
3:
NOME
VARCHAR2(40) := '&NOME';
novo
3:
NOME
VARCHAR2(40) := '';
Procedimento PL/SQL concludo com sucesso.
MSG
--------------------------------------Incluso de novo departamento realizada
3.05) Crie um bloco PL/SQL que retorne a quantidade de funcionrios alocados a um determinado departamento
recebido como parmetro. O cdigo do departamento de preenchimento obrigatrio. Lembre-se que o usurio
poder passar a informao em letras maisculas ou minsculas.
Listagem-resposta 3.05A
SQL> DECLARE
2
CODIGO
CHAR(03) := UPPER('&Codigo_Departamento');
3
QTD
NUMBER
:= 0;
4 BEGIN
5
SELECT COUNT(*) INTO QTD
6
FROM FUNC
7
WHERE CD_DEPTO = CODIGO;
8
:MSG := 'A quantidade de funcionrios no departamento '||CODIGO
9
||' '||TO_CHAR(QTD);
10 END;
11 /
Entre o valor para codigo_departamento: d11
antigo
2:
CODIGO
CHAR(03) := UPPER('&Codigo_Departamento');
novo
2:
CODIGO
CHAR(03) := UPPER('d11');
Procedimento PL/SQL concludo com sucesso.
MSG
---------------------------------------------------A quantidade de funcionrios no departamento D11 9
3.06) Crie um bloco de PL/SQL que cadastre novos departamentos ou consulte dados de departamento, conforme
os parmetros recebidos:
Parmetros:
Listagem-resposta 3.06A
SQL> DECLARE
2
CODIGO
CHAR(03)
:= UPPER('&COD_DEPTO');
3
OPERACAO
CHAR(01)
:= UPPER('&OPERACAO');
4
NOME
VARCHAR2(40) := UPPER('&NOME_DEPTO');
5
GERENTE
NUMBER(5)
:= TO_NUMBER('&COD_GERENTE');
6
QTD
NUMBER(1)
:= 0;
7 BEGIN
8
IF OPERACAO NOT IN ('I', 'C') THEN
9
:MSG := 'Operao invlida';
10
GOTO FIM;
11
END IF;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
467
3.07) Crie um bloco PL/SQL que calcule a seqncia de Fibonacci (1 1 2 3 5 8 13 21 34 55 ...) para um determinado
nmero de elementos, recebido como parmetro e variando de 1 a 30.
Listagem-resposta 3.07A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
DECLARE
MAXIMO
NUMBER := TO_NUMBER('&MAXIMO');
ATUAL
NUMBER := 1;
ANTERIOR
NUMBER := 1;
TOTAL
NUMBER := 0;
CONTADOR
NUMBER := 2;
BEGIN
IF MAXIMO NOT BETWEEN 2 AND 30 OR
MAXIMO IS NULL THEN
:MSG := 'Valor mximo invlido';
GOTO FIM;
END IF;
:MSG := '1 - 1';
<<INICIO>>
IF CONTADOR < MAXIMO THEN
CONTADOR := CONTADOR + 1;
TOTAL := ATUAL + ANTERIOR;
:MSG := :MSG || ' - ' || TO_CHAR(TOTAL);
ANTERIOR := ATUAL;
ATUAL := TOTAL;
GOTO INICIO;
END IF;
<<FIM>>
NULL;
END;
CAPTULO 3 PL/SQL
26 /
Entre o valor para maximo: 8
antigo
2:
MAXIMO
NUMBER := TO_NUMBER('&MAXIMO');
novo
2:
MAXIMO
NUMBER := TO_NUMBER('8');
Procedimento PL/SQL concludo com sucesso.
MSG
------------------------------1 - 1 - 2 - 3 - 5 - 8 - 13 - 21
3.08) Crie um bloco PL/SQL que receba como parmetro uma data e calcule o nmero de dias teis no ms correspondente.
Listagem-resposta 3.08A
SQL> DECLARE
2
DATA
DATE
:= TO_DATE('&DATA', 'DD/MM/YYYY');
3
DT_INICIO
DATE
:= TRUNC(DATA, 'MM');
4
DT_FIM
DATE
:= LAST_DAY(DATA);
5
QTD
NUMBER := 0;
6 BEGIN
7 <<INICIO>>
8
IF TO_CHAR(DT_INICIO, 'D') NOT IN (1, 7) THEN
9
QTD := QTD + 1;
10
END IF;
11
DT_INICIO := DT_INICIO + 1;
12
IF DT_INICIO <= DT_FIM THEN
13
GOTO INICIO;
14
END IF;
15
:MSG := 'A quantidade de dias teis no mes '||
16
RTRIM(TO_CHAR(DATA, 'MONTH')) ||' '|| TO_CHAR(QTD);
17 END;
18 /
Entre o valor para data: 10/03/1999
antigo
2:
DATA
DATE
:= TO_DATE('&DATA', 'DD/MM/YYYY');
novo
2:
DATA
DATE
:= TO_DATE('10/03/1999', 'DD/MM/YYYY');
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------A quantidade de dias teis no mes MARO 23
3.09) Num tringulo ABC tem-se A= 15, sen B = (3) /2 e sen C = (2) / 2. Determine os ngulos B e C montando
um bloco de PL/SQL.
Listagem-resposta 3.09A
SQL> DECLARE
2
ANGB
NUMBER;
3
ANGC
NUMBER;
4
ANGA
NUMBER := 15;
5
SUPL
NUMBER;
6 BEGIN
7
ANGB := TRUNC(ASIN((SQRT(3)/2)) * 57.29578);
8
ANGC := TRUNC(ASIN((SQRT(2)/2)) * 57.29578);
9
IF (ANGA + ANGB + ANGC) <> 180 THEN -- A soma dos ngulos de um
10
SUPL := 180 - ANGB;
-- tringulo 180 graus
11
IF (SUPL + ANGA + ANGC) = 180 THEN
12
ANGB := SUPL;
-- O seno de um ngulo
13
ELSE
-- obtuso igual ao
14
ANGC := 180 - ANGC;
-- seno do seu complemento
15
END IF;
16
END IF;
17
:MSG := 'ANGB = '|| ANGB || ' ANGC = '||ANGC;
18 END;
19 /
Procedimento PL/SQL concludo com sucesso.
MSG
---------------------------------------------------ANGB = 120 ANGC = 45
3.10) Monte um bloco de PL/SQL que receba um ngulo como parmetro e fornea o seno, cosseno e tangente do
ngulo. O ngulo ser fornecido em graus. Se for informado um valor de ngulo negativo, devemos convert-lo
em positivo e prosseguir o clculo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
469
3.11) Crie um bloco de PL/SQL que receba como parmetro um valor alfanumrico com at trs caracteres de
comprimento e transforme-o em numrico (use a seqncia do alfabeto: A = 1, B = 2 e assim por diante).
Listagem-resposta 3.11A
SQL> DECLARE
2
ALFA
VARCHAR2(03) := UPPER('&ALFA');
3 BEGIN
4
:MSG := TRANSLATE(ALFA, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
5
'12345678901234567890123456');
6 END;
7 /
Entre o valor para alfa: ad
antigo
2:
ALFA
VARCHAR2(03) := UPPER('&ALFA');
novo
2:
ALFA
VARCHAR2(03) := UPPER('ad');
Procedimento PL/SQL concludo com sucesso.
MSG
--------------------------14
3.12) Crie um bloco de PL/SQL que receba como parmetro um nome e indique quantas partes o compem. A
separao entre as palavras do nome feita com espaos em branco (lembre-se que pode haver vrios espaos em
branco antes, depois e entre as palavras).
Listagem-resposta 3.12A
SQL> DECLARE
2
NOME
VARCHAR2(200)
:= LTRIM(RTRIM('&PNOME'));
3
POS
NUMBER
:= INSTR(NOME, ' ');
4
PARTES
NUMBER
:= 1;
5 BEGIN
6
:MSG := 'O NOME EST VAZIO';
7
IF NOME IS NOT NULL THEN
8 <<INICIO>>
9
IF POS > 0 THEN
10
NOME
:= LTRIM(SUBSTR(NOME, POS));
11
PARTES := PARTES + 1;
12
POS
:= INSTR(NOME, ' ');
13
GOTO INICIO;
14
END IF;
15
:MSG := 'O NOME COMPOSTO DE '||PARTES||' PARTES';
CAPTULO 3 PL/SQL
16
END IF;
17 END;
18 /
Entre o valor para pnome: GG
LKAGL
Q4IOTYQ
ADKHJGA;
777
antigo
2:
NOME
VARCHAR2(200)
:= LTRIM(RTRIM('&PNOME'));
novo
2:
NOME
VARCHAR2(200)
:= LTRIM(RTRIM('GG
LKAGL
Procedimento PL/SQL concludo com sucesso.
Q4IOTYQ
ADKHJGA;
777'))
MSG
----------------------------O NOME COMPOSTO DE 5 PARTES
3.13) Crie um bloco de PL/SQL que receba como parmetro um nmero de ms e verifique quantos funcionrios
fazem aniversrio no ms especificado.
Listagem-resposta 3.13A
SQL> DECLARE
2
MES
NUMBER := '&MES';
3
QTD
NUMBER := 0;
4 BEGIN
5
IF MES IS NOT NULL THEN
6
SELECT COUNT(*) INTO QTD
7
FROM FUNC
8
WHERE TO_NUMBER(TO_CHAR(DT_NASC, 'MM')) = MES;
9
:MSG := 'O nmero de aniversariantes no ms '|| mes
10
||' '||QTD;
11
END IF;
12 END;
13 /
Entre o valor para mes: 5
antigo
2:
MES
NUMBER := '&MES';
novo
2:
MES
NUMBER := '5';
Procedimento PL/SQL concludo com sucesso.
MSG
---------------------------------------O nmero de aniversariantes no ms 5 8
3.14) Crie um bloco de PL/SQL que inclua novos departamentos na tabela Depto, com as seguintes caractersticas:
Listagem-resposta 3.14A
SQL> DECLARE
2
CODIGO
NUMBER := '&GERENTE';
3
NOME
VARCHAR2(40) := '&NOME_DEPARTAMENTO';
4
COD_DEPTO
VARCHAR2(03);
5
NUM_DEPTO
NUMBER(02);
6
TXT_DEPTO
CHAR(01);
7 BEGIN
8
IF CODIGO IS NULL OR
9
NOME IS NULL THEN
10
:MSG := 'Parmetros invlidos';
11
ELSE
12
SELECT MAX(UPPER(CD_DEPTO)) INTO COD_DEPTO FROM DEPTO;
13
TXT_DEPTO := SUBSTR(COD_DEPTO,1,1);
14
NUM_DEPTO := SUBSTR(COD_DEPTO,2,2);
15
IF NUM_DEPTO < 25 THEN
16
NUM_DEPTO := NUM_DEPTO + 1;
17
COD_DEPTO := TXT_DEPTO||LTRIM(TO_CHAR(NUM_DEPTO, '00'));
18
ELSE
19
TXT_DEPTO := TRANSLATE(TXT_DEPTO, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
20
'BCDEFGHIJKLMNOPQRSTUVWXYZ1');
21
COD_DEPTO := TXT_DEPTO || '00';
22
END IF;
23
INSERT INTO DEPTO(CD_DEPTO, NM_DEPTO, CD_GERENTE)
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
471
3.15) Faa um bloco PL/SQL que receba como parmetro um cdigo de departamento e calcule o total de salrios
dos funcionrios. Arredonde o resultado para a ordem de grandeza das centenas.
Listagem-resposta 3.15A
SQL> DECLARE
2
CODIGO
VARCHAR2(03) := UPPER('&DEPTO');
3
SAL
NUMBER;
4 BEGIN
5
SELECT SUM(VL_SAL) INTO SAL
6
FROM FUNC
7
WHERE CD_DEPTO = CODIGO;
8
SAL := ROUND(SAL, -2);
9
:MSG := 'O total salarial do departamento '||CODIGO||' '||SAL;
10 END;
11 /
Entre o valor para depto: D11
antigo
2:
CODIGO
VARCHAR2(03) := UPPER('&DEPTO');
novo
2:
CODIGO
VARCHAR2(03) := UPPER('D11');
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------O total salarial do departamento D11 25000
3.16) Faa um bloco PL/SQL que receba como parmetro uma opo alfanumrica e calcule um dos seguintes valores:
d) o timestamp atual;
e) o nome por extenso da timezone do banco de dados;
f) o ms e o dia em que o exerccio est sendo feito.
Listagem-resposta 3.16A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
OPCAO
VARCHAR2(1) := UPPER('&OPO');
BEGIN
CASE OPCAO
WHEN 'A' THEN
:MSG := CURRENT_TIMESTAMP;
WHEN 'B' THEN
:MSG := EXTRACT(TIMEZONE_REGION FROM FROM_TZ(LOCALTIMESTAMP, DBTIMEZONE));
WHEN 'C' THEN
:MSG := EXTRACT(DAY FROM CURRENT_DATE)||'-'||EXTRACT(MONTH FROM CURRENT_DATE);
ELSE
:MSG := 'Valor invlido';
END CASE;
END;
/
Listagem-resposta 3.17A
SQL> DECLARE
2
OPCAO
VARCHAR2(1) := UPPER('&OPO');
3 BEGIN
4
:msg := CASE OPCAO
5
WHEN 'A' THEN
CAPTULO 3 PL/SQL
6
7
8
9
10
11
12
13
14
15
TO_CHAR(CURRENT_TIMESTAMP)
WHEN 'B' THEN
EXTRACT(TIMEZONE_REGION FROM FROM_TZ(LOCALTIMESTAMP, DBTIMEZONE))
WHEN 'C' THEN
TO_CHAR(EXTRACT(DAY FROM CURRENT_DATE)||'-'||EXTRACT(MONTH FROM CURRENT_DATE))
ELSE
'Valor invlido'
END;
END;
/
Observe que tivemos necessidade de incluir a funo TO_CHAR para todos os retornos numricos.
3.18) Leia os n maiores salrios da tabela de funcionrios e apresente-os em ordem ascendente.
Listagem-resposta 3.18A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE
QTD
CURSOR C1
NUMBER :=
IS SELECT
WHERE
ORDER
NVL(TO_NUMBER('&QTD'), 0);
VL_SAL FROM FUNC
VL_SAL IS NOT NULL
BY VL_SAL DESC;
BEGIN
:MSG := '';
FOR RC1 IN C1 LOOP
IF QTD > 0 THEN
QTD := QTD - 1;
ELSE
EXIT;
END IF;
:MSG := RC1.VL_SAL||' '||:MSG;
END LOOP;
:MSG := 'Os maiores salrios so: '|| :MSG;
END;
/
3.19) Crie uma tabela com o comando apresentado abaixo para receber os n maiores salrios da tabela de
funcionrios. O parmetro n deve ser recebido atravs de Accept. Na coluna total deve ser armazenado o somatrio
de todos os salrios lidos.
Listagem-resposta 3.19A
SQL> CREATE TABLE TABTOTAL
2 (NOME
VARCHAR2(25),
3
SALARIO
NUMBER(8),
4
TOTAL
NUMBER(11)
5 );
Tabela criada.
Inclua todos os dados e posteriormente atualize a coluna total com o valor obtido na soma.
Listagem-resposta 3.19B
SQL> DECLARE
2
QTD
NUMBER := NVL(TO_NUMBER('&QTD'),0);
3
VTOTAL
NUMBER := 0;
4
CURSOR C1
IS SELECT NM_FUNC, VL_SAL FROM FUNC
5
WHERE VL_SAL IS NOT NULL
6
ORDER BY 2 DESC;
7 BEGIN
8
DELETE FROM TABTOTAL;
9
FOR RC1 IN C1 LOOP
10
EXIT WHEN C1%ROWCOUNT > QTD;
11
VTOTAL := VTOTAL + RC1.VL_SAL;
12
INSERT INTO TABTOTAL
13
VALUES (RC1.NM_FUNC, RC1.VL_SAL, NULL);
14
END LOOP;
15
UPDATE TABTOTAL
16
SET TOTAL = VTOTAL;
17
COMMIT;
18 END;
19 /
Entre o valor para qtd: 8
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
473
3.20) Faa um programa PL/SQL que receba um cdigo de departamento como parmetro e apresente o nome do
gerente do departamento e todos os funcionrios (matrcula e nome) alocados quele departamento.
Utilize cursor com parmetro.
Listagem-resposta 3.20A
SQL> DECLARE
2
CD_DEPTO
CHAR(03) := '&DEPTO';
3
CURSOR C1
(VCD_DEPTO IN CHAR) IS
4
SELECT CD_DEPTO, CD_GERENTE FROM DEPTO
5
WHERE CD_DEPTO = VCD_DEPTO;
6
CURSOR C2
(VCD_DEPTO IN CHAR, VCD_MAT IN NUMBER) IS
7
SELECT CD_MAT, NM_FUNC,
8
DECODE(CD_MAT, VCD_MAT, 'GERENTE', 'FUNCIONARIO') CARGO
9
FROM FUNC
10
WHERE CD_MAT = VCD_MAT
11
OR CD_DEPTO = VCD_DEPTO;
12 BEGIN
13
:MSG := 'Departamento invlido';
14
FOR RC1 IN C1(CD_DEPTO) LOOP
15
:MSG := '';
16
FOR RC2 IN C2(RC1.CD_DEPTO, RC1.CD_GERENTE) LOOP
17
:MSG := LTRIM(RTRIM(:MSG))||' MAT = '||RC2.CD_MAT||
18
' NOME = '||RC2.NM_FUNC||' CARGO = '||RC2.CARGO||';';
19
END LOOP;
20
END LOOP;
21 END;
22 /
Entre o valor para depto: A00
antigo
2:
CD_DEPTO
CHAR(03) := '&DEPTO';
novo
2:
CD_DEPTO
CHAR(03) := 'A00';
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------------------------------------------MAT = 10 NOME = CRISTINA CARGO = FUNCIONARIO; MAT = 110 NOME = VICENTE CARGO = F
UNCIONARIO; MAT = 120 NOME = SILVIO CARGO = FUNCIONARIO; MAT = 200 NOME = DAVI C
ARGO = GERENTE;
3.21) Crie um bloco de PL/SQL que faa o enquadramento dos funcionrios de acordo com os seguintes critrios:
O piso salarial ser de 1.000,00 para os cargos inferiores a 51. Para os demais, o piso salarial ser de 1.500,00.
Para cada nvel de cargo superior a 55, dever ser acrescido 250 ao salrio.
Para cada nvel de instruo superior a 15, dever ser acrescido 30 ao salrio.
O salrio do funcionrio no poder ser diminudo. Se o funcionrio j receber acima do valor calculado, deve-se
manter o salrio anterior.
Deve-se apresentar, simultaneamente, todos os enquadrados (com o velho e novo salrio) e aqueles no enquadrados
(com o salrio antigo).
Listagem-resposta 3.21A
SQL> VARIABLE MSG VARCHAR2(2000)
SQL> DECLARE
2
SAL
NUMBER;
3
CURSOR C1
IS SELECT CD_MAT, VL_SAL, NR_GIT, NR_CARGO
4
FROM FUNC
5
WHERE VL_SAL IS NOT NULL
6
FOR UPDATE OF VL_SAL;
7 BEGIN
8
:MSG := '';
9
FOR RC1 IN C1 LOOP
CAPTULO 3 PL/SQL
10
IF RC1.NR_CARGO < 51 OR RC1.NR_CARGO IS NULL THEN
11
SAL := 1000;
12
ELSE
13
SAL := 1500;
14
END IF;
15
IF RC1.NR_CARGO > 55 THEN
16
SAL := SAL + (RC1.NR_CARGO - 55) * 250;
17
END IF;
18
IF RC1.NR_GIT > 15 THEN
19
FOR I IN 16..RC1.NR_GIT LOOP
20
SAL := SAL + 30;
21
END LOOP;
22
END IF;
23
IF RC1.VL_SAL < SAL THEN
24
UPDATE FUNC
25
SET VL_SAL = SAL
26
WHERE CURRENT OF C1;
27
:MSG := LTRIM(RTRIM(:MSG))||' MAT = '||RC1.CD_MAT||
28
' SAL.ANT = '||RC1.VL_SAL||' SAL.NOVO = '||SAL||';';
29
ELSE
30
:MSG := LTRIM(RTRIM(:MSG))||' MAT = '||RC1.CD_MAT||
31
' SALARIO= '||RC1.VL_SAL||';';
32
END IF;
33
END LOOP;
34
COMMIT;
35 END;
36 /
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------------------------------------------MAT = 10 SALARIO= 5802,5; MAT = 20 SALARIO= 4537,5; MAT = 30 SALARIO= 4207,5; MA
T = 50 SALARIO= 4419,25; MAT = 60 SALARIO= 3547,5; MAT = 70 SALARIO= 3978,7; MAT
= 90 SALARIO= 3272,5; MAT = 100 SALARIO= 2876,5; MAT = 110 SALARIO= 5115; MAT =
120 SALARIO= 3217,5; MAT = 130 SALARIO= 2618; MAT = 140 SALARIO= 3126,2; MAT =
150 SALARIO= 2780,8; MAT = 160 SALARIO= 2447,5; MAT = 170 SALARIO= 2714,8; MAT =
180 SALARIO= 2347,4; MAT = 190 SALARIO= 2249,5; MAT = 200 SALARIO= 3661,68; MAT
= 210 SALARIO= 2009,7; MAT = 220 SALARIO= 3282,4; MAT = 230 SALARIO= 2439,8; MA
T = 240 SALARIO= 3163,6; MAT = 250 SALARIO= 2109,8; MAT = 260 SALARIO= 1897,5; M
AT = 270 SALARIO= 3011,8; MAT = 280 SALARIO= 2887,5; MAT = 290 SALARIO= 1687,4;
MAT = 300 SALARIO= 1952,5; MAT = 310 SALARIO= 1749; MAT = 320 SALARIO= 2194,5; M
AT = 330 SALARIO= 2790,7; MAT = 340 SALARIO= 2622,4;
3.22) Crie uma tabela com o comando apresentado abaixo para receber a quantidade de funcionrios por
departamento. O cdigo do departamento dever ser convertido (de alfanumrico para numrico).
Utilize Loop e Exit When. Use a funo AscII para a converso do cdigo.
Listagem-resposta 3.22A
SQL> CREATE TABLE RESULTADO
2 (CD_DEPTO
NUMBER,
3
QT_FUNC
NUMBER,
4
VL_SAL
NUMBER,
5
AV_SAL
NUMBER);
Tabela criada.
Listagem-resposta 3.22B
SQL> DECLARE
2
CODIGO
NUMBER;
3
CURSOR C1
IS SELECT CD_DEPTO, COUNT(*) QTD
4
FROM FUNC
5
WHERE CD_DEPTO IS NOT NULL
6
GROUP BY CD_DEPTO;
7
RC1
C1%ROWTYPE;
8 BEGIN
9
OPEN C1;
10
LOOP
11
FETCH C1 INTO RC1;
12
EXIT WHEN C1%NOTFOUND;
13
CODIGO := (ASCII(SUBSTR(UPPER(RC1.CD_DEPTO),1,1)) - 64) * 100;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
475
3.23) Utilizando a mesma tabela j parcialmente preenchida do exerccio anterior, complete-a com o total de
salrios e a mdia salarial.
Utilize Cursor Loop. Inicie a leitura pela tabela resultado e trabalhe com Update Where Current.
Listagem-resposta 3.23A
SQL> DECLARE
2
CURSOR C1
IS SELECT * FROM RESULTADO
3
FOR UPDATE OF VL_SAL, AV_SAL;
4
VCD_DEPTO
VARCHAR2(5);
5
VSUM
NUMBER;
6
VAVG
NUMBER;
7
LETRA
NUMBER;
8 BEGIN
9
:MSG := '';
10
FOR RC1 IN C1 LOOP
11
VCD_DEPTO := LTRIM(TO_CHAR(RC1.CD_DEPTO));
12
LETRA := TO_NUMBER(SUBSTR(VCD_DEPTO,1,LENGTH(VCD_DEPTO)-2));
13
VCD_DEPTO := CHR(LETRA+64)||SUBSTR(VCD_DEPTO,LENGTH(VCD_DEPTO) -1);
14
SELECT ROUND(SUM(VL_SAL)), ROUND(AVG(VL_SAL))
15
INTO VSUM, VAVG
16
FROM FUNC
17
WHERE CD_DEPTO = VCD_DEPTO;
18
:MSG := :MSG||VCD_DEPTO ||'-'||VSUM||'-'||VAVG||'; ';
19
UPDATE RESULTADO
20
SET VL_SAL = VSUM,
21
AV_SAL = VAVG
22
WHERE CURRENT OF C1;
23
END LOOP;
24 END;
25 /
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------------------------------------------A00-14135-4712; B01-4538-4538; C01-9952-3317; D11-25041-2782; D21-16601-2767; E0
1-4419-4419; E11-11549-2310; E21-10484-2621;
3.24) Crie um bloco de PL/SQL que receba como parmetro um nmero de ms e verifique quais os funcionrios
aniversariantes. Apresentar o nome e dia de nascimento ordenado por dia de nascimento. Usar While.
Listagem-resposta 3.24A
SQL> DECLARE
2
MES
3
CURSOR C1
4
5
6
7
RC1
NUMBER := '&MES';
IS SELECT NM_FUNC, TO_CHAR(DT_NASC, 'DD') DIA
FROM FUNC
WHERE TO_NUMBER(TO_CHAR(DT_NASC, 'MM')) = MES
ORDER BY DIA;
C1%ROWTYPE;
CAPTULO 3 PL/SQL
8 BEGIN
9
:MSG := 'Os aniversariantes do ms so : '||CHR(10);
10
OPEN C1;
11
FETCH C1 INTO RC1;
12
WHILE C1%FOUND LOOP
13
:MSG := :MSG ||RPAD(RC1.NM_FUNC,13)||LPAD(RC1.DIA,2)||'; '||CHR(10);
14
FETCH C1 INTO RC1;
15
END LOOP;
16 END;
17 /
Entre o valor para mes: 3
antigo
2:
MES
NUMBER := '&MES';
novo
2:
MES
NUMBER := '3';
Procedimento PL/SQL concludo com sucesso.
MSG
------------------------------Os aniversariantes do ms so :
JOANA
19;
ELINE
28;
SALVADOR
31;
3.25) Crie um bloco de PL/SQL que receba como parmetro (de substituio) um grau de instruo e um cdigo de
departamento e determine o cargo, salrio e matrcula deste funcionrio. Se existir mais de um, escolha o funcionrio
mais novo. Se no existir nenhum, apresente mensagem correspondente.
Listagem-resposta 3.25A
SQL> DECLARE
2
CURSOR C1
IS SELECT CD_MAT, NR_CARGO, VL_SAL
3
FROM FUNC
4
WHERE CD_DEPTO = UPPER('&DEPTO')
5
AND NR_GIT
= TO_NUMBER('&GIT')
6
ORDER BY DT_NASC DESC;
7
RC1
C1%ROWTYPE;
8 BEGIN
9
OPEN C1;
10
FETCH C1 INTO RC1;
11
IF C1%NOTFOUND THEN
12
:MSG := 'No existem funcionrios na situao informada';
13
ELSE
14
:MSG := 'MAT = '||RC1.CD_MAT||' SAL = '||RC1.VL_SAL||
15
' CARGO = '||RC1.NR_CARGO;
16
END IF;
17 END;
18 /
Entre o valor para depto: d11
antigo
4:
WHERE CD_DEPTO = UPPER('&DEPTO')
novo
4:
WHERE CD_DEPTO = UPPER('d11')
Entre o valor para git: 18
antigo
5:
AND NR_GIT
= TO_NUMBER('&GIT')
novo
5:
AND NR_GIT
= TO_NUMBER('18')
Procedimento PL/SQL concludo com sucesso.
MSG
--------------------------------MAT = 220 SAL = 3282,4 CARGO = 55
Listagem-resposta 3.26A
SQL> DECLARE
2
X
NUMBER(3) := '&X';
3
A
EXCEPTION;
4
B
EXCEPTION;
5
C
EXCEPTION;
6 BEGIN
-- INICIO BLOCO PRINCIPAL
7
BEGIN
-- INICIO BLOCO INTERNO
8
IF X = 1 THEN
9
RAISE A;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
477
ELSIF X = 2 THEN
RAISE B;
ELSIF X = 3 THEN
RAISE C;
END IF;
:VALOR := 100;
EXCEPTION
WHEN A THEN
:VALOR := 300;
END;
EXCEPTION
WHEN B THEN
:VALOR := 400;
END;
/
O funcionrio no deve existir no banco de dados. Para tal, consulte por nome e sobrenome.
O cdigo do departamento deve existir na tabela de departamentos.
S sero admitidos funcionrios com menos de 50 anos.
S sero admitidos funcionrios com grau de instruo entre 12 e 18.
O cargo dever estar, garantidamente, entre 55 e 60.
Sexo dever estar preenchido com F ou M.
Os parmetros informados so: nome e sobrenome do funcionrio, cdigo do departamento, grau de instruo,
data de nascimento, cargo e sexo.
Para cada um dos erros encontrados, o programa dever ser interrompido com a mensagem adequada.
Obrigatoriamente, o tratamento dever utilizar a rea de Exception.
Listagem-resposta 3.27A
SQL> DECLARE
2
NOME
3
SOBRENOME
4
CODIGO
5
GIT
6
DATA
7
CARGO
8
SEXO
VARCHAR2(12)
VARCHAR2(12)
VARCHAR2(03)
NUMBER(02)
DATE
NUMBER(02)
VARCHAR2(01)
:=
:=
:=
:=
:=
:=
:=
UPPER('&NOME');
UPPER('&SOBRENOME');
UPPER('&DEPTO');
'&GIT';
TO_DATE('&DATA', 'DD/MM/YYYY');
'&CARGO';
UPPER('&SEXO');
CAPTULO 3 PL/SQL
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
DUMMY
NUMBER
:= 0;
IDADE
EXCEPTION;
INSTRU
EXCEPTION;
BEGIN
BEGIN
SELECT CD_MAT INTO DUMMY FROM FUNC
WHERE NM_FUNC = NOME AND NM_SOBRENOME = SOBRENOME;
RAISE_APPLICATION_ERROR(-20001, 'Funcionrio j existente');
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
SELECT CD_GERENTE INTO DUMMY FROM DEPTO
WHERE CD_DEPTO = CODIGO;
IF (SYSDATE - DATA) / 365.25 >= 50 THEN
RAISE IDADE;
END IF;
IF GIT NOT BETWEEN 12 AND 18 THEN
RAISE INSTRU;
END IF;
IF CARGO NOT BETWEEN 55 AND 60 THEN
RAISE_APPLICATION_ERROR(-20005, 'Cargo invlido');
END IF;
IF SEXO NOT IN ('F', 'M') THEN
RAISE_APPLICATION_ERROR(-20006, 'Sexo diferente de F e M');
END IF;
INCLUSO
SELECT MAX(CD_MAT) + 1 INTO DUMMY
FROM FUNC;
INSERT INTO FUNC(CD_MAT, NM_FUNC, NM_SOBRENOME, DT_NASC,
CD_DEPTO, NR_GIT, NR_CARGO, IN_SEXO)
VALUES (DUMMY, NOME, SOBRENOME, DATA,
CODIGO, GIT, CARGO, SEXO);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20002, 'Departamento inexistente');
WHEN IDADE THEN
RAISE_APPLICATION_ERROR(-20003, 'Idade muito elevada');
WHEN INSTRU THEN
RAISE_APPLICATION_ERROR(-20004, 'Grau de instruo invlido');
END;
/
3.28) Para o programa apresentado na Listagem-resposta 3.28A, identifique e explique por que ocorreu o erro.
Listagem-resposta 3.28A
SQL> DECLARE
2
DUMMY
NUMBER := '&NUMERO';
3 BEGIN
4
IF DUMMY > 5 THEN
5
:VALOR := 0;
6
END IF;
7 EXCEPTION
8 WHEN OTHERS THEN
9
RAISE_APPLICATION_ERROR(-20999, 'ERRO DE ATRIBUIO NA DECLARAO');
10 END;
11 /
Entre o valor para numero: A
antigo
2:
DUMMY
NUMBER := '&NUMERO';
novo
2:
DUMMY
NUMBER := 'A';
DECLARE
*
ERRO na linha 1:
ORA-06502: PL/SQL: error: erro de converso de caractere em nmero numrico ou
de valor
ORA-06512: em line 2
O erro ocorre mesmo com a presena da rea de tratamento de erro, porque erros adquiridos a tempo de declarao
so propagados diretamente para o bloco externo imediatamente superior quele em que ocorreu o erro, no
sendo percebidos pela rea de tratamento. No nosso caso, no existe bloco externo, e portanto a propagao
ocorre para o ambiente, derrubando o programa.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
479
Listagem-resposta 3.29A
SQL> BEGIN
2
DECLARE
3
DUMMY
NUMBER := '&NUMERO';
4
BEGIN
5
IF DUMMY > 5 THEN
6
:VALOR := 0;
7
END IF;
8
EXCEPTION
9
WHEN OTHERS THEN
10
RAISE_APPLICATION_ERROR(-20999, 'ERRO DE ATRIBUIO NA DECLARAO');
11
END;
12 EXCEPTION
13 WHEN OTHERS THEN
14
:MSG := SQLERRM(SQLCODE);
15 END;
16 /
Entre o valor para numero: A
antigo
3:
DUMMY
NUMBER := '&NUMERO';
novo
3:
DUMMY
NUMBER := 'A';
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------------------------------------------ORA-06502: PL/SQL: error: erro de converso de caractere em nmero numrico ou d
e valor
A soluo de contorno a criao de um bloco externo quele em que estava ocorrendo o erro. Este bloco capaz
de capturar as condies de erro ocorridas na declarao do bloco interno.
3.30) Crie um programa para cadastramento de funcionrios. Somente informe dois parmetros: Matrcula e Cdigo
do departamento. O programa no deve abortar se a matrcula j existir (Dup_Val_On_Index) ou se o cdigo do
departamento no existir na tabela Depto (use a diretiva Exception_Init para definir este controle).
Listagem-resposta 3.30A
SQL> DECLARE
2
MATRICULA
NUMBER := '&MAT';
3
DEPTO
VARCHAR2(03) := '&DEPTO';
4
R_DEPTO
EXCEPTION;
5
PRAGMA
EXCEPTION_INIT(R_DEPTO, -2291);
6 BEGIN
7
INSERT INTO FUNC(CD_MAT, CD_DEPTO)
8
VALUES (MATRICULA, DEPTO);
9 EXCEPTION
10 WHEN DUP_VAL_ON_INDEX THEN
11
:MSG := 'Matrcula j existente';
12 WHEN R_DEPTO THEN
13
:MSG := 'Relacionamento inexistente';
14 END;
15 /
Entre o valor para mat: 2
antigo
2:
MATRICULA
NUMBER := '&MAT';
novo
2:
MATRICULA
NUMBER := '2';
Entre o valor para depto: DDD
antigo
3:
DEPTO
VARCHAR2(03) := '&DEPTO';
novo
3:
DEPTO
VARCHAR2(03) := 'DDD';
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------Relacionamento inexistente
3.31) Faa um programa que receba trs nmeros e os apresente em ordem ascendente. Para tal, estabelea todas as
crticas necessrias para que o usurio fornea dados corretos.
CAPTULO 3 PL/SQL
Listagem-resposta 3.31A
SQL> BEGIN
2
DECLARE
3
V1
NUMBER := '&VALOR_1';
4
V2
NUMBER := '&VALOR_2';
5
V3
NUMBER := '&VALOR_3';
6
DUMMY
NUMBER := 0;
7
TROCA
BOOLEAN:= TRUE;
8
BEGIN
9
IF V1 = V2 AND V1 = V3 THEN
10
:MSG := 'Os trs nmeros so iguais';
11
ELSE
12
WHILE TROCA LOOP
13
TROCA := FALSE;
14
IF V1 > V2 THEN
15
DUMMY := V1;
16
V1
:= V2;
17
V2
:= DUMMY;
18
TROCA := TRUE;
19
END IF;
20
IF V2 > V3 THEN
21
DUMMY := V2;
22
V2
:= V3;
23
V3
:= DUMMY;
24
TROCA := TRUE;
25
END IF;
26
END LOOP;
27
END IF;
28
:MSG := 'Ordem ascendente : '||V1||'-'||V2||'-'||V3;
29
END;
30 EXCEPTION
31 WHEN VALUE_ERROR THEN
32
:MSG := 'Valor invlido na atribuio';
33 END;
34 /
Entre o valor para valor_1: 8
antigo
3:
V1
NUMBER := '&VALOR_1';
novo
3:
V1
NUMBER := '8';
Entre o valor para valor_2: 4
antigo
4:
V2
NUMBER := '&VALOR_2';
novo
4:
V2
NUMBER := '4';
Entre o valor para valor_3: 9
antigo
5:
V3
NUMBER := '&VALOR_3';
novo
5:
V3
NUMBER := '9';
Procedimento PL/SQL concludo com sucesso.
MSG
-----------------------Ordem ascendente : 4-8-9
3.32) Quais os trs tipos de colees existentes em PL/SQL? Cite duas caractersticas das Index-By Tables.
A PL/SQL trabalha com os seguintes tipos de colees: Nested Tables, Varrays e Index-By Tables. Como caracterstica
comum entre as colees de PL/SQL, diramos que funcionam como arrays e devem ser indexadas por um valor inteiro.
Dentre as caractersticas das Index-By Tables temos:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
481
Listagem-resposta 3.34A
SQL> DECLARE
2
TYPE TAB
IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3
LISTA
VARCHAR2(100) := LTRIM(RTRIM('&NUMEROS'))||',';
4
WORDEM
TAB;
5
I
NUMBER := 0;
6
POS
NUMBER := 1;
7 BEGIN
8
POS := INSTR(LISTA, ',');
9
:MSG := 'A seqncia ordenada de nmeros : ';
10
IF POS = 0 THEN
11
GOTO FIM;
12
END IF;
13
WHILE POS > 0 LOOP
14
I := SUBSTR(LISTA, 1, POS - 1);
15
IF WORDEM.EXISTS(I) THEN
16
WORDEM(I) := WORDEM(I) + 1;
17
ELSE
18
WORDEM(I) := 1;
19
END IF;
20
LISTA := LTRIM(SUBSTR(LISTA, POS + 1));
21
POS := INSTR(LISTA, ',');
22
END LOOP;
23
I := WORDEM.FIRST;
24
WHILE TRUE LOOP
25
WHILE WORDEM(I) > 0 LOOP
26
:MSG := :MSG||I||' ';
27
WORDEM(I) := WORDEM(I) - 1;
28
END LOOP;
29
EXIT WHEN I = WORDEM.LAST;
30
I := WORDEM.NEXT(I);
31
END LOOP;
32 <<FIM>>
33
NULL;
34 END;
35 /
Entre o valor para numeros: 1, 3, 7, 2, 9, 3, 10, 4, 2, 1
antigo
3:
LISTA
VARCHAR2(100) := LTRIM(RTRIM('&NUMEROS'))||',';
novo
3:
LISTA
VARCHAR2(100) := LTRIM(RTRIM('1, 3, 7, 2, 9, 3, 10, 4, 2, 1'))||',';
Procedimento PL/SQL concludo com sucesso.
MSG
---------------------------------------------------------------A seqncia ordenada de nmeros : 1 1 2 2 3 3 4 7 9 10
Nesta parte do exerccio, separamos cada um dos nmeros recebidos e os usamos como indexadores da tabela IndexBy. Isto somente pode ser feito com este tipo de coleo, pois podemos criar elementos no seqenciais na tabela.
3.35) Leia a tabela de funcionrios e preencha a seguinte tabela em memria: TabCargo cujo layout composto
do nmero do cargo e quantidade e cdigo do departamento.
Ao trmino da carga, apresente a quantidade de funcionrios por cargo e por departamento.
Use uma Index-By Table para acumular a quantidade.
Listagem-resposta 3.35A
SQL> DECLARE
2
TYPE REG
3
4
5
TYPE TCARGO
6
CARGO
7
CURSOR C1
8
9
10
A_CARGO
11
I
IS RECORD (DEPTO
CHAR(03),
COD
NUMBER,
QTD
NUMBER);
IS TABLE OF REG INDEX BY BINARY_INTEGER;
TCARGO;
IS SELECT NR_CARGO, CD_DEPTO
FROM FUNC
ORDER BY CD_DEPTO, NR_CARGO;
BOOLEAN;
NUMBER;
CAPTULO 3 PL/SQL
12 BEGIN
13
:MSG := '';
-- TAMANHO DE 4000 BYTES
14
FOR R1 IN C1 LOOP
15
A_CARGO := FALSE;
16
FOR I IN 1..CARGO.COUNT() LOOP
17
IF CARGO(I).DEPTO = R1.CD_DEPTO AND
18
CARGO(I).COD
= R1.NR_CARGO THEN
19
CARGO(I).QTD := CARGO(I).QTD + 1;
20
A_CARGO := TRUE;
21
EXIT;
22
END IF;
23
END LOOP;
24
IF NOT A_CARGO THEN
25
I := CARGO.COUNT() + 1;
26
CARGO(I).DEPTO := R1.CD_DEPTO;
27
CARGO(I).COD
:= R1.NR_CARGO;
28
CARGO(I).QTD
:= 1;
29
END IF;
30
END LOOP;
31
FOR I IN 1..CARGO.COUNT() LOOP
32
:MSG := :MSG||' DEPTO= '||CARGO(I).DEPTO||
33
' CARGO= '||CARGO(I).COD||
34
' QTD= '||CARGO(I).QTD||CHR(10);
35
END LOOP;
36 END;
37 /
Procedimento PL/SQL concludo com sucesso.
MSG
---------------------------DEPTO= A00 CARGO= 58 QTD= 2
DEPTO= A00 CARGO= 66 QTD= 1
. . .
3.36) Faa um programa que calcule um elemento da seqncia de Fibonacci que ser passado como parmetro.
Listagem-resposta 3.36A
SQL> DECLARE
2
TYPE TFIBO
IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3
FIBO
TFIBO;
4
QTD
NUMBER := '&QTD';
5 BEGIN
6
FIBO(1) := 1;
7
FIBO(2) := 1;
8
IF QTD IS NULL OR
9
QTD > 100
OR QTD < 3 THEN
10
:MSG := 'Quantidade de elementos invlida';
11
ELSE
12
:MSG := '1-1';
13
FOR I IN 3..QTD LOOP
14
FIBO(I) := FIBO(I-1) + FIBO(I-2);
15
:MSG := :MSG ||'-'||FIBO(I);
16
END LOOP;
17
END IF;
18 END;
19 /
Entre o valor para qtd: 12
antigo
4:
QTD
NUMBER := '&QTD';
novo
4:
QTD
NUMBER := '12';
Procedimento PL/SQL concludo com sucesso.
MSG
-----------------------------1-1-2-3-5-8-13-21-34-55-89-144
3.37) Faa um bloco de PL/SQL que leia os n (recebido como parmetro) funcionrios com maior salrio e apresenteos em ordem de matrcula. Deve ser mostrado o nome, cargo e salrio de cada funcionrio.
Listagem-resposta 3.37A
SQL> DECLARE
2
N
3
CURSOR C1
NUMBER := '&QTD_SALARIOS';
IS SELECT NM_FUNC, NR_CARGO, VL_SAL, CD_MAT
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
483
3.38) Suponha um tabuleiro de xadrez com oito linhas e oito colunas. Receba como parmetro (linha e coluna) o
posicionamento de uma rainha no tabuleiro. Faa um programa que determine as outras possveis posies em que a
outra rainha poder ser colocada sabendo-se que, no xadrez, a rainha pode se deslocar tanto na reta quanto na diagonal.
Listagem-resposta 3.38A
SQL>
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CAPTULO 3 PL/SQL
34
TABULEIRO(I)(J) := 'X';
35
J := J -1;
36
END IF;
37
IF K <= 8 THEN
38
TABULEIRO(I)(K) := 'X';
39
K := K + 1;
40
END IF;
41
END LOOP;
42
FOR I IN 1..8 LOOP
43
FOR J IN 1..8 LOOP
44
IF NOT TABULEIRO(I).EXISTS(J) THEN
45
:MSG := :MSG ||'('||I||','||J||') ';
46
END IF;
47
END LOOP;
48
END LOOP;
49 END;
50 /
Entre o valor para linha: 3
Entre o valor para coluna: 4
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------------------------------------------As posies disponveis so: (1,1) (1,3) (1,5) (1,7) (1,8) (2,1) (2,2) (2,6) (2,
7) (2,8) (4,1) (4,2) (4,6) (4,7) (4,8) (5,1) (5,3) (5,5) (5,7) (5,8) (6,2) (6,3)
(6,5) (6,6) (6,8) (7,1) (7,2) (7,3) (7,5) (7,6) (7,7) (8,1) (8,2) (8,3) (8,5) (
8,6) (8,7) (8,8)
Neste exerccio no precisamos verificar a existncia de cada uma das posies do array na direo X (tabuleiro.exists(
I )) porque preenchemos um elemento de cada uma das oito posies porque, quando executamos o primeiro
loop, para marcar as linhas retas, criada uma linha para cada posio.
3.39) Crie um bloco de PL/SQL que receba como parmetro uma srie de matrculas separadas por vrgula em um
nico parmetro. Monte este nmero em um array e faa uma consulta ao banco de dados, obtendo o nome e
salrio de todos os funcionrios que existam na lista. Use ForAll e Bulk Collect.
Listagem-resposta 3.39A
SQL> DECLARE
2
MATS
VARCHAR2(300) := '&MATRICULAS'||',';
3
TYPE TAB
IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4
TYPE TABCHAR
IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
5
TABMAT
TAB;
6
SALARIOS
TAB;
7
NOMES
TABCHAR;
8
POS
NUMBER;
9
I
NUMBER := 1;
10 BEGIN
11
POS := INSTR(MATS, ',');
12
WHILE POS > 0 LOOP
13
TABMAT(I) := TO_NUMBER(SUBSTR(MATS,1,POS-1));
14
MATS := SUBSTR(MATS,POS+1);
15
POS := INSTR(MATS, ',');
16
I := I + 1;
17
END LOOP;
18
:MSG := '';
19
IF I > 1 THEN
20
FORALL J IN 1..TABMAT.LAST
21
UPDATE FUNC SET VL_SAL = VL_SAL
22
WHERE CD_MAT = TABMAT(J)
23
RETURNING NM_FUNC, VL_SAL BULK COLLECT INTO NOMES, SALARIOS;
24
COMMIT;
25
I := 1;
26
FOR J IN 1..TABMAT.LAST LOOP
27
IF SQL%BULK_ROWCOUNT(J) > 0 THEN
28
:MSG := :MSG||TABMAT(J)||'-'||NOMES(I)||'-'||SALARIOS(I)||CHR(10);
29
I := I + 1;
30
ELSE
31
:MSG := :MSG ||'UPDATE MAT='||TABMAT(J)||' NO REALIZADA'||CHR(10);
32
END IF;
33
END LOOP;
34
END IF;
35 END;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
485
Listagem-resposta 3.41A
SQL> CREATE OR REPLACE FUNCTION FDEPTO(COD IN VARCHAR2) RETURN VARCHAR2 IS
2
NOME
VARCHAR2(100);
3 BEGIN
4
SELECT NM_DEPTO INTO NOME
5
FROM DEPTO
6
WHERE CD_DEPTO = COD;
7
RETURN NOME;
8 EXCEPTION
9 WHEN NO_DATA_FOUND THEN
10
RETURN 'Departamento Inexistente';
11 END;
12 /
Funo criada.
SQL> SELECT FDEPTO('A00') FROM DUAL;
FDEPTO('A00')
-------------------DIRETORIA DA EMPRESA
3.42) Crie uma funo ou procedure na base de dados que determine o departamento que possui menos funcionrios.
Listagem-resposta 3.42A
SQL> CREATE OR REPLACE FUNCTION QDEPTO RETURN VARCHAR2 IS
2
CURSOR C1 IS SELECT CD_DEPTO, COUNT(*)
3
FROM FUNC F
4
GROUP BY CD_DEPTO
5
UNION
6
SELECT CD_DEPTO, 0 FROM DEPTO
7
WHERE NOT EXISTS (SELECT * FROM FUNC
8
WHERE CD_DEPTO = DEPTO.CD_DEPTO)
9
ORDER BY 2;
10 BEGIN
11
FOR R1 IN C1 LOOP
12
RETURN R1.CD_DEPTO;
13
END LOOP;
14 END;
15 /
Funo criada.
SQL> SELECT QDEPTO FROM DUAL;
QDEPTO
----------------------------D01
3.43) Crie uma funo ou procedure na base de dados que receba como parmetro um cdigo de departamento e
determine o ramal do gerente do departamento. Caso o departamento no tenha gerente, dever ser escolhido o
CAPTULO 3 PL/SQL
ramal do funcionrio com maior cargo deste departamento (se existir mais de um, obtenha o ramal do funcionrio
mais velho e com maior cargo).
Listagem-resposta 3.43A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE OR REPLACE
FUNCTION RAMAL (COD IN VARCHAR2) RETURN NUMBER IS
CURSOR C1
IS SELECT NR_RAMAL
FROM FUNC, DEPTO
WHERE FUNC.CD_MAT
= DEPTO.CD_GERENTE
AND DEPTO.CD_DEPTO = COD;
CURSOR C2
IS SELECT NR_RAMAL
FROM FUNC
WHERE NR_CARGO = (SELECT MAX(NR_CARGO)
FROM FUNC
WHERE CD_DEPTO = COD)
AND CD_DEPTO = COD
ORDER BY DT_NASC;
BEGIN
FOR R1 IN C1 LOOP
RETURN R1.NR_RAMAL;
END LOOP;
FOR R2 IN C2 LOOP
RETURN R2.NR_RAMAL;
END LOOP;
RETURN 0;
END;
/
Funo criada.
SQL> SELECT RAMAL('A00') FROM DUAL;
RAMAL('A00')
-----------4501
3.44) Crie uma funo ou procedure na base de dados que receba como parmetro um grau de instruo e um
cdigo de departamento e determine o cargo e o salrio correspondentes a estes parmetros. Se existir mais de um,
escolha o do funcionrio mais novo. Se no existir nenhum, retorne Null.
Listagem-resposta 3.44A
SQL> CREATE OR REPLACE
2 PROCEDURE SALCARGO (COD IN VARCHAR2, GIT IN NUMBER,
3
SAL OUT NOCOPY NUMBER, CARGO OUT NOCOPY NUMBER) IS
4
CURSOR C1
IS SELECT VL_SAL, NR_CARGO
5
FROM FUNC
6
WHERE CD_DEPTO = COD
7
AND NR_GIT
= GIT
8
ORDER BY DT_NASC DESC NULLS LAST;
9 BEGIN
10
FOR R1 IN C1 LOOP
11
SAL
:= R1.VL_SAL;
12
CARGO := R1.NR_CARGO;
13
END LOOP;
14 END;
15 /
Procedimento criado.
SQL> VARIABLE SAL NUMBER
SQL> VARIABLE CARGO NUMBER
SQL> EXECUTE SALCARGO('A00', 18, :SAL, :CARGO);
Procedimento PL/SQL concludo com sucesso.
SQL> PRINT
SAL
---------5802,5
CARGO
---------66
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
487
Listagem-resposta 3.45A
SQL> CREATE OR REPLACE
2 PROCEDURE CFUNC (NOME1 IN VARCHAR2,
3
NOME2 IN VARCHAR2,
4
DNASC IN DATE := TO_DATE('01011901', 'DDMMYYYY'),
5
SEXO IN VARCHAR2 := 'F',
6
GIT
IN NUMBER := 12) IS
7
CDEPTO
VARCHAR2(03);
8
CRAMAL
NUMBER;
9
MAT
NUMBER;
10
SAL
NUMBER;
11
CARGO
NUMBER;
12 BEGIN
13
IF NOME1 IS NULL OR NOME2 IS NULL THEN
14
RAISE_APPLICATION_ERROR(-20001, 'Nome de preenchimento obrigatrio');
15
END IF;
16
CDEPTO := QDEPTO;
17
CRAMAL := RAMAL(CDEPTO);
18
SALCARGO(CDEPTO, GIT, SAL, CARGO);
19
SELECT NVL(MAX(CD_MAT), 0) + 1 INTO MAT FROM FUNC;
20
INSERT INTO FUNC
21
(CD_MAT, NM_FUNC, NM_SOBRENOME, VL_SAL, NR_RAMAL,
22
CD_DEPTO, IN_SEXO, NR_CARGO, DT_NASC, DT_ADM, NR_GIT) VALUES
23
(MAT, NOME1, NOME2, SAL, CRAMAL,
24
CDEPTO, SEXO, CARGO, DNASC, SYSDATE, GIT);
25 END;
26 /
Procedimento criado.
SQL> EXECUTE CFUNC('JOANA', 'D ARC', GIT=> 18);
Procedimento PL/SQL concludo com sucesso.
SQL> SET LINESIZE 500
SQL> SELECT * FROM FUNC WHERE CD_MAT > 330;
CD_MAT
-----340
341
NM_FUNC
--------DILSON
JOANA
NM_SOBRENOME
-----------GONCALVES
D ARC
CD_
NR_RAMAL DT_ADM
NR_CARGO NR_GIT I DT_NASC
--- ---------- ---------- -------- ------ - -------E21
5698 05/05/96
54
16 M 17/05/66
D01
0 23/11/01
18 F 01/01/01
3.46) Crie uma funo que receba como parmetro uma Index-By Table e retorne os dados da Index-By Table em
ordem crescente.
Listagem-resposta 3.46A
SQL> CREATE OR REPLACE PACKAGE PGLOBAL IS
2
TYPE TTAB IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3 END;
4 /
Pacote criado.
SQL> CREATE OR REPLACE
CAPTULO 3 PL/SQL
2 PROCEDURE PORDENA (LISTA IN OUT NOCOPY PGLOBAL.TTAB) IS
3
ANT
NUMBER;
4
TROCA
BOOLEAN := TRUE;
5 BEGIN
6
WHILE TROCA LOOP
7
TROCA := FALSE;
8
FOR I IN 1..LISTA.COUNT() - 1 LOOP
9
IF LISTA(I) > LISTA(I+1) THEN
10
ANT := LISTA(I);
11
LISTA(I) := LISTA(I+1);
12
LISTA(I+1) := ANT;
13
TROCA := TRUE;
14
END IF;
15
END LOOP;
16
END LOOP;
17 END;
18 /
Procedimento criado.
SQL> DECLARE
2
LISTA
PGLOBAL.TTAB;
3
TEXTO
VARCHAR2(200) := '&LISTA'||',';
4
POS
NUMBER := 0;
5
I
NUMBER:= 0;
6 BEGIN
7
:MSG := '';
8
POS := INSTR(TEXTO, ',');
9
WHILE POS > 0 LOOP
10
I := I + 1;
11
LISTA(I) := SUBSTR(TEXTO, 1, POS - 1);
12
TEXTO := LTRIM(SUBSTR(TEXTO, POS + 1));
13
POS := INSTR(TEXTO, ',');
14
END LOOP;
15
PORDENA(LISTA);
16
FOR I IN 1..LISTA.COUNT() LOOP
17
:MSG := :MSG || ' ' || LISTA(I);
18
END LOOP;
19 END;
20 /
Entre o valor para lista: 5, 8, 10, 12, 13, 2, 5, 1, 6, 7, 9, 20
Procedimento PL/SQL concludo com sucesso.
MSG
--------------------------1 2 5 5 6 7 8 9 10 12 13 20
Na Listagem-resposta 3.46A, estamos apresentando o programa de ordenao e um outro programa que se utiliza
da rotina de ordenao.
3.47) Faa uma rotina que receba como parmetro um nmero de cargo e determine o nome do funcionrio mais
velho com aquele cargo. Se no houver ningum, o programa deve abortar com o erro Oracle correspondente.
Faa um programa que acione o programa anterior, e de acordo com seu resultado mostre o nome do funcionrio
ou a mensagem Nenhum funcionrio para o cargo Informado.
Listagem-resposta 3.47A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE
FUNCTION PCARGO(CARGO IN NUMBER) RETURN VARCHAR2 IS
CURSOR C1
IS SELECT NM_FUNC || ' ' || NM_SOBRENOME NOME
FROM FUNC
WHERE NR_CARGO = CARGO
ORDER BY DT_NASC DESC NULLS LAST;
BEGIN
FOR R1 IN C1 LOOP
RETURN R1.NOME;
END LOOP;
RAISE_APPLICATION_ERROR(-20001, 'Cargo Invlido');
END;
/
Funo criada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
489
3.48) Crie um programa para gravar informaes na tabela criada na Listagem-resposta 3.48A.
Listagem-resposta 3.48A
SQL> CREATE TABLE RESULTADO
2 (COD
NUMBER,
3
QTD
NUMBER);
Tabela criada.
Criar uma funo ou procedure interna ao programa que receba como parmetro o cdigo do departamento e
retorne a quantidade de funcionrios que trabalham neste departamento.
Criar uma funo ou procedure que receba como parmetro um cdigo de departamento e transforme-o em
numrico (use Translate).
Listagem-resposta 3.48B
SQL> CREATE OR REPLACE PROCEDURE CRIA IS
2
CURSOR C1
IS SELECT CD_DEPTO FROM DEPTO;
3
CODIGO
NUMBER;
4
QTD
NUMBER;
5
FUNCTION QDEPTO(COD IN VARCHAR2) RETURN NUMBER IS
6
QTD
NUMBER;
7
BEGIN
8
SELECT COUNT(*) INTO QTD
9
FROM FUNC
10
WHERE CD_DEPTO = COD;
11
RETURN QTD;
12
END;
13
FUNCTION CONVERTE(COD IN VARCHAR2) RETURN NUMBER IS
14
NCOD
NUMBER;
15
BEGIN
16
NCOD := TRANSLATE(UPPER(COD), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
17
'12345678901234567890123456');
18
RETURN NCOD;
19
END;
20 BEGIN
21
FOR R1 IN C1 LOOP
22
CODIGO
:= CONVERTE(R1.CD_DEPTO);
23
QTD
:= QDEPTO(R1.CD_DEPTO);
24
INSERT INTO RESULTADO
25
VALUES(CODIGO, QTD);
26
END LOOP;
27 END;
28 /
Procedimento criado.
SQL> EXECUTE CRIA;
Procedimento PL/SQL concludo com sucesso.
CAPTULO 3 PL/SQL
SQL> SELECT * FROM RESULTADO;
COD
QTD
---------- ---------100
3
201
1
301
3
401
1
411
9
421
6
501
1
511
5
521
4
601
0
602
0
11 linhas selecionadas.
3.49) Crie uma funo no banco de dados que calcule o n-simo elemento de uma srie de Fibonacci. Utilize recursividade.
Listagem-resposta 3.49A
SQL> CREATE OR REPLACE
2 FUNCTION FIBO(I IN NUMBER) RETURN NUMBER IS
3
VALOR
NUMBER;
4 BEGIN
5
IF I = 1 THEN
6
RETURN 1;
7
ELSIF I = 2 THEN
8
RETURN 1;
9
ELSE
10
VALOR := FIBO(I - 1) + FIBO(I - 2);
11
RETURN VALOR;
12
END IF;
13 END;
14 /
Funo criada.
SQL> EXECUTE :MSG := FIBO(10);
Procedimento PL/SQL concludo com sucesso.
MSG
--------------------------55
A primeira funo recebe como parmetro um cdigo de cargo e calcula o nmero de funcionrios com aquele
cargo. Caso a quantidade de funcionrios seja mpar, deve ser acionada a outra funo.
A segunda funo recebe como parmetro um cargo. Se o nmero for mpar, deve retornar a quantidade de
funcionrios do sexo feminino com o cargo informado. Se o nmero for par, deve retornar a quantidade de
funcionrios do departamento D11 com aquele cargo. Neste caso tambm deve ser acionada a primeira funo.
O programa principal deve acionar a primeira funo ou a segunda de acordo com o parmetro opo:
Listagem-resposta 3.50A
SQL> CREATE OR REPLACE
2 PROCEDURE TFORWARD (CARGO IN OUT NOCOPY NUMBER, OPCAO IN NUMBER := 9) IS
3
VLOOP
NUMBER := 0;
4
VALOR
NUMBER ;
5
FUNCTION F2(CARGO IN NUMBER) RETURN NUMBER;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
491
3.51) Faa um programa que receba uma data no formato DDMMYYYY e verifique se uma data vlida. Havendo
erro, aborte com a mensagem adequada.
Faa um programa que acione o anterior e retorne a mensagem associada ao erro sem abortar.
Listagem-resposta 3.51A
SQL>
2
3
4
5
6
7
8
CREATE OR REPLACE
FUNCTION CDATA(DATA IN VARCHAR2) RETURN BOOLEAN IS
VDATA
DATE;
BEGIN
VDATA := TO_DATE(DATA, 'DDMMYYYY');
RETURN TRUE;
END;
/
Funo criada.
CAPTULO 3 PL/SQL
SQL> DECLARE
2
DATA
VARCHAR2(100) := '&DATA';
3 BEGIN
4
IF CDATA(DATA) THEN
5
:MSG := 'A DATA '|| DATA || ' VLIDA';
6
END IF;
7 EXCEPTION
8 WHEN OTHERS THEN
9
:MSG := SQLCODE || ' # ' || SQLERRM(SQLCODE) || ' # '||
10
' DATA '|| DATA || ' INVLIDA';
11 END;
12 /
Entre o valor para data: AAKLDGHAAKADH
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------------------------------------------1858 # ORA-01858: foi localizado um caractere no-numrico onde se esperava um
numrico # DATA AAKLDGHAAKADH INVLIDA
3.52) Crie um pacote que tenha uma rotina que receba como parmetro:
A) Um numrico e retorne um alfanumrico com o valor editado para o formato monetrio brasileiro e smbolo
financeiro R$.
B) Um alfanumrico e retorne um alfanumrico com o texto apresentado de trs para a frente.
C) Uma data e retorne um alfanumrico com as seguintes caractersticas: dia da semana, dia no ano, ms por
extenso, ms em algarismos romanos, ano por extenso e ano ISO.
Use Overloading.
Listagem-resposta 3.52A
SQL> CREATE OR REPLACE PACKAGE ROTINAS IS
2
FUNCTION TROCA(VALOR IN NUMBER) RETURN VARCHAR2;
3
FUNCTION TROCA(TEXTO IN VARCHAR2) RETURN VARCHAR2;
4
FUNCTION TROCA(DATA IN DATE) RETURN VARCHAR2;
5 END ROTINAS;
6 /
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY ROTINAS IS
2
FUNCTION TROCA(VALOR IN NUMBER) RETURN VARCHAR2 IS
3
BEGIN
4
RETURN TO_CHAR(VALOR, 'L999G990D00',
5
'NLS_NUMERIC_CHARACTERS=,., NLS_CURRENCY=R$');
6
END;
7
FUNCTION TROCA(TEXTO IN VARCHAR2) RETURN VARCHAR2 IS
8
NTEXTO
VARCHAR2(300) := '';
9
BEGIN
10
FOR I IN REVERSE 1..LENGTH(TEXTO) LOOP
11
NTEXTO := NTEXTO || SUBSTR(TEXTO,I,1);
12
END LOOP;
13
RETURN NTEXTO;
14
END;
15
FUNCTION TROCA(DATA IN DATE) RETURN VARCHAR2 IS
16
BEGIN
17
RETURN TO_CHAR(DATA, 'D # DDD # MONTH # RM # YEAR # IYYY');
18
END;
19 END ROTINAS;
20 /
Corpo de Pacote criado.
SQL> BEGIN
2
:MSG := ROTINAS.TROCA(12459.88)||CHR(10);
3
:MSG := :MSG || ROTINAS.TROCA('ABCDEF')||CHR(10);
4
:MSG := :MSG || ROTINAS.TROCA(TO_DATE('01041989', 'DDMMYYYY'));
5 END;
6 /
Procedimento PL/SQL concludo com sucesso.
MSG
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
493
Listagem-resposta 3.53A
SQL> CREATE OR REPLACE PACKAGE PROMOVE AUTHID CURRENT_USER IS
2
FUNCTION AVALIA (MAT IN NUMBER) RETURN VARCHAR2;
3 END PROMOVE;
4 /
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY PROMOVE IS
2
FUNCTION ATUALIZA(MAT IN NUMBER) RETURN NUMBER IS
3
SAL
NUMBER;
4
CARGO
NUMBER;
5
DEP
VARCHAR2(3);
6
BEGIN
7
UPDATE DESENV.FUNC SET VL_SAL = VL_SAL * 1.10
8
WHERE CD_MAT = MAT
9
RETURNING VL_SAL, NR_CARGO, CD_DEPTO
10
INTO SAL, CARGO, DEP;
11
INSERT INTO DESENV.HST_PROMO
12
(DT_PROMOCAO, CD_MAT, VL_SAL,
13
CD_DEPTO, NR_CARGO, TX_MOTIVO)
14
VALUES(SYSDATE, MAT, SAL, DEP, CARGO,
15
'Promoo por Tempo Servio');
16
RETURN SAL;
17
END;
18
FUNCTION AVALIA (MAT IN NUMBER) RETURN VARCHAR2 IS
19
SAL
NUMBER;
20
BEGIN
21
SELECT 0 INTO SAL
22
FROM DESENV.FUNC
23
WHERE CD_MAT = MAT
24
AND (SYSDATE - DT_ADM) > 3652.5
25
AND VL_SAL < 2500;
26
BEGIN
27
SELECT 0 INTO SAL
28
FROM DESENV.HST_PROMO
29
WHERE (SYSDATE - DT_PROMOCAO) < 365.25
30
AND CD_MAT = MAT;
31
RETURN 'Promovido a menos de 1 ano';
32
EXCEPTION
33
WHEN NO_DATA_FOUND THEN
34
RETURN 'O novo salrio '|| ATUALIZA(MAT);
35
END;
36
EXCEPTION
37
WHEN NO_DATA_FOUND THEN
38
RETURN 'Funcionrio no est em condies de ser promovido';
39
END;
40 END PROMOVE;
41 /
Corpo de Pacote criado.
Neste primeiro passo, criamos o pacote Promove e disponibilizamos apenas a rotina Avalia para uso dos usurios.
Definimos para todo o pacote que a autorizao de execuo seria a do usurio executor.
Para garantir que as leituras e atualizaes se processariam nas tabelas do usurio Desenv, todas foram qualificadas
com o nome do usurio.
CAPTULO 3 PL/SQL
A tempo de atualizao, obtivemos os dados do funcionrio atualizado a fim de preencher as informaes em
Hst_Promo, para que no fosse necessria uma leitura ou a passagem de parmetros entre os programas.
Listagem-resposta 3.53B
SQL> GRANT EXECUTE ON PROMOVE TO DAVI;
Operao de Grant bem-sucedida.
SQL> GRANT SELECT, UPDATE ON FUNC TO DAVI;
Operao de Grant bem-sucedida.
SQL> GRANT SELECT, INSERT ON HST_PROMO TO DAVI;
Operao de Grant bem-sucedida.
SQL> CONNECT DAVI/DAVI@DESENV
Conectado.
SQL> VARIABLE MSG VARCHAR2(300)
SQL> EXECUTE :MSG := DESENV.PROMOVE.AVALIA(170);
Procedimento PL/SQL concludo com sucesso.
MSG
-------------------------------------------------Funcionrio no est em condies de ser promovido
Aps a criao do pacote, precisamos autorizar seu uso para os usurios necessrios. Uma vez que a atualizao se
processar diretamente nos dados de Desenv, devemos autorizar tambm a atualizao das duas tabelas envolvidas.
Em seguida, estabelecemos conexo no usurio Davi e executamos a rotina.
3.54) Crie uma funo em um pacote que receba um texto e retorne o mesmo texto com todas as letras maisculas.
Essa funo deve ser testada em um comando Update para atualizao dos nomes e sobrenomes dos funcionrios.
Listagem-resposta 3.54A
SQL> CREATE OR REPLACE PACKAGE CONV IS
2
FUNCTION NOME(VALOR IN VARCHAR2) RETURN VARCHAR2;
3
PRAGMA RESTRICT_REFERENCES(NOME, WNDS);
4 END;
5 /
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY CONV IS
2
FUNCTION NOME(VALOR IN VARCHAR2) RETURN VARCHAR2 IS
3
BEGIN
4
RETURN UPPER(VALOR);
5
END;
6 END;
7 /
Corpo de Pacote criado.
SQL> UPDATE FUNC SET NM_FUNC = CONV.NOME(NM_FUNC),
2
NM_SOBRENOME = CONV.NOME(NM_SOBRENOME);
33 linhas atualizadas.
3.55) Crie um pacote que declare uma varivel Date, uma varivel Varchar2(100) e uma varivel Number.
Em uma mesma sesso do SQL*Plus:
A) D valor inicial para as trs variveis do pacote.
B) Execute as trs funes do Exerccio 3.52 passando como parmetro as variveis do pacote.
C) Apresente o valor das trs variveis.
Listagem-resposta 3.55A
SQL> CREATE OR REPLACE PACKAGE VALORES IS
2
DATA
DATE;
3
TEXTO
VARCHAR2(100);
4
NUMERO
NUMBER;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
495
Listagem-resposta 3.56A
SQL> CREATE OR REPLACE PACKAGE DATAS IS
2
FUNCTION IDATA(DATAI IN DATE, DATAF IN DATE) RETURN NUMBER;
3 END;
4 /
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY DATAS IS
2
FUNCTION IDATA(DATAI IN DATE, DATAF IN DATE) RETURN NUMBER IS
3
BEGIN
4
RETURN TRUNC((DATAF - DATAI) / 365.25);
5
END;
6 END;
7 /
Corpo de Pacote criado.
SQL> SELECT DATAS.IDATA(DT_NASC, DT_ADM) Idade Adm,
2
DATAS.IDATA(DT_NASC, SYSDATE) Idade Hoje,
3
CD_MAT, NM_FUNC
4
FROM FUNC
5
WHERE ROWNUM < 7
6 /
Idade Adm Idade Hoje
----- --- ----- ---41
48
25
33
33
40
33
46
CD_MAT
-----10
20
30
50
NM_FUNC
------CRISTINA
MIGUEL
SANDRA
JOAO
CAPTULO 3 PL/SQL
38
46
27
38
6 linhas selecionadas.
60 IRACY
70 EVA
Na Listagem-resposta 3.56A criamos o pacote, juntamente com a rotina Idata, e executamos a rotina em um
comando Select. Observe que no precisamos usar a pragma Restrict_References.
3.57) Crie um pacote que declare as seguintes variveis:
Listagem-resposta 3.57A
SQL> CREATE OR REPLACE PACKAGE DEFINE IS
2
TYPE TABVC
IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
3
TYPE VARDT
IS TABLE OF DATE INDEX BY BINARY_INTEGER;
4
TYPE REG1
IS RECORD (DATA DATE,
5
CODIGO NUMBER,
6
TEXTO VARCHAR2(100));
7
TYPE TABREG
IS TABLE OF REG1 INDEX BY BINARY_INTEGER;
8
TYPE REG2
IS RECORD (CODIGO NUMBER,
9
VALOR NUMBER);
10
TYPE VARREG
IS TABLE OF REG2 INDEX BY BINARY_INTEGER;
11
TYPE TBFUNC
IS TABLE OF FUNC%ROWTYPE INDEX BY BINARY_INTEGER;
12
TYPE TBDEPTO
IS TABLE OF DEPTO%ROWTYPE INDEX BY BINARY_INTEGER;
13
CURSOR C1
(DEP IN VARCHAR2, CARGO IN NUMBER)
14
RETURN FUNC%ROWTYPE;
15
CURSOR C2
(GERENTE IN NUMBER)
16
RETURN DEPTO%ROWTYPE;
17 END;
18 /
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY DEFINE IS
2
CURSOR C1
(DEP IN VARCHAR2, CARGO IN NUMBER)
3
RETURN FUNC%ROWTYPE
4
IS SELECT * FROM FUNC
5
WHERE CD_DEPTO = DEP
6
AND NR_CARGO = CARGO;
7
CURSOR C2
(GERENTE IN NUMBER)
8
RETURN DEPTO%ROWTYPE
9
IS SELECT * FROM DEPTO
10
WHERE CD_GERENTE = GERENTE;
11 END;
12 /
Corpo de Pacote criado.
3.58) Crie um programa que receba como parmetro um cdigo de departamento e um nmero de cargo e separe os
dados da tabela Func em trs grupos para utilizao como parmetro por trs outros programas da seguinte forma:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
497
Listagem-resposta 3.58A
SQL> CREATE OR REPLACE
2 PROCEDURE TESTE (PDEP IN VARCHAR2, PCARGO IN NUMBER) IS
3
VARDATA
DEFINE.VARDT;
4
TABRECORD
DEFINE.TABREG;
5
VARNUM
DEFINE.VARREG;
6
I
NUMBER := 0;
7 BEGIN
8
FOR R1 IN DEFINE.C1(PDEP, PCARGO) LOOP
9
I := I + 1;
10
VARDATA(I) := R1.DT_ADM;
11
TABRECORD(I).DATA := R1.DT_NASC;
12
TABRECORD(I).CODIGO := R1.CD_MAT;
13
TABRECORD(I).TEXTO := R1.NM_FUNC||' '||R1.NM_SOBRENOME;
14
VARNUM(I).CODIGO := R1.NR_CARGO;
15
VARNUM(I).VALOR := R1.VL_SAL;
16
END LOOP;
17
--ROT1(VARDATA);
18
--ROT2(TABRECORD);
19
--ROT3(VARNUM);
20 END;
21 /
Procedimento criado.
Listagem-resposta 3.60A
SQL> SET SERVEROUT ON
SQL> SET VERIFY OFF
SQL> SET NEWPAGE 0
SQL> BREAK ON ROW SKIP PAGE
SQL> DEFINE MES = 3
SQL> SPOOL SAIDA.SQL
SQL> DECLARE
2
MES
NUMBER := '&MES';
3 BEGIN
4
FOR R1 IN (SELECT NM_FUNC, DT_NASC FROM FUNC
5
WHERE TO_NUMBER(TO_CHAR(DT_NASC, 'MM')) = MES) LOOP
6
DBMS_OUTPUT.PUT_LINE('Sr(a). '||R1.NM_FUNC||
7
' parabns pelo seu aniversrio dia '||
8
TO_CHAR(R1.DT_NASC, 'DD/MM') || '.');
9
DBMS_OUTPUT.PUT_LINE(CHR(10)||CHR(10));
10
DBMS_OUTPUT.PUT_LINE('
Muitas Felicidades !');
11
DBMS_OUTPUT.PUT_LINE(CHR(10)||CHR(10)||CHR(10));
12
END LOOP;
13 END;
14 /
Sr(a). JOANA parabns pelo seu aniversrio dia 19/03.
Muitas Felicidades !
Sr(a). SALVADOR parabns pelo seu aniversrio dia 31/03.
Muitas Felicidades !
Sr(a). ELINE parabns pelo seu aniversrio dia 28/03.
Muitas Felicidades !
CAPTULO 3 PL/SQL
3.61) Usando o pacote DBMS_OUTPUT, gere um arquivo contendo o nome, data de nascimento e salrio dos
funcionrios. Alinhe os dados por coluna.
Listagem-resposta 3.61A
SQL> DECLARE
2
CURSOR C1 IS SELECT NM_FUNC, NM_SOBRENOME, DT_NASC, VL_SAL
3
FROM FUNC;
4 BEGIN
5
FOR R1 IN C1 LOOP
6
DBMS_OUTPUT.PUT(RPAD(LTRIM(RTRIM(R1.NM_FUNC))||' '||
7
LTRIM(RTRIM(R1.NM_SOBRENOME)), 25));
8
DBMS_OUTPUT.PUT(TO_CHAR(R1.DT_NASC, 'DDMMYYYY')||' ');
9
DBMS_OUTPUT.PUT_LINE(LPAD(TO_CHAR(R1.VL_SAL, 'L999G999D99',
10
'NLS_CURRENCY=R$'), 12));
11
END LOOP;
12 END;
13 /
CRISTINA HENDERSON
14081953
R$5.802,50
MIGUEL TEIXEIRA
02021968
R$4.537,50
SANDRA KWAN
11051961
R$4.207,50
3.62) Faa uma rotina que usa a DBMS_OUTPUT para colocar no buffer o nome dos aniversariantes do ms (recebido
como parmetro).
Listagem-resposta 3.62A
SQL> CREATE OR REPLACE
2 PROCEDURE ANI(MES IN NUMBER) IS
3 BEGIN
4
FOR R1 IN (SELECT NM_FUNC FROM FUNC
5
WHERE TO_NUMBER(TO_CHAR(DT_NASC, 'MM'))=MES) LOOP
6
DBMS_OUTPUT.PUT_LINE(LTRIM(RTRIM(R1.NM_FUNC)));
7
END LOOP;
8 END ANI;
9 /
Procedimento criado.
3.63) Faa um programa que leia a rea de buffer do programa anterior e verifique se o funcionrio cujo nome ser
fornecido como parmetro aniversariante. Informe o resultado em uma varivel Bind.
Listagem-resposta 3.63A
SQL> DECLARE
2
LINHAS
DBMS_OUTPUT.CHARARR;
3
STATUS
NUMBER := 0;
4
I
NUMBER := 0;
5
NOME
VARCHAR2(100) := UPPER('&NOME');
6 BEGIN
7
ANI(5);
8
:MSG := NOME || ' no faz aniversrio';
9
WHILE STATUS = 0 LOOP
10
I := I + 1;
11
DBMS_OUTPUT.GET_LINE(LINHAS(I), STATUS);
12
END LOOP;
13
FOR J IN 1..I LOOP
14
IF NOME = LINHAS(J) THEN
15
:MSG := NOME || ' aniversariante';
16
EXIT;
17
END IF;
18
END LOOP;
19 END;
20 /
Entre o valor para nome: DILSON
Procedimento PL/SQL concludo com sucesso.
MSG
----------------------DILSON aniversariante
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
499
Listagem-resposta 3.64A
SQL> SET SERVEROUT ON
SQL> SPOOL PROMPT.SQL
SQL> DECLARE
2
TEXTO
VARCHAR2(100);
3 BEGIN
4
SELECT LTRIM(RTRIM(USER))||'_'||USERENV('LANG')
5
INTO TEXTO FROM DUAL;
6
DBMS_OUTPUT.PUT_LINE('SET SQLPROMPT '||''||TEXTO||'> ');
7 END;
8 /
SET SQLPROMPT DESENV_PTB>
Procedimento PL/SQL concludo com sucesso.
SQL> SPOOL OFF
SQL> SET TERM OFF
SQL> @PROMPT.SQL
DESENV_PTB>
Para que o script seja executado todas as vezes que o SQL*Plus for acionado gere-o com o nome de Login.SQL em
vez de Prompt.SQL.
3.65) Gere uma rea de buffer com o seguinte layout: nome, sobrenome, data de nascimento (formato dd/mm/
yyyy), sexo e salrio.
Os dados devem ser separados pelo smbolo #.
Caso uma determinada coluna no tenha valor (Null), deve ser substitudo por ** para colunas alfanumricas e
-1 para colunas numricas.
Use DBMS_OUTPUT para gerar o buffer.
Listagem-resposta 3.65A
SQL> CREATE OR REPLACE PROCEDURE GRAVA IS
2 BEGIN
3
FOR R1 IN (SELECT NVL(NM_FUNC, '**') NM_FUNC,
4
NVL(NM_SOBRENOME, '**') NM_SOBRENOME,
5
NVL(TO_CHAR(DT_NASC, 'DD/MM/YYYY'), '**') DT_NASC,
6
NVL(IN_SEXO, '**') IN_SEXO,
7
NVL(LTRIM(TO_CHAR(VL_SAL, 'L999G999G999D99',
8
'NLS_CURRENCY=R$')), '-1') VL_SAL
9
FROM FUNC) LOOP
10
DBMS_OUTPUT.PUT(R1.NM_FUNC||'#'||R1.NM_SOBRENOME||'#');
11
DBMS_OUTPUT.PUT_LINE(R1.DT_NASC||'#'||R1.IN_SEXO||'#'||R1.VL_SAL);
12
END LOOP;
13 END;
14 /
Procedimento criado.
SQL> EXECUTE GRAVA;
CRISTINA#HENDERSON#14/08/1953#F#R$5.802,50
MIGUEL#TEIXEIRA#02/02/1968#M#R$4.537,50
SANDRA#KWAN#11/05/1961#F#R$4.207,50
JOAO#GOMES#15/09/1955#M#R$4.419,25
IRACY#SOUZA#07/07/1955#F#R$3.547,50
3.66) Faa um programa que leia o buffer gerado pelo programa anterior e crie novas linhas na tabela Func. O
nmero da matrcula deve ser gerado a partir do ltimo armazenado em Func.
Listagem-resposta 3.66A
SQL> DECLARE
2
LINHA
3
TYPE TAB
VARCHAR2(255);
IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
CAPTULO 3 PL/SQL
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
STATUS
NUMBER := 0;
POS
NUMBER := 0;
MAT
NUMBER;
TEXTO
TAB;
BEGIN
SELECT NVL(MAX(CD_MAT),0) + 1 INTO MAT
FROM FUNC;
GRAVA;
LOOP
DBMS_OUTPUT.GET_LINE(LINHA,STATUS);
IF STATUS = 0 THEN
POS := INSTR(LINHA, '#');
WHILE POS > 0 LOOP
STATUS
:= STATUS + 1;
TEXTO(STATUS) := SUBSTR(LINHA,1,POS - 1);
LINHA
:= SUBSTR(LINHA, POS + 1);
POS
:= INSTR(LINHA, '#');
END LOOP;
STATUS
:= STATUS + 1;
TEXTO(STATUS) := LINHA;
ELSE
EXIT;
END IF;
FOR I IN 1..5 LOOP
IF TEXTO(I) = '**' OR TEXTO(I) = '-1' THEN
TEXTO(I) := NULL;
END IF;
END LOOP;
INSERT INTO FUNC(CD_MAT, NM_FUNC, NM_SOBRENOME, DT_NASC,
IN_SEXO, VL_SAL)
VALUES(MAT, TEXTO(1), TEXTO(2), TO_DATE(TEXTO(3), 'DD/MM/YYYY'),
TEXTO(4), TO_NUMBER(TEXTO(5), 'L999G999D99', 'NLS_CURRENCY=R$'));
MAT := MAT + 1;
END LOOP;
END;
/
NM_FUNC
-----------SILVIO
DOLORES
HELENA
BRUNO
ELIZABET
GABRIEL
NM_SOBRENOME
-----------OLIVA
QUEIROZ
NOVAES
AZEVEDO
PINTO
YVES
DT_NASC
-------18/10/62
15/09/55
19/01/56
17/05/67
12/04/65
05/01/71
I
VL_SAL
- ---------M
3217,5
F
2618
F
3126,2
M
2780,8
F
2447,5
M
2714,8
3.67) Faa um programa que gere um arquivo contendo as seguintes colunas da tabela de funcionrios: cd_mat,
nm_func, nm_sobrenome, dt_nasc, vl_sal.
Listagem-resposta 3.67A
SQL> DECLARE
2
ARQ
UTL_FILE.FILE_TYPE;
3 BEGIN
4
ARQ := UTL_FILE.FOPEN('D:\TESTE', 'R67.TXT', 'A');
5
FOR R1 IN (SELECT CD_MAT,
6
NVL(NM_FUNC, '*') NM_FUNC,
7
NVL(NM_SOBRENOME, '*') NM_SOBRENOME,
8
NVL(VL_SAL, -1) VL_SAL,
9
NVL(TO_CHAR(DT_NASC, 'DD/MM/YYYY'), '
10
FROM FUNC) LOOP
11
UTL_FILE.PUT(ARQ, LPAD(R1.CD_MAT, 5));
12
UTL_FILE.PUT(ARQ, RPAD(R1.NM_FUNC, 12));
13
UTL_FILE.PUT(ARQ, RPAD(R1.NM_SOBRENOME, 12));
14
UTL_FILE.PUT(ARQ, LPAD(R1.VL_SAL, 14));
15
UTL_FILE.PUT(ARQ, R1.DT_NASC);
16
UTL_FILE.NEW_LINE(ARQ, 1);
17
END LOOP;
') DT_NASC
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
501
Listagem-resposta 3.67B
60IRACY
70EVA
90ELIANE
100TEODORO
110VICENTE
SOUZA
PEREIRA
HONOFRE
SIQUEIRA
LOURENCO
3547,507/07/1955
3978,726/05/1963
3272,515/05/1971
2876,518/12/1966
511505/11/1969
3.68) Faa um programa que leia um arquivo e realize a carga na tabela de funcionrios, completando os dados de
acordo com as seguintes especificaes: Data de admisso (ser igual data do cadastramento), Ramal (fixo igual a
1354), salrio (fixo igual a 1.000,00) e cargo (fixo igual a 55).
O layout do arquivo de entrada o seguinte:
Colunas 1 a 12 (nome), colunas 13 a 24 (sobrenome), colunas 25 a 32 (data de nascimento no formato ddmmyyyy),
colunas 33 a 34 (grau de instruo) e coluna 35 (sexo).
Listagem-resposta 3.68A
SQL> DECLARE
2
ARQ
UTL_FILE.FILE_TYPE;
3
RFUNC
FUNC%ROWTYPE;
4
LINHA
VARCHAR2(100);
5
MAT
NUMBER;
6 BEGIN
7
ARQ := UTL_FILE.FOPEN('D:\TESTE', 'ENTRADA.SQL', 'R');
8
SELECT NVL(MAX(CD_MAT), 0) + 1 INTO MAT
9
FROM FUNC;
10
LOOP
11
UTL_FILE.GET_LINE(ARQ, LINHA);
12
RFUNC.NM_FUNC
:= UPPER(RTRIM(LTRIM(SUBSTR(LINHA,1,12))));
13
RFUNC.NM_SOBRENOME := UPPER(RTRIM(LTRIM(SUBSTR(LINHA,13,12))));
14
RFUNC.DT_NASC
:= TO_DATE(SUBSTR(LINHA,25,6), 'DDMMYY');
15
RFUNC.NR_GIT
:= SUBSTR(LINHA,33,2);
16
RFUNC.IN_SEXO
:= UPPER(SUBSTR(LINHA,35,1));
17
INSERT INTO FUNC
18
(CD_MAT, NM_FUNC, NM_SOBRENOME, DT_NASC, NR_GIT,
19
IN_SEXO, DT_ADM, NR_RAMAL, NR_CARGO, VL_SAL)
20
VALUES
21
(MAT, RFUNC.NM_FUNC, RFUNC.NM_SOBRENOME, RFUNC.DT_NASC,
22
RFUNC.NR_GIT, RFUNC.IN_SEXO, SYSDATE, 1354, 55, 1000);
23
MAT := MAT + 1;
24
END LOOP;
25 EXCEPTION
26 WHEN NO_DATA_FOUND THEN
27
UTL_FILE.FCLOSE(ARQ);
28
COMMIT;
29 END;
30 /
Procedimento PL/SQL concludo com sucesso.
SQL> SELECT CD_MAT, NM_FUNC, NM_SOBRENOME, NR_RAMAL, DT_ADM, NR_CARGO
2
FROM FUNC WHERE CD_MAT > 372;
CD_MAT
---------375
376
377
378
379
380
381
NM_FUNC
-----------JOO
PEDRO
MRIO
ADRIANA
CLUDIA
MRCIA
FBIO
NM_SOBRENOME
NR_RAMAL DT_ADM
NR_CARGO
------------ ---------- ---------- -------ALCNTARA
1354 24/11/01
55
DE SOUZA
1354 24/11/01
55
AZEVEDO
1354 24/11/01
55
MAGALHES
1354 24/11/01
55
FOUNTOURA
1354 24/11/01
55
ALENCAR
1354 24/11/01
55
MARINHO
1354 24/11/01
55
CAPTULO 3 PL/SQL
3.69) Gere um arquivo a partir da tabela Func com as seguintes informaes: nome, sobrenome, data de nascimento
(formato dd/mm/yyyy), sexo e salrio.
Os dados devem ser separados pelo smbolo # (no deve haver alinhamento de colunas).
Caso uma determinada coluna esteja sem valor (Null), deve ser feita substituio por: ** para as colunas
alfanumricas e -1 para as colunas numricas.
Use o pacote UTL_FILE para gerar o arquivo.
Listagem-resposta 3.69A
SQL> DECLARE
2
ARQ
UTL_FILE.FILE_TYPE;
3
CURSOR C1
IS SELECT NVL(NM_FUNC, '**')
4
||'#'||NVL(NM_SOBRENOME, '**')
5
||'#'||NVL(IN_SEXO, '**')
6
||'#'||NVL(TO_CHAR(DT_NASC, 'DDMMYYYY'), '**')
7
||'#'||NVL(VL_SAL,'-1') TEXTO
8
FROM FUNC;
9 BEGIN
10
ARQ := UTL_FILE.FOPEN('D:\TESTE', 'R69.TXT', 'A');
11
FOR R1 IN C1 LOOP
12
UTL_FILE.PUT_LINE(ARQ, R1.TEXTO);
13
END LOOP;
14
UTL_FILE.FFLUSH(ARQ);
15
UTL_FILE.FCLOSE(ARQ);
16 END;
17 /
Procedimento PL/SQL concludo com sucesso.
3.70) Leia o arquivo gerado pelo exerccio anterior e crie novas linhas na tabela Func. O nmero da matrcula deve
ser gerado com o uso de um Sequence de valor inicial 400.
Use o pacote UTL_FILE para ler o arquivo.
Listagem-resposta 3.70A
SQL> CREATE SEQUENCE SEQMAT START WITH 400;
Seqncia criada.
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DECLARE
TYPE TAB IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
LINHA
VARCHAR2(100);
ARQ
UTL_FILE.FILE_TYPE;
I
NUMBER := 0;
POS
NUMBER := 0;
TF
TAB;
BEGIN
ARQ := UTL_FILE.FOPEN('D:\TESTE', 'R69.TXT', 'R');
LOOP
UTL_FILE.GET_LINE(ARQ, LINHA);
POS := INSTR(LINHA, '#');
I := 0;
WHILE POS > 0 LOOP
I
:= I + 1;
TF(I) := SUBSTR(LINHA,1,POS - 1);
LINHA := SUBSTR(LINHA, POS + 1);
POS
:= INSTR(LINHA, '#');
END LOOP;
I
:= I + 1;
TF(I)
:= LINHA;
FOR J IN 1..5 LOOP
IF TF(I) = '**' OR TF(I) = '-1' THEN
TF(I) := NULL;
END IF;
END LOOP;
INSERT INTO FUNC(CD_MAT, NM_FUNC, NM_SOBRENOME, IN_SEXO, DT_NASC, VL_SAL)
VALUES(SEQMAT.NEXTVAL,TF(1), TF(2), TF(3), TO_DATE(TF(4), 'DD/MM/YYYY'),TF(5));
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
503
3.71) Faa uma rotina que envie mensagem para um Pipe pblico de nome Publico. Pode-se enviar dados
numricos, alfanumricos ou datas.
Listagem-resposta 3.71A
SQL> CREATE OR REPLACE
2
PROCEDURE ENVIA
3
PROCEDURE ENVIA
4
PROCEDURE ENVIA
5 END;
6 /
PACKAGE PIPE IS
(TEXTO IN VARCHAR2);
(TEXTO IN NUMBER);
(TEXTO IN DATE);
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY PIPE IS
2
PROCEDURE ENVIA (TEXTO IN VARCHAR2) IS
3
RETORNO
PLS_INTEGER;
4
PRIVILEGIO
EXCEPTION;
5
PRAGMA
EXCEPTION_INIT(PRIVILEGIO, -23322);
6
BEGIN
7
DBMS_PIPE.PACK_MESSAGE(TEXTO);
8
RETORNO := DBMS_PIPE.SEND_MESSAGE('PUBLICO', 10);
9
IF RETORNO = 0 THEN
10
DBMS_OUTPUT.PUT_LINE('TEXTO ENVIADO AO PIPE PBLICO');
11
ELSE
12
DBMS_OUTPUT.PUT_LINE('ERRO NO ENVIO DE TEXTO AO PIPE PBLICO');
13
END IF;
14
EXCEPTION
15
WHEN PRIVILEGIO THEN
16
DBMS_OUTPUT.PUT_LINE('NO POSSUI PRIVILGIO PARA ACESSO AO PIPE PBLICO');
17
END;
18
PROCEDURE ENVIA (TEXTO IN NUMBER) IS
19
RETORNO
PLS_INTEGER;
20
PRIVILEGIO
EXCEPTION;
21
PRAGMA
EXCEPTION_INIT(PRIVILEGIO, -23322);
22
BEGIN
23
DBMS_PIPE.PACK_MESSAGE(TEXTO);
24
RETORNO := DBMS_PIPE.SEND_MESSAGE('PUBLICO', 10);
25
IF RETORNO = 0 THEN
26
DBMS_OUTPUT.PUT_LINE('NMERO ENVIADO AO PIPE PBLICO');
27
ELSE
28
DBMS_OUTPUT.PUT_LINE('ERRO NO ENVIO DE NMERO AO PIPE PBLICO');
29
END IF;
30
EXCEPTION
31
WHEN PRIVILEGIO THEN
32
DBMS_OUTPUT.PUT_LINE('NO POSSUI PRIVILGIO PARA ACESSO AO PIPE PBLICO');
33
END;
34
PROCEDURE ENVIA (TEXTO IN DATE) IS
35
RETORNO
PLS_INTEGER;
36
PRIVILEGIO
EXCEPTION;
37
PRAGMA
EXCEPTION_INIT(PRIVILEGIO, -23322);
38
BEGIN
39
DBMS_PIPE.PACK_MESSAGE(TEXTO);
40
RETORNO := DBMS_PIPE.SEND_MESSAGE('PUBLICO', 10);
41
IF RETORNO = 0 THEN
42
DBMS_OUTPUT.PUT_LINE('DATA ENVIADO AO PIPE PBLICO');
43
ELSE
44
DBMS_OUTPUT.PUT_LINE('ERRO NO ENVIO DE DATA AO PIPE PBLICO');
45
END IF;
46
EXCEPTION
47
WHEN PRIVILEGIO THEN
48
DBMS_OUTPUT.PUT_LINE('NO POSSUI PRIVILGIO PARA ACESSO AO PIPE PBLICO');
49
END;
50 END PIPE;
51 /
Corpo de Pacote criado.
CAPTULO 3 PL/SQL
Foram criadas trs rotinas Envia dentro do pacote PIPE: uma para enviar dados alfanumricos, outra para envio de
dados numricos e a ltima para datas.
3.72) Faa uma rotina que envie mensagem para um Pipe privativo de nome Interno. Pode-se enviar dados
numricos, alfanumricos ou datas.
Listagem-resposta 3.72A
SQL> CREATE OR REPLACE PACKAGE LPIPE IS
2
PROCEDURE CRIA_PIPE;
3
PROCEDURE ENVIA (TEXTO IN VARCHAR2);
4 END;
5 /
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY LPIPE IS
2
PROCEDURE CRIA_PIPE IS
3
RETORNO
PLS_INTEGER;
4
BEGIN
5
RETORNO := DBMS_PIPE.CREATE_PIPE('INTERNO', 8192, TRUE);
6
IF RETORNO = 0 THEN
7
DBMS_OUTPUT.PUT_LINE('PIPE INTERNO CRIADO');
8
ELSE
9
DBMS_OUTPUT.PUT_LINE('ERRO NA CRIAO DO PIPE INTERNO');
10
END IF;
11
END;
12
PROCEDURE ENVIA(TEXTO IN VARCHAR2) IS
13
RETORNO
PLS_INTEGER;
14
PRIVILEGIO
EXCEPTION;
15
PRAGMA
EXCEPTION_INIT(PRIVILEGIO, -23322);
16
BEGIN
17
DBMS_PIPE.PACK_MESSAGE(TEXTO);
18
RETORNO := DBMS_PIPE.SEND_MESSAGE('INTERNO', 10);
19
IF RETORNO = 0 THEN
20
DBMS_OUTPUT.PUT_LINE('TEXTO ENVIADO AO PIPE INTERNO');
21
ELSE
22
DBMS_OUTPUT.PUT_LINE('ERRO NO ENVIO DE TEXTO AO PIPE INTERNO');
23
END IF;
24
EXCEPTION
25
WHEN PRIVILEGIO THEN
26
DBMS_OUTPUT.PUT_LINE('NO POSSUI PRIVILGIO PARA ACESSO AO PIPE INTERNO');
27
END;
28 END;
29 /
Corpo de Pacote criado.
O pacote LPIPE similar ao anterior, com a diferena da existncia de uma rotina chamada Cria_Pipe que faz a criao
do Pipe Interno, de acesso exclusivo do usurio Desenv. Apresentamos apenas uma das rotinas Envia, neste caso.
3.73) Faa uma rotina que receba dados de um Pipe informado como parmetro. Se no for informado o nome do
Pipe, faa a leitura do Pipe pblico.
Listagem-resposta 3.73A
SQL> CREATE OR REPLACE PROCEDURE RECEBE (PIPE IN VARCHAR2 := 'PUBLICO') IS
2
TEXTO
VARCHAR2(100);
3
NUMERO
NUMBER;
4
DATA
DATE;
5
RETORNO
PLS_INTEGER;
6
TIPO
PLS_INTEGER := 0;
7
PRIVILEGIO
EXCEPTION;
8
PRAGMA
EXCEPTION_INIT(PRIVILEGIO, -23322);
9 BEGIN
10
LOOP
11
RETORNO := DBMS_PIPE.RECEIVE_MESSAGE(PIPE, 4);
12
IF RETORNO = 0 THEN
13
TIPO := DBMS_PIPE.NEXT_ITEM_TYPE;
14
WHILE TIPO <> 0 LOOP
15
IF TIPO = 6 THEN
16
DBMS_PIPE.UNPACK_MESSAGE(NUMERO);
17
DBMS_OUTPUT.PUT_LINE('NUMERO = '||NUMERO);
18
ELSIF TIPO = 9 THEN
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
505
Listagem-resposta 3.75A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DECLARE
CURSOR C1
BLOCO
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
FOR R1 IN C1 LOOP
IF R1.BLOCO <> BLOCO THEN
DBMS_OUTPUT.PUT_LINE(CHR(10));
DBMS_OUTPUT.PUT_LINE('BLOCO LINHA MATR NOME
SALARIO');
DBMS_OUTPUT.PUT_LINE(CHR(10));
END IF;
BLOCO := R1.BLOCO;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(R1.BLOCO, '00009')||
TO_CHAR(R1.LINHA, '999999')||
TO_CHAR(R1.CD_MAT, '00099')||' '||
RPAD(R1.NM_FUNC, 12)||LPAD(R1.VL_SAL, 10));
END LOOP;
END;
/
BLOCO
00050
00050
00050
SALARIO
5802,5
4537,5
4207,5
3.76) Suponhamos que regularmente recebssemos para atualizao o seguinte arquivo de layout:
CAPTULO 3 PL/SQL
Informao
Coluna
Operao
1-1
Rowid (verso 7)
3-20
Nome
22-33
Sobrenome
35-46
Salrio
48-59
Listagem-resposta 3.76A
SQL> DECLARE
2
ARQ
UTL_FILE.FILE_TYPE;
3
ROW9
ROWID;
4
RF
FUNC%ROWTYPE;
5
BUFFER
VARCHAR2(100);
6
OPE
VARCHAR2(1);
7 BEGIN
8
ARQ := UTL_FILE.FOPEN('D:\TESTE', 'ROW.SQL', 'R');
9
LOOP
10
UTL_FILE.GET_LINE(ARQ, BUFFER);
11
OPE
:= SUBSTR(BUFFER,1,1);
12
ROW9
:= DBMS_ROWID.ROWID_TO_EXTENDED(SUBSTR(BUFFER,3,18),
13
'DESENV', 'FUNC', 1);
14
RF.NM_FUNC
:= LTRIM(RTRIM(SUBSTR(BUFFER,22,12)));
15
RF.NM_SOBRENOME := LTRIM(RTRIM(SUBSTR(BUFFER,35,12)));
16
RF.VL_SAL
:= TO_NUMBER(SUBSTR(BUFFER,48,12));
17
IF OPE = 'A' THEN
18
UPDATE FUNC
19
SET NM_FUNC
= RF.NM_FUNC,
20
NM_SOBRENOME = RF.NM_SOBRENOME,
21
VL_SAL
= RF.VL_SAL
22
WHERE ROWID = ROW9;
23
ELSIF OPE = 'E' THEN
24
DELETE FROM FUNC WHERE ROWID = ROW9;
25
END IF;
26
END LOOP;
27 EXCEPTION
28 WHEN NO_DATA_FOUND THEN
29
COMMIT;
30
UTL_FILE.FCLOSE(ARQ);
31 END;
32 /
Procedimento PL/SQL concludo com sucesso.
3.77) Gere uma massa de dados para atender ao exerccio anterior. Obtenha os dados da prpria tabela Func. No
inclua na massa os gerentes de departamento e os responsveis por projeto.
Na massa devem estar presentes, pelo menos, trs alteraes e duas excluses.
Listagem-resposta 3.77A
SQL> DECLARE
2
CURSOR C1
IS SELECT 'A' OPER,
3
DBMS_ROWID.ROWID_TO_RESTRICTED(ROWID, 0) ROW7,
4
NM_FUNC, NM_SOBRENOME, VL_SAL
5
FROM FUNC
6
WHERE CD_MAT NOT IN (SELECT CD_GERENTE FROM DEPTO
7
WHERE CD_GERENTE IS NOT NULL)
8
AND CD_MAT NOT IN (SELECT DISTINCT CD_RESP FROM PROJ
9
WHERE CD_RESP IS NOT NULL);
10 BEGIN
11
FOR R1 IN C1 LOOP
12
DBMS_OUTPUT.PUT(R1.OPER);
13
DBMS_OUTPUT.PUT(R1.ROW7);
14
DBMS_OUTPUT.PUT(RPAD(R1.NM_FUNC,12));
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
507
Para desenvolvimentos dos exerccios deste tpico crie as tabelas Tlob_E e Func_Lob. Preencha a tabela Func_Lob
a partir das tabelas Func e Depto. Use o script R03_00.SQL.
Id
C_Blob
S_Blob
C_BFile
S_BFile
C_Clob
S_Clob
Number(03)
Blob
Number
BFile
Number
Clob
Number
Nome_Func
Nome_Depto
Mat
Clob
Clob
Number (PK)
CLOB,
CLOB,
NUMBER PRIMARY KEY);
3.78) Faa um bloco de PL/SQL que receba como parmetro uma matrcula e um texto. Adicione o texto ao fim do
nome do funcionrio. Use Dbms_Lob.Write (tabela Func_Lob).
Listagem-resposta 3.78A
SQL> CREATE OR REPLACE
2 PROCEDURE ANEXA(PMAT IN NUMBER, PTEXTO IN VARCHAR2) IS
3
CURSOR C1
IS SELECT NOME_FUNC, NOME_DEPTO FROM FUNC_LOB
4
WHERE MAT = PMAT FOR UPDATE;
5 BEGIN
6
FOR R1 IN C1 LOOP
7
DBMS_LOB.WRITE(R1.NOME_FUNC, LENGTH(PTEXTO),
8
DBMS_LOB.GETLENGTH(R1.NOME_FUNC) + 1, PTEXTO);
9
END LOOP;
10 END;
11 /
Procedimento criado.
SQL> EXECUTE ANEXA(10, ' TEXTO INCLUDO AO FIM DO NOME DO FUNCIONRIO');
Procedimento PL/SQL concludo com sucesso.
CAPTULO 3 PL/SQL
SQL> SELECT NOME_FUNC FROM FUNC_LOB
2
WHERE MAT = 10;
NOME_FUNC
---------------------------------------------------------------CRISTIANA HENDERSON TEXTO INCLUDO AO FIM DO NOME DO FUNCIONRIO
3.79) Faa um bloco de PL/SQL que apresente o nome do funcionrio e o nome do departamento em que ele
trabalha. O programa recebe como parmetro a matrcula do funcionrio. Use Dbms_Lob.Read (tabela Func_lob).
Listagem-resposta 3.79A
SQL> CREATE OR REPLACE
2 PROCEDURE LISTA(PMAT IN NUMBER) IS
3
CURSOR C1
IS SELECT NOME_FUNC, NOME_DEPTO FROM FUNC_LOB
4
WHERE MAT = PMAT;
5
W_NM_DEPTO
VARCHAR2(1000);
6
W_NM_FUNC
VARCHAR2(1000);
7
TAM
NUMBER := 1000;
8 BEGIN
9
FOR R1 IN C1 LOOP
10
DBMS_LOB.READ(R1.NOME_FUNC, TAM, 1, W_NM_FUNC);
11
TAM := 1000;
12
DBMS_LOB.READ(R1.NOME_DEPTO, TAM, 1, W_NM_DEPTO);
13
DBMS_OUTPUT.PUT_LINE('Nome do funcionrio -> '|| W_NM_FUNC);
14
DBMS_OUTPUT.PUT_LINE('Nome do departamento -> '|| W_NM_DEPTO);
15
END LOOP;
16 END;
17 /
Procedimento criado.
SQL> EXECUTE LISTA(20);
Nome do funcionrio -> MIGUEL F. TEIXEIRA
Nome do departamento -> ASSESSORIA
Procedimento PL/SQL concludo com sucesso.
3.80) Faa um bloco de PL/SQL que receba como parmetro uma letra e uma matrcula. Verifique quantas vezes a
letra recebida existe em Nome_Depto. Use Dbms_Lob.Instr (tabela Func_Lob).
Listagem-resposta 3.80A
SQL> CREATE OR REPLACE
2 PROCEDURE LETRA(PMAT IN NUMBER, PLETRA IN VARCHAR2) IS
3
CURSOR C1
IS SELECT NOME_FUNC, NOME_DEPTO FROM FUNC_LOB
4
WHERE MAT = PMAT FOR UPDATE;
5
POS
NUMBER := 1;
6
QTD
NUMBER := 0;
7 BEGIN
8
FOR R1 IN C1 LOOP
9
POS := DBMS_LOB.INSTR(R1.NOME_DEPTO, PLETRA, 1);
10
WHILE POS > 0 LOOP
11
QTD := QTD + 1;
12
POS := DBMS_LOB.INSTR(R1.NOME_DEPTO, PLETRA, POS + 1);
13
END LOOP;
14
DBMS_OUTPUT.PUT_LINE('A QUANTIDADE DE LETRAS '||PLETRA||' '||QTD);
15
END LOOP;
16 END;
17 /
Procedimento criado.
SQL> EXECUTE LETRA(10, 'A');
A QUANTIDADE DE LETRAS A 3
Procedimento PL/SQL concludo com sucesso.
SQL> SELECT NOME_DEPTO FROM FUNC_LOB
2
WHERE MAT = 10;
NOME_DEPTO
-------------------DIRETORIA DA EMPRESA
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
509
Listagem-resposta 3.81A
SQL> CREATE OR REPLACE
2 PROCEDURE CARGA_ARQ(ID IN NUMBER, ARQUIVO IN VARCHAR2) IS
3
CURSOR C1
IS SELECT C_BLOB, C_BFILE, S_BLOB,
4
S_BFILE, C_ID
5
FROM TLOB_E
6
WHERE C_ID = ID FOR UPDATE;
7
EXISTE
BOOLEAN := FALSE;
8
C_BLOB
BLOB;
9 BEGIN
10
FOR R1 IN C1 LOOP
11
EXISTE := TRUE;
12
R1.C_BFILE := BFILENAME('WINDOWS', ARQUIVO);
13
R1.S_BFILE := DBMS_LOB.GETLENGTH(R1.C_BFILE);
14
DBMS_LOB.FILEOPEN(R1.C_BFILE);
15
DBMS_LOB.LOADFROMFILE(R1.C_BLOB, R1.C_BFILE, R1.S_BFILE);
16
R1.S_BLOB := DBMS_LOB.GETLENGTH(R1.C_BLOB);
17
UPDATE TLOB_E
18
SET S_BLOB
= R1.S_BLOB,
19
S_BFILE = R1.S_BFILE
20
WHERE C_ID
= ID;
21
DBMS_LOB.FILECLOSE(R1.C_BFILE);
22
END LOOP;
23
IF NOT EXISTE THEN
24
INSERT INTO TLOB_E (C_BLOB, C_BFILE, S_BLOB, S_BFILE, C_ID)
25
VALUES (EMPTY_BLOB(), BFILENAME('WINDOWS',ARQUIVO), 0, 0, ID);
26
FOR R1 IN C1 LOOP
27
DBMS_LOB.FILEOPEN(R1.C_BFILE);
28
DBMS_LOB.LOADFROMFILE(R1.C_BLOB, R1.C_BFILE,
29
DBMS_LOB.GETLENGTH(R1.C_BFILE));
30
UPDATE TLOB_E
31
SET S_BLOB = DBMS_LOB.GETLENGTH(C_BLOB),
32
S_BFILE= DBMS_LOB.GETLENGTH(C_BFILE)
33
WHERE C_ID = ID;
34
DBMS_LOB.FILECLOSE(R1.C_BFILE);
35
END LOOP;
36
END IF;
37 END;
38 /
Procedimento criado.
SQL> CREATE OR REPLACE DIRECTORY WINDOWS AS 'C:\WINDOWS';
Diretrio criado.
SQL> EXECUTE CARGA_ARQ(1, 'ONDAS.BMP');
Procedimento PL/SQL concludo com sucesso.
3.82) Faa um programa que receba como parmetro um texto e um ID e atualize o Clob do ID correspondente.
No deve ser feita substituio, somente adio permitida. Recalcule o tamanho do objeto.
Listagem-resposta 3.82A
SQL> CREATE OR REPLACE
2 PROCEDURE CARGA_TXT(ID IN NUMBER, TEXTO IN VARCHAR2) IS
3
CURSOR C1
IS SELECT C_CLOB, ROWID
4
FROM TLOB_E
5
WHERE C_ID = ID
6
FOR UPDATE;
7
R1
C1%ROWTYPE;
8 BEGIN
9
OPEN C1;
10
FETCH C1 INTO R1;
11
IF C1%FOUND THEN
12
IF R1.C_CLOB IS NULL THEN
13
UPDATE TLOB_E
14
SET C_CLOB
= EMPTY_CLOB()
15
WHERE ROWID = R1.ROWID;
16
END IF;
CAPTULO 3 PL/SQL
17
CLOSE C1;
18
OPEN C1;
19
FETCH C1 INTO R1;
20
DBMS_LOB.WRITE(R1.C_CLOB, LENGTH(TEXTO),
21
DBMS_LOB.GETLENGTH(R1.C_CLOB) + 1, TEXTO);
22
UPDATE TLOB_E
23
SET S_CLOB = DBMS_LOB.GETLENGTH(R1.C_CLOB)
24
WHERE C_ID
= ID;
25
ELSE
26
INSERT INTO TLOB_E(C_CLOB, S_CLOB, C_ID)
27
VALUES(TEXTO, LENGTH(TEXTO), ID);
28
END IF;
29 END;
30 /
Procedimento criado.
SQL> BEGIN
2
CARGA_TXT(1,
3
CARGA_TXT(2,
4
CARGA_TXT(3,
5 END;
6 /
Procedimento PL/SQL
3.83) Faa um programa que pesquise um texto em um Clob ou pesquise um trecho binrio em um Blob. Determine:
A) A quantidade de elementos encontrados.
B) Para os textos, os dez primeiros bytes aps o texto e a posio inicial.
C) Para os binrios, a posio encontrada.
Listagem-resposta 3.83A
SQL> CREATE OR REPLACE PACKAGE PROCURA IS
2
FUNCTION PRO_TEXTO(TEXTO IN VARCHAR2, LOB IN CLOB) RETURN VARCHAR2;
3
PRAGMA RESTRICT_REFERENCES(PRO_TEXTO, WNDS);
4
FUNCTION PRO_BLOB(BINARIO IN RAW, LOB IN BLOB) RETURN VARCHAR2;
5
PRAGMA RESTRICT_REFERENCES(PRO_BLOB, WNDS);
6 END PROCURA;
7 /
Pacote criado.
SQL> CREATE OR REPLACE PACKAGE BODY PROCURA IS
2
FUNCTION PRO_TEXTO(TEXTO IN VARCHAR2, LOB IN CLOB) RETURN VARCHAR2 IS
3
INFO
VARCHAR2(20);
4
POS
NUMBER
:= DBMS_LOB.INSTR(LOB, TEXTO);
5
LISTA
VARCHAR2(200) := '';
6
VEZ
NUMBER
:= 2;
7
BEGIN
8
INFO := DBMS_LOB.SUBSTR(LOB, 10, POS);
9
WHILE POS > 0 LOOP
10
LISTA := LISTA || POS || ';';
11
POS
:= DBMS_LOB.INSTR(LOB, TEXTO, 1, VEZ);
12
VEZ
:= VEZ + 1;
13
END LOOP;
14
RETURN INFO || '>' || LISTA;
15
END PRO_TEXTO;
16
FUNCTION PRO_BLOB(BINARIO IN RAW, LOB IN BLOB) RETURN VARCHAR2 IS
17
POS
NUMBER
:= DBMS_LOB.INSTR(LOB, BINARIO);
18
LISTA
VARCHAR2(200) := '';
19
VEZ
NUMBER
:= 2;
20
BEGIN
21
WHILE POS > 0 LOOP
22
LISTA := LISTA || POS || ';';
23
POS
:= DBMS_LOB.INSTR(LOB,BINARIO,1,VEZ);
24
VEZ
:= VEZ + 1;
25
END LOOP;
26
RETURN '>' || LISTA;
27
END;
28 END;
29 /
Corpo de Pacote criado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
511
3.84) Faa um programa que copie o Clob de uma linha para outra da tabela Tlob_E. Os parmetros so: ID da
origem, ID do destino e posio inicial da origem.
Listagem-resposta 3.84A
SQL> CREATE OR REPLACE
2 PROCEDURE COPIA(ID_ORIGEM IN NUMBER, ID_DESTINO IN NUMBER, INICIO IN NUMBER) IS
3
LOB_ORIGEM
CLOB;
4
LOB_DESTINO
CLOB;
5
QTD
NUMBER := DBMS_LOB.LOBMAXSIZE;
6 BEGIN
7
SELECT C_CLOB INTO LOB_ORIGEM
8
FROM TLOB_E
9
WHERE C_ID = ID_ORIGEM
10
FOR UPDATE;
11
SELECT C_CLOB INTO LOB_DESTINO
12
FROM TLOB_E
13
WHERE C_ID = ID_DESTINO
14
FOR UPDATE;
15
DBMS_LOB.ERASE(LOB_DESTINO, QTD,INICIO);
16
DBMS_LOB.APPEND(LOB_DESTINO, LOB_ORIGEM);
17
UPDATE TLOB_E
18
SET S_CLOB = DBMS_LOB.GETLENGTH(C_CLOB)
19
WHERE C_ID
= ID_DESTINO;
20
COMMIT;
21 END;
22 /
Procedimento criado.
3.85) Suponhamos que desejssemos salvar os fontes dos programas dentro do banco de dados. Os fontes podem
ser texto ou arquivos binrios, com as extenses: Txt, Fmb (binrio), Mmb (binrio). Faa um programa que receba
como parmetro o diretrio, o nome do arquivo (sem a extenso) e seu tipo (corresponde extenso do arquivo)
e carregue-o para a coluna Blob ou para a coluna Clob, dependendo do tipo do arquivo.
Utilize as tabelas apresentadas na Listagem-resposta 3.85A.
Listagem-resposta 3.85A
SQL> CREATE TABLE COFRE
2 (FONTE
3
FBIN
4
FTEXTO
Tabela criada.
Listagem-resposta 3.85B
SQL> CREATE OR REPLACE
2 PROCEDURE SALVA(DIR IN VARCHAR2,
3
ARQUIVO IN VARCHAR2,
4
TIPO IN VARCHAR2 := 'FMB') IS
5
CURSOR C1
IS SELECT * FROM COFRE
6
WHERE FONTE = ARQUIVO||'.'||TIPO;
7
ARQ
BFILE;
8
R1
C1%ROWTYPE;
9 BEGIN
10
SELECT DUMMY_BFILE INTO ARQ FROM LOB_DUAL;
11
ARQ := BFILENAME(DIR, ARQUIVO||'.'||TIPO);
12
OPEN C1;
13
FETCH C1 INTO R1;
14
IF C1%NOTFOUND THEN
CAPTULO 3 PL/SQL
15
INSERT INTO COFRE (FONTE, FBIN, FTEXTO)
16
VALUES (ARQUIVO||'.'||TIPO, EMPTY_BLOB(), EMPTY_CLOB());
17
END IF;
18
CLOSE C1;
19
DBMS_LOB.FILEOPEN(ARQ);
20
FOR R1 IN C1 LOOP
21
IF TIPO IN ('FMB', 'MMB', 'PLD', 'MMX', 'FMX', 'PLL') THEN
22
DBMS_LOB.LOADFROMFILE(R1.FBIN, ARQ,
23
DBMS_LOB.GETLENGTH(ARQ));
24
ELSIF TIPO IN ('TXT', 'SQL') THEN
25
DBMS_LOB.LOADFROMFILE(R1.FTEXTO, ARQ,
26
DBMS_LOB.GETLENGTH(ARQ));
27
END IF;
28
END LOOP;
29 END;
30 /
Procedimento criado.
3.86) Obtenha todos os textos presentes na tabela Tlob, retire os brancos encontrados e concatene em um nico
campo. Apresente o tamanho do texto resultante.
Listagem-resposta 3.86A
SQL> DECLARE
2
LOB_TEMP
CLOB;
3
LOB_TOTAL
CLOB;
4
POS
NUMBER := 2000;
5
TEXTO
VARCHAR2(2000);
6
CURSOR C1
IS SELECT C_CLOB1 FROM TLOB;
7 BEGIN
8
DBMS_LOB.CREATETEMPORARY(LOB_TEMP, TRUE, DBMS_LOB.SESSION);
9
DBMS_LOB.CREATETEMPORARY(LOB_TOTAL, TRUE, DBMS_LOB.SESSION);
10
FOR R1 IN C1 LOOP
11
IF R1.C_CLOB1 IS NOT NULL THEN
12
POS := DBMS_LOB.GETLENGTH(R1.C_CLOB1);
13
LOB_TEMP := R1.C_CLOB1;
14
WHILE POS > 2000 LOOP
15
TEXTO := DBMS_LOB.SUBSTR(LOB_TEMP, 2000, 1);
16
TEXTO := REPLACE(TEXTO,' ');
17
DBMS_LOB.WRITEAPPEND(LOB_TOTAL, LENGTH(TEXTO), TEXTO);
18
DBMS_LOB.COPY(LOB_TEMP, LOB_TEMP, POS - 2000,2000,1);
19
END LOOP;
20
TEXTO := DBMS_LOB.SUBSTR(LOB_TEMP, POS, 1);
21
TEXTO := REPLACE(TEXTO,' ');
22
DBMS_LOB.WRITEAPPEND(LOB_TOTAL, LENGTH(TEXTO), TEXTO);
23
END IF;
24
END LOOP;
25
POS := DBMS_LOB.GETLENGTH(LOB_TOTAL);
26
DBMS_OUTPUT.PUT_LINE('TAMANHO TOTAL '||POS);
27
DBMS_LOB.FREETEMPORARY(LOB_TOTAL);
28
LOB_TEMP := LOB_TOTAL;
29 END;
30 /
TAMANHO TOTAL 454
Procedimento PL/SQL concludo com sucesso.
Para que pudssemos realizar as especificaes, criamos dois Lobs temporrios para manuseio dos dados. Um
chama-se Lob_Temp, que seria recortado para realizar a transferncia dos pedaos da informao para uma varivel
Varchar2. O outro Lob (chamado Lob_Total) utilizado como acumulador para armazenamento dos pedaos de
informao j trabalhados.
Ao trmino do programa, os dois Lobs so liberados. No ocorre atualizao na informao original da tabela.
3.87) Faa uma rotina que, aleatoriamente, escolha 3 funcionrios para premiao de Natal da empresa.
Listagem-resposta 3.87A
SQL> DECLARE
2
NUMP
3
MAT
4
CALC
5
TYPE TPREM
NUMBER;
NUMBER;
NUMBER;
IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
513
3.88) Sabendo-se que uma roleta contm 25 nmeros vermelhos (mpares) e 25 nmeros pretos (pares). Determine
o nmero ganhador e se ele vermelho ou preto.
Listagem-resposta 3.88A
SQL> DECLARE
2
NUMP
NUMBER;
3
CALC
NUMBER;
4 BEGIN
5
CALC := EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) +
6
EXTRACT(SECOND FROM CURRENT_TIMESTAMP);
7
DBMS_RANDOM.INITIALIZE(CALC);
8
NUMP := MOD(ABS(DBMS_RANDOM.RANDOM), 51);
9
IF MOD(NUMP,2) = 0 THEN
10
:MSG := 'O ganhador '||NUMP||' preto';
11
ELSE
12
:MSG := 'O ganhador '||NUMP||' vermelho';
13
END IF;
14 END;
15 /
Procedimento PL/SQL concludo com sucesso.
MSG
--------------------O ganhador 46 preto
3.89) Faa uma rotina que coloque no SQL*Prompt, a cada vez que o usurio quiser ou quando este abrir o SQL*Plus
o ltimo SCN.
Listagem-resposta 3.89A
SQL>
SQL>
SQL>
2
3
4
5
SET SERVEROUT ON
SPOOL SCN.SQL
DECLARE
TEXTO
VARCHAR2(100);
WSCN
NUMBER;
BEGIN
WSCN := DBMS_FLASHBACK.Get_System_Change_Number;
CAPTULO 3 PL/SQL
6
DBMS_OUTPUT.PUT_LINE('SET SQLPROMPT '||'SCN '||WSCN||'> ');
7 END;
8 /
SET SQLPROMPT SCN 736605>
Procedimento PL/SQL concludo com sucesso.
SQL> SPOOL OFF
SQL> SET TERM OFF
SQL> @SCN.SQL
SCN 736605>
Se voc desejar que este valor seja apresentado imediatamente aps o usurio abrir o SQL*Plus, inclua a chamada
a este programa no arquivo GLOGIN.SQL. Isto afetar todos os usurios simultaneamente.
3.90) Faa uma rotina que a partir de um SCN recebido como parmetro gere um arquivo com as diferenas
encontradas, na tabela de Funcionrios, entre a verso na data do SCN e a atual.
Listagem-resposta 3.90A
SCN 736605> DELETE FROM FUNC WHERE CD_MAT = 403;
1 linha deletada.
SCN 736605> INSERT INTO FUNC (CD_MAT, NM_FUNC, VL_SAL) VALUES (5, 'Jorgete', 3000);
1 linha criada.
SCN 736605> UPDATE FUNC SET VL_SAL = 4000 WHERE CD_MAT = 120;
1 linha atualizada.
SQL>
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
SET SERVEROUTPUT ON
DECLARE
CURSOR CHOJE
IS SELECT CD_MAT, NM_FUNC, VL_SAL FROM FUNC
ORDER BY CD_MAT;
CURSOR CPAST
IS SELECT CD_MAT, NM_FUNC, VL_SAL FROM FUNC
ORDER BY CD_MAT;
RHOJE
CHOJE%ROWTYPE;
RPAST
CPAST%ROWTYPE;
BEGIN
DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(&PSCN);
OPEN CPAST;
DBMS_FLASHBACK.DISABLE;
OPEN CHOJE;
FETCH CPAST INTO RPAST;
FETCH CHOJE INTO RHOJE;
LOOP
CASE
WHEN RPAST.CD_MAT < RHOJE.CD_MAT THEN
DBMS_OUTPUT.PUT_LINE('O funcionrio '||RPAST.NM_FUNC||
' matrcula '||RPAST.CD_MAT||' foi removido');
FETCH CPAST INTO RPAST;
IF CPAST%NOTFOUND THEN
RPAST.CD_MAT := 99999;
END IF;
WHEN RPAST.CD_MAT > RHOJE.CD_MAT THEN
DBMS_OUTPUT.PUT_LINE('O funcionrio '||RHOJE.NM_FUNC||
' matrcula '||RHOJE.CD_MAT||' foi includo');
FETCH CHOJE INTO RHOJE;
IF CHOJE%NOTFOUND THEN
RHOJE.CD_MAT := 99999;
END IF;
WHEN RPAST.CD_MAT = RHOJE.CD_MAT THEN
IF RPAST.VL_SAL <> RHOJE.VL_SAL THEN
DBMS_OUTPUT.PUT_LINE('O funcionrio '||RHOJE.NM_FUNC||
' matrcula '||RHOJE.CD_MAT||' sofreu modificaes no salrio:'||
' valor antigo = '||RPAST.VL_SAL|| ' valor atual = '||RHOJE.VL_SAL);
END IF;
FETCH CHOJE INTO RHOJE;
FETCH CPAST INTO RPAST;
END CASE;
IF CHOJE%NOTFOUND AND CPAST%NOTFOUND THEN
EXIT;
END IF;
END LOOP;
END;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
515
3.91) Crie uma stored procedure que faa a atualizao dos salrios dos funcionrios de acordo com os parmetros:
cargo e percentual.
Se o funcionrio for lder de projeto (cd_resp da tabela Proj), deve ser feito um acrscimo de 3% ao percentual
fornecido. Se o funcionrio for gerente de departamento (cd_gerente da tabela Depto), deve ser feita uma adio
de 4% ao percentual acumulado.
Listagem-resposta 3.91A
SQL> CREATE OR REPLACE
2 PROCEDURE ATUALIZA(CARGO IN NUMBER, PERC IN NUMBER) IS
3
PCT
NUMBER;
4
CURSOR C1
IS SELECT CD_MAT, VL_SAL, CD_GERENTE
5
FROM FUNC, DEPTO
6
WHERE NR_CARGO
= CARGO
7
AND FUNC.CD_DEPTO = DEPTO.CD_DEPTO(+)
8
AND CD_MAT
= CD_GERENTE(+)
9
FOR UPDATE OF VL_SAL;
10
RESP
NUMBER;
11 BEGIN
12
FOR R1 IN C1 LOOP
13
PCT := PERC;
14
BEGIN
15
SELECT DISTINCT CD_RESP INTO RESP
16
FROM PROJ
17
WHERE CD_RESP = R1.CD_MAT;
18
PCT := PCT + 3;
19
EXCEPTION
20
WHEN NO_DATA_FOUND THEN
21
NULL;
22
END;
23
IF R1.CD_GERENTE IS NOT NULL THEN
24
PCT := PCT + 4;
25
END IF;
26
UPDATE FUNC
27
SET VL_SAL = VL_SAL + (VL_SAL * PCT)/100
28
WHERE CURRENT OF C1;
29
END LOOP;
30 END;
31 /
Procedimento criado.
Aps a criao da rotina, consulte a tabela User_Source. Qual o nvel de visibilidade do cdigo?
Listagem-resposta 3.91B
SQL> SET LINESIZE 100
SQL> COL TEXT FOR A72
SQL> SELECT LINE, TEXT FROM USER_SOURCE
2
WHERE NAME = 'ATUALIZA'
3
AND LINE <= 5;
LINE TEXT
---------- ------------------------------------------------------1 PROCEDURE ATUALIZA(CARGO IN NUMBER, PERC IN NUMBER) IS
2
PCT
NUMBER;
3
CURSOR C1
IS SELECT CD_MAT, VL_SAL, CD_GERENTE
4
FROM FUNC, DEPTO
5
WHERE NR_CARGO
= CARGO
Autorize o uso desta rotina por outro usurio do seu banco, por exemplo, Scott (password Tiger). Estabelea conexo
como Scott e consulte a tabela All_Source. Qual o nvel de visibilidade do cdigo?
CAPTULO 3 PL/SQL
Listagem-resposta 3.91C
SQL> GRANT EXECUTE ON ATUALIZA TO SCOTT;
Operao de Grant bem-sucedida.
SQL> CONNECT SCOTT/TIGER
Conectado.
SQL> SELECT LINE, TEXT FROM ALL_SOURCE
2
WHERE NAME = 'ATUALIZA'
3
AND LINE <= 5;
LINE TEXT
---------- ------------------------------------------------------1 PROCEDURE ATUALIZA(CARGO IN NUMBER, PERC IN NUMBER) IS
2
PCT
NUMBER;
3
CURSOR C1
IS SELECT CD_MAT, VL_SAL, CD_GERENTE
4
FROM FUNC, DEPTO
5
WHERE NR_CARGO
= CARGO
Figura-resposta 3.91A
Listagem-resposta 3.91D
SQL> CONNECT DESENV/DESENV
Conectado.
SQL> @atualiza.plb
Procedimento criado.
Listagem-resposta 3.91E
SQL> SELECT LINE, TEXT FROM USER_SOURCE
2
WHERE NAME = 'ATUALIZA'
3
AND LINE <= 5;
LINE TEXT
---------- -------------------------1 PROCEDURE ATUALIZA wrapped
0
abcd
abcd
abcd
abcd
Listagem-resposta 3.92A
SQL> CREATE OR REPLACE PACKAGE CODIGO IS
2
BLOQUEIO NUMBER;
3
PROCEDURE ATUALIZA(CARGO IN NUMBER, PERC IN NUMBER);
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
517
Aps a criao do pacote, consulte a tabela User_Source. Qual o nvel de visibilidade do cdigo?
Listagem-resposta 3.92B
SQL> SELECT LINE, TEXT FROM USER_SOURCE
2
WHERE NAME = 'CODIGO'
3
AND LINE <= 5
4 /
LINE TEXT
---------- --------------------------------------------------------1 PACKAGE CODIGO IS
2
BLOQUEIO NUMBER;
3
PROCEDURE ATUALIZA(CARGO IN NUMBER, PERC IN NUMBER);
4 END;
1 PACKAGE BODY CODIGO IS
2
PROCEDURE ATUALIZA(CARGO IN NUMBER, PERC IN NUMBER) IS
3
PCT
NUMBER;
4
CURSOR C1
IS SELECT CD_MAT, VL_SAL, CD_GERENTE
5
FROM FUNC, DEPTO
9 linhas selecionadas.
Autorize o uso deste pacote por outro usurio do seu banco, por exemplo, Scott (password Tiger). Estabelea
conexo como Scott e consulte a tabela All_Source. Qual o nvel de visibilidade do cdigo?
Listagem-resposta 3.92C
SQL> GRANT EXECUTE ON CODIGO TO SCOTT;
Operao de Grant bem-sucedida.
SQL> CONNECT SCOTT/TIGER;
Conectado.
SQL> SELECT LINE, TEXT FROM ALL_SOURCE
2
WHERE NAME = 'CODIGO'
3
AND LINE <= 5;
CAPTULO 3 PL/SQL
LINE
---------1
2
3
4
TEXT
-----------------------------------------------------PACKAGE CODIGO IS
BLOQUEIO NUMBER;
PROCEDURE ATUALIZA(CARGO IN NUMBER, PERC IN NUMBER);
END;
Converta o fonte deste pacote usando o aplicativo Wrapper. Crie novamente a rotina no usurio Desenv.
Listagem-resposta 3.92D
SQL> CONNECT DESENV/DESENV
Conectado.
SQL> @CODIGO.PLB
Pacote criado.
Corpo de Pacote criado.
Listagem-resposta 3.92E
SQL> SELECT LINE, TEXT FROM USER_SOURCE
2
WHERE NAME = 'CODIGO'
3
AND LINE <= 5
4 /
LINE TEXT
---------- ---------------------1 PACKAGE CODIGO wrapped
0
abcd
abcd
abcd
abcd
abcd
abcd
SQL> GRANT EXECUTE ON CODIGO TO SCOTT;
Operao de Grant bem-sucedida.
SQL> CONNECT SCOTT/TIGER;
Conectado.
SQL> SELECT LINE, TEXT FROM ALL_SOURCE
2
WHERE NAME = 'CODIGO'
3
AND LINE <= 5;
LINE TEXT
---------- ---------------------1 PACKAGE CODIGO wrapped
0
abcd
abcd
abcd
abcd
abcd
abcd
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
519
Se voc tiver criado a Java Class durante os exemplos no precisa cri-la agora novamente.
3.94) Faa um programa que receba como parmetro o tipo de informao a ser apresentada:
A) Nome e sobrenome.
B) Matrcula, cargo e salrio.
C) Nome, grau de instruo e data de nascimento.
Use uma nica varivel cursor e DBMS_OUTPUT para mostrar os resultados.
Listagem-resposta 3.94A
SQL> CREATE OR REPLACE PROCEDURE DISPLAY (OPCAO IN VARCHAR2) IS
2
TYPE VCURSOR
IS REF CURSOR;
3
CLER
VCURSOR;
4
DADOS
VARCHAR2(100);
5 BEGIN
6
DBMS_OUTPUT.ENABLE(1000000);
7
IF UPPER(OPCAO) NOT IN ('A', 'B', 'C') OR
8
OPCAO IS NULL THEN
9
RAISE_APPLICATION_ERROR(-20001, 'OPO INVLIDA');
CAPTULO 3 PL/SQL
10
ELSIF OPCAO = 'A' THEN
11
OPEN CLER FOR SELECT NM_FUNC ||' '||NM_SOBRENOME
12
FROM FUNC;
13
LOOP
14
FETCH CLER INTO DADOS;
15
EXIT WHEN CLER%NOTFOUND;
16
DBMS_OUTPUT.PUT_LINE(DADOS);
17
END LOOP;
18
ELSIF OPCAO = 'B' THEN
19
OPEN CLER FOR SELECT TO_CHAR(CD_MAT, 'FM9999') ||'-'||
20
TO_CHAR(NR_CARGO, 'FM99')||'-'||
21
TO_CHAR(VL_SAL, 'FML999G990D00')
22
FROM FUNC;
23
LOOP
24
FETCH CLER INTO DADOS;
25
EXIT WHEN CLER%NOTFOUND;
26
DBMS_OUTPUT.PUT_LINE(DADOS);
27
END LOOP;
28
ELSE
29
OPEN CLER FOR SELECT NM_FUNC||'#'||TO_CHAR(DT_NASC, 'DD/MM/YYYY')
30
||'#'||TO_CHAR(NR_GIT,'FM99')
31
FROM FUNC;
32
LOOP
33
FETCH CLER INTO DADOS;
34
EXIT WHEN CLER%NOTFOUND;
35
DBMS_OUTPUT.PUT_LINE(DADOS);
36
END LOOP;
37
END IF;
38 END;
39 /
Procedimento criado.
3.95) Faa trs programas, cada um deles dever receber uma varivel cursor e abri-la para as situaes apresentadas
no Exerccio 3.94.
Listagem-resposta 3.95A
SQL> CREATE OR REPLACE
2 PROCEDURE DNOME(CLER IN OUT SYS_REFCURSOR) IS
3 BEGIN
4
OPEN CLER FOR SELECT NM_FUNC||' '||NM_SOBRENOME FROM FUNC;
5 END;
6 /
Procedimento criado.
SQL> CREATE OR REPLACE PROCEDURE DMAT(CLER IN OUT SYS_REFCURSOR) IS
2 BEGIN
3
OPEN CLER FOR SELECT TO_CHAR(CD_MAT, 'FM9999')||'-'||
4
TO_CHAR(NR_CARGO,'FM99')||'-'||
5
TO_CHAR(VL_SAL, 'FML999G990D00')
6
FROM FUNC;
7 END;
8 /
Procedimento criado.
SQL> CREATE OR REPLACE PROCEDURE DGIT(CLER IN OUT SYS_REFCURSOR) IS
2 BEGIN
3
OPEN CLER FOR SELECT NM_FUNC||'#'||TO_CHAR(DT_NASC, 'DD/MM/YYYY')
4
||'#'||TO_CHAR(NR_GIT,'FM99')
5
FROM FUNC;
6 END;
7 /
Procedimento criado.
3.96) Faa um programa que declare uma varivel cursor e, de acordo com o parmetro recebido, acione cada um
dos programas do Exerccio 3.95 e mostre as informaes selecionadas.
Listagem-resposta 3.96A
SQL> CREATE OR REPLACE PROCEDURE PROGS(OPCAO IN VARCHAR2) IS
2
CLER
SYS_REFCURSOR;
3
DADOS
VARCHAR2(100);
4 BEGIN
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
521
3.97) Faa um programa que receba como parmetro o nome da tabela, as colunas a serem criadas e a indicao de
permanncia ou no. Faa a criao do objeto no schema do usurio.
Listagem-resposta 3.97
SQL> CREATE OR REPLACE PROCEDURE CRIA_TAB (NOME IN VARCHAR2, COLUNAS IN VARCHAR2,
2
PERMANENTE IN BOOLEAN:= TRUE) IS
3
TEXTO
VARCHAR2(2000);
4 BEGIN
5
IF NOT PERMANENTE THEN
6
TEXTO := 'CREATE GLOBAL TEMPORARY TABLE ';
7
ELSE
8
TEXTO := 'CREATE TABLE ';
9
END IF;
10
TEXTO := TEXTO || NOME ||'('||COLUNAS||')';
11
IF PERMANENTE THEN
12
TEXTO := TEXTO ||' ON COMMIT PRESERVE ROWS';
13
END IF;
14
EXECUTE IMMEDIATE TEXTO;
15 END;
16 /
Procedimento criado.
SQL> EXECUTE CRIA_TAB('TABTESTE', 'NOME VARCHAR2(100), CODIGO NUMBER');
Procedimento PL/SQL concludo com sucesso.
SQL> DESC TABTESTE
Nome
Nulo?
------------------------------------------------------ -------NOME
CODIGO
Tipo
------------VARCHAR2(100)
NUMBER
Nulo?
Tipo
CAPTULO 3 PL/SQL
------------------------------------------------------ -------- ------------NOME
VARCHAR2(100)
CODIGO
NUMBER
No exerccio 3.97, criamos um procedimento bastante simples. Voc poder sofistic-lo incluindo crticas, por exemplo.
Caso voc receba algum erro de privilgio na execuo deste comando, estabelea conexo como SYS (password
default CHANGE_ON_INSTALL, se voc no alterou) e execute o comando GRANT ALL PRIVILEGES TO DESENV.
3.98) Faa um programa que receba como parmetro o nome das colunas a serem lidas da tabela Func (podem ser
informadas at trs colunas separadas por vrgula). Apresente os dados lidos.
Listagem-resposta 3.98A
SQL> CREATE OR REPLACE PROCEDURE LER_FUNC(COLUNAS IN VARCHAR2) IS
2
TEXTO
VARCHAR2(2000);
3
TYPE VC1 IS REF CURSOR;
4
A
VARCHAR2(100);
5
B
VARCHAR2(100);
6
C
VARCHAR2(100);
7
C1
VC1;
8 BEGIN
9
TEXTO := 'SELECT '||COLUNAS||' FROM FUNC';
10
OPEN C1 FOR TEXTO;
11
LOOP
12
FETCH C1 INTO A, B, C;
13
EXIT WHEN C1%NOTFOUND;
14
DBMS_OUTPUT.PUT_LINE(A||'-'||B||'-'||C);
15
END LOOP;
16 END;
17 /
Procedimento criado.
SQL> SET SERVEROUT ON
SQL> EXECUTE LER_FUNC('NM_FUNC, CD_MAT, DT_NASC');
CRISTIANA-10-14/08/53
MIGUEL F.-20-02/02/68
SANDRA G.-30-11/05/61
JOAO-50-15/09/55
IRACY-60-07/07/55
EVA-70-26/05/63
ELIANE-90-15/05/71
Este programa tambm bastante simplificado, porque a tabela Func no possui dados complexos; desta forma, a
converso para varchar2 sempre possvel. Voc poder usar sua imaginao e criar aplicativos bem mais interessantes.
3.99) Faa um trigger para controlar as modificaes feitas nos salrios dos funcionrios.
Para tal crie uma tabela de log com o seguinte layout: operao (I, E ou A), valor anterior, valor atual, matrcula,
timestamp (data + hora).
Listagem-resposta 3.99A
SQL> CREATE TABLE TLOG
2 (OPERACAO
VARCHAR2(1),
3
SAL_ANT
NUMBER,
4
SAL_ATU
NUMBER,
5
MAT
NUMBER,
6
TIMESTAMP
DATE,
7
PRIMARY KEY (MAT, OPERACAO, TIMESTAMP));
Tabela criada.
Se for feita uma incluso, apenas o valor atual deve ser preenchido. Para alterao, ambos os valores devem ser
preenchidos; para excluso, apenas o valor anterior deve ser preenchido.
Listagem-resposta 3.99B
SQL>
2
3
4
5
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
523
Determine o departamento que tiver menos funcionrios e atribua ao cdigo do departamento se este estiver Null.
Preencha a data de admisso em caso de incluso.
Altere os nomes para maisculas.
Listagem-resposta 3.100A
SQL> CREATE OR REPLACE TRIGGER MODIFICA
2 BEFORE INSERT OR UPDATE OF VL_SAL, CD_DEPTO, DT_ADM, NM_FUNC, NR_CARGO, NM_SOBRENOME
3 ON FUNC
4 FOR EACH ROW
5 DECLARE
6
CURSOR C1
IS SELECT CD_DEPTO, 0 FROM DEPTO
7
WHERE NOT EXISTS (SELECT 0 FROM FUNC
8
WHERE FUNC.CD_DEPTO = DEPTO.CD_DEPTO)
9
UNION
10
SELECT CD_DEPTO, COUNT(*) FROM FUNC
11
GROUP BY CD_DEPTO
12
ORDER BY 2;
13
R1
C1%ROWTYPE;
14 BEGIN
15
IF :NEW.CD_MAT IS NULL THEN
16
SELECT SEQMAT.NEXTVAL INTO :NEW.CD_MAT
17
FROM DUAL;
18
END IF;
19
IF :NEW.VL_SAL IS NULL THEN
20
:NEW.VL_SAL := GREATEST((:NEW.NR_CARGO - 40), 0) * 300 + 1000;
21
END IF;
22
IF :NEW.CD_DEPTO IS NULL THEN
23
OPEN C1;
24
FETCH C1 INTO R1;
25
:NEW.CD_DEPTO := R1.CD_DEPTO;
26
END IF;
27
IF INSERTING THEN
28
:NEW.DT_ADM := SYSDATE;
29
END IF;
30
:NEW.NM_FUNC
:= UPPER(:NEW.NM_FUNC);
31
:NEW.NM_SOBRENOME:= UPPER(:NEW.NM_SOBRENOME);
32 END;
33 /
Gatilho criado.
3.101) Crie um trigger que critique a incluso ou alterao de dados na tabela Func:
CAPTULO 3 PL/SQL
Se tudo estiver correto, converta o nome e sobrenome para maiscula.
Emita mensagem indicativa do erro.
Listagem-resposta 3.101A
SQL> CREATE OR REPLACE TRIGGER CRITICA
2 BEFORE INSERT OR UPDATE OF NR_RAMAL, VL_SAL, DT_NASC
3 ON FUNC
4 FOR EACH ROW
5 BEGIN
6
IF LENGTH(LTRIM(RTRIM(:NEW.NR_RAMAL))) <> 4 THEN
7
RAISE_APPLICATION_ERROR(-20001, 'RAMAL INVLIDO');
8
END IF;
9
IF UPDATING AND
10
:NEW.VL_SAL < :OLD.VL_SAL THEN
11
RAISE_APPLICATION_ERROR(-20002, 'SALRIO NO PODE SER DIMINUDO');
12
END IF;
13
IF :NEW.DT_NASC <= TO_DATE('311219492359', 'DDMMYYYYHH24MI') + 59/86400 THEN
14
RAISE_APPLICATION_ERROR(-20003, 'DATA DE NASCIMENTO INVLIDA');
15
END IF;
16
:NEW.NM_FUNC
:= UPPER(:NEW.NM_FUNC);
17
:NEW.NM_SOBRENOME:= UPPER(:NEW.NM_SOBRENOME);
18 END;
19 /
Gatilho criado.
3.102) Faa um trigger que, para cada salrio includo, alterado ou excludo em Funcionrio, atualize os valores de
salrios do departamento da tabela Depto_Acum, cujo layout :
cd_depto
vl_mdia
vl_max
vl_min
vl_total
char(03)
number
number
number
number
Listagem-resposta 3.102A
SQL> CREATE TABLE DEPTO_ACUM
2 (CD_DEPTO
CHAR(03) PRIMARY KEY,
3
VL_MEDIA
NUMBER,
4
VL_MAX
NUMBER,
5
VL_MIN
NUMBER,
6
VL_TOTAL
NUMBER);
Tabela criada.
Listagem-resposta 3.102B
SQL> CREATE OR REPLACE TRIGGER ACUMULA
2 AFTER INSERT OR DELETE OR UPDATE OF VL_SAL
3 ON FUNC
4 FOR EACH ROW
5 BEGIN
6
DELETE FROM DEPTO_ACUM
7
WHERE CD_DEPTO IN (:NEW.CD_DEPTO, :OLD.CD_DEPTO);
8 EXCEPTION
9 WHEN NO_DATA_FOUND THEN
10
NULL;
11 END;
12 /
Gatilho criado.
Foram criados dois triggers, o primeiro de linha, que ser acionada a cada linha excluda ou modificada. Quando
isso ocorrer, o trigger far a excluso das linhas relativas ao departamento afetado da tabela Depto_Acum.
Quando o comando acabar (trigger de comando), ser feito o clculo para todos os departamentos que existam em
Funcionrio e que no existam mais em Depto_Acum.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
525
Esta forma de trabalhar impede a leitura da tabela Func durante o processo de atualizao, o que causaria o erro
ORA-04091: a tabela DESENV.FUNC mutante.
3.103) Faa um programa que inclua linhas na tabela Func, recebendo como parmetro matrcula, nome e
departamento do funcionrio. Execute este programa em um comando Select.
Listagem-resposta 3.103
SQL> CREATE OR REPLACE
2 FUNCTION INCLUI(MAT IN
NUMBER, NOME IN VARCHAR2, DEP IN VARCHAR2)
3
RETURN VARCHAR2 IS
4
PRAGMA AUTONOMOUS_TRANSACTION;
5 BEGIN
6
INSERT INTO FUNC (CD_MAT, NM_FUNC, CD_DEPTO)
7
VALUES (MAT, NOME, DEP);
8
COMMIT;
9
RETURN 'INCLUSO REALIZADA COM SUCESSO';
10 EXCEPTION
11 WHEN OTHERS THEN
12
RETURN SQLERRM;
13 END;
14 /
Funo criada.
SQL> SELECT INCLUI(MAX(CD_MAT) + 1, 'NOVO', 'A00')
2
FROM FUNC
3 /
INCLUI(MAX(CD_MAT)+1,'NOVO','A00')
-----------------------------INCLUSO REALIZADA COM SUCESSO
Listagem-resposta 3.104A
SQL> CREATE OR REPLACE
2
PPROJ
3
PATIV
4
CURSOR C1
5
6
7
8
9
10
PROCEDURE GERAPRJ IS
CHAR(06);
NUMBER(3);
IS SELECT P.CD_PROJ, P.NM_PROJ, A.CD_ATIV,
A.NM_SIGLA, PJ.DT_INI, PJ.DT_FIM
FROM PROJ P, ATIV A, PRJATV PJ
WHERE PJ.CD_PROJ
= P.CD_PROJ
AND PJ.CD_ATIV
= A.CD_ATIV
AND ((PJ.CD_PROJ = PPROJ AND PJ.CD_ATIV > PATIV)
OR (PJ.CD_PROJ > PPROJ))
CAPTULO 3 PL/SQL
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
ORDER BY 1, 3;
ARQ
UTL_FILE.FILE_TYPE;
VEZ
NUMBER := 0;
BUFFER
VARCHAR2(200);
BEGIN
BEGIN
ARQ := UTL_FILE.FOPEN('D:\TESTE', 'R104.TXT', 'R');
LOOP
UTL_FILE.GET_LINE(ARQ, BUFFER);
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
VEZ
:= INSTR(BUFFER,'#', 1);
PPROJ := SUBSTR(BUFFER,1,VEZ-1);
PATIV := TO_NUMBER(SUBSTR(BUFFER,VEZ+1,INSTR(BUFFER,'#',1,2) - VEZ - 1));
VEZ
:= 0;
WHEN UTL_FILE.INVALID_OPERATION THEN
PPROJ := '
';
PATIV := 0;
END;
UTL_FILE.FCLOSE(ARQ);
ARQ := UTL_FILE.FOPEN('D:\TESTE', 'R014.TXT', 'A');
FOR R1 IN C1 LOOP
UTL_FILE.PUT(ARQ, R1.CD_PROJ||'#'||R1.CD_ATIV||'#');
UTL_FILE.PUT(ARQ, R1.NM_PROJ||'#'||R1.NM_SIGLA||'#');
UTL_FILE.PUT(ARQ, TO_CHAR(R1.DT_INI, 'DDMMYYYY')||'#');
UTL_FILE.PUT_LINE(ARQ, TO_CHAR(R1.DT_FIM, 'DDMMYYYY'));
VEZ := VEZ + 1;
IF VEZ = 8 THEN
VEZ := 0;
UTL_FILE.FFLUSH(ARQ);
END IF;
END LOOP;
UTL_FILE.FFLUSH(ARQ);
UTL_FILE.FCLOSE(ARQ);
EXCEPTION
WHEN OTHERS THEN
UTL_FILE.FFLUSH(ARQ);
UTL_FILE.FCLOSE(ARQ);
DBMS_OUTPUT.PUT_LINE(SQLERRM(SQLCODE));
END;
/
Procedimento criado.
3.105) Faa um programa que receba como parmetro um percentual de aumento para todos os funcionrios.
Deve ser garantido o reincio do programa em caso de falha e a cada oito atualizaes.
Listagem-resposta 3.105A
SQL> CREATE OR REPLACE
2 PROCEDURE ATUFUNC(PERC IN NUMBER) IS
3
MAT
NUMBER;
4
CURSOR C1
IS SELECT CD_MAT FROM FUNC
5
WHERE CD_MAT > MAT;
6
BUFFER
VARCHAR2(20);
7
CURSOR LOCK_FUNC IS SELECT CD_MAT, VL_SAL FROM FUNC
8
WHERE CD_MAT = MAT FOR UPDATE;
9
VEZ
NUMBER := 0;
10
RL
LOCK_FUNC%ROWTYPE;
11 BEGIN
12
BEGIN
13
SELECT TX_RESTART INTO BUFFER
14
FROM RESTART
15
WHERE ID_PROGRAMA = 'ATUFUNC';
16
MAT := TO_NUMBER(BUFFER);
17
EXCEPTION
18
WHEN NO_DATA_FOUND THEN
19
INSERT INTO RESTART (ID_PROGRAMA, DT_TIMESTAMP, TX_RESTART)
20
VALUES ('ATUFUNC', SYSDATE, '0');
21
MAT := 0;
22
END;
23
FOR R1 IN C1 LOOP
24
MAT := R1.CD_MAT;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
527
Number(6)
Date
Varchar2(30)
Date
Number(10,2)
Number(2)
Number(2)
Varchar2(3)
Varchar2(1)
Listagem-resposta 3.106A
SQL> CREATE TABLE
2 (CD_MOV
3 ,DT_MOV
4 ,CD_MAT
5 ,NM_FUNC
6 ,DT_NASC
7 ,VL_SAL
8 ,NR_CARGO
9 ,NR_GIT
10 ,CD_DEPTO
11 ,CD_STATUS
Tabela criada.
TBMOV
NUMBER(06)
DATE
NUMBER(5)
VARCHAR2(30)
DATE
NUMBER(10,2)
NUMBER(2)
NUMBER(2)
VARCHAR2(3)
VARCHAR2(1));
A incluso de linhas nesta tabela pode ser feita a qualquer momento durante o dia pelos programas de carga.
Imediatamente aps sua incluso, o status de cada registro C.
Faa um programa que realize a atualizao da base de dados baseado nos dados do movimento.
A atualizao dos dados na tabela Func deve efetuar uma crtica e gerar uma tabela de erros contendo o Rowid da
linha e a mensagem de erro. Caso o registro contenha erros, o status deve ser alterado para E. Caso seja feita a
atualizao de Func, mude o status para A.
CAPTULO 3 PL/SQL
Crticas:
Listagem-resposta 3.106B
SQL> CREATE OR REPLACE PROCEDURE CARGAMOV IS
2
CURSOR C1
IS SELECT CD_MAT, ROWID EROW FROM TBMOV
3
WHERE CD_STATUS = 'C';
4
CURSOR C2(MAT IN NUMBER)
5
IS SELECT * FROM FUNC
6
WHERE CD_MAT = MAT FOR UPDATE;
7
REND
ROWID;
8
RL
TBMOV%ROWTYPE;
9
AUX
NUMBER;
10
ERRO
BOOLEAN;
11
BLOQUEIO
EXCEPTION;
12
PRAGMA EXCEPTION_INIT(BLOQUEIO, -54);
13 BEGIN
14
FOR R1 IN C1 LOOP
15
ERRO := FALSE;
16
FOR R2 IN C2(R1.CD_MAT) LOOP
17
BEGIN
18
SELECT * INTO RL FROM TBMOV WHERE ROWID = R1.EROW
19
FOR UPDATE OF CD_STATUS NOWAIT;
20
IF RL.NR_CARGO BETWEEN 42 AND 60 THEN
21
ERRO := TRUE;
22
INSERT INTO ERROS VALUES
23
(R1.EROW, SEQERR.NEXTVAL,'CARGO INVLIDO >'||RL.NR_CARGO);
24
END IF;
25
BEGIN
26
SELECT 1 INTO AUX FROM DEPTO
27
WHERE CD_DEPTO = RL.CD_DEPTO;
28
EXCEPTION
29
WHEN NO_DATA_FOUND THEN
30
ERRO := TRUE;
31
INSERT INTO ERROS VALUES
32
(R1.EROW, SEQERR.NEXTVAL,'DEPARTAMENTO INVLIDO >'||RL.CD_DEPTO);
33
END;
34
IF RL.DT_NASC < TO_DATE('01011950', 'DDMMYYYY') THEN
35
ERRO := TRUE;
36
INSERT INTO ERROS VALUES
37
(R1.EROW, SEQERR.NEXTVAL,'NASCIMENTO INVLIDA >'||TO_CHAR(RL.DT_NASC, 'DD/MM/YYY
38
END IF;
39
BEGIN
40
IF RL.NR_CARGO IS NOT NULL AND
41
RL.CD_DEPTO IS NOT NULL THEN
42
SELECT NVL(MIN(VL_SAL), 0) INTO AUX
43
FROM FUNC
44
WHERE NR_CARGO = RL.NR_CARGO
45
AND CD_DEPTO = RL.CD_DEPTO;
46
ELSIF RL.NR_CARGO IS NOT NULL THEN
47
SELECT NVL(MIN(VL_SAL), 0) INTO AUX
48
FROM FUNC
49
WHERE NR_CARGO = RL.NR_CARGO
50
AND CD_DEPTO = R2.CD_DEPTO;
51
ELSIF RL.CD_DEPTO IS NOT NULL THEN
52
SELECT NVL(MIN(VL_SAL), 0) INTO AUX
53
FROM FUNC
54
WHERE NR_CARGO = R2.NR_CARGO
55
AND CD_DEPTO = RL.CD_DEPTO;
56
ELSE
57
SELECT NVL(MIN(VL_SAL), 0) INTO AUX
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
529
FROM FUNC
WHERE NR_CARGO = R2.NR_CARGO
AND CD_DEPTO = R2.CD_DEPTO;
END IF;
IF RL.VL_SAL IS NOT NULL AND
RL.VL_SAL < AUX THEN
ERRO := TRUE;
INSERT INTO ERROS
VALUES (R1.EROW, SEQERR.NEXTVAL, 'SALRIO INVLIDO >'||RL.VL_SAL);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
IF ERRO THEN
UPDATE TBMOV
SET CD_STATUS = 'E'
WHERE ROWID
= R1.EROW;
ELSE
UPDATE TBMOV
SET CD_STATUS = 'A'
WHERE ROWID
= R1.EROW;
END IF;
UPDATE FUNC
SET NM_FUNC = NVL(RL.NM_FUNC, NM_FUNC),
DT_NASC = NVL(RL.DT_NASC, DT_NASC),
VL_SAL
= NVL(RL.VL_SAL,
VL_SAL),
NR_CARGO = NVL(RL.NR_CARGO, NR_CARGO),
NR_GIT
= NVL(RL.NR_GIT,
NR_GIT),
CD_DEPTO = NVL(RL.CD_DEPTO, CD_DEPTO)
WHERE CURRENT OF C2;
COMMIT;
EXCEPTION
WHEN BLOQUEIO THEN
NULL;
END;
END LOOP;
END LOOP;
END;
/
Procedimento criado.
Captulo 4
OBJETOS E COLEES
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
531
METODOLOGIA
Apresentao e descrio sinttica da implementao de objeto no banco de dados Oracle9i.
TCNICA
Apresentao passo-a-passo da nova tecnologia com exemplos especficos de cada um dos assuntos.
INTRODUO
A indstria da informtica, desde seu incio, recria no computador cpias bidimensionais do mundo em que
vivemos. Comeamos com arquivos, registros, relacionamentos e chegamos aos objetos de hoje.
O objetivo continua o mesmo at hoje: representar da maneira mais fiel possvel o mundo que nos cerca. Nossa
tarefa, neste captulo, conceituar e entender esta nova nomenclatura: objeto e classe.
OBJETOS
Ns vivemos em um mundo cercado de objetos. Cada um destes objetos nico no mundo.
Cada ser humano possui em seu corpo marcas que o identificam inequivocamente em relao a todos os outros
seres humanos no mundo. No existem dois iguais.
Assim o nosso mundo, os animais, vegetais, minerais e o ser humano so diferentes, nicos, apesar de compostos
da mesma matria bsica.
Exemplifiquemos com uma rvore. Certamente, voc conhece muitas rvores, mas pense em uma rvore especfica.
Voc no encontrar, no mundo, nenhuma outra rvore, exatamente igual a esta em que voc est pensando, pois
ela nica. O que isto quer dizer, exatamente?
Se ela nica e sabemos que dois corpos materiais no ocupam o mesmo lugar no espao, significa que no existe
outra rvore com o mesmo nmero de galhos, a mesma forma, o mesmo nmero de folhas, as mesmas cores, etc.
e, ainda, no mesmo lugar que esta. Podemos dizer, que ela , inequivocamente, nica.
Continuemos nossa abstrao. Anteriormente dissemos que uma rvore possui galhos, folhas, tronco, etc. Observe, ento, que quando usamos a palavra rvore, sabemos, a princpio, do que se trata, pois esta palavra rene
um significado, ou seja, um conjunto de caractersticas comuns a diversos elementos. Estas caractersticas identificam
este elemento no mundo real.
Transportemos, agora, estes conceitos para o computador.
PRIMEIRAS CONCLUSES
Nossa inteno caracterizar objeto de tal forma que possamos represent-lo em nosso mundo bidimensional.
Como principal caracterstica de um objeto temos que ele nico, no existem dois iguais no mundo. Sabemos,
tambm, que ele possui caractersticas que identificam um conjunto de objetos de mesma categoria. Formalmente
diremos que um objeto nico e possui atributos.
AES
No mundo real uma grande parcela destes objetos est viva e realiza movimentos ou aes. Por exemplo, as
rvores (que estamos usando como exemplo) crescem, do frutos, sementes que permitem sua reproduo, seus
galhos balanam ao vento, perdem as folhas, etc.
Desta forma, queremos que nosso objeto (no computador) tambm realize aes intrnsecas a ele. Nossa meta para
representao de objeto, no computador, passa a ser:
a) Um objeto tem de ser nico.
b) Um objeto deve possuir atributos que o caracterizam.
c) Um objeto deve ser capaz de realizar aes.
FORMALIZANDO OS CONCEITOS
Quando dizemos que um objeto possui atributos, estamos querendo dizer que ele armazena informaes que o
caracterizam; portanto, uma parte deste objeto composta de dados.
Quando dizemos que um objeto pode realizar aes, estamos querendo dizer que ele realiza procedimentos, e,
portanto, uma parte deste objeto composta de rotinas (procedimentos, funes, etc.) que realizam aes.
Chamaremos estas aes de mtodos.
Como concluso temos que um objeto algo que, de alguma forma, junta dados (atributos) e cdigos (mtodos)
em um elemento nico.
CONCLUSO
Podemos, formalmente, dizer que um objeto encapsula dados e cdigo (atributos e mtodos).
CLASSES
Vimos, anteriormente, que aquela rvore especfica que conhecemos e que sabemos que nica um Objeto.
Porm, dissemos tambm que, quando utilizamos a palavra RVORE, indicamos um tipo de OBJETO, ou seja,
todas as rvores possuem caractersticas comuns.
Estas caractersticas podem ser listadas e conhecidas. Seus valores podem ser diferentes de um objeto para outro,
porm a lista de caractersticas igual.
Por exemplo, dissemos que as rvores possuem folhas (o nmero varia de rvore para rvore), galhos (a quantidade
tambm depende do objeto), altura (este comprimento depende da rvore) e assim por diante.
Se reunirmos a lista de caractersticas e aes de um determinado objeto, conseguiremos classificar e identificar
que tipo de objeto aquele, como os cientistas fazem quando descobrem uma nova espcie.
Uma classe, portanto, nada mais do que o conjunto de atributos e mtodos que caracterizam um objeto. Podemos
dizer que um MOLDE ou um LAYOUT do objeto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
533
CONCLUSO
Podemos ter diversos objetos com as mesmas caractersticas, objetos de uma mesma classe, porm diferentes entre si,
pois os valores de seus atributos so diferentes.
CLASSE
Dissemos, anteriormente, que, se reunirmos a lista de caractersticas e aes de um determinado objeto,
conseguiremos classificar e identificar que tipo de objeto aquele, ou seja, identificamos a classe ou tipo de objeto.
Formalmente, em Java, esta lista de caractersticas chamada de Classe. No banco de dados esta lista de caractersticas
um Tipo. Observe o exemplo da Listagem 4.01.
Tipo
-----------VARCHAR2(60)
VARCHAR2(60)
VARCHAR2(60)
VARCHAR2(2)
NUMBER(8)
NUMBER(8)
Um tipo objeto contm trs informaes: nome, atributo(s) e mtodo(s). Os atributos constituem-se de variveis que
definem a estrutura de dados do objeto. Mtodos so subprogramas que definem operaes sobre os dados do objeto.
Neste primeiro exemplo criamos um tipo objeto sem nenhum mtodo formal associado a ele.
Dissemos, anteriormente, que a classe ou tipo de objeto corresponde a um molde e no ao objeto em si. No banco
de dados este conceito est perfeitamente adequado, isto , no podemos incluir dados em um tipo de objeto.
Quando tratamos deste assunto em um programa, a criao e armazenamento do objeto com as caractersticas
definidas pelo tipo OT_END feita em memria, o que extremamente voltil. Em um banco de dados, no
entanto, queremos e precisamos armazenar os objetos. Sendo assim, precisamos de um repositrio para
armazenamento de objetos.
OBJECT TABLE
Para resolver esta necessidade, a Oracle criou um novo tipo de tabela no banco de dados. Uma Object Table uma
tabela para armazenamento das instncias de uma determinada classe.
Uma instncia de uma classe o resultado da construo de um elemento com caractersticas definidas pela classe,
ou seja, da construo de um objeto.
Uma Object Table uma tabela para armazenamento de objetos. Na Listagem 4.02 criaremos uma Object Table
para armazenamento de objetos do tipo OT_END.
Com a criao de um local para armazenamento de objetos, nosso prximo objetivo criar os objetos e armazen-los.
MTODO CONSTRUTOR
Neste momento, nos deparamos com um segundo problema: como construir um objeto?
Quando tratamos de dados escalares, no existem problemas quanto ao armazenamento da informao;
simplesmente fazemos uma atribuio (em qualquer linguagem) varivel ou elemento em questo, porm, como
faremos com um elemento complexo, como o caso de OT_END? No podemos, simplesmente, dar um valor
diretamente a ele, pois que ele composto de diversos atributos.
Quando trabalhamos com uma linguagem orientada a objeto, como o caso da Java, este problema resolvido
pela linguagem com a criao de uma rotina especial para a construo de objetos de uma determinada classe.
Chamamos esta rotina de Mtodo Construtor.
Estudamos, anteriormente, que os objetos possuem atributos e mtodos. Quando definimos um tipo de objeto
podemos anexar os mtodos que compem este tipo. O mtodo construtor um mtodo especial que capaz de
construir o objeto.
Quando criamos um tipo de objeto, implicitamente estamos criando simultaneamente um mtodo capaz de construir
objetos deste tipo. Esta ao tanto feita nas linguagens OO quanto no banco de dados.
Para que a linguagem ou o banco de dados identifique um dos mtodos da classe como construtor, existem duas regras:
INCLUSO
No exemplo da Listagem 4.03, estamos usando a linguagem SQL para incluir um objeto em nossa Object Table.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
535
Observe, no exemplo, que acionamos o mtodo construtor OT_END (mesmo nome do objeto) a fim de construir
o objeto. Para este mtodo informamos os valores referentes a todos os componentes individuais do objeto.
Apesar de esta forma ser mais compatvel com toda a teoria vista at agora, o Oracle, implicitamente, aciona o
mtodo construtor, quando executamos um comando INSERT.
CONSULTA
No primeiro exemplo da Listagem 4.04, vemos os dados do objeto armazenado no banco de dados.
NM_RUA
-------------Rua
Nova rua
Av. Rio Branco
NM_BAIRRO
----------Bairro
Novo Bairro
Centro
NM_CIDADE
-------------Cidade
Rio de Janeiro
CD
-UF
RJ
NR_RUA
-----123
456
NR_CEP
-------25000001
20000900
No segundo exemplo usamos a funo Value para que fosse retornada a instncia do tipo de objeto OT_END, que
estivesse armazenado na tabela TB_END.
Observe que, neste caso, o nome do tipo de objeto foi apresentado juntamente com os dados do objeto.
NM_CIDADE
-------------Cidade
Rio de Janeiro
Neste exemplo, da Listagem 4.05, executamos um comando SELECT que obtinha apenas informaes sobre os
atributos NM_BAIRRO e NM_CIDADE de todos os objetos armazenados na tabela TB_END.
ALTERAO E EXCLUSO
No exemplo da Listagem 4.06 estamos atualizando uma coluna de um objeto armazenado no banco de dados.
NM_CIDADE
--------------
CD
--
NR_RUA
------
NR_CEP
--------
Novo Bairro
Novo Bairro
Cidade
Rio de Janeiro
UF
RJ
123
456
25000001
20000900
EM PL/SQL
No exemplo da Listagem 4.07, fizemos um programa, que recebe como parmetro os elementos do tipo objeto OT_END.
Observe, no exemplo da Listagem 4.07, que definimos uma varivel a partir do tipo OT_END definido no banco de
dados. J podemos notar, de imediato, uma diferena no manuseio desta varivel. Fomos obrigados a construir o
objeto (mesmo vazio) antes de us-lo. Para tal, usamos o mtodo construtor OT_END que recebia diversos (6)
parmetros, aos quais atribumos NULL, construindo um objeto vazio. Comente a atribuio da linha 2 e repita o
exemplo para verificar o erro recebido.
No caso da opo I, atribumos os parmetros recebidos no programa aos atributos correspondentes do objeto
instanciado pela varivel OEND. No comando INSERT usamos diretamente a instncia, uma vez que o objeto foi
construdo e preenchido anteriormente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
537
Neste segundo exemplo a atualizao do objeto desejado na Object Table foi feita atravs da instncia OEND.
Como primeiro passo obtivemos do banco de dados, usando a funo Value, o objeto desejado e o armazenamos
na instncia OEND. Como segundo passo modificamos os valores relativos aos atributos que recebemos como
parmetro e, finalmente, como terceiro passo atualizamos o objeto correspondente na tabela TB_END.
MTODOS
Um mtodo, como sabemos, um cdigo associado (ou encapsulado) ao objeto. Sua principal caracterstica ter
acesso ilimitado aos dados do objeto ao qual est ligado.
Quando criamos um tipo de objeto, podemos associar a este tipo rotinas de PL/SQL, as quais tm acesso a todos os
atributos do tipo diretamente. Essas rotinas so referenciadas como se fossem atributos do tipo e so chamadas de
Mtodos. Desta forma, o Oracle contempla o conceito de mtodo apresentado acima.
MEMBER
Quando criamos um mtodo do tipo Member, sua utilizao dever ser explcita pelas aplicaes ou nos comandos de SQL.
Pode especificar uma procedure ou funo associada com o objeto. Esta rotina pode ser referenciada da mesma
forma que um atributo do objeto.
Observe no exemplo da Listagem 4.09 que adicionamos uma funo ao tipo de objeto OT_END e indicamos que se
tratava de uma funo MEMBER. Isto significa que um mtodo comum e que tem acesso a todos os atributos do
objeto especfico associado. No corpo da rotina usamos o qualificador SELF para indicar que se tratava de um
atributo do prprio objeto, do objeto corrente. Isto no obrigatrio neste momento pois a rotina tem acesso a
apenas um objeto de cada vez, porm deixa o cdigo mais elegante.
A palavra-chave INVALIDADE indica que todos os objetos dependentes sero tornados invlidos sem qualquer verificao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
539
MAP MEMBER
uma funo que retorna uma informao escalar (number, varchar2, char, etc.) com a finalidade de determinar
a posio relativa do objeto particular no conjunto.
Este tipo de mtodo tem a finalidade de resolver um problema com o qual nos depararemos mais cedo ou mais
tarde no uso de objetos. Como ordenar o resultado baseado em um objeto?
No primeiro exemplo da Listagem 4.10, recebemos um erro porque solicitamos uma ordenao pelo objeto
armazenado em TB_END e representado por C. Um objeto um tipo complexo e o banco de dados somente
consegue determinar se um objeto igual ou diferente de outro. Para determinar se ele maior ou menor, precisar
de uma ajudinha extra. Esta ajuda dada sob a forma de mtodo. Para cada objeto que viermos a criar podemos
adicionar uma funo Map ou uma funo Order (apenas uma delas), a qual ser usada para determinar, entre dois
objetos, qual o maior.
Um mtodo Map um mtodo especial, pois acionado diretamente pelo Oracle quando fazemos uma ao que
necessite da ordenao do objeto.
Quando isto necessrio, ele aciona o mtodo Map (ou Order) existente para aquele objeto.
Aps criarmos o mtodo Map, no houve maiores dificuldades para o Oracle realizar o SELECT que havamos
tentado anteriormente. Neste exemplo foi solicitada a ordenao pelo objeto e no por um atributo especfico. A
rotina ORDEM foi usada, pelo Oracle, para realizar esta tarefa.
RESTRIO
Como restrio, temos que um objeto s pode conter uma funo Map. Podemos definir um mtodo do tipo Map
ou um mtodo do tipo Order para um determinado objeto, mas no ambos.
Se no definirmos nenhum dos dois, o Oracle ter capacidade de efetuar apenas comparaes de igualdade (ou
desigualdade) entre os objetos deste tipo. No conseguir determinar o maior ou menor.
ORDER MEMBER
Especifica uma funo que recebe como parmetro um outro objeto deste mesmo tipo.
A PL/SQL usa a ordenao para avaliar expresses boleanas do tipo > (maior) e < (menor) e para realizar comparaes
implcitas tais como Distinct, Group By e clusulas Order By. O mtodo Map retorna a posio relativa de um
objeto em relao ao grupo.
Outra forma de estabelecer ordem a utilizao de um mtodo do tipo Order que, diferentemente do mtodo
Map, deve receber como parmetro outro objeto do mesmo tipo do objeto no qual o mtodo est sendo criado a
fim de que internamente na rotina estabelea as condies de comparao e retorne a indicao de qual dos dois
objetos (aquele recebido como parmetro ou o prprio objeto) maior (menor ou igual).
Esta funo deve retornar um inteiro com um dos valores: negativo, zero ou positivo. Esses valores indicam
respectivamente que o argumento implcito Self menor, igual ou maior que o argumento explcito. J sabemos que
o argumento Self no passado explicitamente; refere-se ao prprio objeto atual, ao qual o mtodo tem acesso direto.
SQL>
2
3
Tipo
SQL>
2
3
4
5
6
7
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
541
Observe que j podemos perceber uma diferena entre esta funo e a Map. Ela recebe como parmetro um objeto
do tipo OT_END, do mesmo tipo do tipo objeto que est sendo alterado (ou criado).
O resultado desta funo dir se o objeto interno (referenciado como SELF) maior (retorno 1), menor (retorno -1) ou
igual (retorno 0) a este objeto explicitamente passado como parmetro.
A utilizao da qualificao no obrigatria para o objeto SELF ( o default); no entanto, conveniente para
maior clareza do cdigo.
Esta rotina compara o estado e o CEP do parmetro com o estado e o CEP do objeto atual e determina se so iguais (retorna
0), se o objeto atual tem estado ou CEP maior (retorna 1) ou se o objeto atual tem estado ou CEP menor (retorna -1).
Encerramos este tpico neste ponto, pois j podemos realizar testes de uso de objetos. A criao e alterao de
objetos cabem ao DBA e no sero aprofundadas neste material.
EXERCCIOS
4.01) Deseja-se listar o contedo da tabela tb_tfunc. O resultado deve vir ordenado pelo endereo. Repita a construo
utilizando a funo Value.
4.02) Inclua uma nova linha na tabela Tb_tcargo utilizando o mtodo construtor Tcargo.
4.03) Inclua um novo funcionrio em Tb_Tfunc. No fornea valor para as colunas cd_cargo, nr_telefone e cd_estado.
4.04) Utilize o mtodo Mcargo para obter informaes sobre o objeto Tcargo. Liste simultaneamente o cdigo do cargo.
4.05) Crie um programa em PL/SQL que receba como parmetro o cdigo do funcionrio e seu endereo para
alterao. Estado no deve ser modificado.
4.06) Usando a rotina do exerccio anterior, atualize o CEP do funcionrio de matrcula 200 para o valor 20789500.
Aps a atualizao verifique o resultado.
METODOLOGIA
Apresentao conceitual e formas de implementao no Oracle9i.
TCNICA
Comparao utilizando exemplo com a forma relacional.
Se voc consultar a Sintaxe 4.01 relativa a criao de tipo, ver que no temos as especificaes relativas a constraints. Veja o exemplo da Listagem 4.13 a seguir.
Isto ocorre porque um tipo de objeto, como j sabemos, corresponde a um Molde; ao tempo de implementao
que estabelecemos as regras de integridade para aquela implementao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
543
NUMBER(8),
NUMBER(8))
Neste exemplo da Listagem 4.14 implementamos o tipo OT_END em duas tabelas diferentes. Em cada uma das
implementaes estabelecemos restries compatveis com o objeto a ser armazenado.
RELACIONAMENTOS
Num modelo Relacional, os relacionamentos so restries que participam das regras de negcio estabelecidas no
banco de dados.
Num modelo Objeto-Relacional, utilizamos uma Ref (referncia) para estabelecer uma ligao com um objeto
especfico, ou mais formalmente, com uma instncia especfica de um tipo de objeto.
REF
A expresso Ref difere de um relacionamento estabelecido num modelo Relacional. Ela, por si s, no estabelece
uma restrio de integridade, no h impedimento remoo de uma instncia que esteja sendo referenciada por
outra. A expresso Ref corresponde a um ponteiro, objetiva acesso mais rpido e no regra de integridade.
Para que pudssemos incluir as referncias ao objeto armazenado em TB_CLI01, precisamos realizar uma consulta para
obter o OID (object identifier) do objeto desejado. O OID uma informao acrescida pela Oracle a todos os objetos,
que garantir que os mesmos seja nicos (veremos o contedo desta informao no prximo exemplo). Observe, ainda,
que para obtermos a indicao do objeto usamos, novamente, a funo REF do objeto apelidado de C.
No primeiro comando SELECT obtivemos o contedo da coluna RF_TITULAR. Este nmero o OID gerado pelo
Oracle e que torna cada objeto nico, como determina a parte conceitual. Se ele identifica um objeto especfico,
podemos obter informaes deste objeto usando esta referncia.
No segundo SELECT usamos a coluna RF_TITULAR (ou o atributo do objeto OT_DEP01 armazenado na tabela
TB_DEP01) para obter informaes diretamente dos objetos a que ela faz referncia. Observe que apelidamos
nosso objeto de T e solicitamos que fosse obtido o nmero do carto atravs da referncia RF_TITULAR do objeto
T que houvermos selecionado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
545
DANGLING
Nosso prximo passo determinar o que acontece se removermos um objeto referenciado.
Como primeiro passo do exemplo removemos um objeto qualquer da tabela TB_CLI01. No houve qualquer tipo
de restrio ou aviso referente a esta remoo.
Quando repetimos o comando SELECT pudemos observar que as informaes referentes aos dados do titular do
carto 501 no foram trazidos, porm o dependente continuou existindo.
Com isso vemos que a clusula REF no estabelece uma restrio de integridade, ela, simplesmente, contm uma
referncia a um determinado objeto, em relao ao qual podemos obter informaes.
Para sabermos se uma referncia ainda vlida ou no, usamos a expresso IS DANGLING ( invlida) ou IS NOT
DANGLING ( vlida). Foi isso que fizemos nos dois penltimos comandos SELECT. No primeiro obtivemos aqueles
objetos cuja referncia estava invlida e no segundo aqueles objetos cuja referncia estava vlida. No ltimo
comando SELECT verificamos que DANGLING diferente de NULL. A referncia est preenchida, porm no
indica um objeto existente na tabela TB_CLI01.
Neste exemplo j criamos os tipos, as tabelas e as linhas simultaneamente. Devemos, apenas, observar as diferenas
na criao da tabela TB_DEP02. Quando estabelecemos as restries para a coluna RF_TITULAR determinamos
duas clusulas: with rowid e references.
A clusula With Rowid tem a finalidade de importar, do objeto associado, no apenas o OID, mas tambm a
identificao fsica da linha. Isto dar, certamente, muito mais velocidade de acesso quando desejarmos obter
informaes do objeto referenciado, uma vez que contamos com o endereo da linha para acesso direto.
A clusula References (j nossa conhecida na etapa relacional) garante a integridade referencial, ou seja, no
poderemos remover elementos de cliente se houver dependentes relacionados. Poderamos ter determinado que
na remoo de cliente os dependentes fossem removidos simultaneamente ou, ainda, que na remoo de cliente o
relacionamento dos dependentes fosse anulado (Set Null).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
547
Nesta listagem observamos que a incluso do Rowid junto com o REF no produziu nenhum efeito visvel, a mudana
ser apenas de performance. A incluso da clusula References impediu a remoo do objeto pai do relacionamento.
Desta forma temos as seguintes opes:
Neste exemplo incluimos uma tabela relacional (Pessoas) para que possamos observar que h intercmbio entre o
ambiente relacional e o ambiente objeto (por este motivo dizemos que o banco de dados Objeto-Relacional).
Nossa nova tabela TB_CLI02 passou a fazer uma restrio de integridade tambm com a tabela relacional Pessoas.
Toda vez que inclumos uma restrio temos a opo de determinar se a verificao ser feita de imediato ou
somente no momento do Commit e se esta situao pode ser alterada.
Na clusula References temos como opo o uso da expresso ON DELETE CASCADE, que indica que se removermos o
pai da relao os filhos tambm devem ser removidos, ou da expresso ON DELETE SET NULL, que indica que se
removermos o pai da relao os filhos no devem ser removidos, porm o relacionamento deve ser anulado. Quando
no usamos a expresso ON DELETE, indicamos que no desejamos que seja removido nenhum pai com filhos.
NM_DEPENDENTE
-------------------PRIMEIRO DEPENDENTE
SEGUNDO DEPENDENTE
NOVO FILHO
CLIENTE
---------------PRIMEIRO CLIENTE
SEGUNDO CLIENTE
PRIMEIRO CLIENTE
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
549
DEREF
Suponhamos agora que desejssemos obter um relatrio contendo, para cada dependente, o nome e identificador
do titular.
Neste exemplo, desejvamos obter o nome do titular associado a cada dependente. Em vez de utilizarmos diretamente
a referncia presente no objeto Dependente, decidimos trazer o objeto (e no seus atributos) para o programa PL e
l realizar a manipulao desejada.
Como primeiro passo definimos uma varivel para receber objetos do tipo OT_CLI02 e outra para receber objetos
do tipo OT_DEP02. No comando SELECT associado ao cursor obtivemos o objeto apelidado de C e armazenado na
tabela TB_DEP02.
A cada objeto lido, obtinhamos em memria o nome do dependente, o nmero do carto e a referncia ao cliente.
De posse da referncia desejvamos obter as informaes relativas ao cliente correspondente. Para tal devemos
usar a funo DEREF (contrrio da REF) que, porm, no pode ser usada diretamente em PL/SQL.
Em funo desta restrio, tivemos necessidade de efetuar um Select na tabela Dual para que a referncia contida
no atributo RF_TITULAR pudesse ser usada e obtido o objeto Cliente correspondente. Usamos neste comando
Select a clusula Dangling para que a leitura somente fosse efetuada se a referncia fosse vlida.
EXERCCIOS
4.07) Selecione com um nico comando o nome do funcionrio e o nome de seu cargo. No utilize join.
4.08) Atualiza a tabela de funcionrios associando o cargo 3 (professor) ao funcionrio de matrcula 400.
4.09) Inclua uma nova linha em funcionrio informando, simultaneamente, valor para cargo e estado.
4.10) Verifique se existe algum cliente sem definio de empresa ou com especificao de empresa invlida.
4.11) Inclua uma nova linha na tabela TB_TEMPRESA sem informar valor para as colunas nm_empresa e nr_telefone.
O que acontece? Por qu? Em que local a restrio definida?
4.12) Obtenha informaes relativas a cargo e estado, quando possvel. Use DEREF.
METODOLOGIA
Apresentao conceitual e formas de implementao no Oracle9i.
TCNICA
Estudo conceitual inicial e montagem de exemplos para avaliao da implementao, completado com exerccios.
INTRODUO
Uma das mais importantes caractersticas da orientao a objeto a possibilidade de reuso de cdigo.
Neste tpico veremos duas formas de reuso: Composio e Herana.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
551
COMPOSIO
A composio consiste na criao de objetos de classes existentes dentro de uma nova classe. Desta forma a nova
classe composta de classes existentes. Estaremos simplesmente reutilizando a funcionalidade do cdigo.
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
Tipo
SQL>
2
3
4
5
6
7
8
Tipo
SQL>
2
3
4
5
6
7
8
9
10
11
12
Tipo
SQL>
2
3
4
5
6
7
8
9
10
Tipo
Para a montagem dos testes criamos um tipo OT_END03 contendo duas funes (uma membro e outra map), o tipo
OT_TEL03 tambm contendo duas funes (uma membro e outra map) e, finalmente o tipo OT_CLI03 que usa como
atributo os dois tipos anteriores. Esta sintaxe representa a composio, que uma das formas de reuso de cdigo.
Nosso ltimo passo foi criar a tabela para armazenamento de objetos do tipo OT_CLI03. Observe que no criamos
tabelas para armazenamento individual dos tipos OT_END03 e OT_TEL03. Estes tipos foram criados apenas para
serem usados como composio. Eles podem ser usados em composies de outros tipos.
O reuso atravs da composio permite que criemos tipos simples e que estes sejam usados para a montagem de
tipos complexos. Veremos, a seguir, as operaes bsicas com esta tabela contendo tipos como colunas.
Tipo
------------NUMBER(8)
NUMBER(2)
VARCHAR2(100)
OT_END03
OT_TEL03
METHOD
-------------------------------------MEMBER FUNCTION CALCDV RETURNS NUMBER
METHOD
-----------------------------------------MAP MEMBER FUNCTION ORDCLI RETURNS NUMBER
Quando solicitamos a descrio do tipo no SQL*Plus podemos verificar os tipos definidos para os atributos
NM_ENDERECO e NR-TELEFONE (obtidos de outros tipos). Simultaneamente verificamos que a solicitao de
descrio de um tipo mostra os mtodos associados ao tipo solicitado. Repita esta operao para os tipos OT_END03
e OT_TEL03 e verifique os resultados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
553
NR_CARTAO
NR_DV NM_CLIENTE
NM_RUA
--------------- ----- -------------------- -------------------112345
20 Joo da Silva
R. da Candelria
283905
22 Davi Barbosa
R. Presidente Vargas
CD NR_TELEFONE
-----------------RJ (02121)22874039
RJ (02121)21985402
No exemplo da Listagem 4.27 inclumos duas linhas na tabela TB_CLI03. Para atribuirmos valor s colunas
NR_TELEFONE e NM_ENDERECO tivemos de acionar os mtodos contrutores correspondentes dos tipos de objeto
OT_END03 e OT_TEL03, como j fizemos anteriormente. Neste caso, o uso dos construtores torna-se indispensvel
para o preenchimento das colunas.
Aps a incluso acionamos o mtodo CALCDV para calcular o DV de cada um dos cartes includos. Observe que
como usamos um mtodo do objeto, apesar de no passarmos nenhum parmetro, os valores calculados para DV
de cada um dos cartes foram diferentes, porque o parmetro SELF (contendo toda a descrio do objeto selecionado)
passado implicitamente para a funo.
O primeiro comando SELECT apresentado no exemplo mostra, claramente, que a coluna NM_ENDERECO uma
coluna composta e o mesmo ocorre para NR_TELEFONE.
No segundo SELECT, escolhemos as informaes que desejvamos visualizar qualificando os atributos dos objetos
internos com o nome da coluna e o apelido do objeto. Ordenamos o resultado por uma coluna complexa
NM_ENDERECO e usamos o mtodo TELEFONE normalmente como se fizesse parte da descrio do objeto.
HERANA
A palavra herana, por si s, j nos d uma idia do que significa este conceito. Sua conceituao simples e
facilmente compreenderemos seu uso.
Uma Ave um animal, isto , uma ave possui todas as caractersticas genricas de um animal e caractersticas
especficas referentes apenas s aves.
Um peixe um animal, isto , um peixe possui todas as caractersticas genricas de um animal e caractersticas
especficas referentes apenas aos peixes.
Lendo este exemplo utilizando Orientao a Objeto.
O tipo de objeto (ou classe) mamfero herda todas as propriedades (atributos e mtodos) da classe animal e,
adicionalmente, incrementa outras propriedades (atributos e/ou mtodos) prpria.
O tipo de objeto (ou classe) ave herda todas as propriedades (atributos e mtodos) da classe animal e,
adicionalmente, incrementa outras propriedades (atributos e/ou mtodos) prprias.
O tipo de objeto (ou classe) peixe herda todas as propriedades (atributos e mtodos) da classe animal e,
adicionalmente, incrementa outras propriedades (atributos e/ou mtodos) prprias.
Neste exemplo pudemos observar que os tipos de objetos AVE, PEIXE e MAMFERO so mais especficos, enquanto
que o tipo de objeto ANIMAL mais geral (genrico).
CONCEITUANDO HERANA
o mecanismo de reutilizao de atributos e operaes definidos em classes (ou tipos de objetos) gerais por classes
(ou tipos de objetos) mais especficas.
O tipo de objeto mais genrico chamado de SUPERTIPO (tambm conhecido como tipo pai ou tipo base) e o tipo
de objeto mais especializado chamado de SUBTIPO (tipo filho ou tipo derivado).
A herana fornece um meio para se construir componentes reutilizveis. Permite especificar atributos e operaes
comuns a vrias classes com caractersticas semelhantes. Observemos o exemplo a seguir:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
555
SQL>
2
3
4
Tipo
SQL>
2
3
4
Tipo
SQL>
2
3
4
Tipo
Neste primeiro passo criamos os tipos, exatamente como mostramos na Figura 4.01. O tipo ANIMAL um supertipo.
Suas caractersticas foram herdadas pelos trs subtipos criados (AVE, MAMFERO e PEIXE).
Tipo
------------NUMBER
VARCHAR2(100)
Tipo
------------NUMBER
VARCHAR2(100)
NUMBER
VARCHAR2(20)
Tipo
------------NUMBER
VARCHAR2(100)
VARCHAR2(20)
VARCHAR2(200)
Tipo
------------NUMBER
VARCHAR2(100)
NUMBER
NUMBER
Quando criamos as tabelas para os tipos criados poderemos instanciar os objetos. Para sabermos o layout dos
objetos que iremos incluir usamos o comando de SQL*Plus DESC para algumas tabelas e para o tipo AVE. No caso
do tipo AVE o comando DESC especificou o supertipo e a indicao de NOT FINAL.
Em todos os casos j podemos visualizar o significado de herana: os atributos criados apenas em ANIMAL foram
herdados por todos os tipos. Se tivssemos mtodos, o mesmo aconteceria com os mtodos.
No exemplo da Listagem 4.30 conseguimos incluir informaes nas tabelas TB_AVE, TB_PEIXE e at mesmo na
TB_ANIMAL. A criao de um objeto na tabela TB_MAMIFERO deu erro porque o tipo no qual a tabela foi baseado
no instancivel, como definimos anteriormente. Para o tipo de objeto ANIMAL que deveramos ter feito esta
restrio uma vez que, na verdade, estvamos detalhando as informaes nos subtipos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
557
SQL>
2
3
4
5
6
7
8
9
10
11
Tipo
SQL>
2
3
4
5
6
7
8
9
10
11
Tipo
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Tipo
No exemplo da Listagem 4.31 criamos um tipo objeto VTERRESTRE contendo duas funes membro (partida e
parada). Quando criamos os subtipos a partir do supertipo, substitumos as funes definidas no supertipo por
funes prprias e particulares ao subtipo. Para o subtipo CAMINHAO criamos mais uma funo especfica chamada
ESTATICA. Criamos, adicionalmente, o corpo das funes para que possamos us-los a seguir.
Neste exemplo utilizamos os mtodos para testar herana. No resultado podemos verificar que o valor correspondente
de cada rotina Partida ou Parada foi especfico ao seu tipo. Por exemplo enquanto a rotina Partida selecionada do
objeto residente na tabela TB_CAMINHAO apresentava o texto partida de caminhao a mesma rotina, selecionada
do objeto residente na tabela TB_VTERRESTRE, apresentava o texto partida de vterrestre.
A rotina ESTATICA, por ser do tipo Static, no tem acesso ao objeto instanciado para o tipo de objeto ao qual ela est
criada; por este motivo comum a criao de funes ou procedures estticas que recebam parmetros. Quando
acionamos a rotina no usamos uma referncia ao objeto apelidado por A e sim ao nome do prprio tipo de objeto.
OVERRIDING
As expresses OVERRIDING ou NOT OVERRIDING indicam se um mtodo definido no supertipo est sendo
substitudo no subtipo. Estas expresses devem ser usadas no subtipo. Para que o Oracle saiba a que mtodo
estamos substituindo devemos colocar os mtodos com o mesmo nome. O default NOT OVERRIDING. Desta
forma se viermos a especificar um mtodo no subtipo com o mesmo nome de um mtodo no supertipo sem a
especificao OVERRIDING receberemos erro.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
559
STATIC
Esta expresso indica que a funo no receber o parmetro implcito SELF. Isto significa que a funo est
associada ao tipo de objeto e no ao objeto em si. Para acion-la devemos utilizar como qualificador o nome do
tipo de objeto (veja o exemplo da Listagem 4.32). Como este mtodo no tem acesso direto aos dados do objeto,
normalmente criamos parmetros para compensar esta situao.
UPCASTING
Dentro da orientao a objeto, quando criamos uma hierarquia do tipo superclasse subclasse, podemos utilizar
um subclasse onde seja permitido uma superclasse uma vez que a subclasse contm todas as cactersticas da
superclasse e mais alguma coisa. Este conceito se chama Upcasting.
Esta forma de uso de objeto usada implicitamente pelo Oracle. Veja o exemplo da Listagem 4.33.
Nos dois exemplos apresentados inclumos um objeto do tipo CAMINHAO em uma tabela que armazena objetos
do tipo VTERRESTRE. Sabemos, pela criao anterior, que CAMINHAO um subtipo (mais detalhado) de
VTERRESTRE (supertipo).
TREAT
A funo Treat realiza a operao anterior de forma explcita. Indicamos para que tipo de objeto desejamos que a
informao seja considerada. Este uso somente ser vlido se as expresses e/ou os objetos envolvidos pertencerem
mesma hierarquia. Caso contrrio a funo retornar NULL. Veja os exemplos da Listagem 4.34.
Qundo inclumos, explicitamente, ou implicitamente objetos mais especficos em uma tabela que armazena objetos
mais genricos, estes objetos levam consigo a indicao de seus tipos. Observe que no primeiro SELECT apresentado,
na tabela TB_VTERRESTRE, encontramos 3 automveis, 1 caminho e 1 veculo terrestre (indeterminado).
Quando usamos a funo Treat e solicitamos apenas os objetos considerados AUTOMOVEL, as duas primeiras
linhas retornam NULL. Quando solicitamos apenas os objetos considerados CAMINHAO, apenas a segunda linha
aparece preenchida.
No primeiro comando SELECT obtivemos da tabela TB_VTERRESTRE aqueles objetos do tipo AUTOMOVEL ou
CAMINHAO. No segundo comando SELECT solicitamos que apenas os objetos do tipo VTERRESTRE fossem listados.
Observe que no terceiro exemplo, quando retiramos a palavra ONLY da clusula WHERE, os objetos do tipo
AUTOMOVEL e CAMINHAO tambm foram listados uma vez que eles tambm so VTERRESTRE por herana.
POLIMORFISMO
Polimorfismo a capacidade de o software construir, ao tempo de execuo, o objeto adequado e, conseqentemente,
acionar o mtodo associado com o tipo de objeto derivado especfico do objeto.
Isto permite a criao de programas extensveis, que podem crescer no apenas durante a criao original do
projeto, mas ao longo do tempo quando novas caractersticas forem adicionadas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
561
EXERCCIOS
4.13) Criar um tipo de objeto NAVE contendo:
trs atributos tempo de vo, quantidade mnima de metros da pista de aterrissagem e tempo para levantar vo.
trs mtodos VOAR (que apresenta uma mensagem sobre o tempo de vo), ATERRISSAR (que apresenta uma
mensagem sobre o tamanho da pista) e ALAR (que indique o tempo para levantar vo).
O tipo de objeto Nave deve ser considerado um tipo concreto, isto , pode ser instanciado. No entanto ele ser
herdado por outros tipos.
4.14) Criar um tipo de objeto PASSARO derivado de NAVE que contenha os mtodos VOAR (que indique o tempo
mximo de vo do pssaro) e ALAR (que indique a envergadura do pssaro).
O tipo de objeto Passaro deve ser considerado concreto, isto , pode ser instanciado. No entanto ele no mais
poder ser herdado por outros tipos.
4.15) Criar um tipo de objeto BALAO derivado de NAVE que contenha os mtodos ATERRISSAR (que apresente a
latitude do balo) e VOAR (que apresente o tempo estimado para o balo atingir uma altura de 50M).
O tipo de objeto Balao deve ser considerado concreto, isto , pode ser instanciado. No entanto ele no mais poder
ser herdado por outros tipos.
4.16) Criar uma aplicao que receba como parmetro um tipo de objeto Nave e que execute os mtodos ATERRISSAR,
VOAR e ALAR. Acione a rotina passando como parmetro um objeto do tipo Nave, Passaro e Balao. Qual o
resultado obtido e por qu?
4.17) Crie uma rotina que, aleatoriamente, armazene em um array objetos do tipo Nave, Balao ou Passaro. A
quantidade de elementos do array ser passada como parmetro. Ao trmino do preenchimento do array execute
e apresente as mensagens enviadas pelos mtodos associados ao objeto construdo.
4.18) Crie uma tabela para armazenamento de Naves. Faa uma rotina para, aleatoriamente, incluir objetos do tipo
Nave, Passaro ou Balao. Use a funo Treat para facilitar o armazenamento.
4.19) Execute a rotina criada no exerccio anterior e inclua 10 objetos na tabela TB_NAME. Em seguida prepare um
comando de SQL que liste apenas os objetos do tipo definido como parmetro pelo usurio.
METODOLOGIA
Apresentao conceitual e formas de implementao no Oracle9i.
TCNICA
Formalizao sinttica e testes diversos.
Nos exemplos a seguir voltamos a usar as tabelas tb_cli01 e tb_dep01. Para reconstru-las utilize os scripts 15 e 16
deste captulo das Listagenn 4.15 e 4,16.
DEREF
Esta funo retorna o objeto referenciado pelo argumento <referncia>.
Nulo?
-------NOT NULL
NOT NULL
Tipo
--------------VARCHAR2(60)
NUMBER(3)
REF OF OT_CLI01
Na Listagem 4.36, quando usamos a funo Deref para a coluna RF_TITULAR da tabela TB_DEP01, foi apresentado
o objeto referenciado, no caso o cliente titular daquele dependente.
REF
A funo Ref recebe como argumento a linha de uma object table ou object view. Este valor de argumento corresponde
ao alias da tabela.
O valor retornado uma referncia instncia do objeto indicado pelo argumento.
Na Listagem 4.37, uma referncia construda para cada linha selecionada da Object Table TB_CLI01. O argumento para
a funo, neste caso, foi o alias da tabela, pois desejvamos que a referncia fosse construda para cada objeto selecionado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
563
REFTOHEX
Esta funo converte o argumento <referncia> para o hexadecimal equivalente.
Nulo?
-------NOT NULL
NOT NULL
Tipo
--------------VARCHAR2(60)
NUMBER(3)
REF OF OT_CLI01
RF_TITULAR
-------------------------------------------------------------------------0000220208E435DF64234D4E2DAA9F6DF049B621BDD8980BE5F7B5486EA51EEA841695091B
000022020817F60FB77FB844CA9220544C6D55A7C0D8980BE5F7B5486EA51EEA841695091B
A Listagem 4.38 apresenta o resultado em hexadecimal do argumento RF_TITULAR. Esta funo chamada implicitamente
quando solicitamos a listagem de uma coluna REF, pois a informao apresentada no SQL*Plus deve ser legvel.
VALUE
A funo Value recebe como argumento a linha de uma object table ou object view. Este valor de argumento corresponde
ao alias da tabela. O valor retornado uma instncia do objeto, ou seja, os dados correspondentes a esta instncia.
NM_CLIENTE
-----------------------------PRIMEIRO CLIENTE
SEGUNDO CLIENTE
NR_TEL
-----------21-22345789
21-287890974
No exemplo da Listagem 4.39, obtivemos a mesma informao de duas formas diferentes. Na primeira solicitamos o
valor do objeto e na segunda a row da tabela. Observe que, na primeira forma, a resposta inclui o nome do objeto com
o contedo da instncia selecionada. Na segunda, recebemos apenas os valores dos atributos dos objetos selecionados.
MAKE_REF
Esta funo monta uma referncia (REF), baseada nas chaves informadas, para uma row de uma object view ou de
uma object table cujo OID baseado na primary key. Estas chaves devem identificar inequivocamente a linha
relacionada. Seu uso ser visto a seguir no tpico relativo a views.
Nulo?
-------NOT NULL
NOT NULL
Tipo
--------------NUMBER(3)
VARCHAR2(60)
VARCHAR2(20)
Na Listagem 4.40, criamos a view Vdep com o layout do objeto OT_DEP01. Este objeto possui os atributos escalares
NR_CARTAO e NM_DEPENDENTE, os quais foram selecionados diretamente da tabela relacional DEPENDENTE. A
referncia (RF_TITULAR) na tabela relacional corresponde ao relacionamento NR_CARTAO_TIT. Desta forma,
utilizamos a funo Make_Ref para criar uma referncia linha da view VCLI associada chave contida em
NR_CARTAO_TIT. Na view VCLI, o nmero do carto foi utilizado para identificao nica do objeto With Object
Identifier (nr_cartao). Retorne a este exemplo aps o estudo sobre Object Views.
OBJECT VIEWS
As Object Views tem a finalidade de simular a notao objeto tendo como origem tabelas ou views relacionais. A
definio destas views permite a criao de um ambiente de transio entre as tabelas relacionais e as Object Tables.
As aplicaes j escritas continuam vendo o ambiente apenas como relacional. As novas aplicaes j podem
considerar a existncia de objetos utilizando, no entanto, o mesmo conjunto de tabelas. Quando todas as aplicaes
tiverem sido convertidas basta que faamos a remoo das views e a carga das informaes armazenadas nas
tabelas-objeto. Desta forma, fica transparente para as novas aplicaes a que ambiente estamos fazendo acesso.
Para estudarmos a funcionalidade desta caracterstica criaremos as tabelas relacionais, as preencheremos e, em
seguida, criaremos as views.
Na Listagem 4.41, estamos criando uma tabela relacional chamada CLIENTE contendo as mesmas informaes das
tabelas Cliente criadas at agora: nome, nmero do carto e nmero de telefone.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
565
Na Listagem 4.42, foram includas trs linhas na tabela relacional CLIENTE e quatro linhas na tabela relacional DEPENDENTE.
Para prepararmos a visualizao das tabelas relacionais como objetos, usaremos os tipos OT_END01 e OT_CLI01 j
estudados anteriormente.
Tipo
--------------NUMBER(3)
VARCHAR2(60)
VARCHAR2(20)
Tipo
--------------VARCHAR2(60)
NUMBER(3)
REF OF OT_CLI01
Tipo
--------------NUMBER(3)
VARCHAR2(60)
VARCHAR2(20)
Tipo
--------------VARCHAR2(60)
NUMBER(3)
REF OF OT_CLI01
View VCLI Seleciona dados basicamente da tabela relacional CLIENTE e os formata na mesma ordem do
objeto OT_CLI01.
RF_TITULAR.NM_CLIENTE
--------------------Primeiro cliente
Segundo cliente
Segundo cliente
Primeiro cliente
Na Listagem 4.45, fazemos uma consulta total view VCLI e obtemos um resultado similar consulta a uma tabela
Objeto. No segundo comando SELECT utilizamos a referncia RF_TITULAR para atingir uma informao do objeto
correspondente. Observe que em ambos os casos usamos sintaxes associadas a objeto e o comportamento do View
similar a uma Object Table.
Nosso prximo passo sero as operaes de atualizao.
Na Listagem 4.46 criamos um trigger para a view VDEP, que faz uma referncia ao objeto cliente.
A funo Deref utilizada no exemplo far a obteno do objeto endereado pela view. De posse deste objeto,
podemos obter o nmero do carto para estabelecer o relacionamento.
No prximo exemplo, a cada incluso em VCLI so adicionadas linhas em CLIENTE.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
567
Executamos os comandos INSERT sobre as views-objeto e veremos a seguir o que aconteceu nas tabelas relacionais.
NM_CLIENTE
-------------------Primeiro cliente
Segundo cliente
Terceiro cliente
Quarto Cliente
NR_TEL
----------21-9876543
21-22849506
21-2208957
31-9874039
Na Listagem 4.48, vemos o resultado das incluses realizadas anteriormente e podemos conferir que as linhas
includas atravs da view VDEP foram associadas ao carto titular desejado.
EXERCCIOS
4.20) Monte uma listagem que apresente o funcionrio, seu endereo (utilize navegao via Ref) e seu cargo
(utilize a funo Deref).
4.21) A partir da tabela relacional Func, crie uma Object View que simule a tabela TB_FUNC. No inclua telefone
nesta simulao.
4.22) Crie uma trigger associada view do exerccio anterior e que realize as operaes de incluso ou excluso nas
tabelas correspondentes.
4.23) Faa uma rotina para incluso de linhas na tabela TB_TFUNC.
METODOLOGIA
Apresentao conceitual e formas de implementao no Oracle9i.
O QUE SO COLEES?
Uma coleo um conjunto ou reunio de objetos da mesma natureza ou que tm qualquer relao entre si. Em
PL/SQL estudamos a coleo Index-By Table.
No banco de dados podemos criar dois tipos de coleo:
VARRAY TYPE
Um varray uma coleo ordenada e limitada de elementos de mesmo tipo. Um Varray deve ter um nome (o
Oracle no suporta varrays annimos). Todos os varrays so de comprimento varivel (com um tamanho limite
inteiro); a alocao da informao ocorre medida que preenchemos a coleo.
O tipo de dado de um Varray pode ser: um escalar (varchar2, number, date, raw, char, etc.), uma referncia a um
objeto (Ref) ou um outro tipo objeto (contendo outro varray).
Como restrio temos que o tipo de dado de um varray no pode ser: um LOB ou um objeto do tipo XMLTYPE no banco de dados (em PL/SQL este
uso permitido) porque o Oracle armazena os dados de um XMLTYPE como CLOB.
O Varray pode ser armazenado na linha da tabela ou podemos determinar que seja armazenado externamente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
569
Observe que para incluirmos elementos no varray utilizamos o nome do tipo, como se fosse uma funo que
recebe parmetro. Na verdade, estamos invocando o mtodo construtor (constructor method) definido
implicitamente para cada tipo.
Para o ltimo cliente includo no informamos telefone. Neste caso, o mtodo construtor invocado sem parmetros,
porm apresentando o abre e fecha parnteses, como vimos anteriormente no estudo de objetos.
Neste exemplo, efetuamos a alterao de uma linha, inclusive modificando um nmero de telefone. Observe que
o Varray tratado como uma coluna nica. No temos mecanismo para indexar seus valores individualmente em
nvel de SQL; isto ser feito em PL/SQL.
NM_CLIENTE
-----------------------------CLIENTE DE TESTE 01
Fernando de Albuquerque
CLIENTE DE TESTE 03
NR_TEL
----------------------------------------ARR_TEL('2546789', '98765432', '5718395')
ARR_TEL('998765420', '96543295')
ARR_TEL()
Neste exemplo, efetuamos uma consulta sobre a tabela CLI04 contendo um array de telefones. Observe que a lista
apresentada mostra o tipo da coluna com os valores internamente.
A ordem da indexao importante. Um Varray uma coleo ordenada (por um indexador), enquanto uma
Nested Table no .
O nmero de elementos conhecido e pode ser limitado. O Varray fora a especificao de um nmero limite
de elementos. Seu armazenamento pode ser mais eficiente uma vez que a quantidade de ocorrncias conhecida,
enquanto Nested Tables no so limitadas.
No h necessidade de efetuarmos consultas freqentes a um elemento do Varray. Nos exemplos, voc verificou
que todas as ocorrncias do Varray so tratadas como se fossem um nico elemento tanto para atualizao
quanto para consulta. O acesso individual ao elemento deve ser feito atravs de rotinas PL/SQL. Havendo
necessidade de restries ou atualizaes individuais o formato tabela (Nested Table) pode ser prefervel. Caso
pretendamos recuperar a coleo como um todo, o Varray pode ser interessante.
No exemplo da Listagem 4.54 montamos um rotina para realizar a incluso na tabela CLI04 a partir de dados
fornecidos pelo usurio.
Para a utilizao de uma nova posio no Varray Vr_Telefone, tivemos de primeiramente estender o array (usamos
a procedure Extend para realizar esta operao). Em seguida, fizemos a atribuio indexada para o Varray.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
571
No exemplo da Listagem 4.54 temos alguns pontos a observar. Primeiramente declaramos o VARRAY a partir do
tipo definido diretamente no banco de dados. Nesta declarao devemos alocar o VARRAY. Por este motivo usamos
o mtodo construtor, sem parmetros para a construo da rea do array, vazia. A cada elemento a ser includo no
array, precisamos usar o mtodo EXTEND para alocar a rea da posio para que possamos preench-la. Estas so
as diferenas bsicas entre o uso de VARRAY (o mesmo se aplica a NESTED TABLES) e INDEX-BY TABLES.
O tipo de dado de uma Nested Table pode ser: um escalar (varchar2, number, date, raw, char, blob, clob, etc.), uma
referncia a um objeto (Ref), um tipo objeto.
Quando o tipo de dado um objeto, a nested table descreve uma tabela cujas colunas correspondem a atributos do
tipo objeto.
Quando seu tipo escalar, a nested table descreve uma tabela com uma nica coluna, de tipo escalar, chamada
column_value (nome padro predefinido).
Como restrio temos que o tipo de dado de uma Nested Table no pode ser NCLOB, mas pode ser BLOB ou CLOB.
Repetimos o exemplo do Varray para examinarmos as diferenas de utilizao entre um e outro. A primeira diferena j
observamos na definio, em que no mencionamos o limite. Uma coleo do tipo Nested Table no tem limite predefinido.
NUMBER(03),
VARCHAR2(60),
NT_TEL,
Na Listagem 4.56, estabelecemos a Nested Table como uma coluna da tabela relacional CLI05 e definimos que seu
armazenamento ser realizado na tabela fsica Tab_Nr_Tel.
Apesar de a tabela Tab_Nr_Tel no poder ser referenciada pela DML diretamente, alguns comandos de DDL podem ser
feitos para ela, tais como: adio de restries, ndices e modificaes de especificaes de armazenamento, dentre outros.
A incluso pode ser feita junto com a incluso da linha, como ocorreu para o carto 100 e 200. Para o carto 300,
inicialmente, utilizamos o mtodo default da Nested Table para indicar uma linha vazia para o telefone; no prximo
exemplo faremos a incluso de dados apenas na Nested Table.
Os comandos Insert da Listagem 4.58 incluem dados apenas na Nested Table e no na tabela CLI05.
A expresso TABLE obtm uma referncia Nested Table subordinada linha da tabela Cliente_03 indicada pela
clusula Where. A clusula Where identifica qual a linha da tabela cliente que contm a Nested Table na qual
desejamos efetuar a incluso.
Desta forma, a incluso se processa apenas na tabela embutida Nr_Tel do carto 300 e depois do carto 200.
A utilizao da expresso TABLE indica o retorno de uma Nested Table. Se mais de uma tabela embutida for
retornada, ocorrer um erro.
O comando de alterao inicialmente identifica a Nested Table com a expresso TABLE, da mesma forma que
fizemos na incluso, obtendo uma Nested Table relativa linha com carto 100 da tabela CLI05.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
573
NM_CLIENTE
-----------------------------CLIENTE DE TESTE 01
CLIENTE DE TESTE 02
CLIENTE DE TESTE 03
NR_TEL
---------------------------------------NT_TEL('2546789', '2345167', '5718395')
NT_TEL('2879076', '96543295', '5768493')
NT_TEL('98766432')
No comando Select da Listagem 4.60, facilmente obtivemos todas as linhas da tabela embutida Nr_Tel, de forma
similar ao que aconteceu com o Varray.
CURSOR STATEMENT : 3
CURSOR STATEMENT : 3
COLUMN_VA
--------2879076
300 CLIENTE DE TESTE 03
CURSOR STATEMENT : 3
CURSOR STATEMENT : 3
no h linhas selecionadas
J no comando Select da Listagem 4.61, imaginamos que somente os nmeros de telefone comeados com 2
interessavam ao resultado. Desta forma, precisamos realizar uma restrio sobre os dados trazidos da tabela embutida.
Para realizar esta operao, utilizamos a expresso Cursor que gera uma lista contendo as linhas de Nr_Tel que
satisfazem condio estabelecida. No necessitamos utilizar este recurso no primeiro comando Select (Listagem
4.60), porque todas as linhas de Nr_Tel foram selecionadas.
A palavra Table utilizada no subselect tem a finalidade de indicar que estamos consultando informaes de uma
Nested Table.
A consulta a linhas especficas da tabela embutida indispensvel. Este processo pode ser executado para Varrays,
porm perdemos em eficincia pois temos de usar o recurso (Cast) de transformar o Varray em uma Nested
Table dinmica primeiro.
A ordem de cadastramento das linhas no importante, e caso haja alguma necessidade de ordem podemos
prov-la atravs de um ndice em uma coluna da tabela embutida.
USANDO CAST
A funo Cast tem a finalidade de permitir a transformao de uma coleo em outra (Varrays em Nested Tables e
vice-versa).
Neste exemplo da Listagem 4.62 criamos um tipo de objeto OTEND01 com os atributos NM_RUA, CD_ESTADO e
NR_RUA. Em seguida criamos um VARRAY e uma NESTED TABLE baseados neste tipo de objeto (e no mais em
escalares, como fizemos anteriormente).
Na criao da tabela, utilizamos o Varray como atributo do objeto OTCLI06 e, posteriormente, da tabela CLI06.
R5',
S3',
R6',
T1',
'RJ',
'RS',
'RJ',
'RJ',
4539),
NULL),
409),
87)));
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
575
Neste exemplo utilizamos a funo Cast e transformamos as informaes do Varray em informaes de uma
Nested Table. Aparentemente o resultado o mesmo, com a diferena apenas no mtodo construtor, que neste
segundo exemplo mostra o mtodo da Nested Table e no do Varray.
A diferena est no fato de podermos obter linhas selecionadas de uma Nested Table e no termos esta possibilidade
em um Varray.
Quando usamos a expresso Cast, podemos tratar o Varray como uma Nested Table e utilizar as opes disponveis.
Ocorre alguma degradao na pesquisa por termos de, inicialmente, transformar o Varray na Nested Table, porm,
em diversas situaes, isto pode ser extremamente til.
Na Listagem 4.67, no subselect, a operao mais interna transformar um determinado Varray (referente ao carto
100) em uma Nested Table. Com a indicao de que o resultado do subselect retornaria a referncia a uma tabela
Na Listagem 4.68, estamos criando tabelas relacionais com a mesma informao relativa tabela Nested ou ao Varray.
Na Listagem 4.69, executamos um comando Select relacionando uma tabela relacional e uma tabela objeto.
O layout da tabela relacional foi adaptado ao layout da coleo NTEND01. Isto possvel graas expresso Cast
utilizada junto com Multiset. Multiset indica que o subselect retornar mais de uma linha.
Os dados retornados possuem a mesma definio e so selecionados na mesma ordem do objeto OTEND01 (Nested
Table NTEND01). A sintaxe as NTEND01 indica qual tipo de coleo o resultado se compara. A expresso Cast
faz, ento, a adaptao.
Isto permite que utilizemos tabelas relacionais, porm j com a sintaxe objeto-relacional. Pode ser til em Object
Views, j estudadas anteriormente.
EXERCCIOS
4.24) Incluir o telefone 938274039, ddd 31, celular, para o funcionrio de matrcula 400. Inclua tambm o telefone
28495098, ddd 11, no celular, para o funcionrio de matrcula 600.
4.25) Deseja-se um arquivo contendo: nome do funcionrio, telefone completo, nascimento, nome do cargo,
salrio e grau de instruo. O arquivo deve receber os dados ordenados por nome do cargo e nome do funcionrio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
577
TCNICA
Apresentao dos scripts para montagem da base de dados contendo objetos e colees.
MODELO OBJETO
O modelo apresentado na Figura 4.03 apresenta os tipos de objeto que usaremos nos exerccios deste captulo.
No diagrama o tipo de objeto Tpessoa herdado por dois tipos: Tfunc e Tcliente. Tfunc tem uma associao com
Tcargo, enquanto que Tcliente tem uma associao com Tempresa. Ttel uma agregao presente em Tcliente,
Tempresa e Tfunc. J Tend uma agregao para Tcliente e Tfunc. Tend ainda tem uma associao com Testado.
O nico tipo de objeto que no possui mtodo Tempresa. Todos os outros possuem.
O tipo de objeto Tpessoa abstrato, ou seja, foi definido como Not Instantiable. Ele tem a finalidade de determinar
um padro para os tipos Tcliente e Tfunc. Em cada um dos tipos de objeto (exceto Tempresa) foi criado um mtodo
do tipo Map para garantir que poderemos estabelecer ordenao pelo atributo correspondente.
As colees no foram apresentadas no diagrama. Para que cada cliente pudesse informar diversos telefones, os
objetos do tipo Ttel foram organizados em um varray de nome Tvtel (isto ocorre para Tcliente e Tfunc, mas no
TABLE TB_TESTADO;
TABLE TB_TCARGO;
TABLE TB_TFUNC;
TABLE TB_TEMPRESA;
INDEX IND_TNEND;
TABLE TB_TCLIENTE;
TYPE TCARGO FORCE;
TYPE TCLIENTE FORCE;
TYPE TEMPRESA FORCE;
TYPE TEND FORCE;
TYPE TESTADO FORCE;
TYPE TFUNC FORCE;
TYPE TNEND FORCE;
TYPE TPESSOA FORCE;
TYPE TTEL FORCE;
TYPE TVTEL FORCE;
Nesse primeiro script, todas as tabelas so removidas, o que permite que reexecutemos as mesmas operaes
diversas vezes e faamos a implementao do modelo novamente; portanto, no se espante se na primeira vez que
voc execut-lo cada um dos comandos DROP apresente a mensagem de erro ERRO na linha 1: ORA-00942: a
tabela ou view no existe.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
579
Neste script criamos os tipos de objeto e aqueles tipos referentes a colees. Observe que criamos um supertipo
TPESSOA com a especificao NOT INSTANTIABLE; isto significa que no poderemos instanciar objetos para este
tipo. Podemos dizer que se trata de um tipo de objeto abstrato. Todos os mtodos associados a este tipo tambm
receberam a especificao NOT INSTANTIABLE. Neste caso, o objetivo foi estabelecer um padro de rotina. A
rotina no foi implementada no nvel TPESSOA; no entanto seu nome, parmetros e tipo de retorno foram
especificados neste nvel e devero ser respeitados pelos subtipos associados.
Neste script criamos as tabelas associadas ao modelo para os tipos previamente definidos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
581
Neste script definimos os mtodos para cada um dos tipos. Apesar da diversidade de mtodos, a lgica individual
de cada um bem simples.
Com este script inclumos algumas poucas linhas nas tabelas criadas. Ao longo dos exerccios incluiremos mais
algumas linhas. Iniciemos, portanto, os exerccios.
Como a tabela possui diversas colunas listamos apenas trs delas e solicitamos ordenao pela coluna nm_endereo,
como se ela fosse uma coluna escalar. Verifique a funo Map associada a Tend e observe que a ordenao se dar
pelo nmero do CEP.
Listagem-resposta 4.01B
SQL> SELECT VALUE(C) FROM TB_TFUNC C
2
ORDER BY 1;
VALUE(C)(NM_PESSOA, CD_PESSOA, IN_TIPO_PESSOA, NR_TELEFONE(NR_DDD, NR_TEL, IN_CE
-------------------------------------------------------------------------------TFUNC('Daniel Marques', 100, 'F ', TVTEL(TTEL(21, 22389576, 'N'), TTEL(21, 92398
75, 'S')), '07/03/80', '01/07/00', 3800, 000022020827F30CAB40444F26A5126DCA2DFE1
FA6738452E4B14D4EA691241F3F54126040, TEND('Av Niemyer', 'Leblon', 'Rio de Janeir
o', 0000220208708EE7F500A74950A8161B1953E759802DB4EF2BD141485BB762A457C0DFD6C8,
12, 20854900), 55)
TFUNC('Davi Barbosa', 300, 'F ', TVTEL(TTEL(21, 22985467, 'N'), TTEL(21, 9127845
, 'S')), '30/03/82', '01/05/01', 3000, 000022020827F30CAB40444F26A5126DCA2DFE1FA
6738452E4B14D4EA691241F3F54126040, TEND('Av das Amricas', 'Barra da Tijuca', 'R
io de Janeiro', 0000220208708EE7F500A74950A8161B1953E759802DB4EF2BD141485BB762A4
57C0DFD6C8, 23987, 20954900), 55)
TFUNC('Gabriel Azevedo', 200, 'F ', TVTEL(TTEL(21, 22478912, 'N'), TTEL(21, 9098
5430, 'S')), '07/10/78', '01/12/00', 3500, 000022020872C52048B9BB453D9202BC42EAD
6B92F738452E4B14D4EA691241F3F54126040, TEND('Av das Amricas', 'Barra da Tijuca'
, 'Rio de Janeiro', 0000220208708EE7F500A74950A8161B1953E759802DB4EF2BD141485BB7
62A457C0DFD6C8, 11233, 20954900), 55)
Nesta segunda forma de leitura dos dados usamos a funo Value e solicitamos a ordenao pelo prprio objeto
Tfunc. No corpo do pacote Tfunc encontramos a funo Ordena que do tipo Map. Verifique a rotina para saber
como foi feita esta ordenao.
4.02) Inclua uma nova linha na tabela Tb_tcargo utilizando o mtodo construtor Tcargo.
Listagem-resposta 4.02A
SQL> INSERT INTO TB_TCARGO VALUES (TCARGO('Professor', 3));
1 linha criada.
4.03) Inclua um novo funcionrio em Tb_Tfunc. No fornea valor para as colunas cd_cargo, nr_telefone e cd_estado.
Listagem-resposta 4.03A
SQL> INSERT INTO TB_TFUNC
2 (NM_PESSOA, CD_PESSOA, IN_TIPO_PESSOA, DT_NASC, DT_ADM,
3
VL_SAL, NM_ENDERECO, NR_GIT) VALUES
4 ('Joo Pedro', 400, 'PF', TO_DATE('12041989', 'DDMMYYYY'), SYSDATE, 2000,
5
TEND('Rua Pereira Nunes', 'Tijuca', 'Rio de Janeiro', null, 144, 20123650), 45);
1 linha criada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
583
Listagem-resposta 4.04A
SQL> SELECT C.MCARGO(), CD_CARGO FROM TB_TCARGO C;
4.05) Crie um programa em PL/SQL que receba como parmetro o cdigo do funcionrio e seu endereo para
alterao. Estado no deve ser modificado.
Listagem-resposta 4.05A
SQL> CREATE OR REPLACE PROCEDURE ALTFUNC (PCOD IN NUMBER,
PRUA IN VARCHAR2 := NULL,
2
PBAIRRO IN VARCHAR2 := NULL, PCIDADE IN VARCHAR2 := NULL,
3
PNR IN NUMBER
:= NULL, PCEP IN NUMBER
:= NULL) IS
4
WEND
TEND;
5
WROW
ROWID;
6 BEGIN
7
SELECT E.NM_ENDERECO, ROWID INTO WEND, WROW
8
FROM TB_TFUNC E
9
WHERE CD_PESSOA = PCOD
10
FOR UPDATE;
11
WEND.NM_RUA
:= NVL(PRUA, WEND.NM_RUA);
12
WEND.NM_BAIRRO
:= NVL(PBAIRRO, WEND.NM_BAIRRO);
13
WEND.NM_CIDADE
:= NVL(PCIDADE, WEND.NM_CIDADE);
14
WEND.NR_RUA
:= NVL(PNR, WEND.NR_RUA);
15
WEND.NR_CEP
:= NVL(PCEP, WEND.NR_CEP);
16
UPDATE TB_TFUNC F
17
SET F.NM_ENDERECO = WEND
18
WHERE ROWID = WROW;
19
COMMIT;
20 END;
21 /
Procedimento criado.
4.06) Usando a rotina do exerccio anterior, atualize o CEP do funcionrio de matrcula 200 para o valor 20789500.
Aps a atualizao verifique o resultado.
Listagem-resposta 4.06A
SQL> EXECUTE ALTFUNC(200, PCEP => 20789500);
Procedimento PL/SQL concludo com sucesso.
SQL> SELECT F.NM_ENDERECO, CD_PESSOA FROM TB_TFUNC F;
NM_ENDERECO(NM_RUA, NM_BAIRRO, NM_CIDADE, CD_ESTADO, NR_RUA, NR_CEP)
-------------------------------------------------------------------CD_PESSOA
---------TEND('Av Niemyer', 'Leblon', 'Rio de Janeiro', 0000220208708EE7F500A74950A8161B1
953E759802DB4EF2BD141485BB762A457C0DFD6C8, 12, 20854900)
100
TEND('Av das Amricas', 'Barra da Tijuca', 'Rio de Janeiro', 0000220208708EE7F50
0A74950A8161B1953E759802DB4EF2BD141485BB762A457C0DFD6C8, 11233, 20789500)
200
TEND('Av das Amricas', 'Barra da Tijuca', 'Rio de Janeiro', 0000220208708EE7F50
0A74950A8161B1953E759802DB4EF2BD141485BB762A457C0DFD6C8, 23987, 20954900)
300
4.07) Selecione com um nico comando o nome do funcionrio e o nome de seu cargo. No utilize join.
Listagem-resposta 4.07A
SQL> COL NM_PESSOA FOR A30
SQL> COL CARGO FOR A20
SQL> SELECT F.NM_PESSOA, F.CD_CARGO.NM_CARGO CARGO FROM TB_TFUNC F;
4.08) Atualize a tabela de funcionrios associando o cargo 3 (professor) ao funcionrio de matrcula 400.
4.09) Inclua uma nova linha em funcionrio informando, simultaneamente, valor para cargo e estado.
Listagem-resposta 4.09A
SQL> INSERT INTO TB_TFUNC F VALUES
2 ('Alfredo Lima', 600, 'PJ', NULL, TO_DATE('07031983'),
3
SYSDATE, 800, (SELECT REF(C) FROM TB_TCARGO C WHERE CD_CARGO = 2),
4
TEND('Rua Ipiranga', 'Centro', 'Petrpolis',
5
(SELECT REF(E) FROM TB_TESTADO E WHERE CD_ESTADO = 'RJ'),
6
42, 25985020), 55);
1 linha criada.
4.10) Verifique se existe algum cliente sem definio de empresa ou com especificao de empresa invlida.
Listagem-resposta 4.10A
SQL> SELECT CD_PESSOA, NM_PESSOA, 'SEM EMPRESA'
2
FROM TB_TCLIENTE
3
WHERE CD_EMP IS NULL
4
OR CD_EMP IS DANGLING;
4.11) Inclua uma nova linha na tabela TB_TEMPRESA sem informar valor para as colunas nm_empresa e nr_telefone.
O que acontece? Por qu? Em que local a restrio definida?
Listagem-resposta 4.11A
SQL> INSERT INTO TB_TEMPRESA (CD_EMPRESA) VALUES (4);
INSERT INTO TB_TEMPRESA (CD_EMPRESA) VALUES (4)
*
ERRO na linha 1:
ORA-01400: no possvel inserir NULL em (DESENV.TB_TEMPRESA.NM_EMPRESA)
Ocorre um erro (mostrado na resposta 4.11A) porque o atributo NM_EMPRESA de preenchimento obrigatrio. As
restries so definidas quando o objeto implementado em uma tabela.
4.12) Obtenha informaes relativas a cargo e estado, quando possvel. Use DEREF.
Listagem-resposta 4.12A
SQL> SELECT F.NM_PESSOA, DEREF(F.CD_CARGO) CARGO,
2
F.NM_ENDERECO.CD_ESTADO ESTADO
3
FROM TB_TFUNC F
4 WHERE F.CD_CARGO IS NOT NULL
5
AND F.CD_CARGO IS NOT DANGLING
6
AND F.NM_ENDERECO.CD_ESTADO IS NOT NULL
7
AND F.NM_ENDERECO.CD_ESTADO IS NOT DANGLING;
trs atributos tempo de vo, quantidade mnima de metros da pista de aterrissagem e tempo para levantar vo.
trs mtodos VOAR (que apresenta uma mensagem sobre o tempo de vo), ATERRISSAR (que apresenta uma
mensagem sobre o tamanho da pista) e ALAR (que indique o tempo para levantar vo).
O tipo de objeto Nave deve ser considerado um tipo concreto, isto , pode ser instanciado. No entanto ele ser
herdado por outros tipos.
Listagem-resposta 4.13A
SQL> CREATE OR REPLACE TYPE NAVE AS OBJECT
2 (VOO
NUMBER,
3
PISTA
NUMBER,
4
TEMPO
NUMBER,
5
MEMBER FUNCTION VOAR RETURN VARCHAR2,
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
585
4.14) Criar um tipo de objeto PASSARO derivado de NAVE que contenha os mtodos VOAR (que indique o tempo
mximo de vo do pssaro) e ALAR (que indique a envergadura do pssaro).
O tipo de objeto Passaro deve ser considerado concreto, isto , pode ser instanciado. No entanto ele no mais
poder ser herdado por outros tipos.
Listagem-resposta 4.14A
SQL>
2
3
4
5
6
Tipo
SQL>
2
3
4
5
6
7
8
9
10
11
Tipo
Tipo
-----NUMBER
NUMBER
NUMBER
NUMBER
METHOD
-----MEMBER FUNCTION VOAR RETURNS VARCHAR2
METHOD
-----MEMBER FUNCTION ATERRISSAR RETURNS VARCHAR2
METHOD
-----MEMBER FUNCTION ALAR RETURNS VARCHAR2
Listagem-resposta 4.15A
SQL>
2
3
4
5
6
Tipo
SQL>
2
3
4
5
6
7
8
9
10
11
Tipo
Observe que Balao tambm derivado de Nave; no entanto seus atributos so diferentes dos de Passaro pois ele
acrescentou o atributo LATITUDE queles herdados de Nave. As funes Voar e Aterrissar foram substitudas por
funes prprias, enquanto que Alar corresponde mesma funo implementada em Nave.
4.16) Criar uma aplicao que receba como parmetro um tipo de objeto Nave e que execute os mtodos ATERRISSAR,
VOAR e ALAR. Acione a rotina passando como parmetro um objeto do tipo Nave, Passaro e Balao. Qual o
resultado obtido e por qu?
Listagem-resposta 4.16A
SQL> CREATE OR REPLACE FUNCTION POLIMORFISMO(POBJETO IN NAVE) RETURN VARCHAR2 IS
2
RETORNO
VARCHAR2(1000);
3 BEGIN
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
587
A funo criada espera receber como parmetro um objeto do tipo Nave. Desta forma a expectativa que as rotinas
a serem executadas sejam aquelas relativas a Nave.
Listagem-resposta 4.16B
SQL>
2
3
4
5
6
'NAVE'
-----POLIMORFISMO
-----------BALAO
O tempo para o balo atingir 50M de 8 horas
A latitude atual 11 graus
O tempo previsto para o avio alar vo de 10 minutos
NAVE
O tempo previsto de vo de 1 horas
O tamanho mnimo para a pista de aterrissagem de 2 metros
O tempo previsto para o avio alar vo de 3 minutos
PASSARO
O tempo mximo de voo do pssaro de 4 horas
O tamanho mnimo para a pista de aterrissagem de 5 metros
A envergadura do pssaro de 7 metros
Observe que, quando passamos como parmetro um objeto do tipo Balo, o software percebeu que o objeto
pertencia hierarquia de Nave, porm no era Nave e sim Balo e executou o mtodo relativo a Balo e no a Nave.
Esta caracterstica se chama Polimorfismo.
4.17) Crie uma rotina que, aleatoriamente, armazene em um array objetos do tipo Nave, Balao ou Passaro. A
quantidade de elementos do array ser passado como parmetro. Ao trmino do preenchimento do array execute
e apresente as mensagens enviadas pelos mtodos associados ao objeto construdo.
Listagem-resposta 4.17A
SQL> CREATE OR REPLACE PROCEDURE POLIMORFISMO2(PQTD IN NUMBER) IS
2
TYPE TAB
IS TABLE OF NAVE INDEX BY BINARY_INTEGER;
3
LINHA
TAB;
4
VRANDOM
NUMBER;
5
RETORNO
VARCHAR2(1000);
6 BEGIN
7
DBMS_RANDOM.INITIALIZE(TO_NUMBER(TO_CHAR(SYSDATE,'SSMIHH24DD')));
8
FOR I IN 1..PQTD LOOP
9
VRANDOM := MOD(DBMS_RANDOM.RANDOM, 3);
10
CASE VRANDOM WHEN 0 THEN LINHA(I) := NAVE(1, 2, 3);
11
WHEN 1 THEN LINHA(I) := PASSARO(4, 5, 6, 7);
12
ELSE
LINHA(I) := BALAO(8, 9, 10, 11);
13
END CASE;
14
END LOOP;
15
FOR I IN 1..PQTD LOOP
16
RETORNO := LINHA(I).VOAR||CHR(10)||
17
LINHA(I).ATERRISSAR||CHR(10)||
18
LINHA(I).ALAR||CHR(10);
19
DBMS_OUTPUT.PUT_LINE(RETORNO);
20
END LOOP;
21 END;
22 /
Procedimento criado.
Listagem-resposta 4.17B
SQL> SET LINESIZE 300
SQL> SET SERVEROUT ON
SQL> EXECUTE POLIMORFISMO2(4);
O tempo previsto de vo de 1 horas
O tamanho mnimo para a pista de aterrissagem de 2 metros
O tempo previsto para o avio alar vo de 3 minutos
O tempo para o balo atingir 50M de 8 horas
A latitude atual 11 graus
O tempo previsto para o avio alar vo de 10 minutos
O tempo previsto de vo de 1 horas
O tamanho mnimo para a pista de aterrissagem de 2 metros
O tempo previsto para o avio alar vo de 3 minutos
O tempo para o balo atingir 50M de 8 horas
A latitude atual 11 graus
O tempo previsto o avio alar vo de 10 minutos
Procedimento PL/SQL concludo com sucesso.
Pelo resultado observamos que nesta execuo foram construdos dois objetos do tipo Balao e dois objetos do tipo
Passaro. A caracterstica de Polimorfismo observada mais uma vez pois ao tempo de execuo construmos,
aleatoriamente, os objetos e o software foi capaz de constru-los, identific-los e executar o mtodo adequado ao
objeto correspondente.
4.18) Crie uma tabela para armazenamento de Naves. Faa uma rotina para, aleatoriamente, incluir objetos do tipo
Nave, Passaro ou Balao. Use a funo Treat para facilitar o armazenamento.
Listagem-resposta 4.18A
SQL> CREATE TABLE TB_NAVE OF NAVE;
Tabela criada.
SQL> CREATE OR REPLACE PROCEDURE INAVE (PQTD IN NUMBER) IS
2
VRANDOM
NUMBER;
3 BEGIN
4
DBMS_RANDOM.INITIALIZE(TO_NUMBER(TO_CHAR(SYSDATE,'SSMIHH24DD')));
5
FOR I IN 1..PQTD LOOP
6
VRANDOM := MOD(DBMS_RANDOM.RANDOM, 3);
7
CASE VRANDOM
8
WHEN 2 THEN INSERT INTO TB_NAVE VALUES (NAVE(1, 2, 3));
9
WHEN 1 THEN INSERT INTO TB_NAVE VALUES (TREAT (PASSARO(4, 5, 6, 7) AS NAVE));
10
ELSE
INSERT INTO TB_NAVE VALUES (TREAT (BALAO(8, 9, 10, 11) AS NAVE));
11
END CASE;
12
END LOOP;
13 END;
14 /
Procedimento criado.
Observe que ao tempo de execuo preenchemos as linhas da tabela com objetos contendo caractersticas diferentes,
porm somente os atributos comuns sero includos na tabela TB_NAVE.
4.19) Execute a rotina criada no exerccio anterior e inclua 10 objetos na tabela TB_NAVE. Em seguida prepare um
comando de SQL que liste apenas os objetos do tipo definido como parmetro pelo usurio.
Listagem-resposta 4.19A
SQL> EXECUTE INAVE(10);
Procedimento PL/SQL concludo com sucesso.
SQL> SELECT * FROM TB_NAVE N
2
WHERE VALUE(N) IS OF (ONLY &TIPO);
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
589
Observe que, mesmo que algumas caractersticas do objeto sejam perdidas, pelo fato de estar sendo armazenada
em uma tabela do supertipo, a identificao do tipo de objeto no perdida, o que permite que o mtodo adequado
seja executado, como apresentado na Listagem-resposta 4.19B.
Listagem-resposta 4.19B
SQL> select n.voar() from tb_nave n;
N.VOAR()
--------------------------------------------O tempo para o balo atingir 50M de 8 horas
O tempo para o balo atingir 50M de 8 horas
O tempo mximo de voo do pssaro de 4 horas
O tempo para o balo atingir 50M de 8 horas
O tempo mximo de voo do pssaro de 4 horas
O tempo para o balo atingir 50M de 8 horas
O tempo para o balo atingir 50M de 8 horas
O tempo para o balo atingir 50M de 8 horas
O tempo para o balo atingir 50M de 8 horas
O tempo para o balo atingir 50M de 8 horas
10 linhas selecionadas.
4.20) Monte uma listagem que apresente o funcionrio, seu endereo (utilize navegao via Ref) e seu cargo
(utilize a funo Deref).
Listagem-resposta 4.20A
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
2
3
4
5
4.21) A partir da tabela relacional Func, crie uma Object View que simule a tabela TB_FUNC. No inclua telefone
nesta simulao.
Listagem-resposta 4.21A
SQL> CREATE TABLE TB_CARGO
2 (CD_CARGO
NUMBER,
END_FUNC
NUMBER(5),
VARCHAR2(100),
VARCHAR2(100),
VARCHAR2(100),
VARCHAR2(2),
NUMBER,
NUMBER(8),
(CD_MAT),
(CD_MAT) REFERENCES FUNC
TEL_FUNC
NUMBER(5),
NUMBER(2),
NUMBER(12),
CHAR(1),
(CD_MAT, NR_DDD, NR_TEL),
(CD_MAT) REFERENCES FUNC
Para reproduzir o ambiente objeto, algumas informaes devem ser acrescidas no ambiente relacional. Nossa
primeira etapa deste exerccio, se refere a este acrscimo: criao de uma tabela de cargos (independente), criao
de uma tabela de endereos (dependente de Func, com relacionamento 1 para 1) e criao de uma tabela de
telefones (dependente de Func, com relacionamento 1 para n). A tabela TEL_FUNC no ser usada neste momento.
Listagem-resposta 4.21B
SQL> INSERT INTO TEL_FUNC
2 SELECT CD_MAT, 21, '2223'||LPAD(NR_RAMAL, 4, '0'), 'N'
3
FROM FUNC;
SQL> INSERT INTO TB_CARGO
2 SELECT DISTINCT NR_CARGO, 'CARGO '||NR_CARGO
3
FROM FUNC
4 WHERE NR_CARGO IS NOT NULL;
Como segundo passo, fizemos o preenchimento dos dados destas tabelas a partir dos dados de Func, quando
possvel. A tabela TB_END est vazia pois estes dados no existiam, originariamente, em Func.
Listagem-resposta 4.21C
SQL> CREATE OR REPLACE VIEW VCARGO OF TCARGO
2
WITH OBJECT IDENTIFIER (CD_CARGO)
3
AS SELECT NM_CARGO, CD_CARGO
4
FROM TB_CARGO
5 /
View criada.
Neste passo criamos a view para simulao da referncia a cargo. A criao de uma view deste tipo s necessria
se tivermos usado referncia (REF), como o caso com cargo. A simulao nica de um objeto feita diretamente
na view final. Veja a Listagem-resposta 4.21D.
Listagem-resposta 4.21D
SQL> CREATE OR REPLACE VIEW VFUNC OF TFUNC
2
WITH OBJECT IDENTIFIER (CD_PESSOA) AS
3
SELECT NM_FUNC||' '||NM_SOBRENOME NM_PESSOA, FUNC.CD_MAT CD_PESSOA,
4
'PF' IN_TIPO_PESSOA,
5
TVTEL(TTEL(21, TO_NUMBER('2223'||LPAD(NR_RAMAL, 4, '0')), 'N')) NR_TELEFONE,
6
DT_NASC, DT_ADM, VL_SAL, MAKE_REF(VCARGO, NR_CARGO) CD_CARGO,
7
TEND(NM_RUA, NM_BAIRRO, NM_CIDADE,
8
(SELECT REF(T) FROM TB_TESTADO T WHERE T.CD_ESTADO = END_FUNC.CD_ESTADO),
9
NR_RUA, NR_CEP) NM_ENDERECO, NR_GIT
10
FROM FUNC, END_FUNC
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
591
Tipo
------------VARCHAR2(25)
NUMBER(5)
CHAR(2)
TVTEL
DATE
DATE
NUMBER
REF OF TCARGO
TEND
NUMBER
Como ltima etapa construmos a view e verificamos o resultado. Observe que a descrio da view ficou igual
descrio do objeto TFUNC (excetuando-se os mtodos).
A construo da view possui trs pontos que merecem a nossa ateno:
a construo do varry TVTEL. Uma vez que o estudo de colees ocorrer no prximo tpico, simplesmente
acionamos o mtodo construtor do varry e o mtodo construtor do tipo de objeto armazenado no varry e
usamos constantes e o nmero do ramal do funcionrio para compor o resultado.
o cargo presente em TFUNC correspondia a uma referncia ao objeto TCARGO. Desta forma criamos uma view
VCARGO, que simula a construo de um objeto com OID definido por cd_cargo, sobre a tabela Tb_cargo. Na
view usamos a funo make_ref para construir a referncia ao elemento correspondente na view VCARGO. O
acesso a esta view feito atravs da coluna nr_cargo da tabela Func.
a referncia a estado presente na descrio de endereo deveria ser simulada tambm, porm no criamos uma
tabela relacional para isto. Inclumos, ento, um comando SELECT (na posio desejada) que obtivesse a referncia
(REF) da linha com o cdigo de estado igual ao valor escalar presente na tabela END_FUNC.
Como a tabela END_FUNC estava vazia foi necessrio um Outer Join na clusula Where da view. O comando Insert
e o Select posteriores tiveram apenas o objetivo de teste.
4.22) Crie uma trigger associada view do exerccio anterior e que realize as operaes de incluso ou excluso nas
tabelas correspondentes.
Listagem-resposta 4.22A
SQL> CREATE OR REPLACE TRIGGER TG_VFUNC
2
INSTEAD OF INSERT OR DELETE ON VFUNC
3 DECLARE
4
OESTADO
TESTADO;
5
OEND
TEND;
6
OTEL
TTEL;
7
OCARGO
TCARGO;
8
RFUNC
FUNC%ROWTYPE;
9
POS
NUMBER;
No trigger do exerccio 4.22 tnhamos como problema a ser resolvido a obteno do nr_ramal, cd_estado e nr_cargo.
Declaramos, ento, variveis do tipo de objeto correspondente para que pudssemos realizar os acessos necessrios.
Para telefone, como estamos supondo apenas uma ocorrncia, obtivemos a primeira posio do array e associamos
a um objeto do tipo TTEL. Para obter os valores escalares relativos s referncias de estado e cargo, fizemos uma
decomposio da referncia para rea do tipo de objeto correspondente.
Listagem-resposta 4.22B
SQL> INSERT INTO VFUNC VALUES
2 ('TESTE TRIGGER', 9999, 'PF',
3
TVTEL(TTEL(21, 22879181, 'N')), TO_DATE('01012001', 'DDMMYYYY'),
4
TO_DATE('01102001', 'DDMMYYYY'), 500,
5
(SELECT REF(C) FROM VCARGO C WHERE CD_CARGO = 60),
6
TEND('RUA 1', 'BAIRRO 1', 'CIDADE 1',
7
(SELECT REF(E) FROM TB_TESTADO E WHERE CD_ESTADO = 'RJ'),
8
2, 23098765), 55);
1 linha criada.
SQL> SELECT * FROM FUNC WHERE CD_MAT = 9999;
SQL> SELECT * FROM END_FUNC WHERE CD_MAT = 9999;
O comando Insert foi feito sobre a view. Os dois comandos SELECT nas tabelas relacionais completam o teste.
4.23) Faa uma rotina para incluso de linhas na tabela TB_TFUNC.
Listagem-resposta 4.23A
SQL> CREATE OR REPLACE
2 PROCEDURE IFUNC(PCOD
3
PDDD
4
PCEL
5
PSAL
6
PNMRUA
IN
IN
IN
IN
IN
NUMBER,
NUMBER
VARCHAR2
NUMBER
VARCHAR2
:=
:=
:=
:=
NULL,
NULL,
NULL,
NULL,
PNOME
PTEL
PNASC
PCARGO
PBAIRRO
IN
IN
IN
IN
IN
VARCHAR2,
NUMBER
:=
VARCHAR2 :=
NUMBER
:=
VARCHAR2 :=
NULL,
NULL,
NULL,
NULL,
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
593
4.24) Incluir o telefone 938274039, ddd 31, celular, para o funcionrio de matrcula 400. Inclua tambm o telefone
28495098, ddd 11, no celular, para o funcionrio de matrcula 600.
Listagem-resposta 4.24A
SQL> DECLARE
2
OVTEL
TVTEL;
3
OTEL
TTEL;
4
ULTIMO
NUMBER;
5 BEGIN
6
SELECT NR_TELEFONE INTO OVTEL
7
FROM TB_TFUNC
8
WHERE CD_PESSOA = &mat;
9
IF OVTEL IS NOT NULL THEN
10
OVTEL.EXTEND;
11
ELSE
12
OVTEL := TVTEL(TTEL(NULL, NULL, NULL));
13
END IF;
14
ULTIMO := OVTEL.LAST;
15
OVTEL(ULTIMO) := TTEL(&ddd, &tel, UPPER('&cel'));
16 END;
17 /
Entre o valor para mat: 600
Entre o valor para ddd: 11
Entre o valor para tel: 28495098
Entre o valor para cel: n
Procedimento PL/SQL concludo com sucesso.
4.25) Deseja-se um arquivo contendo: nome do funcionrio, telefone completo, nascimento, nome do cargo,
salrio e grau de instruo. O arquivo deve receber os dados ordenados por nome do cargo e nome do funcionrio.
Observe que utilizamos o mtodo Mtel do tipo de objeto Otel para montar o telefone.
4.26) Faa uma rotina que realize incluso de novos endereos para cliente.
Listagem-resposta 4.26A
SQL> CREATE OR REPLACE
2 PROCEDURE IECLI (PCOD
IN NUMBER,
PNMRUA IN VARCHAR2,
3
PBAIRRO IN VARCHAR2 := NULL, PCITY IN VARCHAR2 := NULL,
4
PCDUF
IN VARCHAR2 := NULL, PNRRUA IN NUMBER
:= NULL,
5
PCEP
IN NUMBER
:= NULL) IS
6
OEND
TEND
:= TEND(NULL, NULL, NULL, NULL, NULL, NULL);
7
OCLI
TCLIENTE;
8 BEGIN
9
IF PCDUF IS NOT NULL THEN
10
BEGIN
11
SELECT REF(S) INTO OEND.CD_ESTADO
12
FROM TB_TESTADO S WHERE CD_ESTADO = PCDUF;
13
EXCEPTION
14
WHEN NO_DATA_FOUND THEN
15
OEND.CD_ESTADO := NULL;
16
END;
17
END IF;
18
OEND := TEND(PNMRUA, PBAIRRO, PCITY, OEND.CD_ESTADO, PNRRUA, PCEP);
19
SELECT VALUE(C) INTO OCLI FROM TB_TCLIENTE C WHERE CD_PESSOA = PCOD FOR UPDATE;
20
IF OCLI.NM_ENDERECO IS NULL THEN
21
OCLI.NM_ENDERECO := TNEND(OEND);
22
ELSE
23
OCLI.NM_ENDERECO.EXTEND;
24
OCLI.NM_ENDERECO(OCLI.NM_ENDERECO.LAST) := OEND;
25
END IF;
26
UPDATE TB_TCLIENTE C
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
595
4.27) Faa uma rotina que apresente para cada cliente a lista de endereos cadastrados.
Listagem-resposta 4.27A
SQL> CREATE OR REPLACE PROCEDURE CECLI IS
2
OEND
TEND;
3
UF
TESTADO;
4
NMUF
VARCHAR2(100);
5 BEGIN
6
FOR R1 IN (SELECT * FROM TB_TCLIENTE) LOOP
7
DBMS_OUTPUT.PUT_LINE('Cliente: '||LPAD(R1.CD_PESSOA, 4)||' - '||
8
RPAD(R1.NM_PESSOA, 20));
9
DBMS_OUTPUT.PUT_LINE('Endereos:');
10
FOR I IN 1..R1.NM_ENDERECO.LAST LOOP
11
OEND := R1.NM_ENDERECO(I);
12
IF OEND.CD_ESTADO IS NOT NULL THEN
13
SELECT DEREF(OEND.CD_ESTADO) INTO UF FROM DUAL;
14
NMUF := UF.NM_ESTADO;
15
ELSE
16
NMUF := ' ';
17
END IF;
18
DBMS_OUTPUT.PUT_LINE(RPAD(OEND.NM_RUA, 20)||' '||RPAD(OEND.NM_BAIRRO, 20)||' '||
19
RPAD(OEND.NM_CIDADE, 20)||' '||RPAD(NMUF, 20)||' '||
20
LPAD(OEND.NR_RUA,7)||' '||LPAD(OEND.NR_CEP, 8, ' '));
21
END LOOP;
22
DBMS_OUTPUT.PUT_LINE('---------------');
23
END LOOP;
24 END;
25 /
Procedimento criado.
SQL> EXECUTE CECLI
4.28) Altere a Object View criada no exerccio 4.21 para incluir a leitura da tabela TEL_FUNC de tal forma que cada
funcionrio possa ter mais de um telefone.
Listagem-resposta 4.28A
SQL> CREATE OR REPLACE VIEW VFUNC OF TFUNC
2
WITH OBJECT IDENTIFIER (CD_PESSOA) AS
3
SELECT NM_FUNC||' '||NM_SOBRENOME NM_PESSOA, FUNC.CD_MAT CD_PESSOA,
4
'PF' IN_TIPO_PESSOA,
5
CAST(MULTISET(SELECT TF.NR_DDD, TF.NR_TEL, TF.IN_CELULAR
6
FROM TEL_FUNC TF
7
WHERE TF.CD_MAT = FUNC.CD_MAT) AS TVTEL) NR_TELEFONE,
8
DT_NASC, DT_ADM, VL_SAL, MAKE_REF(VCARGO, NR_CARGO) CD_CARGO,
9
TEND(NM_RUA, NM_BAIRRO, NM_CIDADE,
10
(SELECT REF(T) FROM TB_TESTADO T WHERE T.CD_ESTADO = END_FUNC.CD_ESTADO),
11
NR_RUA, NR_CEP) NM_ENDERECO, NR_GIT
12
FROM FUNC, END_FUNC
13
WHERE FUNC.CD_MAT = END_FUNC.CD_MAT(+)
14 /
View criada.
4.29) Modifique o trigger associado view para que comporte a atualizao da tabela TEL_FUNC.
Listagem-resposta 4.29A
SQL> CREATE OR REPLACE TRIGGER TG_VFUNC
2
INSTEAD OF INSERT OR DELETE ON VFUNC
3 DECLARE
4
OESTADO
TESTADO;
5
OEND
TEND;
6
OTEL
TTEL;
7
OCARGO
TCARGO;
Listagem-resposta 4.30A
SQL> INSERT INTO VFUNC VALUES
2 ('Cludia Rezende', 9998, 'PF',
3
TVTEL(TTEL(21, 22746531, 'N'), TTEL(21, 22139887, 'N'), TTEL(21, 92866181, 'S')),
4
TO_DATE('01011975', 'DDMMYYYY'),
5
TO_DATE('01101999', 'DDMMYYYY'), 3500,
6
(SELECT REF(C) FROM VCARGO C WHERE CD_CARGO = 60),
7
TEND('Rua Marechal Jofre', 'Graja', 'Rio de Janeiro',
8
(SELECT REF(E) FROM TB_TESTADO E WHERE CD_ESTADO = 'RJ'),
9
127, 20765341), 55);
1 linha criada.
SQL> SELECT * FROM FUNC WHERE CD_MAT = 9998;
SQL> SELECT * FROM END_FUNC WHERE CD_MAT = 9998;
SQL> SELECT VALUE(V) FROM VFUNC V WHERE CD_PESSOA = 9998;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
597
Captulo 5
CONHECENDO O BANCO DE DADOS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
599
METODOLOGIA
Definio terica com exemplos de uso.
CONCEITO
Table Functions so funes que geram como resultado um conjunto de linhas, ou seja, retornam uma Nested
Table ou um Varray e que podem ser utilizadas na clusula FROM de um comando SELECT como se fosse uma
tabela. Estas funes podem receber como parmetro um conjunto de linhas atravs de uma coleo ou Ref Cursor.
A execuo de uma Table Function pode ser feita em paralelo e as linhas podem ser enviadas diretamente para o
prximo processo, sem intermedirios (streamed). As linhas podem ser retornadas iterativamente (pipelined), isto
, medida que forem sendo geradas so enviadas para o prximo processo, no havendo necessidade (como
normalmente ocorre) de preenchimento completo da coleo para transferncia para o prximo estgio.
PERFORMANCE
A utilizao de pipeline, stream e parallel pode otimizar a performance do processamento:
Quando habilitamos multi-thread (parmetro habilitado pelo DBA), poder haver a execuo concorrente de
table functions.
A eliminao de estgios intermedirios para a passagem de informaes entre processos elimina o overhead associado.
O uso de pipeline faz com que as linhas sejam retornadas to logo elas so produzidas. Isto reduz a memria
necessria para as Table Functions uma vez que no h a necessidade de se materializar a coleo inteira.
Outra vantagem do uso de pipeline que o retorno de informao mais rpido, no havendo necessidade de o
processo que acionou a Table Function ficar esperando que todo o resultado seja construdo para, ento, ser retornado.
PASSO A PASSO
Nosso estudo ser desenvolvido em etapas sucessivas. Veremos exclusivamente Table Functions, e posteriormente
acrescentaremos Pipeline, Parallel, etc.
NUMBER);
Na Listagem 5.01 criamos um tipo de objeto com quatro atributos. No criamos nenhuma tabela objeto, apenas o
tipo. Da mesma forma agimos com a Nested Table. Somente o tipo, a partir do tipo de objeto foi criado.
CD_
NR_RAMAL
----- -------B01
3476
C01
4738
E01
6789
D11
6423
D21
7831
E11
5498
E21
972
D11
4501
Na Listagem 5.02 criamos uma funo que preenche a coleo e, ao trmino da execuo, retorna a coleo para o
processo chamador, com a clusula RETURN.
O comando Select, utilizando a clusula TABLE, recebe as linhas da Nested Table fictcia (pois no existe fisicamente
em disco) e a apresenta como se fosse uma consulta a uma tabela fsica.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
601
CD_
NR_RAMAL
----- -------B01
3476
C01
4738
E01
6789
D11
6423
D21
7831
E11
5498
E21
972
D11
4501
CD_
NR_RAMAL
----- -------B01
3476
C01
4738
E01
6789
D11
6423
D21
7831
E11
5498
E21
972
D11
4501
Neste exemplo (Listagem 5.04) a especificao do que seria lido foi retirada da funo e substituda por um REF
CURSOR. Utilizamos o Ref Cursor default do sistema (SYS_REFCURSOR) para que no tivssemos de criar um
package com a especificao do tipo cursor.
No comando SELECT a expresso CURSOR (veja sintaxe de expresses no Captulo 10 e exemplos de uso no
Captulo 3) foi usada para entregar funo as diversas linhas obtidas com o comando SELECT.
Note que a subquery da expresso CURSOR passada do SQL para um REF CURSOR e o argumento que a recebe j
est aberto. No precisamos realizar OPEN em PCURSOR dentro da funo.
ERROS E RESTRIES
As seguintes operaes no so permitidas para variveis REF CURSOR baseadas em Table Functions:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
603
A utilizao normal tanto para cursores quanto para variveis cursor. O otimizador SQL no ir otimizar comandos
de PL/SQL tais como:
OPEN R FOR SELECT * FROM TABLE( F( CURSOR( SELECT * FROM FUNC)));
SELECT * BULK COLLECT INTO <rea de retorno> FROM TABLE(G( R ));
Na primeira linha abrimos uma varivel cursor para um comando SELECT a partir de uma Table Function. No
segundo caso a funo G recebeu como parmetro a varivel cursor aberta previamente.
Sabemos que uma Table Function retorna uma coleo. Em alguns casos, porm, tais como quando uma varivel
cursor passada para uma Table Functions a partir de um bloco de PL/SQL, podemos precisar realizar uma operao
de CAST para a Table Function.
O resultado acima, apesar de ser igual em termos de dados, no ter a mesma performance que:
SELECT * FROM TABLE(G(CURSOR(SELECT * FROM TABLE(F(CURSOR(SELECT * FROM TAB))))));
Isto o mesmo que ignorar o overhead associado com a execuo de dois comandos de SQL e assumir que o
resultado pode ser pipelined entre os dois comandos.
No temos restries relativas a este nmero, porm a utilizao de paralelismo est restrita a um dos parmetros,
como veremos a seguir.
A clusula PARALLEL_ENABLE indica qual dos cursores recebidos como parmetro (somente um deles pode ser
construdo em paralelo) ser particionado e que colunas devem ser usadas para particionamento. Quando indicamos
as colunas a serem usadas para particionamento, o mtodo pode ser RANGE ou HASH.
A palavra-chave ANY indica que a funo independe do mtodo de particionamento (como o nosso caso).
Quando isto ocorre, o sistema, randomicamente, particiona os dados pelos processos. Esta forma adequada para
uso com funes que obtm uma linha, manipulam suas colunas e geram um resultado baseado apenas nas colunas
desta nica linha (no comparam valores com dados de linhas anteriores, por exemplo).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
605
DATA STREAMING
O modo como uma Table Function ordena ou grupa as linhas que ela obtm do argumento cursor chamado de
data streaming. Uma funo pode stream seus dados de entrada em uma das seguintes formas:
Neste exemplo os dados do cursor PCURSOR esto sendo agrupados por nome do funcionrio para serem entregues
a cada uma das instncias da funo que sero executadas em um processo paralelo.
Neste exemplo no utilizamos a clusula Parallel, e desta forma os dados sero executados por um nico processo
que executar a funo para todas as linhas selecionadas.
Durante uma execuo em paralelo, cada instncia da Table Function cria uma transao independente.
Uma alternativa seria criar uma View sobre a Table Function e usar um trigger do tipo INSTEAD OF para realizar a
atualizao desejada.
Native PL/SQL o consumidor e o produtor podem ser rodados em threads de execuo separadas. A funo
inclui uma instruo especfica para pipeline os resultados. Esta forma mais simples de implementar pois ela
requer a definio de apenas uma funo PL/SQL.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
607
Start inicializa o parmetro Scan Context, que usado durante a segunda fase (ODCITableStart).
Fetch produz um subconjunto de linhas na coleo resultante. Esta rotina acionada tantas vezes quanto
necessrio para retornar toda a coleo (ODCITableFetch).
EXERCCIOS
5.01) Crie uma Table Function que retorne, para cada funcionrio, seu nome e endereo. Utilize-a na clusula
From de um comando Select.
5.02) Crie uma Table Function que apresente para cada Funcionrio seu nome, salrio e cargo. Use Pipelined.
Utilize-a na clusula From de um comando Select.
METODOLOGIA
Conceituao e exemplificao passo-a-passo.
OBJETIVO
As funes de agregao definidas pela Oracle somente trabalham com dados escalares. Neste tpico veremos
como criar nossas prprias funes de agregao, o que nos permitiria trabalhar com dados complexos tais como:
multimdia, tipos de objeto, lobs, etc.
FORMA
A criao de uma rotina de agregao do usurio feita atravs da implementao de um conjunto de rotinas chamadas
de ODCIAggregate. Estas rotinas sero implementadas como mtodos de um tipo a ser definido pelo usurio.
As quatro rotinas ODCIAggregate so requeridas para a definio de uma funo de agregao do usurio. Cada
uma delas corresponde codificao de uma etapa das operaes que qualquer funo de agregao deve realizar:
Inicializao, Iterao, Merge (opcional) e Terminao.
Como exemplo, tomemos a funo AVG. Para realizar o clculo necessrio teramos as seguintes etapas:
ODCIAggregateMerge Esta rotina acionada pelo Oracle para a combinao de dois contextos de agregao.
ODCIAggregateTerminate Esta rotina acionada pelo Oracle como ltimo passo para a tarefa.
PARMETROS
As rotinas de agregao ODCI possuem a sintaxe apresentada a seguir:
STATIC
MEMBER
MEMBER
MEMBER
MEMBER
MEMBER
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
609
funo DELETE esta rotina acionada pelo Oracle para remover dados pertencentes ao grupo de dados da
entrada. A rotina acionada com o contexto e o valor a ser removido. Ela dever processar a entrada, atualizar
o contexto correspondente e retornar o contexto (SELF) atualizado para o Oracle.
funo WrapContext esta rotina acionada pelo Oracle se a funo de agregao houver declarado ter um
contexto externo e houver transmisso parcial das agregaes pelos processos de execuo. Esta rotina deve
integrar todos os pedaos externos do contexto corrente para criar um contexto completo.
FUNO
Aps a criao do tipo contendo os mtodos padres e os atributos necessrios devemos criar a funo de agregao
propriamente dita. Esta funo usa a clusula AGGREGATE USING para identificar que se trata de uma funo de
agregao. O tipo de implementao corresponde ao tipo de objeto definido previamente.
Podemos especificar nossas funes de agregao na lista do SELECT, na clusula HAVING e na clusula ORDER BY.
RESTRIO
Quando usamos a clusula AGGREGATE USING podemos especificar somente um argumento para a funo, o
qual deve ser de entrada.
FUNO ANALTICA
Quando especificamos uma funo de agregao em uma query, podemos trat-la como uma funo analtica.
Para isto devemos usar a clusula OVER.
Observe que na funo de inicializao acionamos o mtodo construtor do tipo de objeto para atribuir valor
inicial zero aos atributos do tipo (maior e secmax), como j fizemos anteriormente no Captulo 4.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
611
No resultado observamos uma diferena no tratamento do resultado final entre FSECMAX e a funo padro
MAX. Quando no existe a situao pesquisada para a funo MAX, o resultado NULL. Para a funo FSECMAX
o resultado zero (pois foi como inicializamos os valores de MAIOR e SECMAX). Para igualarmos os resultados
devemos no mtodo Terminate testar o valor de SECMAX. Se este for zero, retornar null.
EXERCCIOS
5.03) Crie uma funo de agregao para calcular o nmero mdio de vogais do parmetro.
5.04) Crie uma funo de agregao para calcular o tamanho mdio do texto informado.
METODOLOGIA
Conceito, sintaxe e exemplificao.
CONCEITO
Uma tabela temporria uma tabela com vida til de uma sesso ou transao. Ela est vazia quando a sesso ou
transao comea e descarta os dados ao fim da sesso ou transao.
NM_FUNC
-------------------------------SILVIO OLIVA
TEODORO SIQUEIRA
SANDRA G. KWAN
CRISTIANA HENDERSON
VL_SAL
-----4000
2876,5
4807,5
5902,5
SQL> COMMIT;
Validao completa.
SQL> SELECT * FROM TEMP_FUNC;
no h linhas selecionadas
SQL> DESC TEMP_FUNC
Nome
Nulo?
----------------------------------------------------- -------CD_MAT
NM_FUNC
VL_SAL
Tipo
-----------NUMBER(5)
VARCHAR2(30)
NUMBER(10,2)
No exemplo da Listagem 5.13 criamos uma tabela temporria associada transao. Isto significa que ao trmino
da transao os dados da tabela so perdidos, porm sua descrio permanece gravada no banco de dados mesmo
aps a mudana de sesso.
O que temporrio o armazenamento dos dados. Com este tipo de tabela no temos necessidade de remover os
dados ao trmino da transao. Podem ser muito teis na gerao de dados de trabalho temporrios.
CARACTERSTICAS
As tabelas temporrias possuem as seguintes caractersticas:
Sua definio visvel para todas as sesses, mas seus dados so visveis e acessveis somente pela sesso que os
incluiu.
O comando LOCK no tem efeito em tabelas temporrias uma vez que cada sesso tem acesso exclusivo a seus dados.
Um comando TRUNCATE trunca somente os dados referentes sesso do usurio.
Os dados so criados no tablespace temporrio do usurio.
A rea para utilizao pelos dados da tabela s alocada quando o primeiro INSERT ou CREATE TABLE ... AS
SELECT for executado.
Operaes de Rollback to Savepoint so suportadas, mas os dados no so recuperveis caso ocorra um crash
porque as modificaes no so logadas (gravadas no REDO LOG).
Podemos criar ndices para uma tabela temporria usando o comando CREATE INDEX. Estes ndices tambm
so temporrios.
Podemos criar triggers para tabelas temporrias assim como views que utilizem simultaneamente tabelas
temporrias e permanentes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
613
Da mesma forma podemos replicar a definio de uma tabela temporria, mas no podemos replicar seus dados.
S podemos executar operaes de DDL (ALTER TABLE, DROP TABLE, CREATE INDEX, etc.) para a tabela
temporria se no houver nenhuma sesso fazendo acesso a ela.
Uma tabela temporria associada transao acessvel por uma determinada transao e suas transaes
filhas. Porm, uma tabela temporria associada transao no acessvel por duas transaes simultneas na
mesma sesso, apesar de poder ser usada por transaes em diferentes sesses.
Se uma transao do usurio faz um INSERT em uma tabela temporria, ento nenhuma de suas transaes
filhas pode usar a tabela temporria aps isto.
Se uma transao filha faz um INSERT em uma tabela temporria, ao fim da transao filha, o dado associado
com a tabela temporria removido. Aps isto, tanto a transao do usurio quanto qualquer outra transao
podem fazer acesso tabela temporria.
NM_FUNC
-------------------------------SILVIO OLIVA
TEODORO SIQUEIRA
SANDRA G. KWAN
CRISTIANA HENDERSON
VL_SAL
-----4000
2876,5
4807,5
5902,5
No exemplo da Listagem 5.14 a tabela foi criada com a indicao de que aps o trmino da transao os dados
deveriam ser mantidos, ou seja, a tabela temporria porm seus dados ficam disponveis por toda a sesso.
Quando ocorre o fim da sesso, os dados so removidos (ou liberados).
EXERCCIOS
5.05) Criar uma tabela temporria com dados preservados por uma transao. Verifique a descrio desta tabela
aps sua criao.
5.06) Incluir linhas nesta tabela, efetuar um COMMIT e verificar a quantidade de linhas final.
5.07) Criar uma tabela temporria sendo as linhas preservadas at o trmino da sesso. Preench-la com dados e
executar um COMMIT.
METODOLOGIA
Conceituao e exemplificao. No ser dada nfase a sintaxe.
INTRODUO
Neste tpico estaremos estudando rudimentos da anlise de performance. No temos a pretenso de esgotar este
assunto pois o mesmo bastante extenso; no entanto, importante sabermos que existem tcnicas capazes de nos
auxiliar na melhoria da performance de uma query e que o primeiro passo neste processo entender seu funcionamento.
CONCEITO
A preocupao com a qualidade do trabalho realizado um hbito que deve acompanhar o desenvolvedor em
todas as etapas do desenvolvimento de um sistema de computador.
A performance deve ser construda!
O refinamento da performance no pode ser feito depois que o sistema estiver em produo. Para obtermos bons
resultados em tempo de resposta, desempenho e segurana, devemos avaliar a performance a tempo de anlise,
desenvolvimento e implementao.
Em cada uma das etapas listadas a seguir existem tarefas a serem realizadas que tm influncia no resultado final
do trabalho desenvolvido e devem ser criteriosamente avaliadas:
Na definio e implementao das regras de negcio O conhecimento preciso e a escolha das regras de negcio
passveis de implementao so considerados os primeiros pontos focais na busca por performance das futuras aplicaes.
Na etapa de modelagem dos dados Nesta fase estamos determinando as relaes que o futuro banco de dados
ter. Devemos considerar o uso de tcnicas de normalizao e avaliar a necessidade de desnormalizaes.
Na etapa de avaliao do desenho da aplicao Nesta fase estaremos definindo o que cada aplicao dever
realizar para atender s regras de negcio estabelecidas na primeira etapa. Esta etapa de grande importncia
uma vez que estaremos determinando os acessos necessrios ao banco de dados, as expectativas de tempo de
resposta, o que deve ser feito em tempo real e o que pode ser postergado, etc.
Durante o refinamento do modelo de dados Aps a definio da etapa anterior, podemos determinar quais
ndices adicionais devem ser includos no modelo para que o acesso aos dados seja eficiente sem prejuzo dos
processos atualizadores. Podemos, ainda, determinar os tipos de ndice (B-TREE ou BITMAP) e o uso de clusters.
Durante a anlise do sql das aplicaes Esta etapa obrigatria em qualquer estudo de performance, uma vez
que pequenas mudanas no SQL podem trazer grandes diferenas no desempenho de um programa.
A utilizao de bancos de dados relacionais trouxe a iluso de que o acesso aos dados de total responsabilidade do
software uma vez que o modo como o dado obtido no , explicitamente, definido no programa.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
615
Em outras etapas Outras etapas que tambm influenciam o resultado final so: Avaliao das necessidades de
hardware (deve-se levar em considerao crescimento a mdio e longo prazos visando estabilidade da performance, j prevendo futuras expanses) e Avaliao do banco de dados (onde o DBA definir a freqncia de
avaliao visando a obteno de sinais de conteno de recursos, uso eficiente de disco e alocao de memria).
Como j dissemos anteriormente, neste captulo no pretendemos explorar completamente a anlise de performance, estamos apenas chamando a ateno dos desenvolvedores sobre o que significa isto e a importncia de se
aprofundar um estudo neste sentido com seu DBA.
PARSE
Nesta fase o Oracle realiza as seguintes tarefas:
Pesquisa o dicionrio de dados caso o comando de SQL no seja encontrado na memria, o Oracle verifica no
dicionrio de dados se existem as tabelas e colunas mencionadas no comando e se as permisses para acesso aos
objetos desejados so suficientes.
Construo do plano de execuo aps a pesquisa no dicionrio de dados o Otimizador poder traar um
caminho de acesso para cada tabela presente no comando, montando um plano de execuo (tambm chamado
de Parse Tree) para obteno e/ou atualizao dos dados do comando SQL submetido.
Alocao da memria com o plano traado, o Oracle inclui este plano na memria para que sua execuo seja
possvel e para permitir que este plano seja executado por outro comando idntico ao atual.
Na fase de Parse que o Oracle, mais especificamente, um algoritmo chamado de Otimizador escolhe como deve
ser feita a pesquisa nos dados para obteno das informaes solicitadas. Ele decidir entre acesso seqencial,
atravs de ndice, o mtodo de join, etc.
EXECUTE
As tarefas da fase de Execute so as seguintes:
Aplicar o plano de execuo como primeira tarefa a leitura dos dados requeridos deve ser efetuada. Esta leitura
pode ser fsica ou lgica. Caso os dados requeridos j estejam presentes em memria, no h necessidade da
leitura da informao do disco. Caso contrrio, sua leitura fsica disparada e a informao armazenada na
rea de memria do banco de dados.
Anlise das restries esta tarefa aplicvel a processos de atualizao em que ocorre a verificao das regras de
integridade (constraints).
FETCH
Se o comando SQL em execuo for um SELECT, onde existe o retorno da informao para o processo usurio que
fez a solicitao, o Oracle, nesta etapa, efetua o retorno das informaes.
OTIMIZAO
Otimizao o processo de escolha do modo mais eficiente para a execuo de um comando SQL (SELECT, INSERT, UPDATE ou DELETE).
Podem existir diferentes formas para o Oracle executar um comando, de acordo com a ordem em que as tabelas ou
ndices sofrero acesso, de acordo com as restries estabelecidas, de acordo com a quantidade de linhas das
tabelas envolvidas, de acordo com os ndices disponveis, etc.
PLANO DE EXECUO
Para executar um comando SQL (DML), o Oracle pode ter de executar diversos passos. Cada um destes passos pode
recuperar, fisicamente, linhas das tabelas referenciadas no comando.
Para cada tabela envolvida no comando SQL haver um caminho de acesso para obteno dos dados daquela tabela.
Ao conjunto destes passos chamamos Plano de Execuo ou Plano de Acesso.
O OTIMIZADOR
O Otimizador o responsvel pela definio do plano de acesso aos dados, ou seja, escolhe a opo mais eficiente
para obteno da informao.
Ele leva em considerao um determinado nmero de fatores para estabelecer a melhor opo dentro das alternativas
disponveis. Porm, apesar dos melhores esforos do otimizador, em algumas situaes, um desenvolvedor pode
escolher um caminho mais eficiente para obteno do dado que o Otimizador.
Constantes Qualquer clculo com constantes executado somente uma vez quando o comando otimizado,
em vez de a cada execuo. Por exemplo: WHERE vl_sal < 2500 * 1.5 ser transformado em WHERE vl_sal <
3750. Neste caso houve a possibilidade de modificao do comando SQL para uma forma mais eficiente. No
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
617
Like O otimizador simplifica condies que usem o operador LIKE com expresses sem os caracteres especiais
(% ou _ ). Por exemplo, o otimizador simplifica a expresso nm_func LIKE CRISTINA na expresso nm_func =
CRISTINA. Esta simplificao somente poder ser feita se a coluna usada na comparao for de tamanho
varivel (VARCHAR2). Caso a coluna seja do tipo CHAR, a simplificao fica inviabilizada.
In O otimizador expande a condio que usa o operador IN em uma condio equivalente usando OR. Por
exemplo nm_func IN (PEDRO, MARIA) seria substitudo por nm_func = PEDRO OR nm_func = MARIA.
Em outras situaes o otimizador analisa e pode modificar as condies de comparao. Isto pode ocorrer em
condies usando ANY, ALL, BETWEEN, NOT, etc.
TRANSFORMAO DE COMANDOS
Os comandos so transformados em comandos mais simples e eficientes.
ORs em queries compostas Se uma query contm uma clusula WHERE com mltiplas condies combinadas
com operadores OR, o otimizador poder transformar a query em uma query composta que use o operador UNION
ALL se isto vier a tornar o acesso mais eficiente, por exemplo se cada condio tiver um ndice de acesso disponvel.
Comandos complexos em Joins O otimizador transforma um comando complexo em um JOIN se tal transformao
resultar em um JOIN que retorne, garantidamente, as mesmas linhas que o comando complexo. Esta transformao
permitir ao Oracle executar o comando com a vantagem das tcnicas de otimizao de JOINs.
Transitividade Se duas condies na clusula WHERE envolvem uma coluna comum, o otimizador pode,
algumas vezes, inferir uma terceira condio usando o princpio da transitividade. A condio inferida pode,
potencialmente, tornar disponvel um caminho de acesso (ndice) que no esteja disponvel com as condies
originais. Por exemplo: where a=constante and a = b, significa que b=constante.
Merge do SQL das Views com o SQL analisado No caso de alguma das tabelas presente na clusula FROM do
comando ser uma View, o otimizador tentar unificar o comando SQL com o comando implcito da VIEW. Caso
isto no seja possvel, o otimizador resolver a View e utilizar as linhas resultantes como se fosse uma tabela.
Para efetuar esta unificao, o otimizador pode usar uma das seguintes tcnicas: juntar a query da view dentro
do comando de SQL ou juntar o comando de SQL dentro da query da view.
OS MTODOS DE OTIMIZAO
Existem dois mtodos de otimizao disponveis para uso: RULE ou COST.
RULE
Neste mtodo o otimizador leva em considerao uma escala de regras, atravs das quais ser feita a definio do
melhor caminho de acesso. Neste mtodo o Otimizador no leva em considerao a natureza do dado (nmero de
linhas da tabela, por exemplo).
Ele escolhe um plano de execuo baseado nos caminhos de acesso disponveis e na pontuao destes caminhos.
Desta forma, havendo um ndice para a tabela, ele sempre ser usado mesmo que resulte num tempo de acesso maior.
A ordem de preferncia para acesso aos dados, da mais rpida para a mais lenta, a seguinte:
COST
Neste mtodo o Otimizador calcula as opes de acesso ao dado e utiliza o seu conhecimento (informaes
estatsticas armazenadas no dicionrio de dados) do dado para escolher o melhor plano de acesso.
A escolha utiliza a mesma tabela de Ordem de Preferncia, porm observando a seletividade do dado, nmero de
blocos necessrios para se fazer um Full Table Scan versus o nmero de blocos obtidos em uma operao de leitura,
nmero de linhas na tabela e outras informaes estatsticas geradas pelo DBA com o uso do comando Analyze ou
do package DBMS_STATS.
Conceitualmente, consiste dos seguintes passos:
O otimizador gera um conjunto de planos de execuo potenciais baseado nos caminhos disponveis e HINTS.
Estima o custo de cada plano de execuo baseado na distribuio dos dados e informaes estatsticas
armazenadas no dicionrio de dados.
Calcula o custo baseado nos recursos computacionais, incluindo I/O, tempo de CPU e memria requerida. O
custo um valor estimado proporcional ao tempo necessrio para a execuo do comando.
Otimizador compara os custos dos planos de execuo e escolhe aquele que tiver o menor custo.
Parmetro OPTIMIZER_MODE Este parmetro estabelece a opo default para mtodo de otimizao. Pode
receber os valores: CHOOSE (indica que se existirem estatsticas no dicionrio de dados para as tabelas consultadas
deve-se usar o mtodo cost, caso contrrio rule), ALL_ROWS (nesta opo a meta que toda a query seja
resolvida no menor espao de tempo possvel com o menor consumo de recursos. Esta opo faz com que o
otimizador use o mtodo de custo para todos os comandos de SQL, independente da presena de estatsticas),
FIRST_ROW ou FIRST_ROW_n (onde n pode ser 1, 10, 1000 ou 1000. Nesta opo a meta obter uma resposta
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
619
FULL TABLE SCAN (tabela) Recupera todas as linhas da tabela. O Oracle l cada bloco de dados da tabela
seqencialmente.
SAMPLE TABLE SCAN (tabela) Recupera uma quantidade determinada e randmica (pela clusula Sample,
como percentual) de linhas da tabelas. O Oracle l uma percentagem determinada de linhas da tabela.
TABLE ACCESS BY ROWID (tabela) Recupera a(s) linha(s) indicada(s) pelo(s) ROWID(s). A localizao pelo
ROWID a forma mais rpida de o Oracle obter uma determinada linha.
CLUSTER SCAN (cluster) De uma tabela armazenada em um INDEXED CLUSTER, recupera linhas que tenham
o mesmo valor de cluster key. Como todas as linhas com a mesma cluster key esto armazenadas no mesmo bloco
de dados, o Oracle, inicialmente, obtm o ROWID de uma das linhas a serem selecionadas pesquisando o
CLUSTER INDEX, e ento localiza as linhas baseado neste ROWID.
HASH SCAN (cluster) Localiza linhas em um HASH CLUSTER baseado no hash value. Em um HASH CLUSTER,
todas as linhas com o mesmo hash value so armazenadas no mesmo bloco de dados. O Oracle, primeiro, obtm
o hash value aplicando a funo HASH ao valor da cluster key especificado pelo comando, ento, pesquisa os
blocos de dados contendo as linhas com aquele hash value.
INDEX SCAN (ndice) Recupera dados de um ndice baseado no valor de uma ou mais colunas do ndice. Se o
comando fizer referncia somente a colunas do ndice, o Oracle no far acesso tabela; caso contrrio, para
cada valor obtido no ndice, o Oracle far acesso tabela pelo ROWID. Um INDEX SCAN pode ser de um dos
seguintes tipos: UNIQUE (retorna somente um ROWID), RANGE (retorna uma ou mais linhas).
EXPLAIN PLAN
EXPLAIN PLAN um comando que mostra o plano de acesso utilizado por um nico comando SQL. Para utilizlo devemos efetuar a criao da tabela PLAN_TABLE subordinada ao usurio que far a utilizao do comando,
com o seguinte layout.
Onde:
<nome> nome da anlise a ser efetuada. Pode ser qualquer nome a ser dado pelo usurio limitado a 30 caracteres.
<tabela> indica o nome da tabela onde ser gerada a anlise do comando SQL. Por default Plan_Table.
<sql> comando SQL a ser analisado.
Para realizarmos testes a partir deste ponto precisamos que a tabela Plan_table esteja criada, e portanto obtenha o script
comentado anteriormente e crie a tabela no usurio Desenv. Outro ponto importante a criao ou remoo das
estatsticas armazenadas no dicionrio de dados. Para este fim usaremos o comando ANALYZE TABLE XXX COMPUTE
STATISTICS (para otimizao por custo) ou ANALYZE TABLE FUNC DELETE STATISTICS (para otimizao por regra).
Suponhamos que desejssemos a relao dos funcionrios (e seus respectivos departamentos) que no sejam
responsveis por projetos.
O comando acima carregar a tabela PLAN_TABLE com informaes sobre o caminho de acesso escolhido pelo otimizador.
Para melhor visualizarmos os dados coletados podemos usar o comando SELECT a seguir.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
621
O AUTOTRACE DO SQL*PLUS
Apresenta um relatrio sobre a execuo dos comandos de SQL DML (Select, Insert, Update ou Delete) bemsucedidos. O relatrio pode incluir a apresentao de estatsticas e o caminho de execuo (Explain).
A opo TraceOnly apresenta o relatrio sem apresentar os dados da Query. Se Statistics for solicitado a execuo
do comando realizada, porm sem a apresentao dos resultados.
Para que a opo Explain possa ser executada deve ser criada a tabela Plan_Table para a gerao do caminho de
acesso, da mesma forma que anteriormente.
A sintaxe do comando SET do SQL*Plus (j vista no Captulo 2) a seguinte:
SET AUTOT[RACE] {OFF|ON|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
A clusula WHERE contenha condies que equalizem cada coluna da cluster key em uma tabela com a
coluna correspondente na outra tabela.
A clusula WHERE tambm contenha uma condio que garanta que o JOIN retorne somente uma linha.
Isto , uma condio contendo colunas de uma primary ou unique key.
Estas condies devem ser combinadas com operadores AND. Para executar este comando o Oracle executa uma
operao de NESTED LOOP.
3. Single Row By Hash Cluster Key With Unique or Primary Key Este caminho de acesso estar disponvel se ambas as
condies a seguir forem verdadeiras:
A clusula WHERE do comando usa todas as colunas de uma hash cluster key com condies de igualdade.
Para cluster keys compostas, as condies de igualdade devem ser combinadas com operadores AND.
O comando retorna somente uma linha porque as colunas que fazem parte da hash cluster key tambm
compem uma unique ou primary key.
Para executar o comando o Oracle aplica a funo hash para o valor da hash cluster key especificado no comando
para obter um hash value. Com este valor, o Oracle far um hash scan na tabela.
4. Single Row By Unique or Primary Key Este caminho de acesso estar disponvel se a clusula WHERE do comando
usar todas as colunas de uma unique ou primary key em condies de igualdade. Para chaves compostas as
condies de igualdade devem ser combinadas com operadores AND.
Para executar o comando, o Oracle realiza um unique scan em um ndice unique ou primary key para recuperar
um nico ROWID e, ento, fazer o acesso tabela por aquele ROWID.
5. Clustered Join Este caminho de acesso estar disponvel para comandos que juntem (JOIN) tabelas armazenadas
no mesmo CLUSTER e os comandos de acesso contenham uma clusula WHERE que apresente condies de
igualdade para cada coluna da CLUSTER KEY em uma tabela com a correspondente na outra tabela.
Para uma CLUSTER KEY composta, a condio de igualdade deve ser combinada com operadores AND. Para executar
o comando, o Oracle executa uma operao de NESTED LOOP.
6. Hash Cluster Key Este caminho de acesso ficar disponvel se os comandos de acesso possurem uma clusula
WHERE que utilize todas as colunas da HASH CLUSTER KEY pela condio de igualdade. Para uma CLUSTER
KEY composta, a condio de igualdade deve ser combinada com operadores AND.
Para executar o comando, o Oracle aplica a funo de HASH (especificada para o CLUSTER) CLUSTER KEY com a
finalidade de obter um HASH VALUE. O Oracle, ento, usa este HASH VALUE para executar um HASH SCAN na tabela.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
623
= <expresso>
>[=] <expresso> AND <coluna> <[=] <expresso>
BETWEEN <expresso> AND <expresso>
LIKE 'c%'
Estes caminhos de acesso no estaro disponveis se <expresso> fizer referncia a colunas indexadas. Para executar
o comando, o Oracle executa um RANGE SCAN no ndice e, ento, faz acesso tabela pelo ROWID.
11. Unbounded Range Search on Indexed Columns Este caminho de acesso estar disponvel se a clusula WHERE
dos comandos de acesso possuir uma das condies (abaixo) que usem a coluna de um ndice com uma nica
chave ou uma ou mais colunas da poro esquerda de um ndice composto:
<coluna> >[=] <expresso>
<coluna> <[=] <expresso>
Cada uma destas condies especifica um intervalo sem fronteira de valores indexados que sofrem acesso pelo
comando. O intervalo dito sem fronteira porque as condies especificam apenas um dos limites (inferior ou
superior), no ambos.
Para executar este comando o Oracle executa um RANGE SCAN no ndice e, ento, faz acesso tabela pelo ROWID.
12. Sort Merge Join Este caminho de acesso est disponvel para comandos que juntem tabelas que no sejam
armazenadas juntas em um CLUSTER e que as clusulas WHERE dos comandos de acesso usem colunas de cada
tabela pela condio de igualdade. Para executar este comando o Oracle usa uma operao de SORT-MERGE ou
NESTED LOOP ou HASH JOIN para executar o JOIN.
13. Max or Min of Indexed Column Este caminho de acesso estar disponvel para comandos SELECT nos quais as
seguintes condies sejam verdadeiras:
O argumento para as funes MAX ou MIN pode ser qualquer expresso envolvendo uma coluna, uma
constante, um operador de adio (+), um operador de concatenao (||) ou a funo CONCAT.
A consulta contenha uma clusula ORDER BY que use a coluna de um ndice composto por uma nica chave
ou use a coluna mais esquerda de um ndice composto. O ndice no pode ser um CLUSTER INDEX.
Deve existir uma restrio de integridade (PK ou NOT NULL) que garante que pelo menos uma das colunas
indexadas listadas na clusula ORDER BY no contenha NULLs.
>
<
>=
<=
<coluna2>
<coluna2>
<coluna2>
<coluna2>
IS NULL
IS NOT NULL
NOT IN
!= <expresso>
LIKE '%pattern'
<expresso2>
onde <expresso> uma expresso que opera em uma coluna atravs de um operador ou funo, independente de
a coluna ser indexada.
NOT EXISTS <subquery>
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
625
USO DE NDICES
ndices aumentam a performance de consultas que selecionem um pequeno percentual de linhas.
Como regra geral s devemos criar ndices em tabelas que sejam freqentemente consultadas para aproximadamente
2% a 4% das linhas. Este valor pode ser considerado um pouco maior quando todas as informaes puderem ser obtidas
diretamente do ndice ou quando as colunas indexadas puderem ser usadas para operaes de Join com outras tabelas.
Devemos lembrar que um ndice mantido pelo Oracle mesmo que ele no seja nunca usado.
A manuteno de um ndice apresenta uma significativa demanda de CPU e I/O. Desta forma devemos avaliar com
cuidado a necessidade de cri-los.
Se pudssemos analisar todas as aplicaes e verificar quais os ndices realmente utilizados, poderamos remover
(DROP) aqueles que no aparecem nos EXPLAIN PLAN apresentados. Estes ndices no so necessrios, no so
seletivos e devem ser descartados.
A Oracle oferece dois tipos de ndices para acesso aos dados.
OS NDICES B*TREE
Como caractersticas principais para este tipo de ndice, temos:
OS NDICES BITMAP
Os ndices do tipo BITMAP so uma alternativa aos ndices B*TREE quando:
As consultas (mais usadas) podem ter ndices bitmap em todas as colunas que normalmente aparecem nas
clusulas WHERE.
USANDO HINTS
Apesar de todas as informaes coletadas e todo o algoritmo sofisticado do otimizador, provavelmente o nosso
conhecimento da informao armazenada maior que a que o otimizador possui. Por exemplo, podemos saber
que um ndice mais seletivo em certas queries que o otimizador possa determinar.
Baseado nisto podemos estar mais aptos a escolher um plano de execuo mais eficiente que o otimizador. Neste
caso, podemos usar hints para forar o otimizador a usar o plano de execuo que desejamos.
Hints so sugestes que fornecemos ao otimizador para um comando SQL. Podemos usar Hints para especificar:
O mtodo de otimizao.
O goal para o mtodo de custo.
O caminho de acesso para uma determinada tabela presente no comando.
A ordem de join.
A operao de join.
ou
<clusula DELETE, INSERT, UPDATE ou SELECT> <hints>
<restante do comando>
Onde:
<clusula DELETE, INSERT, SELECT ou UPDATE> so as palavras iniciais dos comandos correspondentes. Os
comentrios contendo os hints s podem ser informados aps uma destas palavras.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
627
<hints> corresponde a um ou mais dos hints permitidos. Se um comentrio contiver diversos hints, cada par de
hints deve vir separado por pelo menos um espao.
Se especificarmos hints incorretamente, o Oracle ignora-o mas no retorna um erro:
S reconhece hints se estiver usando o mtodo de custo. Se incluirmos qualquer hint (exceto RULE), o otimizador
passar a usar o mtodo de custo.
Se um comando SQL possui um hint especificando um mtodo de otimizao, o otimizador usa a especificao
determinada independente da presena ou ausncia de estatsticas e do valor do parmetro OPTIMIZER_MODE
(de inicializao e da sesso).
EXERCCIOS
Antes de iniciar a execuo dos exerccios execute o comando ANALYZE para as tabelas FUNC, DEPTO, PROJ e
PRJATV. Posteriormente retire as estatsticas armazenadas para cada uma das tabelas e repita todos os exerccios
para efeito de comparao.
5.11) Determine o caminho de acesso dos comandos abaixo. Neste exerccio a principal preocupao entender o
resultado e determinar qual a opo de acesso cada tabela presente no comando.
a) SELECT nm_func
FROM func
WHERE ROWID = :valor
b) SELECT *
FROM EMP1
WHERE CD_MAT = 100
c) SELECT
FROM
WHERE
AND
E2.*, DP.*
FUNC E2, DEPTO DP
E2.CD_DEPTO = DP.CD_DEPTO
E2.CD_MAT
= 100
d) SELECT NM_FUNC
FROM FUNC
WHERE NR_GIT = 20
e) SELECT E2.*, DP.*
FROM FUNC E2, DEPTO DP
WHERE E2.CD_DEPTO = DP.CD_DEPTO
5.12) Determine o caminho de acesso, a operao realizada e a ordem em que as operaes foram realizadas. Neste
exerccio a principal preocupao determinar a operao realizada, a ordem em que esto sendo efetuadas, qual o
mtodo de Join (quando for o caso) empregado para a soluo do problema e o caminho de acesso para cada tabela.
a) SELECT
FROM
WHERE
AND
ORDER
*
func
CD_MAT BETWEEN 100 AND 500
nm_func = 'DANIEL'
BY CD_MAT
NM_DEPTO
DEPTO
NM_FUNC
FUNC
CD_MAT BETWEEN 100 AND 300
c) SELECT
FROM
WHERE
AND
*
FUNC
CD_MAT = :MAT
NM_FUNC = 'MARIA'
d) SELECT
FROM
WHERE
ORDER
NM_FUNC
FUNC
rownum < 200
BYcd_mat
b) SELECT
FROM
WHERE
AND
METODOLOGIA
Conceituao e exemplificao. No ser dada nfase ao aspecto sinttico.
CONCEITOS GERAIS
Quando trabalhamos com distribuio de dados precisamos, freqentemente, transferir informaes de um banco
de dados para outro. Para realizar esta operao a Oracle disponibilizava um objeto chamado de Snapshot.
Este objeto evoluiu e ganhou o nome de View Materializada. Alm dos usos j conhecidos as views materializadas
tambm podem ser criadas no mesmo banco de dados em que se encontram as tabelas de onde se originam, porm com
o objetivo de sumariar e/ou pr-calcular os dados. Este novo uso muito til para ambientes de Data Warehouse.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
629
EXEMPLOS
Apresentaremos a seguir alguns exemplos de criao de view materializada. Nosso objetivo, no entanto, apenas
conceitual uma vez que o usurio perceber apenas alterao na performance de suas aplicaes. Efetivamente,
nenhuma modificao necessita ser realizada pelos desenvolvedores. Todas as tarefas aqui apresentadas se referem
a tarefas de DBA.
O comando a seguir cria uma view materializada de nome MV_POR_VENDEDOR que calcula as vendas por vendedor.
A view materializada no contm qualquer dado porque foi determinado que o mtodo de construo DEFERRED.
No exemplo da Listagem 5.19 a view materializada calcula o desvio padro para o nmero de unidades vendidas
por um vendedor em uma determinada data. A view materializada preenchida imediatamente com dados porque
o mtodo IMMEDIATE e ela fica disponvel para ser usada pelo mecanismo de Query Rewrite.
O mtodo de Refresh FAST, o que significa que somente as modificaes sero usadas para atualizao da view
materializada. Por este motivo tivemos necessidade de criar um log associado a cada uma das tabelas envolvidas. A
cada modificao na tabela origem uma informao armazenada no log.
No prximo exemplo criaremos uma view materializada contendo apenas Joins. Para que possamos especificar a
clusula FAST REFRESH, devemos garantir que uma atualizao deste tipo possa ser executada se houver modificaes
em quaisquer das tabela-detalhe envolvidas.
SELECT
CREATE TABLE......AS SELECT
INSERT INTO ..... SELECT
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
631
Parte ou todos os resultados requisitados pela query podem ser obtidos das informaes pr-calculadas na
view materializada.
MTODOS
O otimizador usa diferentes mtodos para reescrever uma query. O primeiro e mais importante passo determinar
se todo ou parte dos resultados requisitados pela query podem ser obtidos dos resultados previamente calculados
na view materializada.
O caso mais simples ocorre quando o resultado armazenado na view exatamente a solicitao requisitada pela query.
O otimizador percebe isto comparando o texto do comando de SQL com o texto da definio da view materializada.
Para este mtodo so usadas duas etapas:
Compatibilidade de Join
Suficincia de dados
Compatibilidade de grupamentos
Compatibilidade de agregaes
NVEIS DE INTEGRIDADE
O parmetro de inicializao Query_Rewrite_Integrity determina a integridade da reescrita e pode receber trs valores:
Enforced o modo default. O otimizador ir usar somente as views materializadas que estejam com seus dados
totalmente atualizados (frescas) e somente usa aqueles relacionamentos que sejam baseados em constraints
vlidas (asseguradas, enforced).
Trusted Neste modo o otimizador acredita que os dados das views materializadas baseados em tabelas prexistentes estejam corretos e os relacionamentos declarados nas dimenses e as constraints RELY estejam corretas.
Neste modo o otimizador usa Prebuilt Materialized Views e usa relacionamentos que no estejam assegurados
assim como aqueles assegurados. Ele tambm acredita em relacionamentos de dados especificados utilizando
Dimensions, mas que no estejam assegurados por constraints.
EXERCCIOS
5.15) Criar uma view materializada simples e verificar seu uso em comandos de SQL.
a) Criar uma view materializada que apresente o valor total vendido por cada vendedor da empresa, independente
do perodo da venda. O preenchimento da VIEW deve ser manual.
b) Avalie a utilizao desta view em comandos de SQL associados tabela VENDAS.
c) Avalie a utilizao desta view quando o comando de SQL diferente do comando da view.
5.16) Criar uma view materializada simples e verificar seu uso em comandos de SQL.
a) Criar uma view materializada com construo imediata e que contenha mais de uma agregao. Verifique
seu preenchimento.
b) Teste o uso desta view em comandos de SQL similares construo da view.
METODOLOGIA
Conceitos sobre o assunto e exemplos. No ser dada nfase ao aspecto sinttico.
MTODOS DE PARTICIONAMENTO
Esto disponibilizados trs mtodos de particionamento. Estes mtodos fornecem ao DBA opes de diviso dos
dados de acordo com as caractersticas de uso das aplicaes, de tal forma que possa ser escolhido o mtodo mais
eficiente para a situao especfica. So eles:
RANGE
Neste mtodo estabelecemos intervalos de valores para uma ou mais colunas (chaves de particionamento), as
quais definiro como ocorrer o particionamento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
633
HASH
Indica que a tabela ser subdividida baseado em um algoritmo (funo Hash). O Oracle associa linhas a parties
usando uma funo sobre as colunas definidas como chaves de particionamento.
COMPOSITE
O particionamento composto (Range/Hash) divide os dados por intervalo de valor para o particionamento principal da tabela ou ndice e especifica o nmero de subparties Hash.
Desta forma os dados so subdivididos por intervalo de valor e para cada intervalo feita uma nova subdiviso de
acordo com a quantidade de subparties (do tipo Hash) estabelecida.
O usurio pode adicionar e remover subparties (para que os dados fiquem bem distribudos) e, ainda, pode
adicionar ou remover parties principais, sem efeito em outras parties.
CARACTERSTICAS E RESTRIES
possvel o particionamento de tabelas contendo colunas do tipo LOB. Os valores podem ser armazenados dentro
da linha ou em segmentos separados. Todos os tipos de Lobs so suportados (Blob, Clob Nclob e Bfile).
O particionamento tambm foi estendido a tabelas do tipo Index-Organized.
Como restrio, temos:
Se a pesquisa, por outro lado, no fornecer possibilidade de o Oracle restringir a busca a determinadas parties,
todas sero selecionadas.
Utilizando uma sintaxe prpria do comando SELECT, podemos contornar esta situao (se desejarmos) limitando
a busca a uma determinada partio, bastando que mencionemos a clusula Partition aps a clusula From, como
mostrado no exemplo a seguir.
O uso de tabelas particionadas pode ser muito til, justamente para dados histricos, que no precisam ser
consultados todo o tempo e que estando armazenados em reas (tablespaces) separadas das linhas mais
freqentemente utilizadas da tabela podem trazer significativo ganho na performance das aplicaes dirias.
MOVIMENTAO DE LINHAS
A clusula Enable Row Movement dos comandos Alter Table e Create Table permite que as linhas sejam movidas
entre parties.
Quando a movimentao de linhas permitida, atualizaes que afetem as chaves podem fazer com que uma
linha que no mais pertena partio corrente seja migrada para a partio apropriada.
CD_MAT
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
635
O default (Disable Row Movement) indica que a movimentao de uma linha no permitida e uma atualizao
na chave que cause este tipo de resultado far com que um erro seja retornado para o usurio.
PARTICIONAMENTO DE NDICES
Os ndices, no Oracle, podem ser particionados ou no. Os ndices particionados so aplicveis a tabelas particionadas
ou no. Os ndices no particionados so aplicveis a tabelas particionadas ou no.
Os ndices podem ser subdivididos em dois tipos: Globais e Locais.
NDICES GLOBAIS
Um ndice global aquele que enderea todas as linhas de uma tabela (seja ela particionada ou no). Este ndice
tambm pode ser particionado. Por default os ndices no particionados so globais.
Um ndice global quando particionado significa que seu particionamento no comparvel ao particionamento
da tabela. As caractersticas de particionamento so definidas pelo usurio em clusulas especficas.
Para que seja possvel o particionamento de um ndice global, a poro esquerda da chave de particionamento
deve corresponder s chaves do ndice. Podemos especificar parmetros fsicos tanto em nvel de ndice como em
nvel de partio.
NDICES LOCAIS
Os ndices locais so particionados nas mesmas colunas, com o mesmo nmero de parties e com as mesmas
fronteiras que a tabela qual se relacionam.
PREFIXADOS Um ndice local dito prefixado quando a poro esquerda da chave de particionamento
corresponde chave do ndice.
NO PREFIXADOS Da mesma forma, um ndice local dito no prefixado quando no existe correspondncia
entre a chave de particionamento e a chave do ndice.
TABLESPACE INDX,
TABLESPACE USERS,
TABLESPACE INDX,
PCTFREE 10
MAXTRANS 50);
Para um ndice local o nmero de parties do ndice deve ser igual ao nmero de parties da tabela e na mesma
ordem. Se omitirmos a clusula Partition, o Oracle gerar um nome que seja consistente com partio correspondente
da tabela. Se o nome conflitar com um nome de ndice existente, o formato SYS_Pn ser usado.
Para ndices associados a tabelas particionadas pelo mtodo Hash a nica caracterstica fsica possvel de ser
especificada para cada partio a clusula Tablespace. Caso seja omitida, ser herdada da especificao feita em
nvel de ndice. Caso seja omitida, o armazenamento de cada partio do ndice ser feito no mesmo tablespace
que a partio da tabela correspondente.
Da mesma forma que para ndices associados a tabelas particionadas pelo mtodo Hash, ndices associados a
tabelas com particionamento composto podem especificar parmetros fsicos apenas para a partio. Cada
subpartio poder especificar apenas a clusula Tablespace.
EXERCCIOS
5.17. Crie uma tabela com particionamento por intervalo de valores e preencha esta tabela com os dados originais
da tabela FUNC.
5.18) Crie um ndice local prefixado, um ndice local no prefixado, um ndice global particionado prefixado, um
ndice global particionado no prefixado e um ndice global no particionado.
5.19) Divida a partio Z em duas parties. Verifique o estado dos ndices associados.
5.20) Remova a ltima partio da tabela. Verifique o estado dos ndices associados.
5.21) Adicione uma nova partio tabela. Verifique o estado dos ndices associados.
5.22) Junte as parties B e C.
Listagem-resposta 5.01A
SQL>
2
3
4
5
6
7
8
9
Tipo
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
637
NM_RUA
------------------------NM_ESTADO
------------------------Av Niemeyer
Rio de Janeiro
NM_BAIRRO
----------------NR_RUA
NR_CEP
----------------Leblon
12 20854900
Gabriel Azevedo
Rio de Janeiro
Av das Amricas
Rio de Janeiro
Barra da Tijuca
11233 20789500
Davi Barbosa
Rio de Janeiro
Av das Amricas
Rio de Janeiro
Barra da Tijuca
23987 20954900
Joo Pedro
Rio de Janeiro
Tijuca
144 20123650
Alfredo Lima
Petrpolis
Rua Ipiranga
Rio de Janeiro
Centro
42 25985020
Dilson Duarte
6 linhas selecionadas.
Para que a rotina possa ser executada na clusula From, os tipos devem ser previamente definidos. Neste primeiro
exerccio no utilizamos a opo de Pipelined.
5.02) Crie uma Table Function que apresente para cada Funcionrio seu nome, salrio e cargo. Use Pipelined.
Utilize-a na clusula From de um comando Select.
Listagem-resposta 5.02A
SQL>
2
3
4
5
Tipo
Neste exerccio usamos Pipelined. Desta forma a cada linha montada o resultado passado de volta para o comando Select.
5.03) Crie uma funo de agregao para calcular o nmero mdio de vogais do parmetro.
Listagem-resposta 5.03A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
Tipo
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Tipo
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
639
5.04) Crie uma funo de agregao para calcular o tamanho mdio do texto informado.
Listagem-resposta 5.04A
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
Tipo
SQL>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Tipo
5.05) Criar uma tabela temporria com dados preservados por uma transao. Verifique a descrio desta tabela
aps sua criao.
Tipo
-----------NUMBER(5)
VARCHAR2(30)
NUMBER(10,2)
Observe que no existe especificao de tablespace para esta tabela. Isto ocorre porque como os dados no so
permanentes, eles so alocados na rea temporria do sistema.
5.06) Incluir linhas nesta tabela, efetuar um COMMIT e verificar a quantidade de linhas final.
Listagem-resposta 5.06A
SQL> INSERT INTO TEMPF(CD_MAT, NM_FUNC, VL_SAL)
2 SELECT CD_MAT, NM_FUNC, VL_SAL
3
FROM FUNC
4
WHERE CD_MAT < 300;
28 linhas criadas.
SQL> COMMIT;
Validao completa.
SQL> SELECT COUNT(*) FROM TEMPF;
COUNT(*)
-------0
Listagem-resposta 5.07A
SQL> CREATE GLOBAL TEMPORARY TABLE TEMPFS
2 (CD_MAT
NUMBER(5),
3
NM_FUNC
VARCHAR2(30),
4
VL_SAL
NUMBER(10,2))
5 ON COMMIT PRESERVE ROWS;
Tabela criada.
SQL> SET ECHO ON
SQL> INSERT INTO TEMPFS (CD_MAT, NM_FUNC, VL_SAL)
2 SELECT CD_MAT, NM_FUNC, VL_SAL
3
FROM FUNC
4
WHERE CD_MAT < 300;
28 linhas criadas.
SQL> COMMIT;
Validao completa.
SQL> SELECT COUNT(*) FROM TEMPFS;
COUNT(*)
-------28
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
641
Listagem-resposta 5.08A
SQL> INSERT INTO TEMPFS (CD_MAT, NM_FUNC, VL_SAL)
2 SELECT CD_MAT, NM_FUNC, VL_SAL
3
FROM FUNC
4
WHERE CD_MAT BETWEEN 300 AND 500;
7 linhas criadas.
SQL> COMMIT;
Validao completa.
SQL> SELECT CD_MAT, NM_FUNC FROM TEMPFS WHERE ROWNUM < 10;
CD_MAT
---------300
310
320
330
340
341
401
NM_FUNC
------FELIPE
MARINA
ROBERTO
WILSON
DILSON
JOANA
NOVO
7 linhas selecionadas.
Observe que apesar de a sesso anterior ter dado commit nos dados eles no so visveis pela sesso do exerccio
5.08. Cada usurio s tem acesso a seus dados.
5.09) Criar um trigger, um ndice e uma view, utilizando esta tabela temporria.
Listagem-resposta 5.09A
SQL> CREATE OR REPLACE TRIGGER TG_TEMP
2 BEFORE UPDATE ON TEMPFS
3 FOR EACH ROW
4 DECLARE
5
NOME
VARCHAR2(20);
6 BEGIN
7
SELECT NM_SOBRENOME INTO NOME FROM FUNC
8
WHERE CD_MAT = :NEW.CD_MAT;
9
:NEW.NM_FUNC := :NEW.NM_FUNC ||' '|| NOME;
10 END;
11 /
Gatilho criado.
SQL> CREATE VIEW V_TEMP (MAT, NOME, SALARIO, DEPTO)
2 AS SELECT T.CD_MAT, T.NM_FUNC, T.VL_SAL, F.CD_DEPTO
3
FROM FUNC F, TEMPFS T
4
WHERE F.CD_MAT = T.CD_MAT
5
WITH READ ONLY;
View criada.
SQL> CONNECT DESENV/DESENV
Conectado.
SQL> CREATE UNIQUE INDEX IX_TEMP
2
ON TEMPFS(CD_MAT);
ndice criado.
A criao do ndice somente pode ser realizada antes da incluso de dados. Desta forma, ao estabelecermos conexo
e perdermos todos os dados, pudemos criar o ndice. Teste realizar esta operao com a tabela j preenchida.
5.10) Utilize a view criada.
Listagem-resposta 5.10A
SQL> INSERT INTO TEMPFS (CD_MAT, NM_FUNC, VL_SAL)
2 SELECT CD_MAT, NM_FUNC, VL_SAL
3
FROM FUNC
4
WHERE CD_MAT < 300;
28 linhas criadas.
Listagem-resposta 5.11A
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT nm_func
3 FROM func
4 WHERE ROWID = :valor
5 /
Plano de Acesso
--------------------------------SELECT STATEMENT
CUSTO = 1
TABLE ACCESS BY USER ROWID FUNC
Este o acesso mais rpido pois informado o rowid (endereo da linha). O acesso direto pelo endereo, sem intermedirios.
b) SELECT *
FROM EMP1
WHERE CD_MAT = 100
Listagem-resposta 5.11B
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT *
3 FROM FUNC
4 WHERE CD_MAT = 100
5 /
Explicado.
Plano de Acesso
--------------------------------SELECT STATEMENT
CUSTO = 1
TABLE ACCESS BY INDEX ROWID FUNC
INDEX UNIQUE SCAN SYS_C002934
O acesso comea com uma pesquisa no ndice SYS_C002934. Este o ndice que garante a PK da tabela Func (no
meu caso). O acesso UNIQUE porque em primeiro lugar este ndice no contm duplicidades; desta forma quando
usamos a expresso CD_MAT = 100, se no existem duas linhas com o mesmo nmero de matrcula, ento sabemos
que somente uma matrcula ser encontrada. Poderamos ter feito a pesquisa por um intervalo (CD_MAT BETWEEN 100 AND 300). Esta seria uma forma de obtermos diversas linhas e, portanto, realizar um RANGE SCAN
em um ndice de PK (sem duplicidades).
c) SELECT
FROM
WHERE
AND
E2.*, DP.*
FUNC E2, DEPTO DP
E2.CD_DEPTO = DP.CD_DEPTO
E2.CD_MAT
= 100
Listagem-resposta 5.11C
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT E2.*, DP.*
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
643
Este Select realiza um Join entre Func e Depto. O primeiro passo a ser executado o UNIQUE SCAN no ndice
SYS_C002934 porque inclumos a clusula AND E2.CD_MAT = 100. Uma vez que CD_MAT primary key da tabela
Func. Uma pesquisa no ndice SYS_C002934, que o ndice da PK, somente retornar uma linha pois estamos
solicitando apenas um valor. Ao trmino desta pesquisa ser feito o acesso tabela Func atravs do ROWID obtido na
leitura do ndice. Sendo assim obtivemos a linha desejada relativa tabela Func. Esta linha entregue ao processo de
Nested Loops. Este processo, de posse desta linha, far acesso Depto para obter todas as linhas correspondentes ao
departamento encontrado em Func. Uma vez que cd_depto PK, o acesso ao ndice SYS_C002931 tambm ser
UNIQUE. Com o ROWID obtido no acesso ao ndice, feito o acesso tabela DEPTO usando este ROWID.
Com as duas linhas obtidas, o processo Nested Loops, que o coordenador do Join, junta a linha encontrada em
Func com a linha encontrada em Depto para o processo pai Select e o resultado apresentado ao usurio.
d) SELECT NM_FUNC
FROM FUNC
WHERE NR_GIT = 20
Listagem-resposta 5.11D
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT NM_FUNC
3 FROM FUNC
4 WHERE NR_GIT = 20
5 /
Explicado.
Plano de Acesso
--------------------------------SELECT STATEMENT
CUSTO = 1
TABLE ACCESS FULL FUNC
Neste exemplo a restrio presente na clusula WHERE fazia referncia a uma coluna para a qual no existe nenhum
ndice criado. Desta forma o Oracle no tem nenhuma outra alternativa a no ser ler toda a tabela para obter as
linhas desejadas.
e) SELECT E2.*, DP.*
FROM FUNC E2, DEPTO DP
WHERE E2.CD_DEPTO = DP.CD_DEPTO
Listagem-resposta 5.11E
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT E2.*, DP.*
3 FROM FUNC E2, DEPTO DP
4 WHERE E2.CD_DEPTO = DP.CD_DEPTO
5 /
Explicado.
Plano de Acesso
--------------------------------SELECT STATEMENT
CUSTO = 3
HASH JOIN
TABLE ACCESS FULL DEPTO
TABLE ACCESS FULL FUNC
*
func
CD_MAT BETWEEN 100 AND 500
nm_func = 'DANIEL'
BY CD_MAT
Listagem-resposta 5.12A
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT *
3 FROM func
4 WHERE CD_MAT BETWEEN 100 AND 500
5
AND nm_func = 'DANIEL'
6 ORDER BY CD_MAT
7 /
Explicado.
Plano de Acesso
--------------------------------SELECT STATEMENT
CUSTO = 2
TABLE ACCESS BY INDEX ROWID FUNC
INDEX RANGE SCAN SYS_C002934
Neste exerccio o otimizador escolheu fazer a pesquisa (RANGE SCAN) sobre o ndice SYS_C002934 e, para cada
um dos endereos (ROWID) obtidos, fazer acesso tabela FUNC. Um dos motivos da escolha foi o fato de havermos
solicitado que o resultado viesse ordenado por matrcula. Caso o otimizador houvesse optado por um FULL TABLE
SCAN, aps a seleo das linhas que atendessem condio ainda haveria necessidade de uma operao de SORT
para a produo do resultado desejado. Experimente retirar a clusula ORDER BY e verifique o resultado obtido.
b) SELECT
FROM
UNION
SELECT
FROM
WHERE
NM_DEPTO
DEPTO
NM_FUNC
FUNC
CD_MAT BETWEEN 100 AND 300
Listagem-resposta 5.12B
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT NM_DEPTO
3
FROM DEPTO
4
UNION
5 SELECT NM_FUNC
6
FROM FUNC
7
WHERE CD_MAT BETWEEN 100 AND 300
8 /
Explicado.
Plano de Acesso
--------------------------------SELECT STATEMENT
CUSTO = 10
SORT UNIQUE
UNION-ALL
TABLE ACCESS FULL DEPTO
TABLE ACCESS FULL FUNC
Neste exemplo tivemos a oportunidade de comprovar o que estudamos teoricamente, isto , uma operao de
Union realiza um Sort implcito para retirar as duplicidades. Observe que, apesar de havermos restringido as linhas
vindas da tabela Func, em funo do nmero reduzido de linhas, o otimizador optou por um acesso FULL tanto a
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
645
*
FUNC
CD_MAT = :MAT
NM_FUNC = 'MARIA'
Listagem-resposta 5.12C
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT *
3 FROM FUNC
4 WHERE CD_MAT = :MAT
5
AND NM_FUNC = 'MARIA'
6 /
Explicado.
Plano de Acesso
--------------------------------SELECT STATEMENT
CUSTO = 1
TABLE ACCESS BY INDEX ROWID FUNC
INDEX UNIQUE SCAN SYS_C002934
Neste exemplo pudemos observar que a determinao do caminho de acesso feita mesmo quando usamos variveis
do programa no comando SELECT. No preciso que o valor esteja explicitamente definido para que o otimizador
avalie o melhor caminho. No caso do exemplo, uma vez que CD_MAT PK, independentemente do valor a ser
pesquisado, o acesso atravs do ndice SYS_C002934 trar apenas o endereo de uma linha.
d) SELECT
FROM
WHERE
ORDER
NM_FUNC
FUNC
rownum < 200
BYcd_mat
Listagem-resposta 5.12D
SQL>
2
3
4
5
6
Explicado.
Plano de Acesso
--------------------------------SELECT STATEMENT
CUSTO = 3
COUNT STOPKEY
TABLE ACCESS BY INDEX ROWID FUNC
INDEX FULL SCAN SYS_C002934
Neste exemplo, a pesquisa foi feita atravs do ndice SYS_C002934, no porque houvssemos informado uma
condio de pesquisa e sim porque solicitamos que os dados viessem ordenados por CD_MAT. O processo de
COUNT STOPKEY interrompe a leitura quando atingirmos 199 linhas.
e) SELECT CD_DEPTO, SUM(VL_SAL)
FROM FUNC
GROUP BY CD_DEPTO
/
Listagem-resposta 5.12E
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT CD_DEPTO, SUM(VL_SAL)
3
FROM FUNC
4
GROUP BY CD_DEPTO
5 /
Explicado.
Com este resultado tambm comprovamos algo que estudamos em teoria anteriormente. Uma operao de
grupamento tambm realiza um SORT. Todos os dados da tabela FUNC foram lidos uma vez que no h qualquer
restrio de linha. A ordenao se faz necessria para aplicao da funo de grupo e tambm porque a coluna
escolhida para grupamento no possui nenhum ndice associado a ela.
5.13) Determinar o caminho de acesso para os seguintes comandos:
a) SELECT /*+ INDEX (func ix_depto) */ cd_mat, nm_func
FROM func
WHERE cd_depto = 'C01';
Listagem-resposta 5.13A
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT /*+ INDEX (func ix_depto) */ cd_mat, nm_func
3
FROM func
4
WHERE cd_depto = 'C01'
5 /
Explicado.
Plano de Acesso
--------------------------------OPER = SELECT STATEMENT
CUSTO = 2
OPER = TABLE ACCESS
OPT= BY INDEX ROWID FUNC
OPER = INDEX
OPT= RANGE SCAN IX_DEPTO
Para que pudssemos realizar o teste acima criamos um ndice sobre a coluna CD_DEPTO. Na definio do comando
SELECT inclumos um HINT indicando ao otimizador que desejvamos que a busca fosse feita utilizando este
ndice. Observe que o custo para acesso utilizando este ndice maior que o custo de uma leitura completa a todos
os dados; no entanto, o otimizador obedece solicitao feita e realiza a busca conforme indicado. Primeiramente
faz um RANGE SCAN (vrias linhas podem ser trazidas de um ndice que admite duplicidade na chave, que o
caso) e para cada ROWID obtido faz acesso tabela FUNC.
b) SELECT cd_mat, nm_func
FROM func
WHERE cd_depto = 'C01' OR cd_mat > 200;
Listagem-resposta 5.13B
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT cd_mat, nm_func
3
FROM func
4
WHERE cd_depto = 'C01' OR cd_mat > 200
5 /
Explicado.
Plano de Acesso
--------------------------------OPER = SELECT STATEMENT
CUSTO = 1
OPER = TABLE ACCESS
OPT= FULL FUNC
O que dissemos no exemplo anterior se comprova agora. O custo da pesquisa tabela toda (FULL SCAN) menor
que a pesquisa atravs de ndices, no nosso caso, pois a tabela FUNC possui apenas 35 linhas.
c) SELECT /*+ USE_CONCAT */ cd_mat, nm_func
FROM func
WHERE cd_depto = 'C01' OR cd_mat > 200;
Listagem-resposta 5.13C
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT /*+ USE_CONCAT */ cd_mat, nm_func
3
FROM func
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
647
A operao de CONCATENATION recebe os dados de cada uma das restries unidas por um OR e junta para produzir
o resultado final. Observe que esta no foi a escolha do otimizador, foramos a situao usando um HINT. A tabela
FUNC foi lida duas vezes, e na primeira vez somente as linhas com CD_DEPTO=C01 foram trazidas. Na segunda
leitura apenas as linhas com CD_MAT maior que 200 e CD_DEPTO <> C01 foram trazidas. Uma vez que os conjuntos
so disjuntos no h necessidade de uma operao de SORT, somente precisamos concatenar os resultados.
5.14) Verificando a operao de JOIN escolhida nos exemplos abaixo:
a) SELECT
FROM
WHERE
AND
Listagem-resposta 5.14A
SQL> set echo on
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT /*+ USE_NL(func depto) */ cd_mat, nm_func, nm_depto, nm_proj
3
FROM proj, depto, func
4
WHERE func.cd_depto = depto.cd_depto
5
AND depto.cd_depto = proj.cd_depto
6 /
Explicado.
Plano de Acesso
--------------------------------OPER = SELECT STATEMENT
CUSTO = 14
OPER = HASH JOIN
OPER = NESTED LOOPS
OPER = TABLE ACCESS
OPT= FULL DEPTO
OPER = TABLE ACCESS
OPT= FULL FUNC
OPER = TABLE ACCESS
OPT= FULL PROJ
6 linhas selecionadas.
Neste exemplo estamos operando um Join entre trs tabelas. No HINT includo solicitamos que fosse utilizado o
mtodo de NESTED LOOPS para a operao de Join entre FUNC e DEPTO. Desta forma, todos os dados de FUNC
foram concatenados (joined) aos dados correspondentes em DEPTO utilizando o mtodo NESTED LOOPS (observe que este o primeiro passo, mais identado). O resultado do NESTED LOOPS, assim como o resultado do
acesso FULL PROJ, so entregues para o processo HASH JOIN que juntar estes dois conjuntos de linha usando este
mtodo. O resultado passado para o processo pai SELECT que fez a solicitao de dados.
b) SELECT
FROM
WHERE
AND
Listagem-resposta 5.14B
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT /*+ USE_HASH(func depto) */ cd_mat, nm_func, nm_depto, nm_proj
3
FROM proj, depto, func
4
WHERE func.cd_depto = depto.cd_depto
5
AND func.cd_depto = proj.cd_depto
6 /
Explicado.
Plano de Acesso
---------------------------------
CUSTO = 5
Neste caso solicitamos que a juno entre DEPTO e FUNC fosse feita usando-se o mtodo HASH JOIN. O resultado
desta juno com o total de linhas da tabela PROJ ser, novamente, joined atravs do mtodo HASH JOIN, desta
vez por escolha do otimizador.
Com este ltimo exemplo encerramos o nosso estudo superficial sobre otimizao de performance do SQL. Olhando
para os Explain Plan apresentados podemos concluir que a ordem de execuo das operaes ocorre, sempre, de
dentro para fora, isto , a operao mais identada a que ocorre primeiro. Outra observao que as operaes de
Join so realizadas aos pares. Mesmo que venhamos a realizar um Join de mais de duas tabelas, elas so joined
duas a duas. Ainda verificamos que o otimizador obediente, isto , mesmo que ele no concorde com o caminho
solicitado (o custo do caminho solicitado seja maior que aquele encontrado por outro caminho), ele obedece
determinao do usurio. Isto somente no ocorrer se a solicitao no puder ser atendida.
Mesmo contando somente com estes poucos exemplos voc pode fazer modificaes na sua base de dados para
realizar mais testes. Por exemplo:
Inclua mais linhas nas tabelas Func e Depto. Em seguida volte a executar o comando ANALYZE sobre todas as tabelas.
Remova todas as estatsticas das tabelas em teste (ANALYZE TABLE XXX DELETE STATISTICS) e repita todos os testes.
Altere os scripts modificando as condies de busca.
Este assunto bastante extenso e possui diversos detalhes para anlise. Para esgot-lo precisamos de um livro
exclusivo. O objetivo do tpico aqui foi apresent-lo a um assunto delicado e que requer toda a nossa ateno, que
a performance relativa ao acesso aos dados. Trabalhe junto com seu DBA neste assunto, principalmente para
situaes que envolvam milhares de linhas.
5.15) Criar uma view materializada simples e verificar seu uso em comandos de SQL.
a) Criar uma view materializada que apresente o valor total vendido por cada vendedor da empresa, independente
do perodo da venda. O preenchimento da VIEW deve ser manual.
Listagem-resposta 5.15A
ALTER SESSION SET QUERY_REWRITE_ENABLED = TRUE;
ALTER SESSION SET QUERY_REWRITE_INTEGRITY = TRUSTED;
DROP SNAPSHOT MV_POR_VENDEDOR;
CREATE MATERIALIZED VIEW MV_POR_VENDEDOR
PCTFREE 0 TABLESPACE USERS
STORAGE (INITIAL 16K NEXT 16K PCTINCREASE 0)
BUILD DEFERRED
REFRESH COMPLETE ON DEMAND
ENABLE QUERY REWRITE
AS SELECT F.NM_FUNC, SUM(V.VL_VENDA) SOMA
FROM FUNC F, VENDAS V
WHERE F.CD_MAT = V.CD_VENDEDOR
GROUP BY NM_FUNC
COMMIT;
EXECUTE DBMS_MVIEW.REFRESH('MV_POR_VENDEDOR', 'C', NULL, TRUE, FALSE, 1, 0, 0, TRUE)
Procedimento PL/SQL concludo com sucesso.
SELECT COUNT(*) FROM MV_POR_VENDEDOR;
COUNT(*)
---------32
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
649
Observe pelo resultado que o otimizador percebeu que o acesso view materializada MV_POR_VENDEDOR resultaria
em um custo menor que todas as operaes necessrias para o join e posterior group by de Func e Vendas. Para que
este processo d resultado indispensvel que as estatsticas sejam calculadas tanto para a tabela Func quanto para
a tabela Vendas. Caso isto no seja feito, ser acionado o otimizador por regra, que no implementa o mecanismo
de query rewrite.
c) Avalie a utilizao desta view quando o comando de SQL diferente do comando da view.
Listagem-resposta 5.14C
SQL> set echo on
SQL> EXPLAIN PLAN SET STATEMENT_ID = 'TESTE' FOR
2 SELECT SUM(V.VL_VENDA)
3
FROM FUNC F, VENDAS V
4
WHERE F.CD_MAT = V.CD_VENDEDOR
5
GROUP BY NM_FUNC
6 /
Explicado.
Plano de Acesso
--------------------------------OPER = SELECT STATEMENT
CUSTO = 1
OPER = TABLE ACCESS
OPT= FULL MV_POR_VENDEDOR
Observe que as modificaes no desviaram o otimizador do uso da view MV_POR_VENDEDOR. Ele faz uma anlise
para saber se o resultado, apesar de diferente da view materializada, pode ser obtido a partir de informaes da view.
5.16) Criar uma view materializada simples e verificar seu uso em comandos de SQL.
a) Criar uma view materializada com construo imediata e que contenha mais de uma agregao. Verifique seu
preenchimento.
Listagem-resposta 5.16A
SQL> CREATE MATERIALIZED VIEW MV_QTD_VENDAS_DIA
2
PCTFREE 0 TABLESPACE USERS
3
STORAGE (INITIAL 16K NEXT 16K PCTINCREASE 0)
4
BUILD IMMEDIATE
5
REFRESH COMPLETE
6
ENABLE QUERY REWRITE
7
AS SELECT F.NM_FUNC, AVG(V.QT_VENDA) AS MED_VENDA,
8
COUNT(DISTINCT V.CD_PRODUTO) AS QT_PRODUTO
9
FROM FUNC F, VENDAS V
10
WHERE F.CD_MAT = V.CD_VENDEDOR
11
GROUP BY F.NM_FUNC, TRUNC(V.DT_VENDA);
View materializada criada.
SQL> SELECT COUNT(*) FROM MV_QTD_VENDAS_DIA;
COUNT(*)
---------4933
Neste exemplo repetimos o comando SELECT da view e o otimizador, automaticamente, alterou o destino do
acesso para a view.
5.17) Crie uma tabela com particionamento por intervalo de valores e preencha esta tabela com os dados originais
da tabela FUNC:
Listagem-resposta 5.17A
SQL> CREATE TABLE PART_FUNC
2 (CD_MAT
NUMBER(5) NOT NULL
3 ,VL_SAL
NUMBER(9,2)
4 ,CD_DEPTO
CHAR(3)
5 ,NR_CARGO
NUMBER(3))
6
storage (initial 200k next 100k minextents 1 maxextents 15)
7
pctfree 10
8
pctused 80
9 PARTITION BY RANGE (CD_DEPTO)
10 (PARTITION PRT_A VALUES LESS THAN ('B'),
11
PARTITION PRT_B VALUES LESS THAN ('C'),
12
PARTITION PRT_C VALUES LESS THAN ('D'),
13
PARTITION PRT_D VALUES LESS THAN ('E'),
14
PARTITION PRT_E VALUES LESS THAN ('F'),
15
PARTITION PRT_F VALUES LESS THAN ('G'),
16
PARTITION PRT_Z VALUES LESS THAN (MAXVALUE));
Tabela criada.
Listagem-resposta 5.17B
SQL> INSERT INTO PART_FUNC (CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO)
2
SELECT CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO
3
FROM FUNC;
37 linhas criadas.
SQL> COMMIT;
Validao completa.
5.18) Crie um ndice local prefixado, um ndice local no prefixado, um ndice global particionado prefixado, um
ndice global particionado no prefixado e um ndice global no particionado:
Listagem-resposta 5.18A
SQL> CREATE INDEX IXLP_PFUNC ON PART_FUNC(CD_DEPTO, CD_MAT) LOCAL;
ndice criado.
SQL> CREATE INDEX IXLNP_PFUNC ON PART_FUNC(CD_MAT, VL_SAL) LOCAL;
ndice criado.
SQL> CREATE INDEX IXGP_PFUNC ON PART_FUNC(VL_SAL)
2
GLOBAL PARTITION BY RANGE (VL_SAL)
3
(PARTITION IXGP_1000 VALUES LESS THAN (1000),
4
PARTITION IXGP_3000 VALUES LESS THAN (3000),
5
PARTITION IXGP_5000 VALUES LESS THAN (5000),
6
PARTITION IXGP_7000 VALUES LESS THAN (7000),
7
PARTITION IXGP_MAXVALUE VALUES LESS THAN (MAXVALUE));
ndice criado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
651
Neste exerccio observamos que um ndice global deve ser prefixado, isto , a coluna mais esquerda da chave do
ndice deve ser igual chave de particionamento.
5.19) Divida a partio Z em duas parties. Verifique o estado dos ndices associados:
Listagem-resposta 5.19A
SQL> ALTER TABLE PART_FUNC
2
SPLIT PARTITION PRT_Z AT ('M');
Tabela alterada.
SQL>
SQL>
SQL>
SQL>
2
3
4
5
6
TABELA
NOME PART
POSITION TABLESPACE
--------------- --------------- ---------- ---------PART_FUNC
PRT_B
2 USERS
PART_FUNC
PRT_C
3 USERS
PART_FUNC
PRT_D
4 USERS
PART_FUNC
PRT_E
5 USERS
PART_FUNC
PRT_A
1 USERS
PART_FUNC
PRT_F
6 USERS
PART_FUNC
SYS_P1
7 USERS
PART_FUNC
SYS_P2
8 USERS
8 linhas selecionadas.
SQL>
SQL>
SQL>
2
3
INDEX_NAME
--------------IXLP_PFUNC
IXLP_PFUNC
IXLP_PFUNC
IXLP_PFUNC
IXLP_PFUNC
IXLP_PFUNC
IXLNP_PFUNC
IXLNP_PFUNC
IXLNP_PFUNC
IXLNP_PFUNC
IXLNP_PFUNC
IXLNP_PFUNC
IXGP_PFUNC
IXGP_PFUNC
IXGP_PFUNC
IXGP_PFUNC
IXGP_PFUNC
IXLNP_PFUNC
PARTITION_NAME
POSITION STATUS
--------------- ---------- -------PRT_A
1 USABLE
PRT_B
2 USABLE
PRT_C
3 USABLE
PRT_D
4 USABLE
PRT_E
5 USABLE
PRT_F
6 USABLE
PRT_A
1 USABLE
PRT_B
2 USABLE
PRT_C
3 USABLE
PRT_D
4 USABLE
PRT_E
5 USABLE
PRT_F
6 USABLE
IXGP_1000
1 UNUSABLE
IXGP_3000
2 UNUSABLE
IXGP_5000
3 UNUSABLE
IXGP_7000
4 UNUSABLE
IXGP_MAXVALUE
5 UNUSABLE
SYS_P1
7 USABLE
8 UNUSABLE
7 USABLE
8 UNUSABLE
Pelo resultado podemos verificar que a operao de Split determinou a criao de duas parties SYS_P1 e SYS_P2.
Com isto o ndice global particionado ficou em estado invlido, assim como o ndice da segunda partio SYS_P2.
5.20) Remova a ltima partio da tabela. Verifique o estado dos ndices associados:
Listagem-resposta 5.20A
SQL> ALTER TABLE PART_FUNC
2
DROP PARTITION SYS_P2;
Tabela alterada.
SQL>
SQL>
SQL>
2
3
INDEX_NAME
PARTITION_NAME
POSITION STATUS
--------------- --------------- ---------- -------IXLP_PFUNC
PRT_B
2 USABLE
IXLP_PFUNC
PRT_C
3 USABLE
IXLP_PFUNC
PRT_D
4 USABLE
IXLP_PFUNC
PRT_E
5 USABLE
IXLP_PFUNC
PRT_F
6 USABLE
IXLP_PFUNC
PRT_A
1 USABLE
IXLNP_PFUNC
PRT_A
1 USABLE
IXLNP_PFUNC
PRT_B
2 USABLE
IXLNP_PFUNC
PRT_C
3 USABLE
IXLNP_PFUNC
PRT_D
4 USABLE
IXLNP_PFUNC
PRT_E
5 USABLE
IXLNP_PFUNC
PRT_F
6 USABLE
IXGP_PFUNC
IXGP_1000
1 UNUSABLE
IXGP_PFUNC
IXGP_3000
2 UNUSABLE
IXGP_PFUNC
IXGP_5000
3 UNUSABLE
IXGP_PFUNC
IXGP_7000
4 UNUSABLE
IXGP_PFUNC
IXGP_MAXVALUE
5 UNUSABLE
IXLNP_PFUNC
SYS_P1
7 USABLE
IXLP_PFUNC
SYS_P1
7 USABLE
19 linhas selecionadas.
Listagem-resposta 5.21A
SQL> SET ECHO ON
SQL> ALTER TABLE PART_FUNC
2
ADD PARTITION PRT_PENULTIMA VALUES LESS THAN ('S');
Tabela alterada.
SQL> ALTER TABLE PART_FUNC
2
ADD PARTITION PRT_ULTIMA VALUES LESS THAN (MAXVALUE);
Tabela alterada.
SQL>
SQL>
SQL>
2
3
INDEX_NAME
--------------IXLP_PFUNC
IXLP_PFUNC
IXLP_PFUNC
IXLP_PFUNC
IXLP_PFUNC
IXLNP_PFUNC
PARTITION_NAME
POSITION STATUS
--------------- ---------- -------PRT_B
2 USABLE
PRT_C
3 USABLE
PRT_D
4 USABLE
PRT_E
5 USABLE
PRT_F
6 USABLE
PRT_PENULTIMA
8 USABLE
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
653
1
1
2
3
4
5
6
8
1
2
3
4
5
7
9
7
9
USABLE
USABLE
USABLE
USABLE
USABLE
USABLE
USABLE
USABLE
UNUSABLE
UNUSABLE
UNUSABLE
UNUSABLE
UNUSABLE
USABLE
USABLE
USABLE
USABLE
Listagem-resposta 5.22A
SQL> SET ECHO ON
SQL> ALTER TABLE PART_FUNC
2
MERGE PARTITIONS PRT_B, PRT_C INTO PARTITION PRT_BC;
Tabela alterada.
SQL> SET ECHO OFF
SQL> SELECT TABLE_NAME TABELA,
2
PARTITION_NAME NOME PART,
3
PARTITION_POSITION POSITION,
4
TABLESPACE_NAME TABLESPACE
5
FROM USER_TAB_PARTITIONS
6
WHERE TABLE_NAME = 'PART_FUNC';
TABELA
NOME PART
POSITION TABLESPACE
--------------- --------------- ---------- ---------PART_FUNC
PRT_D
3 USERS
PART_FUNC
PRT_E
4 USERS
PART_FUNC
PRT_F
5 USERS
PART_FUNC
PRT_A
1 USERS
PART_FUNC
SYS_P3
6 USERS
PART_FUNC
PRT_BC
2 USERS
PART_FUNC
PRT_PENULTIMA
7 USERS
PART_FUNC
PRT_ULTIMA
8 USERS
8 linhas selecionadas.
Com estes exerccios relativos partio verificamos que o Oracle oferece diversas flexibilidades para a manuteno
das parties, o que facilita as manutenes a serem realizadas pelo DBA.
Captulo 6
INSTALANDO O ORACLE
DEVELOPER 6I NO WINDOWS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
655
CONSIDERAES INICIAIS
O pacote Oracle Developer composto de diversas ferramentas para desenvolvimento de aplicaes. Este pacote
foi desenvolvido para estabelecer acesso a uma base de dados Oracle (preferencialmente). Os procedimentos de
instalao que veremos neste captulo so semelhantes para os Windows 95, 98, NT e 2000.
Nesta instalao poderemos incluir, para efeito de teste, a instalao do Forms Server e do Reports Server localmente,
a fim de estudarmos os requisitos e particularidades do uso destes produtos (Forms e Reports) em um ambiente
Web (Captulo 9).
Comearemos, normalmente, fazendo a instalao do produto passo a passo e, se necessrio, realizaremos os
ajustes utilizao do ambiente disponvel.
METODOLOGIA
Acompanhamento passo a passo das etapas da instalao.
IDIOMA
A primeira questo apresentada relativa ao idioma em que os produtos sero instalados. O idioma escolhido tem
influncia nas mensagens de erro enviadas pelo banco de dados, formato-padro de datas, formato-padro de
numerao decimal, assim como nas telas dos produtos instalados.
Uma vez que a linguagem-padro English, este idioma ser instalado independente de nossa escolha, ou seja, se
escolhermos Brazilian Portuguese, ser instalado o idioma portugus do Brasil e o Ingls.
Para que tenhamos uma maior flexibilidade de uso, manteremos o que fizemos na instalao do banco de dados,
usaremos o idioma Brazilian Portuguese.
Neste mesmo dilogo, deve ser informado o nome da empresa que, normalmente, j aparece preenchido (com
informao obtida do prprio Windows), e o diretrio-raiz (Oracle Home), sob o qual todos os demais subdiretrios
de todos os aplicativos (Oracle) que vierem a ser instalados sero criados. De um modo geral, o valor default
C:\ORA<sistema operacional>, que j est preenchido pode ser usado.
Nesta verso, porm, existe a possibilidade de utilizarmos Oracle Home diferentes, particulares por produto. Isto
permite tanto a atualizao quanto a remoo independente dos produtos. Desta forma testaremos a instalao do
Forms e do Reports em diretrios diferenciados.
Observe que na Figura 6.01 identificamos o Oracle Home como FormsHome e o diretrio real em disco como
C:\ORAFORMS (no pode ultrapassar 8 caracteres).
TOOLS OPTIONS
Nova tela de dilogo ser apresentada para que faamos a escolha do que desejamos instalar.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
657
INSTALLATION OPTIONS
Antes de passarmos a um novo dilogo escolheremos a instalao do Oracle Forms Developer, como mostrado na
Figura 6.02. Na nova tela de dilogo apresentada devemos escolher uma instalao tpica ou customizada.
Na instalao tpica todos os produtos necessrios ferramenta que escolhemos anteriormente instalado. Na
instalao customizada podemos decidir pela instalao de apenas uma ferramenta especfica, por exemplo s
instalar o Forms (sem o Query Builder, Graphics, etc.).
PROCESS STARTUP
Quando prosseguimos a instalao, o dilogo da Figura 6.05 apresentado questionando se desejamos que os
servios sejam iniciados pelo instalador. Os produtos Forms Server e Reports Server so instalados como servios
no ambiente Windows, precisando de criao e instalao.
Por este motivo, aceitaremos esta sugesto. O dilogo da Figura 6.06 apenas informativo e no temos nenhuma
outra alternativa alm de OK.
Eventualmente, pode ser apresentada uma questo caso o Oracle perceba que no existe espao suficiente no
disco. Podemos acionar o Windows Explorer, verificar se realmente no h espao suficiente, efetuar as remoes
necessrias e prosseguir com o processo de instalao.
O dilogo da Figura 6.07 nos indica que alguns arquivos sero instalados no diretrio de sistema do windows (por
exemplo C:\WINNT\SYSTEM32). Se estes arquivos j existirem com verses antigas, eles sero sobrepostos. Os
arquivos so: MFCANS32.DLL, MSVCRT2X.DLL, OC30.DLL, CTL3D32.DLL, ODBC32.DLL e ODBCINT.DLL.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
659
O dilogo seguinte (Forms Server Parameter), Figura 6.08, apresenta o nmero da porta para onde sero enviadas
as requisies ao Forms Server e de onde o Listener (do Forms Server) estar esperando coletar informaes para
transmitir ao servidor. O nmero da porta no pode ser coincidente com o nmero da porta de outro produto
instalado; desta forma, se no houver outro produto instalado nesta mesma porta, podemos deixar o valor default,
que vier preenchido, como o mais adequado.
Neste dilogo devemos, ainda, escolher o protocolo de comunicao entre o Forms Runtime e a Forms Java Applet
que ser executada no browser da mquina cliente. A opo Sockets somente precisa ser modificada para HTTP se
a comunicao precisar passar atravs de um FireWall (software de segurana para ambientes Web). No teremos
esta necessidade por enquanto, pois tanto o servidor quanto o cliente estaro na mesma mquina. Quando viermos
a utilizar um ambiente de produo, em que disponibilizaremos o uso do Forms atravs da Web, deveremos
modificar esta opo.
O dilogo a seguir indica o fim do processo de instalao com sucesso. O Oracle Installer nos d a opo de lermos as
instrues de configurao agora. Em seguida o dilogo de fim de instalao apresentado.
Figura 6.09 Configuration instructions for Forms Server & Reports Server
Alm dos produtos instalados em disco, foram criadas algumas pastas no menu do Windows:
O nmero da porta no precisa ser modificado, a menos que exista um outro produto utilizando esta mesma porta
em sua mquina.
Da mesma forma que para o Forms6i, alm dos produtos instalados em disco, foram criadas algumas pastas no
menu do Windows:
Oracle para Windows NT ReportsHome Nesta pasta encontramos o instalador, o SQL*Plus, Net8 Assistant, etc. O
nome da pasta depende do sistema operacional em que estivermos instalando.
Oracle Forms & Reports 6i ReportsHome Contendo acesso a todos os softwares necessrios ao desenvolvimento
de aplicaes, exceto o Reports Developer.
Oracle Reports 6i ReportsHome Contendo acesso aos executveis do Reports e sua documentao (configurao
e Release Notes).
Oracle Reports 6i Admin ReportsHome Contm acesso a aplicaes de demonstrao.
Oracle Forms & Reports 6i Doc ReportsHome Contm acesso aos manuais online (atravs de um Browser) e
documentao do produto PVCS para controle de verso de aplicativo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
661
CONFIGURANDO O TNSNAMES.ORA
A configurao deste arquivo simplificada, pois contamos com a ajuda de um utilitrio. No entanto, uma vez que
criamos dois diretrios diferentes (dois Oracle Homes) para a instalao das ferramentas, deveremos repetir os
passos a seguir duas vezes, uma para FormsHome e outra para ReportsHome.
Devemos, portanto, selecionar o boto Iniciar do Windows, Programas, Oracle para Windows NT <FormsHome
ou ReportsHome>, Oracle Net8 Easy Config.
Nesta primeira tela apresentada, escolheremos criar um novo servio cujo nome ser Desenv.
Na prxima tela, indicaremos o protocolo de comunicao como TCP/IP.
Nesta tela (Figura 6.12), informaremos o endereo de IP da mquina e a porta do Listener associado ao banco. No
nosso caso, o endereo de IP 127.0.0.1 (indica a prpria mquina-origem) e a porta em que configuramos o
Listener foi 1521 (que o default). O Listener o ouvidor do banco de dados. Quando uma solicitao de
conexo aparece nesta porta o programa Listener a recebe e estabelece a sesso do usurio, ou seja, a ligao entre
o software usurio e o banco de dados.
Na prxima tela, informamos o SID do banco de dados. Quando fizemos a instalao do banco de dados escolhemos
ORACLE para nome do banco de dados global e do SID. este nome que devemos indicar agora.
O dilogo seguinte sugere que faamos um teste do servio configurado. Para efeito de teste podemos usar o
usurio desenv criado na instalao do banco de dados.
Observe que esto descritos todos os parmetros que informamos passo a passo com o utilitrio.
O mesmo procedimento devemos realizar para o Report. Preferencialmente utilize o mesmo nome (DESENV) para
servio a fim de ficar transparente o uso do Forms e do Reports. A necessidade de criao de dois TNSNAMES foi
gerada pela instalao em Oracle-Homes distintos.
Com os produtos instalados e o TNSNAMES configurado, podemos iniciar nosso estudo sobre o Forms Builder e o
Report Builder.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
663
Parte 2
DEVELOPER
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
665
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
Captulo 7
O FORM BUILDER R6I
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
667
SOBRE O PACOTE
O Forms Developer corresponde a um dos ambientes de produtividade da Oracle RAD (Rapid Application Development) capaz de construir, rapidamente, aplicaes que a partir das definies do banco de dados possam dar
manuteno a bases de dados. Estas aplicaes tanto podem ser implementadas em ambiente cliente-servidor
quanto em uma arquitetura de trs camadas ou na Internet.
O Form Builder 6i a principal ferramenta deste ambiente, pois a ferramenta para desenvolvimento de aplicaes
online para acesso e atualizao de uma base de dados Oracle.
Para apoiar o Form Builder 6i, as seguintes ferramentas fazem parte do pacote Forms Developer:
Procedure Builder a ferramenta que nos auxilia no desenvolvimento de programas PL/SQL, tanto no ambiente
cliente (em bibliotecas de programas compartilhadas por aplicaes Form), quanto no ambiente servidor (criao de
procedures, functions, packages e database triggers), permitindo uma depurao passo a passo das aplicaes criadas.
Graphics Builder a ferramenta que permite que visualizemos os dados do banco de dados de forma grfica.
Os produtos gerados por essa ferramenta podem ser utilizados em aplicaes Forms.
Project Builder Esta uma ferramenta integradora e organizadora, permitindo que associemos as diversas
aplicaes que componham um projeto de desenvolvimento em uma hierarquia manipulvel. Projetos so
associaes de arquivos com as ferramentas usadas para edit-los. Esses arquivos podem ser de qualquer tipo:
form, report, display (grficos), mdulos de 3GL, documentao e scripts de teste. O grupamento e visualizao
de todos os componentes de um projeto apenas uma das vantagens. A ferramenta permite tambm aes
coletivas, como por exemplo uma compilao.
Query Builder uma ferramenta auxiliar na construo de consultas ao banco de dados. Possui uma interface
grfica e intuitiva que nos permite rpida e facilmente a montagem de queries para a recuperao de informaes.
Schema Builder Esta ferramenta nos auxilia na criao, cpia, modificao e remoo de objetos (e
relacionamentos) do banco de dados.
Translation Builder Esta uma ferramenta para suporte e gerenciamento no processo de converso de aplicaes
Oracle para uma das linguagens suportadas. Suporta a converso de arquivos do tipo .fmb, .ogd, .rdf, .res e .msg.
O pacote Forms Developer contm ferramentas que abrangem todas as reas necessrias ao desenvolvimento de aplicaes
(grficos, queries, manuteno do banco de dados, traduo), e, ainda, uma ferramenta para controle do ambiente.
Neste livro, o objeto de nosso estudo ser o Form Builder 6i.
SOBRE A FERRAMENTA
O desenvolvimento de uma aplicao online envolve diversas etapas, dentre elas: construo da aplicao,
compilao, execuo e depurao.
A ferramenta Form Builder composta de cinco executveis para cumprimento dessas etapas:
IFBLD60 Form Builder Este o aplicativo para desenvolvimento e compilao individual de uma aplicao.
Gera arquivos de quatro categorias: FMB / FMX (fonte e executvel Form), MMB / MMX (fonte e executvel
Menu), PLL / PLX (PL/SQL Library) e OLB (Object Library).
IFRUN60 Forms Runtime Este o aplicativo para execuo das aplicaes desenvolvidas (Form, Menus e
Libraries PL/SQL).
IFWEB60 Web Previewer Esta ferramenta tem a finalidade de permitir a execuo local de uma aplicao
como se ela estivesse executando sob o Forms Server em um browser ou no Appletviewer. O Web Previewer
executa o arquivo produzido pelo Form Compiler (FMX).
IFCMP60 Form Compiler Este aplicativo permite a converso de aplicaes do formato binrio para texto (e
vice-versa) ou para armazenamento no banco de dados (e vice-versa). utilizado, ainda, para compilao em
batch de diversas aplicaes, incluso da definio dos mdulos no banco de dados, upgrade de verses anteriores
do Form Builder, SQL*Forms e SQL*Menu.
IFDBG60 acionado, indiretamente, atravs do Forms Runtime ou do Form Builder para depurao da aplicao.
Durante este captulo, trataremos da construo, compilao e teste de aplicaes individuais. Desta forma,
trabalharemos basicamente com o Form Builder e o Forms Runtime. No Captulo 9 estaremos estudando a execuo
de nossas aplicaes em um ambiente de trs camadas, seja na Internet ou na Intranet, porm indispensvel que
venhamos a conhecer todas as caractersticas da ferramenta primeiro antes de virmos a utiliz-la no ambiente Web.
SOBRE O ESTUDO
Neste captulo desenvolveremos o estudo com exemplos passo a passo. Os captulos da parte Referncias contero
lista de propriedades, de variveis de sistema, de rotinas predefinidas, de triggers, etc.
A cada tpico criaremos um aplicativo contendo o assunto em estudo. Nos exerccios referentes a cada tpico
trabalharemos algumas outras caractersticas que estaro contidas nos Captulos 13 a 17 e devero ser consultadas
para desenvolvimento dos exerccios.
Durante os textos do estudo, enfatizaremos o modo como o Form Builder trabalha e como deveremos agir para
customizar ou modificar sua ao bsica e sua funcionalidade default.
METODOLOGIA
Apresentao e descrio dos dilogos apresentados pela ferramenta e forma de preenchimento.
TCNICA
Criao de pequenos programas seguindo os dilogos apresentados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
669
INTRODUO
A ferramenta Form Builder capaz de construir trs tipos de mdulos principais diferentes:
Mdulo Form Consiste da aplicao online, contendo lgicas de atualizao, telas, botes, itens, etc. O fonte
de um mdulo Form possui a extenso FMB e o executvel, FMX.
Mdulo Menu Consiste de um conjunto de submenus e lgicas para acionamento dos diversos mdulos Form
ou de outros submenus, execuo de aplicaes PL/SQL em batch, acionamento de grficos, etc. O fonte de um
mdulo Menu possui a extenso MMB e o executvel, MMX.
Mdulo PL/SQL Library Consiste de um conjunto de programas PL/SQL que pode ser compartilhado por
diversas aplicaes Form (ou Report) que executam no ambiente. O fonte de um mdulo PL/SQL Library possui
a extenso PLL e o executvel, PLX.
Um quarto tipo de arquivo pode ser gerado com esse aplicativo:
Object Library Consiste de um conjunto de objetos internos do Form que podem ser definidos uma nica vez
e utilizados em outras aplicaes. Esta biblioteca de objetos auxilia o desenvolvedor na criao de padres.
Durante este captulo, trataremos de cada um destes mdulos individualmente a fim de analisarmos suas
caractersticas e usos.
Forms Subordinado a este n estar(o) o(s) mdulo(s) de Form que viermos a desenvolver. Na Figura 7.02
aparece uma aplicao de nome Module1. Observe que o n Forms est preenchido com o smbolo ( - ), indicando
que o n est expandido. O n do mdulo Module1 est preenchido com o smbolo ( + ), indicando que o n
est contrado, ou seja, existem elementos subordinados a este n que no esto visveis.
Menus Subordinado a este n estar(o) o(s) mdulo(s) de Menu que viermos a desenvolver. Na Figura 7.02
no existe nenhum mdulo aberto, portanto o n est vazio. No h nenhum smbolo preenchendo o n.
Bibliotecas PL/SQL Subordinado a este n estar(o) o(s) mdulo(s) Library de PL/SQL que viermos a desenvolver.
Na Figura 7.02 tambm no existe nenhum mdulo aberto, portanto o n est vazio.
Bibliotecas de Objetos Subordinado a este n estar (ou estaro) a biblioteca de objetos-padro que criarmos e
desejarmos reutilizar.
Pacotes Embutidos Subordinado a este n existem diversos pacotes (packages) contendo diversas rotinas que
poderemos utilizar no desenvolvimento da aplicao. Observe que este n est contrado ( + ).
Objetos do Banco de Dados Subordinados a este n sero visualizados os diversos objetos do banco de dados
a que o usurio ao qual estamos conectados tem acesso. Atualmente o n est vazio pois no estabelecemos,
ainda, conexo com o banco.
A seguir, veremos as diversas aes que podemos realizar no Navegador de Objetos.
EXPANDIR OU RECOLHER
Para expandir um n ou contra-lo basta que pressionemos o mouse sobre o smbolo ( + ), para expandi-lo, ou
sobre o smbolo ( - ), para contra-lo.
A Figura 7.02 apresenta o navegador com o n Module1 contrado.
As aes de expanso e contrao podem ser feitas com os botes Expandir e Recolher da barra de ferramentas.
A Figura 7.03 apresenta os botes que realizam as aes de expanso e contrao na barra de ferramentas.
Como teste, utilize o boto Expandir Tudo sobre o n Pacotes Embutidos. Voc verificar que a expanso se dar
em todos os ns subordinados ao n principal. Todos sero expandidos simultaneamente. A ao inversa obtida
com o boto Recolher Tudo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
671
CRIAR OU DELETAR
A criao de qualquer elemento no Form Builder pode ser feita utilizando-se o boto Criar, apresentado na Figura 7.04.
Para realizarmos esta ao, basta que selecionemos o n ou um objeto do mesmo tipo daquele que desejamos criar
e pressionemos o boto Criar.
Como teste, selecione o n Module1 (corresponde a um elemento do tipo Form) e pressione o boto Criar. Voc
observar que ser criado um novo mdulo de nome Module2. Expanda o n Module1.
Selecione o n Alertas (subordinado a Module1) e pressione o boto Criar, selecione o n Editores e pressione o
boto Criar. Voc observar a criao de objetos subordinados ao n especificado.
Outra forma de realizar a mesma operao realizarmos um clique duplo sobre o n no qual desejamos criar um
elemento. Teste sobre o n Parmetros.
Com esses testes, verificamos que podemos manipular com mais de um mdulo ao mesmo tempo usando a
ferramenta, pois criamos Module1 e Module2. Isto se aplica a todos os ns principais (Forms, Menus e Libraries).
Enquanto ainda no tivermos prtica no desenvolvimento de aplicaes com essa ferramenta, trabalharemos com
um mdulo por vez.
Para removermos um elemento, devemos selecion-lo e pressionar a ferramenta Deletar ou o boto Del do teclado.
Teste com o n Module2.
Ao removermos o mdulo Module2, o Form Builder perguntar se desejamos salvar as modificaes efetuadas.
EXECUTAR E DEPURAR
A execuo do mdulo Form ativo, ou seja, aquele em que temos algum elemento selecionado, ocorre quando
pressionamos os botes Executar Form Cliente/Servidor, Executar Form Web ou Executar Depurao de Form.
Na Figura 7.06, apresentamos os trs botes ligados execuo da aplicao.
Quando pressionamos o boto Executar Form Cliente/Servidor, acionamos o Forms Runtime para execuo da
aplicao corrente. Se pressionarmos o boto Executar Form Web estaremos acionando o Web Previewer para
simularmos a execuo de uma aplicao em ambiente Web. Se pressionarmos o boto Executar Depurao de
Form, a execuo ser realizada com o auxlio do depurador que permitir que acompanhemos passo a passo cada
ao a ser efetuada.
Quando tivermos criado nossa primeira aplicao, utilizaremos o boto Executar.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
673
A Figura 7.08 mostra o dilogo apresentado. A partir do momento que definirmos o diretrio e o nome do mdulo,
o Form Builder no mais apresentar esse dilogo nas prximas vezes em que pressionarmos o boto Salvar.
Como teste, salve o mdulo ativo com o nome de Teste. Observe aps a salva que no navegador o nome do
mdulo foi alterado para Teste e que na parte inferior da janela do Form Builder aparece no s o nome do mdulo
ativo como tambm seu nome fsico, isto , seu nome completo.
LOCALIZAR
Podemos usar o pesquisador do Navegador para encontrar elementos e ns dentro do Navegador. Para iniciarmos
uma busca devemos digitar a string que desejamos procurar no campo Localizar, que fica posicionado no canto
superior direito da janela do Navegador. A cada caracter que digitamos, o Form Builder movimenta o cursor para
o prximo elemento com o qual as letras digitadas sejam compatveis.
Por exemplo, selecionemos o mdulo Teste. Ao posicionarmos o cursor sobre o campo Localizar e digitarmos a
letra A, o Form Builder posicionar o cursor sobre o n Alertas.
Quando necessrio, podemos utilizar as duas lanternas posicionadas ao lado do campo Localizar para efetuar uma
busca para frente ou para trs.
NAVEGANDO NA HIERARQUIA
Do lado esquerdo (na barra superior) da janela do Navegador existe um campo que apresenta o nome do elemento
atualmente selecionado. Ao abrirmos a lista desse campo, verificaremos que ele contm todos os ancestrais
hierarquicamente superiores em relao ao objeto selecionado. Ele apresenta a rvore de subordinao do elemento
selecionado. Podemos escolher qualquer elemento dessa hierarquia, bastando que faamos a seleo do elemento
desejado, clicando o mouse sobre o nome do elemento na lista.
PAINIS DO NAVEGADOR
Podemos dividir o navegador em mltiplos painis horizontal ou verticalmente. Para tal, devemos pressionar e
arrastar o mouse sobre o ponto de diviso horizontal ou vertical.
S possvel dividi-lo num sentido (vertical ou horizontal) de cada vez. Podemos realizar mltiplas subdivises,
desde que num mesmo sentido. Veja a Figura 7.09.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
675
BLOCO DE DADOS
O bloco a estrutura bsica e fundamental do Form Builder. o centro de toda a ao. em torno dele que todas
as aes se processam.
Podemos dizer que um bloco um repositrio (ou container) de itens.
Um bloco no tem representao visual. Um usurio visualiza itens, pois so eles que so apresentados em uma
tela; porm, hierarquicamente, os itens esto subordinados a blocos, pertencem a blocos e esto sujeitos s aes
que efetuarmos para o bloco que o contm.
Um bloco pode estar ligado a uma tabela no banco de dados. Quando isto ocorre, existe uma paridade entre bloco
e tabela, registro e linha da tabela e entre item e coluna da tabela.
Toda a funcionalidade do Form gira em torno do bloco. Conheceremos essa funcionalidade aos poucos.
O prximo dilogo, apresentado na Figura 7.12, permite que faamos a escolha da tabela ou view na qual desejamos
basear o bloco.
Para que nos seja apresentada a lista de tabelas ou views disponveis, devemos pressionar o boto Pesquisar. Caso
no tenhamos feito logon no banco de dados at este momento, ser necessrio que o faamos agora.
O dilogo da Figura 7.13 ser apresentado para que informemos o nome do usurio, senha e a string de conexo
com o banco de dados. Se o banco de dados no estiver ativo, ao pressionarmos o boto Conectar ele ser ativado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
677
O dilogo da Figura 7.14 permite que faamos uma restrio sobre a lista de objetos a ser apresentada:
Usurio Atual Apresenta objetos do banco de dados pertencentes unicamente ao usurio que estabeleceu a conexo.
Outros Usurios Apresenta objetos do banco de dados pertencentes a outros usurios. Naturalmente, o usurio
que estabeleceu a conexo dever ter privilgios de acesso sobre os objetos a serem selecionados.
Se simultaneamente marcarmos as duas opes, na janela inferior sero apresentados objetos pertencentes ao
usurio atual e aos demais usurios do banco de dados.
Tabelas Os objetos apresentados so tabelas.
Views Os objetos apresentados so views.
Sinnimos Os objetos apresentados so sinnimos de outras tabelas ou de views.
Se simultaneamente marcarmos mais de uma opo, veremos objetos dos tipos marcados.
No nosso caso, pretendemos criar a aplicao baseada na tabela Func do usurio Desenv.
O prximo dilogo (Figura 7.15) apresenta a lista de tabelas presentes no banco de dados e pertencentes a diversos
usurios. Observe que o nome do Proprietrio no aparece preenchido quando escolhemos apenas Usurio Atual.
Esta situao fica diferente quando solicitamos visualizao de objetos de outros usurios.
Se desejssemos selecionar todas as colunas, poderamos pressionar o boto ( >> ) sem haver necessidade de selecionar
nenhuma coluna.
O boto Renovar, presente acima do campo Colunas Disponveis, reordena a lista de acordo com a ordem das
colunas no banco de dados.
Faa o seguinte teste: Passe para o lado direito as colunas na seguinte ordem: nm_func, vl_sal, dt_nasc, in_sexo.
Agora pressione o boto Renovar. Observe que as colunas foram reordenadas para nm_func, in_sexo, dt_nasc, vl_sal.
A ordem em que as colunas so definidas no campo Itens do Banco de Dados ser a ordem default para a construo
da tela, que passaremos a chamar de canvas.
O ltimo campo presente na tela tem a seguinte informao: Impor integridade de dados. Isto significa que as
regras de integridade presentes no banco de dados tambm sero asseguradas em nvel de ambiente cliente.
Neste momento no utilizaremos essa opo.
A seguir, apresentado o ltimo dilogo deste assistente. Nesse dilogo, podemos acionar o assistente de layout
para construo da canvas (tela) ou podemos encerrar e posteriormente acion-lo.
No nosso caso, faremos primeiro uma verificao nos objetos gerados nesta primeira fase (usando o navegador);
portanto escolhemos a opo de encerramento (Apenas cria o bloco de dados).
A Figura 7.17 apresenta o resultado da gerao do bloco. Observe que existem trs ns subordinados a um bloco de
dados: Gatilhos (Triggers), Itens e Relaes (Relations).
Verifique, no navegador, se existe o n Itens presente na hierarquia principal. No encontramos. Isto significa que
todo e qualquer item deve, obrigatoriamente, estar subordinado a um bloco. Seja este item de trabalho associado
a uma coluna do banco de dados, um boto, etc. Todo e qualquer item est subordinado a um bloco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
679
Expanda o n CD_MAT. Observe que subordinado a este n encontramos novamente o n Gatilhos (Triggers).
Observe, ainda, que na hierarquia principal tambm existe um n Gatilhos (Triggers).
Nesse tipo de n escreveremos nossa lgica de programao, ou seja, crticas, movimentao, atribuio, etc.
Trataremos deste assunto detalhadamente mais tarde.
Acionaremos o Assistente de Layout atravs do menu Ferramentas.
O primeiro dilogo apresentado pode ser descartado das prximas vezes da mesma forma que no caso do Assistente
de Blocos de Dados.
Na Figura 7.18 iremos determinar a canvas em que os itens do bloco Func sero criados. Nesse dilogo temos trs
campos para preencher.
No primeiro, chamado Canvas, devemos selecionar entre uma canvas j existente ou uma nova canvas. No temos
definida nenhuma canvas em nossa aplicao; desta forma, a nica escolha possvel uma nova canvas.
No segundo campo devemos escolher o tipo de canvas (tela) que desejamos criar. Nos so apresentadas cinco
opes: Contedo (Content), Barra de Ferramentas Vertical (Vertical ToolBar), Barra de Ferramentas Horizontal
(Horizontal ToolBar), Empilhado (Stack) e Guia (Tab). Desenvolveremos aplicaes com cada uma delas, porm,
neste momento, utilizaremos a opo Contedo.
No dilogo da Figura 7.19, escolheremos quais campos sero apresentados na canvas e qual a forma de apresentao.
Como desejamos apresentar todos os campos, deveremos pressionar o boto ( >> ). O campo Itens Exibidos deve
ser preenchido com o conjunto de itens que sero apresentados.
Selecione, agora, um item dentre os presentes no campo Itens Exibidos. O campo Tipo de Item ficar habilitado,
permitindo que faamos a especificao de como desejamos que o item seja apresentado na canvas.
Nossa escolha atual ser Item de Texto. Posteriormente, trabalharemos as propriedades dos itens e as modificaes
necessrias para a apresentao de outros tipos.
O prximo dilogo, apresentado na Figura 7.20, permite a determinao dos labels ou prompts a serem usados na
construo da canvas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
681
No dilogo da Figura 7.21 devemos definir um ttulo para o conjunto de registros apresentados, a quantidade de
registros apresentados, a distncia entre os registros e a presena ou no da barra de rolagem de registros.
Escolhemos como ttulo Funcionrios, apenas 1 (um) registro na tela, distncia zero (s ser exibido 1 (um) registro)
e solicitamos a presena da barra de rolagem.
O prximo dilogo (no apresentamos) encerra a preparao do layout.
Ao retornarmos para o Form Builder, mostrado o editor de layout contendo todos os itens pertencentes ao bloco
Func, organizados numa rea de tela a que chamamos Canvas.
Retorne agora ao navegador e observe a criao de um objeto subordinado ao n Canvases.
Nosso prximo passo ser compilar e executar a aplicao criada.
Se sua canvas no ficou com o desenho exatamente igual ao da Figura 7.22, no se preocupe. Fiz algumas modificaes, no documentadas
aqui, para que o desenho ficasse menor.
CONSULTANDO FUNCIONRIOS
A consulta das informaes gravadas pode ser feita com ou sem restries. Se pressionarmos o boto Executar Consulta
da barra de ferramentas ou a opo Executar do menu Consultar faremos uma consulta a todas as linhas de Func.
A navegao entre os registros consultados poder ser feita atravs da barra de ferramentas (Anterior e Prximo),
atravs das opes Anterior e Prximo do menu Gravar e, ainda, atravs da barra de rolagem posicionada direita dos
dados. Essa barra de rolagem visa navegao entre os registros, no tem qualquer relao com rolagem da tela.
Para consultarmos informaes especficas, devemos escolher a opo Entrar com Consulta (Enter-Query) da barra
de ferramentas ou a opo Entrar do menu Consultar.
Podemos digitar um valor fixo em um campo qualquer, por exemplo, 100 no campo Matrcula. Essa informao
adicionar a restrio cd_mat = 100 no momento em que a consulta for executada. Podemos preencher tambm >
100, o que causar uma restrio do tipo cd_mat > 100 a tempo de execuo. Outra forma de restringir as linhas
lidas que podemos usar o elemento %, como em %R% (para a coluna nm_func), indicando que devem ser
consultadas todas as linhas em que nm_func tenha R em alguma posio (Like %R%).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
683
ALTERANDO FUNCIONRIOS
O Forms Runtime considerar alterado todo registro que for lido e posteriormente modificado ou, mais precisamente,
todo registro lido e modificado alm de todo registro includo, gravado (salvo) e modificado em seguida.
Desta forma, aps uma consulta, qualquer modificao que venhamos a fazer em um registro ser considerada
para alterao no banco de dados.
Da mesma forma que no caso da incluso, podemos modificar diversos registros e posteriormente acionar o boto
para salvar. Experimente.
Suponhamos agora que tenhamos feito uma alterao ou uma incluso e venhamos a desistir dessa modificao.
Antes de salvarmos, podemos limpar o registro e cancelar a atualizao prevista para ele.
Para efeito de teste, pressione o boto Incluir em qualquer linha dos dados consultados. Ser aberto um novo
registro para digitao. Digite os dados e, em seguida, escolha a opo Limpar do menu Gravar (Registro) e pressione
o boto Salvar. Receberemos a mensagem de que no h modificaes a serem aplicadas ao banco de dados.
Suponhamos, agora, que desejamos copiar alguma informao de um registro para outro.
Uma forma de efetuarmos esta operao navegarmos para o registro origem, selecionarmos o dado desejado, usarmos a
ferramenta de copiar, navegar para o registro destino, posicionar o cursor no campo desejado e pressionar o boto Colar.
As ferramentas de Recortar, Copiar e Colar se aplicam a itens da tela. Devemos selecionar o item desejado e
pressionar o boto correspondente na barra de ferramentas. Essas mesmas opes esto presentes no menu Editar.
Nesse menu Editar, ainda aparecem mais duas opes:
Editar Esta opo apresenta um editor com o contedo do campo que tiver o foco, isto , do campo em que o
cursor estiver posicionado. Essa opo til quando a coluna correspondente no banco de dados muito
grande para ser mostrada integralmente na tela. Quando acionamos o editor, podemos visualizar todo o contedo
do campo. A edio est limitada ao tamanho do item.
Exibir Lista Esta opo exibe a lista de valores para o campo que tiver o foco, se a esse campo tivermos
associado uma lista de valores (cujo uso ser visto ao longo do estudo).
EXCLUINDO FUNCIONRIOS
Para que o Form considere uma ao de excluso no banco de dados, deveremos ter consultado um determinado
registro e, em seguida, o excludo.
A ao de excluso pode ser acionada na barra de ferramentas ou atravs da opo Remover do menu Gravar (Registro).
BLOQUEANDO FUNCIONRIOS
O Form, quando faz uma consulta e apresenta os registros para o usurio, no efetua bloqueio (Lock) nas linhas consultadas.
Esta ao s realizada se o usurio efetuar alguma modificao na linha ou pressionar o boto de Remover.
To logo uma destas aes ocorra, o Form dispara um bloqueio para o registro corrente. Isso ocorre antes da ao
de salva.
Se desejarmos bloquear uma linha mesmo antes de modific-la, podemos usar o boto Bloquear Registro ou a
opo Travar do menu Gravar (Registro).
NAVEGAO
A navegao de uma aplicao Form ocorre entre campos, entre registros e entre blocos.
Para navegarmos de um item para o outro, podemos pressionar a tecla Tab (navegao para frente), Tab+Shift
(navegao para trs) ou podemos utilizar as opes Anterior e Prximo do menu Campo.
A navegao entre registros pode ser feita atravs dos botes da barra de ferramentas, atravs da barra de rolagem,
atravs das opes Anterior e Prximo do menu Gravar (Registro) e, ainda, com as teclas de seta para cima e seta
para baixo do teclado, se o cursor estiver posicionado sobre um campo do registro.
A navegao entre blocos pode ser feita com os botes da barra de ferramentas (Bloco Anterior e Prximo Bloco) ou
com as opes Anterior e Prximo do menu Bloco. Para que essa ao tenha efeito devemos ter criado mais de um
bloco na aplicao.
MENU AJUDA
No menu Ajuda aparecem quatro opes:
Ajuda Esta opo apresenta uma tela contendo as propriedades atuais do item que tiver o foco. Onde o cursor
estiver posicionado.
Teclas Esta opo apresenta uma tela contendo de um lado uma ao e do outro a tecla (ou conjunto de teclas)
a ser acionada para efetuarmos aquela ao. A lista de aes se refere ao conjunto de aes que realizamos com
o menu e com a barra de ferramentas. A tela apresentada sensvel ao contexto, isto , haver uma variao de
acordo com a ao em execuo (consulta, incluso, etc.).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
685
Observe que a mensagem apresentada nesse quadro diferente da mensagem mostrada na linha de mensagens do
Form (no rodap da pgina). Isto ocorre porque o Forms, em diversas situaes, modifica a mensagem recebida do
banco de dados e exibe sua prpria mensagem.
Esta opo ser de grande utilidade para ns quando estivermos testando nossa aplicao. Ela permitir que verifiquemos, precisamente, qual o
erro retornado pelo banco de dados.
SALVA IMPLCITA
O Forms Runtime tem controle sobre as modificaes que efetuamos sobre os registros. Esse controle se d em
nvel de bloco e de Form (aplicao).
Quando, por algum motivo, precisamos limpar o bloco (ou Form, isto , todos os blocos de uma aplicao) e,
anteriormente, efetuamos modificaes no salvas, o Forms Runtime percebe que existem registros pendentes
(no enviados para o banco de dados) e apresenta um dilogo questionando se desejamos ou no efetuar uma
salva dos dados modificados.
A Figura 7.24 apresenta esse dilogo. Se pressionarmos Sim efetuada uma Salva (Commit). Se pressionarmos No,
todas as modificaes so descartadas. Se pressionarmos Cancelar, a ao comandada no efetuada.
Esse dilogo pode aparecer quando efetuamos as aes: Limpar Bloco, Limpar Tudo (Form), Executar Consulta,
Entrar Consulta ou Sair da Aplicao.
CONCLUSES
At o momento no escrevemos uma linha sequer de cdigo; no entanto, a ferramenta j foi capaz de realizar as
operaes bsicas de incluso, excluso, alterao, consulta e navegao.
Nossa tarefa ao longo deste estudo ser perceber como modificar esta funcionalidade bsica de acordo com a
nossa vontade.
EXERCCIOS
Neste primeiro grupo de exerccios, voc criar as aplicaes utilizando o Assistente de Bloco de Dados e o Assistente
de Layout com as diversas variaes que proporemos a seguir.
7.01) Crie uma aplicao com o nome de EX01 baseada na tabela Func. Selecione as colunas cd_mat, nm_func,
cd_depto, dt_nasc, nr_cargo e in_sexo.
Crie uma nova canvas do tipo Contedo (Content). Defina os prompts adequados para cada coluna.
O formato do Layout deve ser Form, com a apresentao de dois registros.
A distncia entre os registros deve ser 10. O ttulo do quadro deve ser Funcionrios. Apresente uma barra de rolagem.
A tempo de execuo:
Crie dois registros sem salvar.
Salve.
Leia todas as linhas cujo cdigo do departamento comece com D.
Altere um registro colocando um valor invlido para o cdigo do departamento.
Tente salvar a alterao. O que acontece? Qual o erro enviado pelo database?
Cancele essa alterao.
7.02) Crie uma aplicao com o nome de EX02 baseada na tabela Func. Selecione as colunas cd_mat, nm_func,
cd_depto, dt_nasc, nr_cargo e in_sexo.
Crie uma nova canvas do tipo Guia. Defina os prompts adequados para cada coluna.
O formato do Layout deve ser Tabular, com a apresentao de cinco registros.
A distncia entre os registros deve ser 15. O ttulo do quadro deve ser Funcs. No inclua barra de rolagem.
A tempo de execuo:
Faa uma consulta de todos os registros.
Faa navegao com as opes de rolagem para frente e para trs do menu Gravar (Record). Qual o resultado?
Navegue at o ltimo registro. Use a tecla Seta para Baixo.
Retorne at o registro de matrcula 150.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
687
METODOLOGIA
Descrio do funcionamento interno do Form Builder e apresentao de procedimentos que modifiquem esta funcionalidade-padro.
TCNICA
Exemplificao com desenvolvimento de mdulos que realizem os procedimentos descritos.
ANALISANDO
Agora que voc j tem condies de criar aplicaes Form, vamos rever as aplicaes criadas e analisar os resultados.
Voc observou que o Forms Runtime decidiu pela incluso de um novo funcionrio sem que tivssemos informado
que estvamos incluindo? Ou que ele decidiu fazer um Update quando alteramos uma determinada linha? Como
feito o controle para que a ferramenta tome a deciso certa?
PROPRIEDADES
Cada objeto criado em nossa aplicao possui um conjunto de propriedades que determinam suas caractersticas bsicas.
Para termos acesso s propriedades de um bloco ou de qualquer outro objeto, devemos selecionar o objeto no
navegador e pressionar o boto direito do mouse. Ser mostrada uma lista de opes, dentre elas aquela que ativa
a paleta de propriedades.
Nessa paleta existem grupos que relacionam propriedades associadas a um mesmo assunto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
689
Na Figura 7.26 mostramos a paleta de propriedades de um bloco. Observe que no grupo Geral existem propriedades
comuns a todos os objetos: Nome, Subclasses e Comentrios. Quando selecionamos uma das propriedades (basta
clicar com o mouse sobre a linha), seu valor torna-se disponvel para modificao e no rodap da paleta aparece
uma pequena explicao sobre a propriedade selecionada.
No exemplo (Figura 7.26), selecionamos a propriedade Nome e a explicao apresentada Nome interno do
Objeto. Isso facilita bastante o entendimento do conjunto de propriedades, que bem extenso. Se voc achar a
informao insuficiente, consulte o Captulo 13, pois apresentamos todas as propriedades (portugus e ingls)
com a respectiva explicao (portugus). Se voc consultar o menu Ajuda, a primeira opo, chamada Tpicos da
Ajuda do Form Builder, permite o acesso aos manuais de ajuda fornecidos pela Oracle (em ingls).
A REA DE BUFFER
Quando criamos um bloco, podemos determinar o tamanho da rea de memria reservada para a leitura das linhas
de dados associadas a ele. Isso feito atravs da propriedade Nmero de Registros Armazenados no Buffer (Number
of Records Buffered). Nessa rea so armazenadas as linhas vindas do banco de dados. Essa rea contm diversos
registros (um para cada linha lida); cada registro possui um campo para cada um dos itens pertencentes ao bloco.
HIERARQUIA FUNCIONAL
Desta forma, podemos dizer que um item est subordinado a um registro, que por sua vez est subordinado a um
bloco. Essa hierarquia, que est representada na Figura 7.27, chamada de Hierarquia Funcional, pois est associada
forma como o Forms Runtime trabalha.
Todos os itens de um determinado bloco esto sujeitos funcionalidade do bloco. Por exemplo, para incluirmos
linhas na tabela Func (exemplo do tpico anterior), preenchemos os itens. Esses dados foram sendo armazenados
na rea de Buffer (registros) at que pressionamos o boto Salvar. Neste momento, essa rea de Buffer foi lida e
enviada para o banco de dados para incluso.
Essas aes foram possveis devido ligao dos itens com os registros e destes com o bloco.
TIPOS DE BLOCOS
Um Bloco no Form pode ser de dois tipos: Data Block (Bloco de Dados) e Control Block (Bloco de Controle).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
691
Tipo de Item
Modificado
Status do Registro
Antes da Modificao
Status do Registro
Depois da Modificao
Bloco de Dados
NEW
INSERT
Bloco de Dados
Item de controle
NEW
INSERT
Bloco de Controle
Item de controle
NEW
INSERT
Bloco de Dados
QUERY
CHANGED
Bloco de Dados
Item de controle
QUERY
QUERY
Quando precisamos, por algum motivo, limpar a rea de buffer de um Bloco de Dados, o Form analisa a situao
de atualizao daquele bloco. Se existirem registros pendentes de atualizao, ou seja, registros no estado INSERT
ou CHANGED, antes de executar a ao solicitada, o Form questiona o usurio se deseja ou no efetivar as
modificaes pendentes (ver a Figura 7.24).
Neste caso, o usurio poder escolher trs aes:
Sim (Yes) Indica que o processo de atualizao do banco deve ser efetuado antes da ao solicitada pelo usurio.
No (No) Indica que os registros pendentes devem ser descartados, mas a ao solicitada, causadora da limpeza
no buffer, deve ser realizada.
Cancelar (Cancel) Indica que o usurio est desistindo da ao solicitada. Neste caso, a ao interrompida e
o programa volta para o estado de leitura do teclado aguardando que o usurio inicie outra ao. Nesta situao
todos os registros pendentes de atualizao continuam pendentes.
NAVEGAO
Nos prximos itens deste Tpico Blocos, deveremos estudar diversas propriedades associadas ao bloco, e portanto
ser necessrio que voc d uma olhada prvia nesse conjunto de propriedades.
Utilizaremos a aplicao EX03 (da lista de exerccios) para confeccionar os testes necessrios.
O que acontece quando, atravs da navegao, atingimos o ltimo item de um bloco e acionamos a navegao
para o prximo item? Qual ao ser realizada pelo Form?
Estas questes sero definidas pelo desenvolvedor ao preencher as propriedades Estilo de Navegao (Navigation
Style), Bloco de Dados Anterior de Navegao (Previous Navigation Data Block) e Prximo Bloco de Dados de
Navegao (Next Navigation Data Block). Todas essas propriedades se encontram grupadas no n Navegao (Navigation) da Paleta de Propriedades.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
693
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
695
O PACOTE PFUNC
Para entendermos como so as regras para estabelecer este tipo de bloco, vejamos um exemplo. Neste primeiro
exemplo criaremos um pacote no banco de dados que contm os tipos necessrios ao acesso, uma rotina de
consulta e uma rotina de atualizao. Quando j houvermos estudado a criao de procedimentos no ambiente
cliente, voc poder optar por incluir as rotinas tanto no ambiente cliente quanto no servidor.
A Listagem 7.01 mostra a parte de especificao do pacote Pfunc. Nele inclumos um tipo Record (Rfunc) referente
s colunas da tabela Func, que desejamos atualizar. Definimos tambm dois outros tipos: um tipo Cursor (Cfunc)
e um tipo Table (Tfunc), ambos fazendo referncia ao tipo Record (Rfunc).
Estabelecemos, ainda, a parte de especificao das rotinas de que necessitamos para consulta tabela Func e sua atualizao.
A rotina de consulta recebe como parmetro a matrcula, o departamento, o cargo e o grau de instruo e retorna
uma varivel cursor do tipo Cfunc. Os parmetros para essa rotina so opcionais: o usurio poder fornecer apenas
A Listagem 7.02 mostra a rotina Consulta efetuando a pesquisa condicional situao apresentada.
A rotina de atualizao recebe dois parmetros: uma tabela cujo layout Rfunc e uma varivel alfanumrica, que
pode ser preenchida com os valores I (na incluso), E (na excluso), A (na alterao) e B (no bloqueio).
De acordo com o valor do segundo parmetro, a ao a ser realizada pela rotina muda.
Na Listagem 7.02 vemos, ainda, a parte do pacote Pfunc contendo a rotina Atualiza.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
697
Na Figura 7.28 se encontra o segundo dilogo, onde somos instados a informar o nome da rotina de consulta. Para
tal, preenchemos seu nome e pressionamos o boto Renovar para que o Form faa a leitura da parte de especificao
do pacote (que j deve ter sido criado anteriormente no banco de dados).
Para o campo Itens do Banco de Dados, movimentamos as colunas que desejamos trazer para a aplicao. Essas
sero as colunas que o Form criar como itens do bloco associado ao procedimento.
No nosso caso, passaremos todas as colunas (>>) para o segundo campo.
Observe que na parte inferior da tela aparecem os argumentos recebidos pela rotina e a possibilidade de informarmos
como esses parmetros sero preenchidos.
O Form Builder, para criao do bloco baseado em procedimento, agir da mesma forma que agia quando da
criao de bloco baseado em tabela, ou seja, se o nome dos itens ficava igual (por default) ao nome das colunas, no
caso de procedimento o nome dos itens ficar igual ao nome das colunas do registro Rfunc no qual o parmetro
Ptab (que do tipo Ref Cursor de Cfunc) se baseia (veja novamente a Listagem 7.01).
Uma vez que os parmetros de entrada devero ser passados pelo usurio (na tela), preencheremos da seguinte forma:
Para o parmetro pcd_mat preencheremos a coluna Valor com :cd_mat. Isto significa que quando o usurio
preencher o item cd_mat do bloco, a tempo de Enter-Query, o valor deste item ser associado ao parmetro
pcd_mat para possibilitar a consulta por matrcula.
Observe que, aps pressionarmos o boto Renovar, o quadro abaixo do nome do procedimento preenchido
automaticamente com o contedo do tipo table Ptab. Este ser nosso parmetro de entrada; desta forma, atribuiremos
a ele todo o contedo do bloco que est sendo criado neste momento. Assumiremos que o nome do bloco ser
Bfunc. Assim, os parmetros sero preenchidos da seguinte forma:
O parmetro Ptab receber o contedo do bloco, ou seja: BFunc.
O parmetro Ptipo receber a constante I, para indicar rotina que uma chamada de incluso.
Os dilogos seguintes a este so preenchidos de forma similar, de acordo com o quadro abaixo:
Tabela 7.02 Preenchimento do Dilogo do Assistente de Bloco de Dados para Atualizar, Excluir e Bloquear
Dilogo
Procedimento
Parmetro Ptab
Parmetro Ptipo
Procedimento de Atualizao
Pfunc.Atualiza
:BFunc
Procedimento de Excluso
Pfunc.Atualiza
:BFunc
Procedimento de Bloqueio
Pfunc.Atualiza
:BFunc
Se voc estiver achando muito difcil fazer este preenchimento agora (a tela muito apertada), pode deixar esta ao para depois, atravs da
paleta de propriedades.
Aps estes preenchimentos, ser gerado um layout com todas as colunas do tipo Rfunc definidas em uma canvas
de contedo, formato Form e uma barra de rolagem (bem simples).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
699
Na Figura 7.30, mostramos o dilogo referente propriedade Colunas de Origem de Dados para Consulta (Query
Data Source Columns). No nosso caso, as informaes j esto preenchidas, pois utilizamos o Assistente para tal.
Essas informaes correspondem aos parmetros do tipo OUT ou IN OUT que existirem na rotina associada. No
nosso caso, so apresentadas as colunas da varivel cursor Cfunc, que faz referncia ao tipo Rfunc.
Para o Form, neste conjunto de colunas estaro os dados vindos do banco de dados (origem). Para a rotina, estes
so os dados de sada (out).
Na Figura 7.31, mostramos o dilogo Argumentos de Origem de Dados para Consulta (Query Data Source Arguments), que tambm j se encontra preenchido. Neste dilogo informamos como se processar o preenchimento
das informaes a serem passadas como argumentos da rotina. No nosso caso, a rotina recebe at quatro parmetros
de entrada, que j foram devidamente associados.
Esse dilogo apresenta quatro informaes a serem preenchidas: o tipo do argumento, seu nome (se derivado de
um tipo do usurio), o modo do argumento (entrada, sada ou ambos) e o valor que deve ser atribudo a ele, que
pode ser um item do programa ou uma constante (no nosso caso, usamos um dos itens do bloco, verifique).
Na Figura 7.32, apresentamos o dilogo referente propriedade Inserir Colunas de Conjuntos de Resultado (Insert
Procedure Result Set Columns), onde so apresentados todos os parmetro do tipo OUT ou IN OUT. Como nosso
parmetro Table do tipo IN OUT, ele automaticamente listado nesse dilogo.
Na Figura 7.33, mostramos o dilogo referente propriedade Inserir Argumentos de Procedimento (Insert Procedure Arguments), onde so apresentados todos os parmetros do tipo IN ou IN OUT para que possamos informar
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
701
Consultas
Array Processing
Tabela
Sim
Sim
Sim
View
Sim
Sim
Clusula FROM
Sim
No
Procedure
Sim
No (se o procedimento
utiliza tipo Table).
Transactional trigger
Sim
Sim
O bloco derivado de uma Sub-Query ser estudado apenas no tpico relativo a itens.
As demais propriedades no detalhadas sero testadas durante os exerccios. Antes de come-los, d uma olhada
no conjunto de propriedades restantes.
EXERCCIOS
7.06) Crie uma aplicao de nome EX06 baseada nas tabelas Func e Depto, com as seguintes caractersticas:
Para a tabela Func as colunas cd_mat, cd_depto, nm_func, vl_sal, nr_cargo e in_sexo devem ser selecionadas.
Para a tabela Depto as colunas cd_depto, nm_depto e cd_gerente devem ser selecionadas.
No estabelecer relacionamento.
Tanto Depto quanto Func devem ser apresentadas em formato Form com 1 (um) registro cada um.
Ambas devem ser apresentadas na mesma canvas. Definir barra de rolagem para ambos os blocos.
Os dados de Funcionrio devem estar ordenados por cargo e nome do funcionrio.
Os dados de Departamento devem estar ordenados por nome do departamento.
Na ltima coluna de Funcionrio, deve ser feita a navegao para Departamento.
Na ltima coluna de Departamento, no entanto, deve ser feita a navegao para o prximo registro de Departamento.
O bloco Departamento somente poder realizar consultas.
J o bloco Funcionrio poder realizar consultas, excluses e alteraes, mas no poder efetuar incluses.
Deve ser permitida ao usurio navegao com o uso de Block Menu.
7.07) Crie uma aplicao de nome EX07 baseada na tabela Func com as seguintes caractersticas:
As colunas cd_mat, cd_depto, nm_func, vl_sal e nr_cargo devem ser selecionadas.
O formato de apresentao deve ser Tabular com seis registros.
Devem ser especificados 12 registros na rea de buffer.
A pesquisa no banco de dados deve ser feita de seis em seis registros.
Somente os registros com cargo superior a 18 devem ser apresentados no resultado.
7.08) Crie uma aplicao de nome EX08 baseada na tabela Func com as seguintes caractersticas:
As colunas cd_mat, nm_func e nr_cargo devem ser selecionadas.
O formato de apresentao deve ser Tabular com seis registros.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
703
METODOLOGIA
Apresentao e descrio da hierarquia visual dentro da ferramenta com estudo dos objetos grficos.
TCNICA
Utilizao dos objetos grficos em exemplos que os caracterizem.
HIERARQUIA VISUAL
J sabemos que funcionalmente os itens dependem dos blocos, porm visualmente um bloco no existe, isto ,
no tem representao visual. Os objetos vistos pelo usurio so a canvas (tela) e os itens.
Sendo assim, os itens esto subordinados, visualmente, canvas em que so apresentados. A tempo de atualizao,
crtica, leitura, gravao e todas as aes funcionais esto subordinadas aos blocos, porm itens pertencentes a um
Na Figura 7.34, alteramos a visualizao do programa-exemplo Tproc, utilizado na construo do bloco atravs
de procedimentos (visto no tpico anterior). Observe que o n Janelas (Windows) apresenta duas janelas:
Null_Window e Janela1.
Na janela Janela1 encontramos a Canvas3, onde se acham subordinados todos os itens visveis desta aplicao.
Podemos, desta forma, concluir que a hierarquia visual composta de Windows Canvas Itens.
A janela Null_Window uma janela fictcia. Representa a hierarquia de todos os objetos que no sero visualizados,
ou seja, dos objetos que no esto subordinados a uma canvas. Esses objetos so ditos Null_Canvas Itens ou
objetos que se apresentariam em uma canvas fictcia chamada Null_Canvas (como aparece na Figura 7.34).
Sendo assim, a Figura 7.34 apresenta todos os objetos visveis subordinados s suas canvas e janelas (onde se apresentaro)
e todos os objetos escondidos aparecem subordinados a uma canvas no visvel e uma janela no visvel.
Observe que, ao retornar ao modo View de Propriedade (Property View), o n Canvas somente apresenta a Canvas3 e o n Janelas (Windows) s apresenta a Janela1.
ITENS
Em uma aplicao grfica, os dados no se apresentam de uma nica forma. Podem ser botes, listas, imagens,
grficos, etc.
Em uma aplicao Forms, portanto, poderemos apresentar os dados de uma forma mais agradvel e amigvel para
o nosso usurio, bastando para isto que modifiquemos os tipos de itens em que os dados so apresentados.
Lembre-se, porm, de que a informao armazenada no buffer associado quele item continua a mesma, ou seja,
se foi lido do banco o valor 42 para grau de instruo, a forma de visualizao pode ser uma lista de nomes, mas o
que est no banco de dados e na memria 42. Por isso devemos, de acordo com o tipo do item, estabelecer regras
de converso entre o valor real do dado e o valor apresentado para o usurio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
705
A Figura 7.35 mostra a primeira imagem da canvas com os itens criados. Para fazermos acesso ao layout da canvas
(tela), podemos acionar o editor de layout atravs do menu Ferramentas (Tools) ou com a tecla F2. Com ele ativo
podemos fazer a navegao de uma janela para outra atravs do menu Janela (Window).
Veremos a seguir as propriedades comuns e aquelas relativas s caractersticas individuais do tipo.
PROPRIEDADES COMUNS
Ao abrirmos a paleta de propriedades do item cd_mat, verificaremos que os itens possuem uma quantidade
significativa de caractersticas a serem analisadas. Vamos a elas.
O grupo funcional ser o ltimo analisado, uma vez que possui caractersticas especficas ao tipo do item.
A primeira propriedade a ser analisada justamente o Tipo do Item (Item Type), do grupo Geral (General). Essa propriedade
determina quais as caractersticas de visualizao especficas do item, pois modifica o conjunto de propriedades definidas
no grupo funcional, ou seja, para cada tipo de item existem propriedades diferentes no grupo funcional.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
707
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
709
Para incluirmos um elemento novo no meio da lista, devemos selecionar o elemento imediatamente anterior e pressionar as teclas Ctrl + Shift +
>. Se desejarmos excluir um elemento da lista, devemos nos posicionar sobre o elemento e pressionar as teclas Ctrl + Shift + <.
A ltima propriedade chamada Mapeamento de Outros Valores (Mapping of Other Values) indica ao Oracle como
deve ser posicionada a lista quando for lido do banco ou atribudo por programao um valor a este item que no
esteja presente na lista de valores.
Para o exemplo em desenvolvimento, preencheremos da seguinte forma: cd_depto com DIRETORIA (ou seja A00),
nr_cargo ficar sem preenchimento e nr_git receber 18.
IMAGEM (IMAGE)
O item Imagem criado por ns no pertence ao banco de dados, e portanto quando executarmos a aplicao no
ser trazido nenhum valor para preench-lo. Nos exerccios encontraremos uma forma de preench-los
adequadamente. Por ora, vejamos apenas suas propriedades:
Formato da Imagem (Image Format) Com esta propriedade podemos determinar o formato no qual a imagem
ser armazenada no banco de dados. Os valores vlidos so: BMP, CALS, GIF, JFIF, PICT, RAS, TIFF, TPIC.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
711
DEFININDO PROMPTS
Nosso ltimo teste se refere ao posicionamento do prompt do item.
Para alterarmos o posicionamento e entendermos o resultado, no editor de layout arrastamos o item nm_func para
a parte inferior da canvas e aumentamos seu tamanho (ver Figura 7.39).
Atualmente, suas propriedades so:
Prompt (Prompt) Nesta propriedade, temos o valor Nome que corresponde ao texto exibido.
Estilo de Exibio do Prompt (Prompt Display Style) Esta propriedade est preenchida com Primeiro Registro
(First Record), indicando que o prompt s deve ser apresentado no primeiro registro (ver Captulo 13).
Justificao do Prompt (Prompt Justification) Aqui indicamos se o prompt ser justificado direita, esquerda,
inicial, final ou centralizado. No nosso caso utilizamos a opo Inicial.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
713
Limite de Conexo do Prompt (Prompt Attachment Edge) Esta propriedade indica em qual dos quatro lados o
prompt deve ser apresentado. Escolhemos topo, ou seja, acima do item.
Alinhamento do Prompt (Prompt Alignment) Aqui indica-se como o texto alinhado em relao lateral a
que est associado. Escolhemos Centralizado.
Deslocamento de Conexo do Prompt (Prompt Attachment Offset) Esta propriedade indica a distncia entre
o item e seu prompt.
Deslocamento de Alinhamento do Prompt (Prompt Alignment Offset) Indica o deslocamento do prompt em
relao ao ponto definido para alinhamento.
Para testarmos, faremos as seguintes alteraes:
Tabela 7.04
Propriedade
Original
Teste 1
Teste 2
Inicial
Inicial
Centralizado
Topo
Inicial
Base
Centralizado
Inicial
Final
15
EXERCCIOS
Os exerccios deste tpico trabalharo exclusivamente com as propriedades. Portanto, tenha-as mo para realiz-los.
7.11) Crie uma aplicao com o nome de EX11 baseada na tabela Func. Selecione as colunas cd_mat, nm_func,
cd_depto, dt_nasc, nr_cargo e in_sexo.
Crie uma nova canvas do tipo Contedo (Content). Defina os prompts adequados para cada coluna.
O formato do Layout deve ser Form, com a apresentao de 1 (um) registro. O ttulo do quadro deve ser Funcionrios.
Apresente uma barra de rolagem.
As seguintes caractersticas devem ser anexadas a esta aplicao bsica:
O item in_sexo deve ser do tipo radio group, para os valores F, M e Null.
O item nr_cargo deve ser do tipo List Item para os valores (48 analista junior, 49 analista pleno, 50 analista
senior, 51 dba, 52 analista de dados, 53 suporte de software, 54 suporte de hardware, 55 coordenador de
projeto, 56 gerente de sistema, 57 instrutor, 58 gerente de suporte, 59 gerente de treinamento, 60
diretor). O usurio poder informar outros valores no presentes na lista, inclusive Null.
O item Matrcula deve ser de preenchimento obrigatrio.
A consulta s pode ser feita pelos campos Cargo e Departamento.
A tempo de consulta, o campo Departamento deve ter seu tamanho ampliado para que seja possvel a pesquisa
por strings do tipo >= A00.
A consulta pelo campo Departamento pode ser feita com letras maisculas ou minsculas indiferentemente.
No so admitidos funcionrios com menos de 18 anos ou com mais de 60 anos.
Quando cada campo adquirir o foco, deve ser apresentada uma explicao sobre o preenchimento na linha de mensagem.
Quando o mouse for passado sobre cada campo, deve ser apresentado o nome do item.
A data de nascimento deve utilizar um formato que obrigue o usurio a digitar toda a mscara.
7.12) Crie uma aplicao de nome EX12 baseada na tabela Proj. Selecione as colunas cd_proj, cd_depto, nm_proj,
cd_resp, qt_eqp, dt_ini, dt_fim.
Crie uma nova canvas do tipo Contedo (Content). Defina os prompts adequados para cada coluna.
O formato do Layout deve ser Form, com a apresentao de dois registros. O ttulo do quadro deve ser Projetos.
Apresente uma barra de rolagem.
As seguintes caractersticas devem ser anexadas a esta aplicao bsica:
O nome do projeto deve ser estendido para que possa ocupar mais de uma linha. Acrescente uma barra de
rolagem para facilitar a navegao neste item. A quebra da linha deve ser feita somente em palavra inteira.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
715
METODOLOGIA
Apresentao e caracterizao dos elementos responsveis pela interface visual Canvas e Windows.
TCNICA
Utilizao dos novos elementos em exemplos e exerccios que desenvolvam suas caractersticas.
INTRODUO
Neste tpico, estudaremos a ligao entre a tela (Canvas) e a janela (Window) em que ela apresentada, os diversos
tipos de canvas e as propriedades desses dois objetos.
Para entendermos a relao entre esses dois elementos, faamos uma comparao com uma pintura. Quando
adquirimos um quadro, reconhecemos a existncia de dois elementos: a tela e a moldura. Da mesma forma, no
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
717
JANELAS (WINDOWS)
Quando criamos uma nova aplicao, forma-se, automaticamente, uma janela (Janela1 ou Window1). Veja sua
presena no n Janelas.
Para que possamos apresentar as diversas telas (canvas) da aplicao, necessitamos montar pelo menos uma janela.
A janela faz a interface com o ambiente Windows.
Ao abrir o dilogo de propriedades de uma janela, voc observar que ela possui poucos grupos de propriedades,
sendo o de maior interesse as propriedades do grupo Funcional, o qual estudaremos mais detalhadamente a seguir.
Para desenvolvimento dos testes, utilizaremos a aplicao Item do tpico anterior.
A primeira propriedade do grupo Funcional, de nome Ttulo (Title), faz com que seja apresentado um ttulo na janela
(na barra azul superior). Preencheremos essa propriedade com o valor Ttulo da Janela para verificarmos o resultado.
Em seguida, constatamos as seguintes propriedades:
Canvas Principal (Primary Canvas) Nesta propriedade, indicaremos a primeira canvas a ser apresentada nesta
Janela. Essa propriedade s obrigatria de preenchimento se viermos a acionar a apresentao de uma janela
por programao (rotina Show_Window). Caso contrrio, a canvas apresentada corresponder quela que contm
o primeiro item da seqncia de navegao.
Para efeito de teste, crie um bloco de controle na aplicao Item contendo um item de texto. Defina uma canvas e
posicione esse item na canvas. Veja a Figura 7.42 a seguir.
O bloco Bloco26 foi criado aps o bloco Func. A Canvas23 est posicionada na frente da Canvas2 dentro da
seqncia do navegador. Ao executarmos a aplicao, no entanto, veremos que a primeira canvas a ser apresentada
a Canvas2, pois contm o primeiro elemento a receber o foco (cd_mat do bloco Func).
Modificaremos esta seqncia ao posicionarmos o bloco Bloco26 antes do bloco Func e a Canvas23 depois da Canvas2.
Esta propriedade foi traduzida incorretamente. Seu nome deveria ser similar propriedade seguinte, ou seja, Canvas da Barra de Ferramentas
Horizontal e no Canvas da Barra de Rolagem Horizontal.
Canvas da Barra de Ferramentas Vertical (Vertical Toolbar Canvas) Nesta propriedade, informamos qual o
nome da canvas (do tipo Barra de Ferramentas Vertical) que ser apresentada nessa janela. Esta propriedade
deve ser preenchida para que a canvas seja apresentada (no automtico).
Estilo da Janela (Window Style) Esta propriedade possui duas opes: Documento (Document) e Caixa de
Dilogo (Dialog). Indica se a janela atual ser apresentada dentro da janela do Runtime ou se ficar solta.
Nosso primeiro teste ser executar a aplicao atual com o estilo documento. Tente tirar a janela da nossa aplicao
de dentro da janela do Runtime. No estilo documento esta ao no possvel.
Alteraremos o valor da propriedade Estilo da Janela para Caixa de Dilogo (Dialog) e novamente executaremos a aplicao.
Observe na Figura 7.43 que a janela da nossa aplicao fica solta sobre a janela do Forms Runtime.
Modal (Modal) Esta propriedade indica se a janela atual pode ou no perder o foco. Quando indicamos que
uma janela Modal, o Form impede que o usurio navegue para outra janela sem fechar a janela atual. Esta
opo muito utilizada para a apresentao de mensagens ou informaes de ajuda.
Se voc preencher esta propriedade com Sim e o estilo da janela com Caixa de Dilogo, a tempo de execuo no
ser possvel a navegao para a janela do Forms Runtime. Uma vez que os controles de trmino (botes e menu)
esto presentes na janela do Runtime, h necessidade de abortar a aplicao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
719
CANVAS
J sabemos que uma canvas corresponde tela de um quadro. Neste item ampliaremos um pouco mais os nossos
conhecimentos a respeito das caractersticas das canvas.
Em uma mesma janela podem ser apresentadas diversas canvas simultaneamente, porm apenas uma delas pode
ser de contedo (Content), pois esta a canvas principal da janela.
Na Figura 7.44 apresentamos a simultaneidade permitida.
Podemos apresentar simultaneamente em uma janela (Window):
Uma canvas do tipo Contedo (Content).
Uma canvas do tipo Barra de Ferramentas Horizontal (Horizontal Toolbar).
Uma canvas do tipo Barra de Ferramentas Vertical (Vertical Toolbar).
Vrias canvas do tipo Empilhado (Stack).
A propriedade que determina o tipo da canvas (Canvas Type) est presente no grupo Geral.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
721
EXERCCIOS
7.16) Crie uma aplicao de nome EX16 baseada na aplicao EX11. Inclua a seguinte funcionalidade:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
723
METODOLOGIA
Descrio das capacidades de organizao e visualizao do Editor.
TCNICA
Manipulao dos diversos objetos do layout e organizao de trechos de tela.
INTRODUO
Como primeiro passo, removeremos a canvas Tab para utilizarmos inicialmente apenas a canvas de Contedo.
Para que a imagem e o boto voltem a aparecer, preencha novamente a propriedade Canvas (grupo Funcional) de
cada um deles.
QUADRO (FRAME)
Ao expandirmos o n Grficos, subordinado canvas Canvas2, verificaremos a existncia de um objeto chamado
Frame5 (na sua aplicao o nome pode ser diferente) que se constitui de um objeto exclusivamente grfico para
apresentao de informaes em uma canvas.
Iniciaremos nosso estudo avaliando algumas propriedades desse objeto.
O grupo Quadro de Layout (Layout Frame) possui algumas propriedades j comentadas anteriormente, mas que
adquirem aspectos particulares nesse objeto.
Bloco de Dados de Layout (Layout Data Block) Quando esta propriedade possui o valor preenchido com o nome
de um bloco de dados e a propriedade Atualizar Layout (Update Layout) estiver com o valor Automaticamente
(Automatic), qualquer modificao que fizermos nas propriedades do Frame so refletidas nas propriedades do
bloco, do item, etc. Os outros elementos herdam as caractersticas que estabelecermos aqui.
Atualizar Layout (Update Layout) Indica se as modificaes que efetuarmos para os elementos, para as
propriedades do quadro, etc. sero refletidas automaticamente. Caso esta propriedade esteja preenchida com o
valor Manualmente, devemos pressionar o boto Atualizar da barra de ferramentas superior do editor de layout
para que elas sejam refletidas. A opo Bloqueado impede a atualizao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
725
Estilo de Layout (Layout Style) Indica a forma de organizao dos elementos. Se a atualizao estiver automtica
(propriedade Atualizar Layout), os objetos so reorganizados cada vez que aumentarmos ou diminuirmos o
tamanho do quadro.
Para testarmos essas trs propriedades, preencheremos a primeira (Bloco de Dados de Layout) com Func, a segunda
(Atualizar Layout) com Automaticamente e a terceira (Estilo de Layout) com Tabular.
Ao abrirmos o editor de Layout (F2) j teremos uma surpresa. Os itens do bloco Func foram todos alinhados
horizontalmente, na ordem do navegador e todos com a mesma quantidade de ocorrncias. Verifique que as
propriedades dos itens foram modificadas.
Outra forma de verificarmos este comportamento alterarmos o tamanho do Frame no editor de Layout. Podemos
diminuir (ou aumentar) o tamanho do quadro. Para realizarmos esta operao, devemos clicar sobre a linha do
quadro para que sejam mostrados os indicadores de limites (quadrados nos centros das linhas). Ao clicarmos e
arrastarmos o mouse sobre um destes indicadores, alteraremos o tamanho do quadro. Tente!
Observe as seguintes propriedades relativas ao Quadro (Frame):
Alinhamento do Quadro (Frame Alignment) Esta propriedade determina como os elementos sero alinhados
dentro da largura do Frame (Quadro). Utilizada quando a propriedade Estilo de Layout Form.
Alinhamento de Objetos Simples (Single Object Alignment) Indica o alinhamento de cada objeto quando a
propriedade anterior (Alinhamento do Quadro) possuir o valor Preenchimento (Fill).
Margem Horizontal (Horizontal Margin)/Margem Vertical (Vertical Margin) Especifica a margem entre a borda
do Frame e os objetos internos.
Na Figura 7.48, preenchemos as propriedades de margem com o valor 15, a propriedade Alinhamento do Quadro
(Frame Alignment) com o valor Coluna (Column) e a propriedade Estilo de Layout com Form.
Deslocamento Horizontal de Objeto (Horizontal Object Offset) / Deslocamento Vertical de Objeto (Vertical
Object Offset) Estas propriedades definem a distncia entre os objetos dentro do Frame.
Permitir Expanso (Allow Expansion) Esta propriedade determina se o Form poder aumentar o tamanho do
Frame se os objetos em seu interior ultrapassarem as bordas do Frame.
ShrinkWrap (ShrinkWrap) Esta propriedade permite que o Form Builder aproxime o Frame dos objetos internos.
Quando aumentamos o tamanho do Frame e essa propriedade est preenchida com Sim, o Form Builder diminui
o Frame para que este fique prximo aos objetos.
Preenchimento Vertical (Vertical Fill) Esta propriedade indica se o Form Builder deve ou no colocar o maior
nmero possvel de objetos por linha. Se essa propriedade estiver preenchida com Sim, a propriedade que
determina o nmero mximo de objetos por linha ignorada.
Para obtermos o resultado da Figura 7.49, preenchemos as propriedade de Deslocamento Horizontal e Vertical com
10, Expanso com Sim, ShrinkWrap com Sim e Preenchimento Vertical com No, em seguida, usando o Editor de
Layout, alteramos horizontalmente o tamanho do Quadro. Faa outros testes modificando o valor dessas propriedades.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
727
WORKSPACE
a rea de janela do Layout, ou seja, a rea disponvel para desenho. Seu tamanho independente do tamanho
atual da janela, isto , o Workspace pode ser maior ou menor que a rea da janela.
Quando o Workspace maior que a janela, podemos rolar a janela para ver outras partes do Workspace.
Para alterar o tamanho do Workspace, devemos selecionar no menu Formato (Format) o submenu Opes de
Layout (Layout Settings) e neste a opo Layout.
O dilogo apresentado permitir que determinemos o tamanho do Workspace (em centmetros ou polegadas) e
ainda que faamos a definio da ordem de impresso (Vertical ou Horizontal) se escolhermos a opo Imprimir
(Print) do menu Arquivo (File).
RGUAS (RULERS)
Uma rgua horizontal (em cima) e uma vertical (lateral esquerda). Esta rgua pode ser apresentada em unidades
diferentes (por exemplo, centmetros, caracteres, ps, etc.), de acordo com a unidade em vigor no Form.
GUIAS
Podem ser selecionadas guias (tracejadas) horizontais e verticais para referncia. Para selecionarmos uma guia,
basta que posicionemos o mouse sobre uma das rguas e pressionemos e arrastemos at a posio desejada para
apresentao da guia.
GRID
Existe uma grade dentro do Workspace para auxlio no posicionamento de objetos. Se desejarmos visualizar essa grade,
devemos esconder a visibilidade da canvas. Usar o menu Visualizar (View), opo Mostrar Canvas (Show Canvas).
Se voc testar essa opo e a grade no aparecer, no se assuste. Isto s vezes ocorre quando a distncia entre as
linhas da grade to grande que d a impresso de no ter grade. Para teste, selecione no menu Formato, Opes
de Layout, o item Rgua (ser apresentado um dilogo que permitir o espaamento).
AS BARRAS DE FERRAMENTAS
Ao olharmos para a tela do Layout Editor, observamos a presena de duas barras de Ferramentas Superiores e uma
Vertical, na lateral esquerda. Comearemos nosso estudo por elas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
729
A Figura 7.50 mostra os prompts de departamento e ramal em negrito e itlico, de cargo e grau de instruo
sublinhados e de data de nascimento e do boto masculino do grupo de opes em itlico.
Os botes seguintes aumentam ou diminuem o nvel de zoom. A indicao do nvel atual se acha presente no
rodap da tela de layout. Cada vez que pressionamos o boto Ampliar ( + ), o nvel de zoom duplicado. Da mesma
forma, cada vez que pressionamos o boto Reduzir ( - ), o nvel de zoom dividido por dois.
O grupo de botes a seguir realiza alinhamento de elementos uns em relao aos outros. Os trs primeiros realizam
o alinhamento horizontal e os trs seguintes, o alinhamento em relao ao eixo Y (vertical).
Para realizarmos esse alinhamento, devemos selecionar simultaneamente (clique com o mouse e, ao mesmo tempo,
o boto Ctrl pressionado) os itens para os quais desejamos realizar o alinhamento (os quais devem estar posicionados
verticalmente uns acima dos outros) e pressionar um dos botes de alinhamento (esquerda, central ou direita).
Para realizarmos o alinhamento horizontal, os itens selecionados devem estar lado a lado; caso contrrio, sero
posicionados uns sobre os outros.
Na Figura 7.51 trocamos a letra e tamanho do prompt de todos os itens para Arial tamanho 10. Alinhamos
verticalmente cada grupo: o grupo esquerda foi alinhado pela direita, o grupo do meio foi alinhado centralmente
e o grupo direita foi alinhado pela esquerda. Observe as guias colocadas em cada grupo. Horizontalmente alinhamos
cada trs elementos, um de cada grupo, sempre pelo topo. Para que o quadro no viesse a modificar a operao
desejada, alteramos a propriedade Atualizar Layout para Bloqueado. Tente, ento, montar este resultado!
O layout do Form construdo em duas camadas (Layers) principais. A primeira camada a camada de itens. A
segunda camada a de objetos grficos.
Os itens podem ser sobrepostos entre si, assim como os objetos grficos, porm um objeto grfico no fica sobre
um item. Um item sempre tem precedncia.
Os dois botes seguintes desta barra de ferramentas possuem as aes de trazer para frente e enviar para trs e se
aplicam a objetos grficos. Sero explorados aps definirmos as caractersticas desses objetos.
O ltimo boto chama-se Prompt Associado e tem a funo de associar um texto (boilerplate de texto) a um item. O texto
atualizar a propriedade prompt do item, estabelecendo a associao entre eles. Esta caracterstica pode nos auxiliar
quando tivermos definido um label para um item usando um boilerplate e, posteriormente, desejarmos que o boilerplate
de texto torne-se o Prompt do item. Tambm o estudaremos aps conhecermos os objetos grficos do layout.
O primeiro grupo contm botes que se aplicam a diversos tipos de objetos, so gerais para os diversos elementos
presentes nas canvas:
Selecionar (Select) Seleciona um objeto ou grupo de objetos. Basta que efetuemos um clique sobre o objeto desejado.
Girar (Rotate) Gira os objetos (grficos, itens no podem ser rodados). Para girarmos um elemento, devemos
selecion-lo, clicar na ferramenta e, com o mouse, pressionar um dos indicadores de tamanho (presentes nos
cantos do objeto) e, sem soltar o boto esquerdo do mouse, rodar.
Ampliar (Magnify) Aumenta ou reduz a apresentao do Layout (fator - 2x), isto , zoom. Para obtermos este
efeito, devemos clicar sobre o boto e em seguida sobre a canvas. O efeito inverso obtido com os mesmos
movimentos, porm a tecla Ctrl (ou Shift) deve estar pressionada simultaneamente.
Reformar (Reshape) Permite que se modifique um objeto (grfico) selecionado (por exemplo, ngulo de um
arco). Para efetuarmos um teste com esta ferramenta, devemos criar um objeto do tipo Arco (selecione-o na
paleta de ferramentas e faa um arco). Com esse objeto selecionado pressione o boto Reformar. Voc perceber
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
731
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
733
A informao de cor de cada objeto armazenada com um ndice para localizao de cor na paleta. Se alterarmos a paleta, como conseqncia,
teremos a modificao involuntria da cor do objeto.
REDIMENSIONAR A CANVAS
O redimensionamento feito com o cursor. Clicando-se no canto inferior direito da canvas e arrastando-se o
mouse at a posio desejada, podemos modificar seu tamanho.
MOVER O VIEWPORT
Para mover o viewport, usamos o mouse ou o teclado (teclas de setas para direita, para esquerda, para cima ou para baixo).
Esta opo ir alterar as coordenadas do viewport, que podem ser verificadas no conjunto de propriedades da canvas.
POSICIONAR UMA CANVAS DO TIPO EMPILHADO OU DO TIPO TAB SOBRE UMA CANVAS DE CONTEDO
Podemos visualizar uma canvas do tipo Empilhado sobre uma canvas de Contedo a fim de, mais facilmente,
determinarmos seu tamanho e posio.
Para tal, devemos abrir o editor de Layout com a canvas de Contedo e, no menu Visualizar (View), escolher a
opo Views Sobrepostas (Stacked Views). Ser, ento, apresentado um dilogo contendo uma lista de canvas do
tipo Tab ou Empilhado (Stack) definidas em sua aplicao.
Para apresentarmos uma dessas canvas, devemos clicar sobre ela (ficar em azul) e apertar o boto OK. O Layout
ser novamente mostrado com a Canvas apresentada sobre a outra.
Para escondermos novamente esta Canvas devemos abrir o dilogo anterior novamente (opo Views Sobrepostas
do menu Visualizar). Ser apresentada uma lista com a canvas em questo marcada (azul). Para desmarc-la, devemos
pressionar a tecla Ctrl e clicar sobre a linha contendo o nome da canvas. Em seguida, apertar o boto OK. O Layout
ser novamente mostrado sem a canvas apresentada sobre a outra.
Se desejarmos efetuar seu dimensionamento, devemos selecion-la (canto esquerdo inferior) para que sejam
apresentados os indicadores de tamanho e possamos dimension-la adequadamente. Uma maneira mais fcil de
identificarmos o posicionamento dessa canvas , antes de iniciar esse processo, pint-la de outra cor para sua
visualizao ser total.
A movimentao requer que a canvas esteja selecionada. Utilize o teclado (seta para cima, seta para baixo, seta para
direita e seta para esquerda) ou o mouse sobre os quadradinhos que aparecem em volta da canvas.
CRIANDO ITENS
Para criarmos um novo item, devemos cumprir os seguintes passos:
Selecionar o bloco onde o item ser criado (Barra de Ferramentas Horizontal Superior).
Na paleta de ferramentas, selecionar a ferramenta para o tipo de item que desejamos criar.
Posicionar o cursor na canvas onde desejamos que o canto esquerdo superior do item seja posicionado.
Pressionar o mouse uma vez para criao de itens no tamanho default (de acordo com a fonte selecionada) ou
pressionar e arrastar o mouse at o desenho atingir o tamanho desejado.
O Form Builder vai associar o novo item ao bloco corrente. Se esse bloco for do tipo multi-record, mostrar n
desenhos do item, um para cada registro do bloco.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
735
MOVER ITENS
Para mover um item, usamos o mouse. Esta opo ir alterar as coordenadas do item, que podem ser verificadas no
conjunto de propriedades do item selecionado.
Neste dilogo, poderemos dimensionar os objetos selecionados pelo maior, pelo menor, pela mdia ou atribuir um
valor especfico.
Esse valor pode ser fornecido nas unidades: polegadas, centmetros, pontos ou caracteres.
Posteriormente, podemos reutilizar as opes definidas sem necessidade de reabrir o dilogo usando a opo
Repetir Dimensionamento (Repeat Sizing) do mesmo menu Organizar (Arrange).
Horizontalmente, temos: esquerda, direita, centralizar, distribuir (espaos entre objetos horizontalmente iguais) e
pilha (objetos colados lateralmente uns nos outros).
BOILERPLATE GRFICO
Para adicionarmos um boilerplate grfico a uma canvas, usamos as ferramentas adequadas da paleta de ferramentas.
O modo de criao semelhante ao visto anteriormente para Boilerplate de Texto, Itens, etc.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
737
MODIFICANDO A LINHA
Existem cinco opes para customizao de linha:
Largura da Linha (Line Width) Apresenta um conjunto de opes de espessuras de linha. No podemos
determinar espessura de linha para itens. Esta opo vlida apenas para objetos grficos ou de texto.
Bevel (Bevel) Apresenta um conjunto de opes de relevo para linha. Esta opo tambm no aplicvel a
itens (pelo menos no que se refere ao tipo). Podemos apenas indicar o uso de Bevel ou no. O conjunto de
opes vlido para objetos grficos ou de texto.
Trao (Dash) Apresenta um conjunto de tipos de linhas (tracejado, pontilhado, contnua, etc.).
Setas (Arrow) Apresenta opes para incluso de setas nas linhas.
Borda Apresenta a possibilidade de apresentarmos ou escondermos qualquer um dos quatro lados da borda de
um elemento.
ALINHAMENTO E ESPACEJAMENTO
O alinhamento e espacejamento dos textos dos itens podem ser feitos com as opes Espacejamento de Texto
(Spacing) e Justificar (Alignment).
O espacejamento diz respeito ao espao interno entre linhas de um objeto. Facilmente visvel quando um boilerplate
de texto ocupa mais de uma linha.
OPERAES
As seguintes operaes podem ser feitas com objetos (itens e boilerplates):
Movimentao Pode ser feita diretamente com o cursor.
Redimensionamento Pode ser feito diretamente com o cursor.
Recorte Aps a seleo, devemos escolher a opo Recortar (Cut) ou Copiar (Copy) do menu Editar (Edit).
Colagem Selecionar a opo Colar (Paste) do menu Editar (Edit).
Excluso Usar a opo Limpar (Clear) do menu Editar (Edit) ou apertar a tecla Delete.
Duplicao Aps a seleo, usar a opo Duplicar (Duplicate) do menu Editar (Edit).
Quando duplicamos um item no mesmo bloco, o Form Builder associa um novo nome a esse item, uma vez que os
nomes devem ser nicos dentro de um bloco.
Quando duplicamos um item, todos os triggers (veremos no prximo tpico) associados a ele so duplicados tambm.
EXERCCIOS
Neste conjunto de exerccios, utilizaremos a paleta de propriedades apenas para as propriedades referentes aos
quadros; as demais caractersticas voc dever customizar diretamente no editor de Layout.
7.21) Crie uma aplicao de nome EX21 a partir da aplicao EX16. Inclua a seguinte funcionalidade:
Estabelecer uma distncia entre a linha do quadro e cada objeto de 5 pontos, tanto na vertical quanto na horizontal.
A distncia interna entre os objetos deve ser de 3.
No mximo devem ser colocados trs objetos em cada linha.
O ttulo do quadro deve ser posicionado no centro do quadro (horizontalmente).
A distncia entre os prompts dos objetos e os prprios objetos deve ser de 5 pontos.
Altere o ttulo do quadro usando o editor de Layout.
Todos os prompts dos itens devem ser vermelhos.
Coloque os objetos com cor de fundo amarela.
Altere o tipo da letra dos objetos para Arial com tamanho 9.
7.22) Crie uma aplicao de nome EX22 a partir da aplicao EX17. Inclua a seguinte funcionalidade:
Ajustar o tamanho do quadro aos objetos.
Alinhar o prompt pela parte inferior do objeto.
Deslocar o prompt lateralmente em relao ao objeto em 5 pontos.
Alinhar o ttulo do quadro pela direita com um distanciamento da vertical de 15 pontos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
739
METODOLOGIA
Apresentao da tcnica a ser empregada na construo da parte de lgica dos programas.
TCNICA
Desenvolvimento de pequenas lgicas a serem embutidas nos programas.
CONCEITUANDO EVENTOS
A partir deste tpico iniciaremos a parte de programao, propriamente dita, de uma aplicao Forms.
Uma aplicao Form sensvel a eventos ou orientada a eventos. Isto significa que, quando determinadas situaes
ocorrem, a aplicao recebe uma indicao e pode efetuar uma ao.
Por exemplo, suponhamos que o usurio tenha pressionado o mouse sobre um item do tipo boto. A aplicao
recebe uma indicao de que esta situao (evento) ocorreu e pode ou no realizar uma ao.
Para usarmos a nomenclatura da ferramenta, diremos que um trigger ativado pelo Form em resposta a um evento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
741
ITEM
Um trigger definido em nvel de item, isto , associado a um determinado item, s acionado se o evento ocorrer
enquanto o foco estiver exatamente no item escolhido.
BLOCO
Um trigger definido em nvel de bloco, isto , associado a um determinado bloco, s acionado se o evento ocorrer
enquanto o foco estiver em algum dos itens ou em algum dos registros do bloco escolhido.
MDULO
Um trigger definido em nvel de mdulo o mais abrangente. O trigger ser acionado se o evento ocorrer enquanto
o foco estiver em qualquer dos itens, registros ou blocos da aplicao (mdulo).
ORDEM DE EXECUO
Quando definimos o mesmo trigger em diferentes nveis, normalmente o Form define que o trigger de nvel mais
baixo, ou seja, aquele mais especfico, seja acionado.
Suponhamos que tivssemos definido um mesmo trigger para o item cd_mat e para o bloco Func. Se o evento
ocorresse enquanto o foco estivesse sobre o item cd_mat, o trigger acionado seria aquele definido em nvel de
item, porm, se o evento ocorresse enquanto o foco estivesse em qualquer outro item do bloco Func, o evento
acionado seria aquele definido em nvel de bloco.
Esta a forma normal de ao da ferramenta. Podemos, no entanto, desejar que, quando o evento ocorrer no item
cd_mat, ambos os gatilhos (triggers) (em nvel de item e de bloco) sejam acionados. Esta opo uma das propriedades
que poderemos definir para um trigger (hierarquia de execuo).
RESTRIES
Alguns gatilhos (triggers) somente podem ser definidos em um nvel especfico, ou seja, no podemos criar sua
definio em todos os trs nveis.
Para que no haja dvidas e erros de definio, o Form no disponibiliza todos os gatilhos (triggers) em todos os
nveis. Quando criamos um trigger, escolhemos de uma lista predefinida a cujo evento faremos referncia. Na lista
apresentada, somente os eventos vlidos para o nvel particular so mostrados.
Na Figura 7.60 encontramos uma imagem do Navegador de Objetos (Object Navigator) contendo trs gatilhos
(triggers) criados nos trs nveis disponveis: When-New-Form-Instance (em nvel de mdulo), When-ValidateRecord (em nvel de bloco Func) e When-Validate-Item (em nvel de item cd_mat).
Para a criao de um gatilho (trigger), devemos realizar as etapas a seguir:
Como primeiro passo selecionamos o n onde desejamos criar o gatilho.
Como segundo passo podemos:
A) Pressionar o boto direito do mouse e escolher um evento da opo Gatilhos Inteligentes (Smart Triggers), a
qual apresenta uma lista reduzida contendo os eventos mais usados para o nvel e tipo de elemento escolhido,
ou seja, uma lista sensvel ao contexto.
B) Pressionar a tecla Criar (Create) da barra de ferramentas do Navegador, que apresentar um dilogo contendo
toda a lista de eventos disponveis para o nvel definido; tambm uma lista sensvel ao contexto.
Nosso prximo passo ser a definio do texto de PL/SQL associado ao gatilho, pois que o editor de PL/SQL ser
acionado neste momento.
Se voc seguir os passos descritos acima, a janela do editor de PL/SQL ser mostrada para que seja definido o
cdigo adequado.
O EDITOR DE PL/SQL
A janela do editor nos apresenta algumas informaes a respeito do cdigo de PL/SQL em definio.
Na parte superior encontramos um conjunto de botes com as seguintes funcionalidades:
Compilar (Compile) Aciona a execuo do compilador PL/SQL para o cdigo.
Reverter (Revert) Desfaz todas as modificaes realizadas desde a ltima salva ou compilao bem-sucedida
(que realiza uma salva).
Novo (New) Cria um novo gatilho (trigger) com o mesmo escopo do atual. Um dilogo contendo a lista de
eventos apresentado.
Deletar (Delete) Remove o gatilho atual.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
743
INDENTAO AUTOMTICA
Observe que a cada linha digitada o posicionamento do cursor na linha subseqente acompanha a indentao da
linha que lhe superior. Digite o seguinte trecho de programa e avalie o resultado da digitao.
INDENTAO MANUAL
Para indentao manual contamos com as opes Endentar e Endentar Invertido do menu Editar (se usarmos o
mouse) e com as teclas Tab e Shift + Tab, respectivamente, se usarmos o teclado.
CORES
No texto digitado, pudemos observar que houve variao no colorido das informaes. As palavras-chaves,
comentrios, constantes strings e numricas, os smbolos de atribuio ( := ) e de concatenao ( || ) so destacados
com cores diferentes que os identificam facilitando a localizao das informaes.
SELEO
Podemos selecionar tanto linhas de texto quanto colunas.
Para selecionar uma linha, posicione o mouse no canto esquerdo da linha (sobre a faixa existente na lateral
esquerda) at que o formato do cone seja a seta e clique no boto esquerdo.
Para selecionar uma coluna pressione a tecla ALT e com o mouse selecione (pinte) a(s) coluna(s) desejada(s).
Para desfazer este efeito basta um clique duplo sobre a linha separadora dos quadros, destacada na Figura 7.62.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
745
OPO DESFAZER
A opo Desfazer (Undo) pode ser repetida muitas vezes (e no apenas uma). O Form Builder guarda todas as
modificaes realizadas no cdigo desde a ltima operao de Salvar. Esta ao est disponvel no menu Editar.
ROTINAS PREDEFINIDAS
O Form possui mais de 100 rotinas que permitem a realizao de diversas aes por programao, tais como:
navegao entre itens, envio de mensagens, obteno do valor de propriedades, alterao no valor de propriedades
e muitas outras aes.
A lista dessas funes se acha presente no Captulo 15 e pode ser consultada por voc diretamente no Form dentro do
n Pacotes Embutidos (Built-In Packages) e, ainda, dentro dos manuais de ajuda (obtidos atravs do menu Ajuda).
Durante os exemplos desenvolvidos a partir deste ponto e dos exerccios, utilizaremos a maior quantidade possvel
para que voc se familiarize com essas rotinas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
747
d) Criar um gatilho subordinado ao bloco Func com o tipo When-Validate-Record. O cdigo de PL/SQL deve ser
preenchido com uma mensagem.
e) Todos os gatilhos devem ser compilados.
Execute a aplicao e faa as aes a seguir usando o menu-padro, botes e as teclas de ao (ver Ajuda):
Consulte a base de dados.
Modifique o valor do cargo e navegue para outro item (ocorre a validao apenas do cargo).
Modifique o valor da matrcula (para o mesmo valor) e clique na barra de rolagem (ocorre a validao da
matrcula e do registro).
Modifique o valor do cargo e efetue uma salva (ocorre a validao do cargo e do registro).
Modifique o valor do cargo e tente sair da aplicao (ocorre a validao do cargo e do registro antes da apresentao
da mensagem de salvar).
Remova um registro sem modific-lo e salve (no ocorre validao).
Modifique o valor do cargo e remova o registro em seguida (ocorre a validao do cargo e do registro).
Se voc ainda tem dvidas a respeito destes tipos de gatilhos, faa novos testes. No prossiga com dvidas. Coloque
diversas mensagens e teste a aplicao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
749
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
751
Ao
Tecla no Windows
Key-CLRBLK
SHIFT+F5
Key-CLRFRM
SHIFT+F7
Key-CLRREC
SHIFT+F4
Key-COMMIT
F10
Key-CQUERY
SHIFT+F2
Key-CREREC
F6
Key-DELREC
SHIFT+F6
Key-DOWN
Key-DUP-ITEM
F3
Key-DUPREC
F4
Key-EDIT
Editar (Edit)
CTRL+e
Key-ENTQRY
F7
Key-EXEQRY
F8
Key-EXIT
Sair (Exit)
CTRL+q
Key-HELP
Ajuda (Help)
F1
Key-LISTVAL
F9
Key-MENU
F5
Key-NXTBLK
Key-NXT-ITEM
Tab ou CTRL+Tab
Key-NXTKEY
SHIFT+F3
Key-NXTREC
Key-NXTSET
CTRL+>
Key-PRINT
Imprimir (Print)
SHIFT+F8
Key-PRVBLK
Key-PRV-ITEM
SHIFT+Tab ou
SHIFT+CTRL+Tab
Key-PRVREC
Key-SCRDOWN
Page Down
Key-SCRUP
Page Up
Key-UP
Os gatilhos deste grupo comeam com Key, portanto j possuem uma funcionalidade-padro implcita. Quando
inclumos um trigger deste conjunto em nossa aplicao, a ao-padro associada deixa de ser executada. Por este
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
753
O importante que durante a programao no venhamos a esquecer que isto pode acontecer e sejamos surpreendidos por uma ao do usurio
no prevista na programao.
O Form possui um trigger neste grupo, muito especial, criado para nos dar mais segurana na programao. Ele se chama Key-Others. Quando
inclumos este trigger em nossa aplicao, toda e qualquer ao de teclado fica desabilitada por default. Apenas sero vlidas aquelas aes que
forem includas explicitamente na programao, ou seja, apenas aqueles gatilhos do tipo Key que tivermos definido no Form.
Esta forma de trabalhar garante que no seremos surpreendidos pelo usurio na implantao do sistema.
Principalmente para aqueles programadores que esto comeando a usar esta ferramenta, o uso do Key-Others
mais seguro e mais documentvel (pois torna os gatilhos usados visveis na aplicao).
Antes de passarmos aos testes, execute sua aplicao e liste o conjunto de teclas (menu Ajuda-Help, opo TeclasKeys). Voc perceber que aparecem na lista aes que no foram mencionadas acima.
Isto ocorre porque nem todas as aes do teclado so passveis de controle ou da criao de gatilhos associados.
Aes normalmente executadas pelo gerenciador do ambiente (e no pelo Form), dentre outras, no so passveis
de interveno.
Estas aes esto listadas a seguir:
Tabela 7.06 Aes de Teclado Supridas Pelo Gerenciador do Ambiente (Windows)
Ao
Tecla no Windows
CTRL+u
Home
Copiar (Copy)
CTRL+C
Recortar (Cut)
CTRL+X
Esquerda (Left)
Ao
Tecla no Windows
Selecionar (Select)
SHIFT
Colar (Paste)
CTRL+V
CTRL+F1
SHIFT+F1
Insert
End
Direita (Right)
Enviar/Transmitir (Transmit)
Enter
Passemos agora aos testes. Como primeiro passo vamos remover todos os triggers criados na aplicao Valida. Em
seguida faremos:
Incluir os seguintes triggers em nvel de mdulo: Key-Down, Key-Up, Key-Next-Item, Key-Commit. Coloque
apenas uma mensagem em cada um deles.
Teste a aplicao criada. Utilize as teclas, o menu e os botes. O que voc descobriu?
Quando o Form Builder constri o menu e a barra de ferramentas-padro ele inclui comandos que simulam o
teclado; sendo assim, quando inclumos um trigger de teclado para a ao correspondente, a ao executada neste
gatilho tambm executada pelo menu e botes da barra-padro.
No retire as mensagens. No trigger Key-Down inclua a rotina Down. No trigger Key-Up inclua a rotina Up. No
trigger Key-Next-Item inclua a rotina Next_Item e, finalmente, no trigger Key-Commit inclua a ao
Commit_Form.
Refaa os testes. Voc perceber que, alm das mensagens, as aes tambm so executadas.
Inclua um boto (no esquea de coloc-lo na Canvas) com o trigger When-Button-Pressed. Para simular uma
ao de teclado, utilizaremos a rotina Do-Key. Os parmetros dessa rotina correspondem s rotinas predefinidas
que realizam as aes-padro. Preencha o gatilho de acordo com a Listagem 7.04.
Execute a aplicao, modifique um registro qualquer e pressione o boto criado. Observe que as mensagens presentes
nos triggers Key-Commit e Key-Down so apresentadas. Isto ocorre porque a rotina Do-Key simula o teclado;
sendo assim, antes de executar a ao de salvar ou navegar o Form, verifique se existe algum trigger de teclado
correspondente a estas aes. Havendo, ele executa esses triggers em vez da rotina Commit_Form ou Down. Se
voc criar triggers de teclado sem a ao correspondente, o boto no funciona.
Para testar esta ltima explicao. Retorne aplicao e retire a rotina Down e a rotina Commit_Form dos triggers de
teclado. Repita os testes anteriores. Observe que as mensagens so mostradas, mas a ao no executada. Como
ltimo teste relativo a este assunto, remova os triggers Key-Down e Key-Commit. Repita os testes. A ao executada
agora. Como a rotina Do-Key no encontrou os triggers de teclado, ela mesma acionou as aes de salva e navegao.
Inclua o trigger Key-Others com uma mensagem. E para que seja possvel encerrar a aplicao, inclua tambm
um trigger Key-Exit com o texto Exit_Form. Execute e teste a aplicao. Quais as aes que ainda funcionam?
Voc descobrir que apenas as aes de teclado mapeadas no programa so possveis. Em todas as outras condies,
a mensagem apresentada no gatilho Key-Others apresentada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
755
Crie um gatilho de Post-Query em nvel de bloco. Atribua um valor ao item TEXTO criado.
Crie um gatilho When-Validate-Record com mensagem.
Crie um gatilho When-Validate-Item para o item TEXTO com uma mensagem.
Agora, faa os seguintes testes:
Realize uma consulta geral.
Navegue de um registro para outro.
Pressione o boto Entrar Consulta e preencha o item cd_mat com > 60. Execute a consulta.
Como primeira concluso, verificamos que apenas as linhas com cdigo do departamento igual a D11 foram
trazidas em ambas as consultas, uma vez que modificamos a restrio-padro por aquela preenchida no gatilho de
Pre-Query (pesquise no Help quais as propriedades do bloco que voc pode modificar atravs da rotina
Set_Block_Property). A restrio estabelecida pelo usurio foi adicionada quela que estabelecemos por programao.
Observamos tambm que os gatilhos de validao foram acionados. Isto ocorreu porque fizemos uma modificao
no registro. Preenchemos um valor para o item TEXTO recm-criado. Mesmo esta alterao tendo ocorrido em um
item que no pertence ao banco de dados, o item e o registro precisam ser revalidados aps a modificao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
757
As rotinas utilizadas neste gatilho obtm as mensagens de erro padro do Form (error-xxx) e do banco de dados
(dbms-xxx).
Inclua tambm um trigger On-Message (em nvel de Form) com o texto da Listagem 7.07.
NUMBER
:= MESSAGE_CODE;
VARCHAR2(2000) := MESSAGE_TEXT;
VARCHAR2(10)
:= MESSAGE_TYPE;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
759
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
761
PALETA DE SINTAXE
Se voc expandir o n Pacotes Embutidos observar que a quantidade de pacotes bem significativa. Se, adicionalmente,
expandirmos o pacote Extenses-Standard verificaremos que a quantidade de rotinas muito grande.
Para nos auxiliar na edio de trechos de PL/SQL ou para obteno da chamada de uma rotina predefinida, o Form
Builder disponibiliza uma paleta de sintaxe.
Abra o editor de PL/SQL e escolha a opo Paleta de Sintaxe do menu Programa (apresentado na Figura 7.64).
Esta paleta possui duas pastas, uma relativa a sintaxe de PL/SQL e a outra relativa s rotinas predefinidas.
No exemplo da Figura 7.64, selecionamos o conjunto de instrues relativas a Controlar Fluxo (veja a janela
superior). Dentro da lista apresentada escolhemos a instruo IF ELSIF ELSE. Quando pressionarmos o boto Inserir,
o trecho de cdigo mostrado na janela inferior copiado para a posio do cursor no editor de PL/SQL aberto.
EXERCCIOS
A partir deste tpico, alm de testarmos os triggers, comearemos a utilizar nos exerccios as rotinas disponibilizadas
pelo Form Builder para realizar diversas aes. Voc conhecer muitas dessas rotinas durante o nosso estudo,
porm, no n Pacotes Embutidos (Extenses Standard), existem muito mais rotinas. No Captulo 15 voc contar
com a presena de todas essas rotinas organizadas por tipo de uso. O objetivo simplesmente dar alguma facilidade
na hora de definir qual a rotina a usar; no entanto, a consulta Ajuda do Form Builder indispensvel para que
voc saiba quais os parmetros possveis e a capacidade da rotina.
Voc encontrar, ainda, neste material um tpico que trata especificamente deste n Pacotes Embutidos, porm
nosso estudo das rotinas j comea agora.
7.26) Crie uma aplicao de nome EX26 baseada na aplicao EX25, incluindo a seguinte funcionalidade.
Formatar os campos de data com dd/mm/rrrr.
Os campos de data so de preenchimento obrigatrio e sempre com tamanho mximo.
Formatar o campo de salrio com L999G999G999D99.
Adicione o cdigo-padro para os botes.
Verificar a tempo de alterao ou incluso se o salrio informado est dentro da tabela de cargos e salrios a seguir:
a) Para cargos at 46 (inclusive), o salrio deve variar de 500 a 1.500 (inclusive).
b) Para cargos de 47 a 52 (inclusive), o salrio deve variar de 1.501 a 2.000 (inclusive).
c) Para cargos de 53 a 55 (inclusive), o salrio deve variar de 2.001 a 2.500 (inclusive).
d) Para cargos de 56 a 58 (inclusive), o salrio deve variar de 2.501 a 3.000 (inclusive).
e) Para cargos de 59 a 60 (inclusive), o salrio deve variar de 3.001 a 3.500 (inclusive).
f) Para cargos de 61 a 62 (inclusive), o salrio deve variar de 3.501 a 4.000 (inclusive).
g) Para cargos de 63 (inclusive) em diante, o salrio deve variar de 4.501 a 10.000 (inclusive).
Caso haja alguma incorreo, causar uma falha e enviar mensagem adequada.
A janela da aplicao e a janela do Forms Runtime devem aparecer maximizadas.
Garanta o preenchimento de salrio, nome e sobrenome.
Garanta que a data de nascimento somente aceite valores acima de 1940.
7.27) Crie uma aplicao de nome EX27 baseada na aplicao EX26, incluindo a seguinte funcionalidade:
Traga a coluna nm_foto coluna para a sua aplicao.
Inclua essa coluna na canvas imediatamente abaixo de um item do tipo imagem, criado no bloco Func, mas no
pertencente ao banco de dados.
A tempo de execuo, o campo nm_foto dever ser preenchido com o caminho e nome de arquivos do tipo BMP
presentes em seu disco. Quando a coluna for preenchida, a imagem correspondente dever ser trazida para a tela.
Crie uma canvas do tipo stack e preencha essa canvas com um boilerplate que especifique como deve ser feito
o preenchimento dessa tela.
Esta canvas dever ser apresentada quando o usurio pressionar a tecla Help. Quinze segundos depois, esta tela
deve ser escondida novamente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
763
METODOLOGIA
Apresentao e descrio da capacidade de relacionamento e controle entre blocos.
TCNICA
Desenvolvimento de aplicativos utilizando os objetos descritos.
CONCEITO
Um relacionamento Master-Detail nada mais do que um relacionamento entre dois blocos de uma mesma aplicao.
MTODOS DE RELACIONAMENTO
Para construirmos o relacionamento podemos agir de duas formas:
Na primeira marcamos a opo Fazer juno automtica dos blocos de dados e pressionamos o boto Criar
Relacionamento.
Neste caso o Forms Builder pesquisar, no banco de dados, os relacionamentos existentes entre o bloco de dados
atual e aqueles que foram criados anteriormente na aplicao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
765
Encontrando relacionamentos, estes so apresentados em um dilogo para que faamos a escolha daquele que
desejaremos usar. Quando escolhemos uma opo apresentado um dilogo com o campo Condio de Unio j
preenchido. Foi esta a forma que usamos para obter o resultado da Figura 7.65.
Na Segunda forma desmarcamos a opo Fazer juno automtica dos blocos de dados e pressionamos o boto
Criar Relacionamento.
Neste caso o dilogo apresentado ter duas opes apresentadas na Figura 7.66.
Ao escolhermos uma das opes ser apresentada a relao de blocos presentes na aplicao para que determinemos
com qual deles desejamos estabelecer o relacionamento do bloco atual.
Ao escolhermos um dos blocos, o dilogo da Figura 7.65 apresentado, porm com a Condio de Unio no
preenchida. Deveremos, ento, selecionar a coluna no bloco principal que se relacionar com a coluna
correspondente no bloco detalhe (tantas vezes quantas se fizerem necessrias para que a ligao entre os blocos
fique correta). A cada ligao estabelecida o Form Builder far o registro no campo Condio de Unio.
CONSEQNCIAS DO RELACIONAMENTO
Durante a construo do bloco Func, preencheremos o dilogo do Assistente de acordo com a Figura 7.65.
Como resultado desta construo, teremos a visualizao dos itens pertencentes aos dois blocos. Para que tenhamos
um entendimento melhor das conseqncias da ligao incluiremos ambos os blocos na mesma canvas.
Analisaremos em seguida quais as aes resultantes desta ligao.
Antes de prosseguirmos execute a aplicao e:
a) Faa uma consulta no bloco departamento. Observe que o bloco Funcionrio preenchido em seguida, com os
dados correspondentes ao registro que detm o foco de departamento, isto , no bloco Funcionrio so
apresentados apenas os funcionrios que pertencem ao departamento selecionado.
b) Navegue no bloco Departamento. A navegao tambm ocorrer no bloco Func.
PROPRIEDADES DA RELAO
As duas primeiras propriedades do grupo Funcional, Bloco de Dados Detalhado (Detail Data Block) e Condio de
Juno (Join Condition) determinam qual o nome do bloco de dados detalhe (uma vez que este objeto est pendurado
no mestre) e qual a ligao entre esses blocos, ou seja, qual a coluna ou colunas PK no bloco-mestre e qual a coluna
(ou colunas) FK no bloco detalhe correspondente.
As demais propriedades sero estudadas individualmente:
Excluir Comportamento do Registro (Delete Record Behavior) Esta propriedade indica qual a ao que o Form deve
tomar se o usurio tentar remover registros no bloco que o mestre da relao. Existem trs possibilidades diferentes:
a) No Isolado Indica que, se houver registros no detalhe, a remoo no bloco-mestre deve ser invalidada. Esta
a opo default (e o valor em uso atualmente em nossa aplicao).
b) Isolado Indica que o Form deve enviar para o banco de dados apenas o comando de Delete dos registros do
bloco-mestre, mesmo que haja registro no detalhe. Esta ao til quando o relacionamento entre as tabelas
em nvel de banco de dados do tipo Cascade Delete. Isto significa que quando solicitamos ao banco de
dados uma remoo em alguma linha da tabela-mestre ele, automaticamente, remove todas as linhas
correspondentes na tabela detalhe. Neste caso, no temos necessidade de repetir esta ao no Form, pois o
banco de dados se encarrega de faz-la.
c) Em Cascata Esta a situao inversa da opo anterior. Como no banco de dados o relacionamento entre as
tabelas no do tipo Cascade, temos necessidade de prover esta situao no Form. Desta forma, quando
escolhemos esta opo, o Form programa um comando Delete para todas as linhas detalhe que correspondam
ao mestre que desejamos remover. Esta ao includa em um trigger de Pre-Delete no bloco-mestre.
Impedir Operaes sem Mestre (Prevent Masterless Operation) Esta propriedade indica quando o operador
estar apto a consultar ou inserir registros no bloco detalhe. Essa propriedade pode ser preenchida com:
a) Sim Indicando que no so permitidas incluses no bloco detalhe se no houver um registro associado no
bloco-mestre e, ainda, no so permitidas consultas no bloco detalhe se no houver um registro lido e associado
no bloco-mestre.
b) No Pode-se consultar ou incluir registros no detalhe sem restries. Esta a opo default.
O grupo Coordenao (Coordination) tambm possui duas propriedades que precisamos estudar, pois se referem
forma de leitura das informaes.
Diferido (Deferred) Indica se a consulta no bloco detalhe deve ou no ser adiada aps a identificao do
registro no bloco-mestre. Quando esta propriedade recebe o valor No, to logo seja feita uma consulta ou
navegao para o prximo registro no bloco principal, ocorrer a consulta no bloco detalhe. Neste caso, a
propriedade Consulta Automtica (Automatic Query) ignorada. Quando indicamos que desejamos o adiamento
(Sim), a propriedade Consulta Automtica (Automatic Query) indicar como ser feita a consulta no detalhe.
Consulta Automtica (Automatic Query) Para que esta propriedade tenha efeito, a propriedade Diferido (Deferred) deve estar preenchida com Sim. Se essa propriedade for preenchida com Sim, estamos indicando que a
consulta ser feita automaticamente, porm somente quando o usurio navegar para o bloco detalhe. Enquanto
ele permanecer no bloco principal, no ser feita nenhuma pesquisa no detalhe. Se essa propriedade for preenchida
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
767
Gatilhos (Triggers)
No Isolado
On-Check-Delete-Master, On-Clear-Details,
On-Populate-Details
Isolado
On-Clear-Details, On-Populate-Details
Cascata
Alguns dos gatilhos mostrados acima no foram vistos no tpico anterior e sero estudados agora.
EXERCCIOS
7.31) Crie uma nova aplicao de nome EX31. As seguintes tabelas devem ser apresentadas numa mesma canvas:
Departamento: formato Form, todas as colunas, 1 (um) registro por tela.
Funcionrio: formato Tabular, todas as colunas, oito registros por tela.
As seguintes caractersticas devem ser configuradas para esta aplicao:
O bloco de funcionrio deve ser construdo em uma canvas do tipo Empilhado (Stack) com uma barra de
rolagem de tal forma que parte dos dados fique visvel na canvas principal. Para visualizao das demais
informaes, o usurio dever se utilizar da barra de rolagem. A canvas fica visvel todo o tempo sobre a canvas
de Contedo (Content) onde foi construdo Departamento.
O relacionamento entre os blocos deve ser do tipo Departamento (pai), Funcionrio (Filho).
No deve ser possvel excluir um registro em um pai quando houver registros nos respectivos filhos.
No deve ser possvel uma pesquisa em um filho se no houver registro alocado no pai correspondente.
To logo o registro-pai seja trazido, o(s) registro(s)-filho deve(m) ser trazido(s) imediatamente.
A Figura-resposta 7.31A nos apresenta o esquema do relacionamento.
7.32) Crie uma nova aplicao de nome EX32. As seguintes tabelas devem ser apresentadas numa mesma canvas:
Departamento: formato Form, todas as colunas, 1 (um) registro por tela.
Projeto: formato Tabular, todas as colunas, trs registros por tela.
Projeto Atividade: formato Tabular, todas as colunas, cinco registros por tela.
As seguintes caractersticas devem ser configuradas para esta aplicao:
O relacionamento entre os blocos deve ser do tipo Departamento (av), Projeto (pai) e Projeto-Atividade (filho).
No ser permitida a remoo de Departamento se existirem projetos; no entanto, a remoo de projeto poder
ser efetuada desde que todos os registros de Projeto-Atividade sejam removidos tambm.
Deve ser possvel uma pesquisa em um filho mesmo que no haja registro alocado no pai correspondente.
To logo o registro de Departamento seja trazido o(s) registro(s)-filho deve(m) ser trazido(s) imediatamente.
Porm, somente devem ser consultados os registros de Projeto Atividade quando o usurio estabelecer a navegao
para este bloco.
A Figura-resposta 7.32A nos apresenta o esquema do relacionamento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
769
7.33) Crie uma nova aplicao de nome EX33. As seguintes tabelas devem ser apresentadas numa mesma canvas:
Funcionrio: formato Form, todas as colunas, 1 (um) registro por tela.
Departamento: formato Form, todas as colunas, 1 (um) registro por tela.
Projeto: formato Tabular, todas as colunas, trs registros por tela.
As seguintes caractersticas devem ser configuradas para esta aplicao:
O relacionamento entre os blocos deve ser do tipo Funcionrio (pai), Departamento (filho), Projeto (filho).
Ambos pendurados em Departamento.
Deve ser possvel a remoo de funcionrio, mesmo que haja departamentos e projetos.
Deve ser possvel uma pesquisa em um filho mesmo que no haja registro alocado no pai.
To logo o registro de Funcionrio seja trazido, o(s) registro(s)-filho deve(m) ser esvaziado(s), porm a pesquisa
nos filhos deve ser comandada manualmente.
A Figura-resposta 7.33A nos apresenta o esquema do relacionamento.
7.34) Crie uma nova aplicao de nome EX34. As seguintes tabelas devem ser apresentadas numa mesma canvas:
Projeto: formato Form, todas as colunas, 1 (um) registro por tela.
Atividade: formato Form, todas as colunas, 1 (um) registro por tela.
Projeto Atividade: formato Tabular, todas as colunas, oito registros por tela.
As seguintes caractersticas devem ser configuradas para esta aplicao:
O relacionamento entre os blocos deve ser do tipo Projeto (pai), Atividade (pai) e Projeto Atividade (filho).
Deve ser possvel a remoo de projeto, mesmo que haja atividades programadas (projeto-atividade)
No deve ser possvel a remoo de atividade havendo registros de projeto atividade.
No deve ser possvel uma pesquisa no filho se no houver registro alocado no pai.
7.35) Crie uma nova aplicao de nome EX35 baseada na aplicao EX32. As seguintes caractersticas devem ser
configuradas para esta aplicao:
No ser permitida a remoo de Departamento se existirem projetos.
No ser permitida a remoo de Projeto se existirem registros em Projeto Atividade.
No deve ser possvel uma pesquisa em um filho se no houver registro alocado no pai correspondente.
To logo o registro de Departamento seja trazido o(s) registro(s)-filhos devem ser trazido(s) imediatamente,
porm somente devem ser consultados os registros de Projeto Atividade quando o usurio estabelecer a navegao
para este bloco.
Quando um projeto for trazido do banco de dados, deve ser trazido simultaneamente o nome do coordenador
do projeto.
Quando uma atividade for trazida ou alterada, deve ser apresentada a sigla da nova atividade.
METODOLOGIA
Apresentao das formas de estruturao de cdigo e armazenamento de informaes de trabalho fornecidas pelo Form Builder.
TCNICA
Anlise terica dos aspectos apresentados, complementada por exemplos e exerccios.
INTRODUO
Uma aplicao Form possui diversos pontos em que podemos escrever cdigos de PL/SQL (os triggers). Sabemos
que a PL/SQL uma linguagem estruturada em blocos. Sabemos, ainda, que com a PL/SQL podemos criar blocos de
cdigo com nome, isto , procedimentos, funes e pacotes.
Sendo assim, uma aplicao Form no poderia deixar de ter formas de estruturao de cdigo. Locais onde nos
fosse possvel escrever cdigos de PL/SQL que pudessem ser utilizados em diversos pontos da aplicao. Este o
assunto do tpico Rotinas.
O assunto do tpico Variveis vai tratar de todos os tipos de variveis que podemos usar em uma aplicao:
variveis definidas dentro de um trigger, variveis de sistema, itens de trabalho (fora da canvas), variveis de
pacotes, variveis globais e parmetros.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
771
ROTINAS
Dentro do Form podemos acionar trs tipos de rotinas:
Rotinas armazenadas no banco de dados.
Rotinas armazenadas dentro do programa.
Rotinas armazenadas em bibliotecas (Libraries).
Cada uma destas formas de armazenamento possui uma abrangncia e utilidade especficas.
A determinao da localizao da unidade de programa deve seguir os critrios apresentados a seguir.
ROTINAS LOCAIS
So aquelas armazenadas dentro da prpria aplicao. So utilizadas para estruturao do cdigo e no tm utilizao
em outros mdulos.
Esto localizadas localmente porque:
No precisam ser compartilhadas por outras aplicaes.
No utilizam estruturas do banco de dados, ou as utilizam apenas para atualizao, no causando impacto no
trfego da rede.
Esto associadas a aes especficas do ambiente cliente (usam built-ins do Form ou do Report).
A criao de uma rotina local segue os critrios de criao dos demais objetos:
Selecione o n Unidade de Programa (Program Unit).
Utilize a ferramenta Criar (Create).
O dilogo da Figura 7.67 ser apresentado para que possamos determinar o nome e o tipo da unidade de programa.
Avaliemos quais as opes de unidades de programa e sua melhor utilizao:
Procedimentos (Procedures) Podem receber parmetros e retornar valores para a rotina chamadora atravs de
parmetros de sada (out). Devem ser o tipo escolhido se mais de uma informao de retorno for necessria.
Quando temos necessidade de retornar ao programa chamador mais de uma informao, mais comum o uso
de um procedimento do que de uma funo, porm no h impedimento de uso.
Funes (Functions) Podem receber parmetros. Sempre retornam um valor atravs da prpria chamada da
funo. Tambm podem retornar valores atravs de parmetros de sada (out), mas pouco comum esta forma
de uso. Devem ser o tipo escolhido se apenas uma informao de retorno for necessria.
Neste caso, o tipo de cdigo Unidade de Programa. Observe que o campo Objeto fica desabilitado.
Ao lado do nome da unidade de programa (no nosso caso Teste) aparece um * (asterisco), indicando que houve
modificaes e que esta rotina deve ser recompilada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
773
Os botes Editar e Remover, para que possam ser acionados com sucesso, precisam de que tenhamos, previamente,
selecionado um dos atributos j criados. Ao preenchermos todos os atributos desejados (numero varchar2(10) e
ddd varchar2(4)), podemos avanar para o dilogo seguinte, o qual nos ajudar na criao dos mtodos.
Ao pressionarmos o boto Adicionar, o dilogo da Figura 7.71 ser apresentado para que possamos definir os
mtodos, seu tipo (procedimento, funo, funo Map ou funo Order) e parmetros. Adicionalmente poderemos
indicar as restries de pureza para o mtodo (uso da pragma Restrict_References).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
775
Quando pressionamos o boto Encerrar, a especificao do tipo aplicada ao banco de dados, porm fica faltando a
criao do corpo do tipo, onde desenvolveremos o corpo da funo Ver_Tel. O Form Builder, automaticamente, aciona o
editor de PL/SQL com o corpo do tipo j indicado para que faamos, apenas, a incluso da lgica dos mtodos definidos.
Se no desejarmos realizar esta criao neste momento, poderemos fechar o editor de PL/SQL e, posteriormente,
acion-lo (clique duplo sobre o cone do tipo) e selecionar a parte de especificao do tipo ou o corpo do tipo (use
o campo Nome da janela do Editor para navegar de um para o outro).
Se voc no desejar usar o Assistente, basta que use a ferramenta de criao sobre o n Unidades de Programas.
Uma vez que a opo de Especificao de Tipo e de Corpo do Tipo ficam habilitadas, voc poder fazer a criao
usando diretamente o editor de PL/SQL.
EMPACOTAMENTO DA LGICA
As formas de empacotamento (procedimentos, funes e pacotes) apresentadas acima existem tanto no ambiente
cliente quanto no ambiente servidor.
VARIVEIS
Neste tpico trataremos dos diversos tipos de variveis de uma aplicao Form. Esto subdivididas em dois grandes
grupos: Variveis do Usurio e Variveis de Sistema.
As variveis do usurio podem ser de diversos tipos, com caractersticas e abrangncias diferentes:
Variveis Locais.
Itens fora de Canvas.
Variveis Globais.
Parmetros.
Variveis de Pacotes no Form.
As variveis de sistema no podem ser alteradas pela aplicao, somente consultadas, e fornecem diversas informaes
sobre a aplicao em desenvolvimento.
Iniciaremos o nosso estudo pelas variveis de Usurio.
VARIVEIS LOCAIS
So aquelas declaradas dentro de um gatilho ou rotina. Os valores dessa varivel so acessveis apenas dentro do
trecho de PL/SQL em que declarada.
Ao trmino do bloco de PL/SQL onde declarada, ela deixa de existir.
Tem sua vida til associada ao procedimento no qual esto declaradas.
Na Listagem 7.08, criamos um bloco dentro do gatilho (Key-Exit) e definimos uma varivel local, que deixa de
existir to logo o bloco interno termine (End).
De um modo geral, o tipo destas variveis similar aos tipos vlidos em PL/SQL (number, char, varchar2, date,
<tabela ou cursor>%rowtype, <coluna>%type, tipos do usurio, etc.), porm o Form disponibiliza alguns tipos
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
777
:= FIND_WINDOW('JANELA1');
:= 0;
FUNC.CD_MAT%TYPE := 0;
Na Listagem 7.11 apresentamos a utilizao de uma varivel de pacote na mesma rotina vista anteriormente na
Listagem 7.09. Para utilizarmos uma varivel de pacote em vez da varivel local, devemos usar o nome do pacote
como qualificador da varivel.
PARMETROS
At este momento estudamos variveis usadas dentro da aplicao como rea de trabalho e em circunstncias
especiais referenciadas em outros mdulos.
Trataremos, agora, da passagem de informao entre mdulos.
Um parmetro uma varivel (com tipo, tamanho e valor inicial) definida na aplicao receptora, com a finalidade
de modificar a forma de atuao da aplicao.
Dentro da aplicao onde o parmetro est definido, deve-se fazer referncia a ele como se existisse um bloco com
o nome de Parameter, isto , :Parameter.<parmetro>.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
779
VARIVEIS GLOBAIS
Uma varivel global no definida explicitamente em uma aplicao Form. Sua criao feita com a primeira
atribuio ou com o uso da rotina Default_Value.
Variveis Globais so sempre alfanumricas com comprimento mximo de 255 caracteres.
Tem a vantagem de ficar na memria at que seja explicitamente destruda; desta forma, pode ser usada para
passagem de informaes entre aplicaes, tanto de ida quanto de volta.
A desvantagem no ter tipo opcional, so sempre Char. Isto significa que qualquer atribuio de um valor no
alfanumrico implicar uma operao de converso. Como ela no tem definio de tamanho, no podemos
determinar seu tamanho; seu comprimento est fixado em 255 caracteres (limite).
De um modo geral, a utilizao de parmetros mais interessante que o uso de globais, pois aqueles tm tipo,
tamanho e at valor inicial.
Na Listagem 7.14 criamos uma varivel global de duas formas diferentes. A atribuio varivel V1 ser feita todas
as vezes que o gatilho for executado. A atribuio varivel Cidade s ocorrer na primeira vez que o gatilho for
executado. Se o valor da varivel global no for Null, a rotina Default_Value no tem efeito. Se a varivel no
existir, o Form cria a varivel e atribui o valor especificado.
A referncia, como vimos na Listagem 7.14, feita sempre com a palavra reservada Global (como se fosse um bloco).
Para destruirmos uma varivel Global, devemos usar a rotina Erase. Isto liberar memria local.
COMPARANDO AS VARIVEIS
O quadro a seguir apresenta de forma resumida as caractersticas dos tipos de variveis vistos at agora.
Local
Item
Pacote
Parmetro
Global
Sim
Sim
Sim
Sim
No
Sim
Sim
Sim
Sim
No
No
Sim
Sim
Sim
Sim
No
No
No
No
Sim
No
No
No
Sim
Sim
No
Sim
No
No
No
Sim
Sim
No
Sim
Sim
VARIVEIS DE SISTEMA
O Form possui um conjunto de variveis s quais ele atribui valores automaticamente. Essas variveis so chamadas
de variveis de sistema.
Fornecem um conjunto de informaes sobre a aplicao. Em sua maioria, so apenas legveis (read-only).
A lista completa das variveis de sistema est no Captulo 14. Neste momento veremos apenas aquelas que so
mais utilizadas nas aplicaes de um modo geral.
System.Cursor_Item Contm o nome do item onde o cursor (foco) est posicionado. O formato
<bloco>.<item>.
System.Cursor_Value Contm o valor do item onde o cursor est localizado.
System.Block_Status Indica o estado do bloco em que o cursor est localizado ou o bloco corrente durante o
processamento de um gatilho. Pode assumir um dos seguintes valores:
a) CHANGED Indica que o bloco contm pelo menos um registro alterado.
b) NEW Indica que o bloco contm apenas registros novos.
c) QUERY Indica que o bloco contm somente registros vlidos recuperados do banco de dados.
System.Last_Query Representa o comando Select que o Form utiliza para preencher um bloco. Contm o
ltimo comando Select.
System.Last_Record Contm o valor True se o registro que detm o foco atualmente o ltimo registro do
bloco. Contm o valor False para os demais registros.
System.Mode Indica como se encontra o processamento do Form. Os valores podem ser:
a) NORMAL Indica que o Form est no estado de digitao, entrada de dados, alterao.
b) ENTER_QUERY Indica que o Form est aguardando que o usurio informe restries para a consulta a ser realizada.
c) QUERY Indica que o Form est lendo dados do banco de dados. Este estado ser perceptvel nos triggers de
Post-Query, por exemplo.
System.Mouse_Item Indica o nome do item que est sob o mouse. O formato <bloco>.<item>.
System.Record_Status Indica o estado do registro em que o cursor est localizado. Pode assumir um dos
seguintes valores:
a) CHANGED Indica que o registro foi alterado e deve ser enviado para o banco de dados.
b) INSERT Indica que um registro New foi modificado e deve ser includo no banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
781
DATABASE TRIGGERS
J vimos que a atualizao de objetos do banco de dados possvel com a ferramenta Form Builder. Veremos,
agora, a manuteno de um trigger do banco de dados.
Expandiremos o n Objetos do Banco de Dados (Database Objects), o n Desenv (usurio em uso), o n Tabelas
(Tables), a tabela Func para encontrarmos o n Trigger.
Acionaremos, ento, a ferramenta Criar (Create) para que seja mostrado o dilogo da Figura 7.74.
Neste dilogo pressionaremos o boto Novo (New) para que a tela seja habilitada.
Poderemos preencher ento:
O nome do trigger no campo Nome (Name).
A definio do evento do trigger no campo Gatilho (Trigger). Para os eventos Antes e Depois o trigger deve ser
associado a uma tabela, porm, para o evento Em Vez De, o trigger dever ser associado a uma View, pois estar
substituindo a instruo escolhida (insert e/ou update e/ou delete) para a view.
No campo Instruo (Statement) indicamos a que instrues o gatilho estar associado. Observe que, se a instruo
for Atualizar (Update), o campo De Colunas (Of Columns) fica habilitado para que informemos as colunas que
causaro o evento quando modificadas.
Indicao de trigger de comando ou de linha. Se marcarmos o check box Para Cada Linha (For each Row)
estamos indicando um trigger de linha, o que faz com que os dois campos abaixo fiquem habilitados.
EXERCCIOS
7.36) Construa uma aplicao de nome EX36 baseada na aplicao EX30. Acrescente a seguinte funcionalidade:
Corrija os pontos da aplicao 30 em que no foram usadas variveis de ambiente:
a) Tecla Ajuda Contexto de bloco.
b) Navegao entre os blocos.
c) Nome do bloco atual.
d) Crtica de grau de instruo s na incluso.
e) Quando o boto Consultar for acionado, navegue para um item do bloco atual.
Crie um boto na barra de ferramentas horizontal que apresente o ltimo comando Select montado na aplicao.
Crie uma funo chamada Idade que receba como parmetro uma data e retorne a idade.
Crie uma funo chamada Letras que receba como parmetro um texto e retorne a quantidade de letras no texto.
7.37) Construa uma aplicao de nome EX37 baseada na aplicao EX36. Acrescente a seguinte funcionalidade:
Acione as rotinas Idade e Letras na leitura ou na alterao dos valores de data de nascimento, nome, sobrenome,
nome do departamento ou nome do projeto.
Criar um parmetro que indique em que horrio o programa atual poder ser executado.
a) Se o parmetro receber A, indica perodo diurno (entre 8 e 18 horas).
b) Se o parmetro receber B, indica perodo vespertino (entre 14 e 20 horas).
c) Se o parmetro receber C, indica perodo noturno (entre 18 e 20 horas).
d) Qualquer outro valor impede a execuo do programa.
Se o programa for acionado fora de seu horrio, deve encerrar com mensagem adequada.
Garantir que os campos alfanumricos sejam fornecidos em letras maisculas (todos os blocos).
Altere a forma de apresentao da foto do funcionrio. Aumente-a proporcionalmente ao tamanho do desenho
do item.
7.38) Construa uma aplicao de nome EX38 baseada na aplicao EX37. Acrescente a seguinte funcionalidade:
Criar um boto na barra de ferramentas horizontal que acione a aplicao EX37 passando como parmetro o
perodo de execuo.
Quando for lido um funcionrio que seja gerente, impea que seu salrio seja alterado modificando as
caractersticas do item na canvas.
Na tela de funcionrio, se o usurio passar o mouse sobre o cdigo do departamento, o nome deste deve ser
apresentado em um item flutuante (semelhante ao Dica da Ferramenta) prximo ao campo.
Utilizar a rotina Letras para validao de nome e sobrenome, impedindo que a soma das duas informaes
ultrapasse 20 caracteres.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
783
METODOLOGIA
Apresentao dos novos objetos e orientao de uso para implementao de uma interface mais amigvel.
TCNICA
Anlise de uso dos diferentes objetos com exemplos e exerccios.
ALERTAS (ALERTS)
Voc j reparou que quando enviamos uma mensagem para a linha de mensagem (no rodap da aplicao) ela
aparece de forma bastante discreta? Imagine se enviarmos uma mensagem importante para o usurio e ele no a ver.
O Form Builder, ento, nos oferece uma forma bem menos discreta de enviar mensagens, avisos, etc. para o
usurio: o objeto Alerta.
Um alerta uma janela Modal, isto , uma janela que o usurio deve responder e fechar para que seja possvel o
prosseguimento da aplicao. Quando o usurio receber uma mensagem em uma janela Modal, ele no poder
continuar a aplicao a menos que responda questo apresentada pela janela.
Um exemplo de janela Modal: aquela que aparece quando temos registros pendentes de atualizao em nossa
aplicao e decidimos sair da aplicao. Aparece um dilogo (janela Modal) perguntando ao usurio se ele deseja
salvar ou no os registros pendentes. At que venhamos a aceitar uma das opes apresentadas, no podemos
prosseguir. A aplicao parece congelada.
Podemos usar esta forma de trabalho para envio de qualquer mensagem que desejarmos, bastando que coloquemos
essa mensagem em um alerta.
Ainda utilizando a aplicao Valida, sem todas as unidades de programa adicionadas, selecione o n Alerta (Alert)
e crie um alerta para teste.
Aps a definio do alerta, devemos acion-lo. Usaremos o trigger Key-Down em nvel de mdulo para acionar o alerta.
A Listagem 7.15 mostra o cdigo de PL/SQL utilizado para acionarmos o alerta. A rotina Show_Alert uma funo
que retorna um cdigo numrico indicativo do boto que o usurio selecionou. Isto nos permitir tomar aes
diferentes de acordo com o boto escolhido.
As constantes Alert_Button1 a 3 podem ser utilizadas para comparao com a varivel local criada para verificarmos
o boto escolhido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
785
Suponhamos que a mensagem a ser apresentada no fosse fixa; que desejssemos mostrar todas as mensagens de
erro do Form em janelas de alerta. Precisaramos alterar o texto da mensagem.
A Listagem 7.16 mostra esta ao no trigger On-Error. Alteramos o alerta para que fosse apresentado um nico
boto (basta retirar o texto da propriedade Etiqueta do Boto 2) e o resultado aparece na Figura 7.77.
Este foi apenas um tipo de uso para os atributos visuais. Voc poder definir padres para utilizao em situaes
diferentes. Teste!
EDITOR
Um editor uma janela para digitao de texto pelo usurio. Em vez de ficar restrito ao tamanho da rea delimitada
para o item na tela, ao acionarmos o editor ser apresentada uma janela para digitao livre at o tamanho definido
para o campo.
O Form fornece um editor-padro, predefinido, que no precisa de nenhuma programao especial para ser
apresentado. Basta que o usurio posicione o cursor sobre o item que deseja editar e pressione o conjunto de teclas
correspondente ao Editar (CTRL+e). Isto far com que seja apresentada a janela de edio.
Posicione o mouse sobre o n Editor e utilize a ferramenta Criar para adicionar esse objeto sua aplicao. O
objetivo da criao desse editor a possibilidade de modificarmos algumas das caractersticas do editor-padro,
como veremos por suas propriedades:
Ttulo (Title) Ttulo a ser apresentado para a janela do editor. Preenchemos com o texto Editor de Teste.
Ttulo de Base (Bottom Title) Ttulo a ser apresentado abaixo do campo de edio na janela do editor.
Preenchemos com Rodap do Editor.
Estilo de Sobreposio (Wrap Style) Especifica como o texto ser apresentado quando seu contedo exceder
largura especificada para a janela do editor. Os valores vlidos para essa propriedade so: Nenhum (None),
Caractere (Character) ou Palavra (Word). Se escolhermos Palavra (Word), o texto quebrar de linha somente em
trmino de palavra. Escolhemos Palavra.
O grupo Fsico permite a determinao de uma posio para apresentao dessa janela, alm de tamanho da janela
e presena ou no de barra de rolagem.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
787
Na Listagem 7.17, somente quando o foco estiver sobre o item nm_depto do bloco Depto, o editor ser acionado.
Com esta forma de trabalhar, podemos controlar a apresentao ou no do editor para os itens de texto da canvas.
Podemos agir ainda de uma outra maneira.
Na Listagem 7.18 apresentamos a rotina Show_Editor que aciona o editor da mesma forma que vimos anteriormente,
porm no precisamos associar o editor ao item a tempo de desenvolvimento e o usurio no precisa estar com o
cursor posicionado sobre o item a ser editado.
Observe que um dos parmetros passados para a rotina o texto a ser editado (:nm_depto). O retorno da edio, isto
, o texto modificado pelo usurio recebido pela varivel local Texto. Tomamos este cuidado (em vez de atribuir
diretamente varivel :nm_depto), pois se o usurio pressionar a tecla Cancelar (Cancel) da janela do editor o texto
retornado Null. Assim, para que no seja perdido o contedo da varivel nm_depto, recebemos o texto editado em
uma varivel de trabalho e em seguida verificamos o valor do booleano Retorno. Se o usurio escolher OK, o booleano
retorna True (e devolvemos o valor para nm_depto). Caso contrrio, no sujamos o item da tela.
Voc, agora, poder escolher sua forma preferida de acionar o editor para o usurio.
EXERCCIOS
7.41) Construa uma aplicao de nome EX41 baseada na aplicao EX40. Acrescente a seguinte funcionalidade:
Crie uma rotina que recebe um texto e mostre este texto em uma janela de Alerta que possua um nico boto.
Todas as mensagens enviadas pelo programa (as messages) devem ser substitudas por mensagens apresentadas
pelo Alerta.
Todas as mensagens de erro ou aviso fornecidas pelo Forms Runtime devem ser apresentadas na janela do Alerta.
7.42) Construa uma aplicao de nome EX42 baseada na aplicao EX41. Acrescente a seguinte funcionalidade:
Crie um editor com letra Courier New, tamanho 8, azul, quebra de linha em fronteira de palavra e que contenha
uma barra de rolagem vertical.
Crie um boto na barra de ferramentas horizontal que acione o editor apenas para os itens: nm_depto, nm_foto
e nm_proj.
Para os demais itens vedada a utilizao de editor.
Para o item nm_proj deve ser acionado o bloco de notas (do Windows) no lugar do editor interno.
O editor deve ser posicionado exatamente sobre o item em edio, exceto no caso de nm_foto, quando o editor
deve ser posicionado sobre o item vl_sal.
7.43) Construa uma aplicao de nome EX43 baseada na aplicao EX42. Acrescente a seguinte funcionalidade:
Especificar os seguinte atributos visuais:
a) av_prompt letra vermelha, Arial, tamanho 8.
b) av_editor letra azul, Courier New, tamanho 8.
c) av_item_atu letra preta, Arial, tamanho 8, cor de fundo branca.
d) av_item_cons letra cinza, tipo Courier New, tamanho 8, cor de fundo branca.
e) av_item_atu_corr cor de fundo cinza.
f) av_item_mod cor de fundo vermelha.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
789
METODOLOGIA
Apresentao e descrio dos objetos e do seu relacionamento interno.
TCNICA
Apresentao prtica da aplicabilidade dos objetos e suas diversas particularidades.
No prximo dilogo devemos informar o comando Select a ser includo no Record Group. Podemos digitar o
comando, importar o texto de um arquivo em disco, estabelecer conexo com o banco de dados, acionar o Query
Builder para auxlio na montagem da sintaxe adequada e, finalmente, verificar a sintaxe preenchida. Preencheremos
o campo Instruo de Consulta SQL com o texto Select cd_depto, nm_depto from Depto.
O Query Builder uma ferramenta auxiliar para a montagem de queries. Uma vez que seu uso mais intenso durante um relatrio. Seu estudo
detalhado foi includo no prximo captulo, quando estudaremos o Report Builder 6i.
Aps preenchermos este dilogo nos apresentado o quarto dilogo, no qual indicamos quais colunas do Record Group
devem fazer parte da lista de valores. So apresentados dois campos, um contendo a lista de colunas existentes no
Record Group (Colunas do Grupo de Registros) e outro contendo a lista de colunas existentes na Lov. Usando os botes
centrais podemos transferir as colunas do Record Group para a Lov (> e >>) ou da Lov para o Record Group (< e <<).
Uma vez que nossa primeira montagem de uma LOV, passaremos todas as colunas (>>) do grupo de registros para
a LOV. Isto significa, na prtica, que poderemos no s apresentar ao nosso usurio todas as colunas armazenadas
no grupo de registros, como tambm poderemos obter os dados destas colunas quando o usurio selecionar uma
das listas da LOV.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
791
Em nosso caso preenchemos da seguinte forma: deixamos em branco o Ttulo da coluna CD_DEPTO e preenchemos
sua largura com 0 (zero). Isto significa que quando o usurio abrir a Lista de Valores no ver a coluna CD_DEPTO
(apesar de ela estar escondida na LOV), porm, quando ele selecionar uma das linhas da LOV, o valor de CD_DEPTO
correspondente linha selecionada ser atribudo ao item CD_DEPTO do bloco FUNC do registro corrente, a
tempo de execuo. Para a coluna NM_DEPTO, agimos inversamente, ou seja, ela ser mostrada para o usurio na
lista de valores (pois sua largura maior que zero), porm seu contedo no ser atribudo a nenhum item da
aplicao, pois a propriedade Valor de Retorno no foi preenchida.
Observe, ainda, que na parte inferior temos um check box que, quando marcado, faz com que o Form Builder
calcule, automaticamente, o tamanho das colunas da LOV de acordo com seu contedo.
Na seqncia, temos a possibilidade de informar um ttulo para a janela da Lov, suas dimenses (largura e altura) e seu
posicionamento na tela a tempo de execuo. Este posicionamento poder ser feito, automaticamente, pelo Forms
Runtime, ou predetermindo por ns. Escolheremos, inicialmente, deixar que o Forms determine seu posicionamento.
O prximo dilogo (stimo) permite a indicao da quantidade de linhas a serem lidas de cada vez (para carga da
Lov), isto , a quantidade de linhas a cada Fetch. O campo Renovar dados do grupo de registros antes de exibir a
LOV determina a freqncia com que esta leitura deve ser feita. Se o marcarmos indicamos que cada vez que o
usurio acionar a LOV deve ser feito um acesso ao banco de dados para preenchimento prvio do Grupo de
Registros. Se o desmarcarmos indicamos que a renovao dos dados ser feita por programao.
Devemos ponderar sobre a marcao ou no deste campo, pois est associado, diretamente, freqncia de I/O no
banco de dados. Se as informaes que estamos mostrando na lista de valores forem estveis (por exemplo Unidades
da Federao, Departamentos da empresa, Estado Civil, etc.) devemos desmarcar o campo para que no venhamos
a fazer leituras desnecessrias. Se, por outro lado, as informaes forem constantemente modificadas, podemos
optar por renov-las a cada acesso (marcando) ou programar uma freqncia menos intensa, se tivermos problemas
(I/O) para acesso ao banco de dados. No nosso caso, desmarcamos a opo.
PROPRIEDADES DA LOV
Analisemos as propriedades da lista (Lov) presentes no grupo funcional.
Ttulo (Title) Indica o ttulo da janela da lista.
Tipo de Lista (List Type) Indica se a lista baseada em um Record Group. Somente a opo Grupo de Registros
est disponvel.
Grupo de Registros (Record Group) Define o nome do record group ao qual a lista se refere.
Propriedades de Mapeamento de Coluna (Column Mapping Properties) Esta propriedade ser utilizada para
mapearmos, dentre as colunas no record group, quais sero apresentadas na lista. Veremos em detalhes aps as
propriedades bsicas.
Filtrar Antes da Exibio (Filter Before Display) Quando marcamos esta opo com Sim, a tempo de execuo
apresentada uma tela para que o usurio digite algum texto que restrinja a pesquisa na base de dados. O texto
digitado pelo usurio completado com % e utilizado em uma clusula Where adicionada query. Esta restrio
montada para a primeira coluna visvel (no a primeira coluna da lista) na janela da Lov. Para efeito de teste,
preencheremos essa propriedade com Sim.
Exibio Automtica (Automatic Display) Indica que, quando o item ao qual a Lov est associada receber o
foco, a lista apresentada automaticamente. Preencha com Sim.
Renovao Automtica (Automatic Refresh) Indica que, a cada vez que o usurio acionar a Lov, o comando
Select associado com o Record Group ser executado para refrescar os dados armazenados em memria.
Preencha com No.
Seleo Automtica (Automatic Select) Indica que, se a lista apresentada contiver apenas uma linha, a seleo
automtica. A janela da Lov fechada e a linha selecionada. Preencha com Sim.
Salto Automtico (Automatic Skip) Indica que aps a seleo de uma das opes da lista o cursor deve navegar
automaticamente para o prximo campo. Preencher com Sim.
Posio Automtica (Automatic Position) Especifica que o Form deve posicionar a janela da Lov prxima ao
campo de onde foi acionado. Preencher com Sim.
Largura Automtica da Coluna (Automatic Column Width) Quando marcamos esta propriedade para Sim, o
Form verificar o que maior: o ttulo da coluna (propriedade Ttulo da Coluna Column Title) ou seu
comprimento (propriedade Largura da Exibio Display Width), e faz o ajuste da largura da coluna necessrio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
793
Na parte superior deste dilogo so mostradas as colunas presentes do Record Group. Quando selecionamos (basta
colocar o cursor em uma delas e clicar) uma das colunas da parte de cima, as caractersticas apresentadas abaixo so
referentes a essa coluna.
Item de Retorno (Return Item) Quando o usurio selecionar uma das linhas exibidas pela Lov, podemos atribuir
o valor dessa coluna (atualmente selecionada) para um dos itens da aplicao. No nosso caso, ao selecionarmos a
linha da coluna cd_depto esta propriedade deve estar preenchida com Func.cd_depto. Caso no esteja, pressione
o boto Procurar e selecione este item da lista apresentada. Para a linha de nm_depto, essa propriedade deve ficar
em branco, pois no desejamos copiar o nome do departamento para nenhum item da aplicao.
Faa uma consulta geral e em seguida navegue para o item cd_depto. Observe que, automaticamente, foi
apresentada a tela da Lov vazia para que o usurio preencha com uma restrio.
Preencha com D (maisculo) e pressione o boto Loc. A lista ser apresentada apenas com os nomes de departamento
que comecem com D. A restrio aplicada coluna nm_depto, pois a primeira coluna visvel da Lov.
Voc reparou que a janela da Lov apareceu prxima ao item cd_depto?
Selecione um dos valores apresentados, por exemplo, Diretoria de Sistemas. D OK. Qual o valor do item cd_depto
agora? A coluna cd_depto (contendo o valor D01) foi copiada para o item cd_depto do registro corrente.
Onde est o cursor agora? Ele navegou para o prximo item da tela (no meu caso Nr_Cargo).
Retorne ao desenvolvimento e desmarque as propriedades Filtrar Antes da Exibio (Filter Before Display) e
Exibio Automtica (Automatic Display). No mapeamento, coloque a coluna cd_depto com largura de exibio
(display width) igual a 2 e ttulo igual a Cdigo.
Execute novamente a aplicao e posicione o cursor sobre o item cd_depto.
Para acionar a lista de valores, pressione a tecla F9. O que aconteceu com a coluna cd_depto? Ela e o ttulo
ficaram totalmente visveis, embora o tamanho definido tenha sido 2 (pontos). Isto ocorreu porque o Forms
Runtime dimensionou a coluna automaticamente.
Preencha o campo Loc com o texto B%, isto , desejamos obter todos os departamentos cujo cdigo comece
com B. A restrio ser acionada para a primeira coluna. Quando pressionarmos a tecla Loc, a tela da Lov ser
fechada e o item cd_depto receber o valor B01. isto que faz a propriedade Seleo Automtica (Automatic
Select), quando a lista contm apenas uma linha.
Retornemos mais uma vez ao desenvolvimento, e na tela de propriedades do item cd_depto, no grupo Lov,
marque a propriedade Validar a Partir da Lista (Validate from List) com Sim. Execute novamente a aplicao.
Faa uma consulta geral e posicione o cursor sobre o item cd_depto, porm no acione a LOV. Preencha o item com o
valor Z01 e navegue para o prximo item da tela. A janela da Lov apresentada automaticamente. Isto ocorre porque
o valor digitado no confere com os cdigos apresentados na lista. Repita o teste, mas preencha um valor vlido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
795
Show_Lov uma funo que retorna um boleano True ou False indicando se a janela foi apresentada ou no.
Verifique na sintaxe desta rotina que ela pode receber como parmetro o posicionamento da lista e o nome da
lista, caso no venhamos a fazer a associao com o item (propriedades do item).
A COLUNA DE PESQUISA
A primeira coluna que especificamos em uma Lov ser usada para pesquisa:
Seleo Automtica (Automatic Select) Ocorre quando o operador digita alguma letra e a janela da LOV est ativa.
RECORD GROUPS
Um Grupo de Registros (Record Group) uma estrutura interna do Form capaz de armazenar dados como se fosse
uma tabela (ou uma matriz), isto , contendo linhas e colunas. Esse armazenamento, a princpio, feito em memria.
Existem 3 tipos de Record Groups:
Query Record Group Corresponde a um grupo de registros que contm um comando Select associado.
Static Record Group Corresponde a um grupo de registros cuja estrutura montada a tempo de desenvolvimento.
Non-Query Record Group Corresponde a um grupo de registros cuja estrutura totalmente definida a tempo
de execuo. dinmico.
A tempo de desenvolvimento, podemos criar os dois primeiros tipos (Query e Static). Durante a execuo, podemos
criar (ou popular) Query e Non-Query.
Para efeito de teste criaremos um do tipo Query; em seguida, um do tipo Static, e durante os exerccios deste tpico
usaremos um Non-Query.
Continuaremos com a aplicao Valida para efeito de teste. Remova, porm, a Lov e o Record Group j existente.
Escolheremos a criao baseada na consulta e preencheremos o campo Consultar Texto (Query Text) com o valor
Select cd_depto, nm_depto from depto e pressionaremos o boto OK.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
797
com este dilogo que preencheremos a tabela em memria. Suponhamos que desejssemos montar uma tabela
de grau de instruo. Preencheramos o dilogo anterior da seguinte forma:
Para o campo Nomes de Coluna (Column Names) preencheramos com cd_git na primeira linha e ds_git na
segunda linha. Se voc errar e quiser remover uma linha da lista use CTRL+SHIFT+<, e para incluir uma nova
linha no meio de outras use CTRL+SHIFT+>.
Quando pressionamos o boto Avanar, neste dilogo, o Form Builder apresenta um novo dilogo (no apresentado
anteriormente na criao da LOV) para indicarmos que, se viermos a modificar o comando SELECT associado ao
Record Group, desejaremos incorporar esta modificao no grupo de registros ou desejaremos criar um novo
grupo de registros. Em nosso caso selecionaremos a opo Modificar Grupo de Registros Existente. Os demais
dilogos j foram analisados anteriormente, quando criamos a LOV e o Record Group simultaneamente.
No esquea de associar a Lov de departamento ao item cd_depto e a Lov de grau de instruo ao item nr_git. Nem
de preencher o retorno (Retornar Item Return Item) para as respectivas colunas na propriedade de mapeamento das
colunas na Lov. Observe que o tamanho de exibio da coluna cd_git est muito grande (209); diminua para 18.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
799
EXERCCIOS
7.45) Construa uma aplicao de nome EX45 baseada na aplicao EX44. Acrescente a seguinte funcionalidade:
Crie um record group esttico com as seguintes colunas: nm_item (30 caracteres), tx_ajuda (300 caracteres).
Preencha o record group anterior com o nome de dez itens da sua aplicao juntamente com dez mensagens de ajuda.
Faa uma funo que receba como parmetro o nome do item e o pesquise no record group anterior, retornando
a mensagem correspondente ou No encontrada mensagem de ajuda.
Substitua o teste presente no boto de ajuda pelo uso da rotina.
7.46) Construa uma aplicao de nome EX46 baseada na aplicao EX45. Acrescente a seguinte funcionalidade:
Crie uma rotina para preencher um record group dinmico que contenha o menor e o maior valor salarial de
cada cargo.
Utilize esse record group para estabelecer a crtica de cargo x salrio.
Utilize esse record group para apresentar na rea de mensagem a faixa salarial vlida quando o usurio passar o
mouse sobre o cdigo do cargo.
7.47) Construa uma aplicao de nome EX47 baseada na aplicao EX46. Acrescente a seguinte funcionalidade:
Crie uma lov e um record group simultaneamente. Essa lov deve apresentar o nome de cada departamento e
retornar o cdigo do departamento escolhido.
Acione essa lov das colunas de cdigo de departamento na canvas de funcionrio, projeto de departamento
(depto contbil).
Essa lov deve ser refrescada, no mnimo, a cada 10 minutos e no a cada acionamento.
7.48) Construa uma aplicao de nome EX48 baseada na aplicao EX47. Acrescente a seguinte funcionalidade:
Crie um record group esttico contendo uma coluna de data.
Este record group dever ser preenchido dinamicamente da seguinte forma:
a) O dia ser sempre 10.
b) A partir da data atual, obter um ms para trs e seis meses para frente.
c) Incluir a data atual.
O total de linhas deste record group oito.
METODOLOGIA
Apresentao e descrio das capacidades de depurao.
TCNICA
Uso do utilitrio para anlise de trechos de programa.
DESCRIO
A depurao no Form significa que vamos acompanhar a execuo do programa passo a passo e, eventualmente,
poderemos intervir no processo. Estamos depurando o cdigo PL/SQL do programa.
A depurao pode ser feita de duas formas:
Dinmica Quando iniciamos a execuo do programa e, neste momento, definimos os pontos de interrupo.
Esttica Definimos os triggers ou unidades de programa que desejamos analisar e usamos o pacote Debug para
forar uma interrupo. A utilizao do pacote feita a tempo de desenvolvimento, ainda no Form Builder.
Para testarmos as duas formas de depurao, criemos, ainda na aplicao Valida, dois gatilhos (triggers): um trigger
do tipo Key-Down em nvel de mdulo com o texto da Listagem 7.20 e um gatilho do tipo Pre-Query em nvel de
bloco Func (conforme a Listagem 7.21).
Para acionarmos o depurador devemos usar a opo Executar Depurao de Form para testar a execuo no lugar
da opo Executar Form Cliente/Servidor, que vnhamos utilizando at agora.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
801
A JANELA DE DEPURAO
Quando a execuo se inicia, aparece uma janela intitulada Depurador de Forms (Form Debugger).
Essa janela est subdividida em trs painis:
Painel de Fonte O painel superior nos mostrar trechos dos blocos de PL/SQL presentes na aplicao quando
fizermos a seleo da unidade de programa.
Painel de Navegao O painel central mostra a rvore hierrquica do Navegador, subdividida nos seguintes
ns principais:
a) Mdulos Expandindo este n, veremos as aplicaes abertas no ambiente de desenvolvimento. Poderemos expandir
cada uma delas e visualizar os blocos, os itens e seus valores, os triggers, os parmetros e valores, as unidades de
programa internas e externas (bibliotecas anexadas), ou seja, toda a parte de cdigo e dados dos mdulos.
b) Variveis Globais Nome e contedo de todas as variveis globais existentes at o momento.
c) Variveis de Sistema Nome e valor de todas as variveis de sistema.
d) Parmetros da Linha de Comando Nome e valor de todos os parmetros recebidos pelo Forms Runtime,
sejam eles criados pelo usurio ou parmetros-padro de sistema.
e) Pacotes Embutidos Semelhante quela presente no Form Builder.
f) Aes de Depurao Este n ser preenchido quando definirmos os pontos de depurao.
g) Stack Este n ser preenchido pelo Form durante a depurao de um trecho de PL/SQL. Estaro presentes
todas as variveis locais com seus respectivos valores e tambm todas as rotinas (procedures e funes) em
execuo na ordem de chamada, como uma pilha.
h) Objetos de Banco de Dados Semelhante ao n de mesmo nome presente no Form Builder.
Com este painel, teremos acesso a todas as variveis e a toda a parte de cdigo da aplicao.
Painel de Comandos Neste painel, aparece uma linha de comando em que podemos executar comandos
diretamente no ponto de interrupo, alterando o valor de variveis, executando aes, etc. Corresponde a uma
linha de comando de PL/SQL.
Nossa primeira tarefa ser marcar um ponto de interrupo; portanto, no Painel do Navegador, expanda o n de
mdulos at que voc encontre a trigger de Pre-Query do Bloco Func. Clique sobre o cone do trigger.
O texto da trigger ser apresentado no Painel de Fonte (ver a Figura 7.88).
BREAKPOINT
Para efeito de teste, selecione a primeira linha aps o Begin (primeira linha executvel) do trigger. Escolha no
menu Depurar (Debug) a opo Interromper (Break). Ser mostrado o dilogo da Figura 7.89.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
803
TRIGGER
Um gatilho funciona ligeiramente diferente de um ponto de interrupo. No gatilho escreveremos uma lgica que
determinar se a interrupo ocorrer ou no.
A criao do gatilho similar criao do ponto de interrupo. Selecionamos a linha desejada (7), escolhemos no
menu Depurar (Debug) a opo Gatilho (Trigger).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
805
Esta forma de utilizao tambm pode ser utilizada com a procedure Break presente no pacote Standard Extensions.
A Figura 7.92 mostra o surgimento do depurador exatamente quando o valor de I igual a 7. Expanda o Painel do
Navegador e obtenha o valor das variveis locais (esto no n Stack). Verifique tambm o valor da varivel nr_git
(dentro do mdulo Valida, no n Itens do bloco Func).
Como teste adicional, usaremos o Painel de Comando para modificar o valor do item nr_git.
Execute o comando :nr_git := 1; na linha de comando do ltimo painel. Pressione a tecla Entrar (Step Into).
Verifique agora o valor do item nr_git.
A Figura 7.93 nos mostra a situao descrita acima.
EXERCCIOS
7.49) Construa uma aplicao de nome EX49 baseada na aplicao EX48. Acrescente a seguinte funcionalidade:
Marque um Breakpoint na leitura do registro de funcionrio (Post-Query).
Teste as interrupes verificando:
a) O valor das variveis de ambiente.
b) O valor das variveis locais.
c) O valor dos itens.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
807
METODOLOGIA
Apresentao e descrio de diversas rotinas previamente definidas.
TCNICA
Apresentao prtica da aplicabilidade de diversas rotinas apresentadas.
VBX
Infelizmente, no poderemos fazer um exemplo que o execute perfeitamente, pois nosso ambiente de 32 bits.
Porm podemos estud-lo em nvel terico e mostrar onde podemos interferir.
A interface de um VBX em uma aplicao Form feita atravs de um item do tipo VBX. No conjunto de propriedades deste
item que preenchemos as informaes necessrias para que o Form Builder faa a ligao com o controle desejado.
Sendo assim, criaremos em nossa aplicao Rotina um item do tipo VBX.
Na paleta de propriedades deste item, no grupo funcional, deveriam aparecer as seguintes propriedades:
VBX Control File Onde definiramos o nome do arquivo fsico cuja extenso VBX.
VBX Control Name Onde definiramos o nome do controle pertencente ao arquivo VBX que desejaramos usar.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
809
OLE CONTAINER
Este item implementa um controle container de objetos, ou seja, um controle que poder receber objetos dentro dele.
Esse item armazena objetos de uma das categorias OLE registradas no Windows (por exemplo, uma planilha do Excel,
documento do Word, figura do PaintBrush ou qualquer objeto de uma aplicao que implemente OLE como Server).
Estes objetos armazenados no item da aplicao podem ser de dois tipos:
Embedded Quando o objeto estiver armazenado internamente. Esse armazenamento poder ser no prprio
Form (FMB ou FMX) ou em uma coluna do banco de dados.
Linked Quando o objeto estiver num arquivo em disco independente do Form ou do banco de dados. Dentro da
aplicao (ou da coluna do banco de dados) esto armazenadas apenas as informaes de identificao do objeto.
Para estudarmos estas caractersticas bsicas preciso que voc crie esse item em sua aplicao. A criao pode ser
feita diretamente na Canvas (cone OLE na barra de ferramentas) ou no Navegador (neste caso, o nome da canvas,
para visualizao, deve ser adicionado). Aps a criao, abra a tela de propriedades no grupo Funcional.
A seguir, detalharemos as propriedades deste grupo.
Ativado (Enabled) Indica se o objeto poder receber foco, seja atravs da navegao-padro (tecla TAB) ou
atravs de rotinas predefinidas (Next_Item, Go_Item, etc). Deve estar preenchido com Sim.
Classe OLE (OLE Class) Indica a classe do objeto. Se deixarmos essa propriedade sem valor (Null), podemos
inserir qualquer tipo de objeto registrado por uma aplicao OLE Server instalada no computador. Se preenchermos
com algum valor, somente objetos com a classe especificada podero ser inseridos neste container. Preencheremos
essa propriedade com Paint.Picture, ou seja, os objetos a serem inseridos foram registrados pelo PaintBrush
(Imagem de Bitmap). Para tal pressione o boto (com cone trs pontinhos) que aparece nesta propriedade e, da
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
811
Aps todas estas especificaes, execute a aplicao (antes, porm, desmarque a propriedade Item do Banco de
Dados do item OLE, para que sua aplicao execute normalmente) e verifique as aes que voc pode fazer. Troque
o valor das propriedades para verificar as diferenas entre elas.
Para atingirmos o resultado apresentado na Figura 7.94 executamos a aplicao, realizamos uma query total e com
o mouse sobre o item OLE, usamos o boto direito do mouse para incluir um objeto OLE dentro do nosso item.
Como limitamos o tipo de objeto a figuras do PaintBrush, escolhemos incluir a partir de um arquivo, o qual visto
no exemplo (Bolhas.BMP). Em seguida, realizamos um clique duplo sobre o objeto. Observe que os menus do
Paint, juntamente com sua barra de ferramentas, foram incorporados janela do Forms Runtime.
Como teste, usando o Paint, amplie a figura, faa novos desenhos, enfim, modifique o desenho original. Para encerrar
a ativao clique fora do objeto OLE. Observe que o desenho modificado foi salvo em nosso item. Navegue para o
prximo item, retorne a este inicial e veja que a informao foi armazenada no buffer do bloco normalmente. Se este
item estivesse associado a uma coluna no banco de dados poderamos armazenar o objeto ou informaes sobre ele.
Podemos, tambm, fazer a manipulao de um item do tipo OLE por programao. O Form Builder possui um
pacote chamado Forms_Ole para executar determinadas aes:
Rotina para manipular o OLE Server (no nosso caso, o PaintBrush) Active_Server (ativ-lo), Server_Active (para
verificar se est ativo), Close_Server (encerrar o OLE Server).
Rotinas para manipulao de aes (da lista de aes disponveis no menu Pop-up) Exec_Verb (executar uma
ao especfica), Get_Verb_Count (para obter a quantidade de aes disponveis), Get_Verb_Name (para obter o
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
813
Se este gatilho for criado em nvel de bloco ou de mdulo, o preenchimento deve ser manual.
Aps a criao do item, expanda o n Unidades de Programa (Program Units) que voc encontrar um conjunto de
pacotes. Esses pacotes so dependentes do tipo de objeto criado. A criao do pacote se d no momento em que
importamos os mtodos, eventos e propriedades do objeto. Observe no n Unidades de Programas o pacote
adicionado para o objeto SpinButton.
Criaremos, agora, as rotinas para a manipulao das propriedades. Crie um boto de nome Ao no mesmo bloco
onde o nosso objeto OCX se encontra. Para que o objeto OCX seja ativado imediatamente, coloque este bloco
antes do bloco func (no navegador). Observe que o nome do item OCX deve ser SPIN, pois foi este nome que
inclumos no cdigo a seguir.
A propriedade bsica do controle Spin a propriedade Value. Cada vez que pressionamos o boto da direita, o
valor desta propriedade adicionado de 1, e cada vez que pressionamos o boto da esquerda, a propriedade Value
subtrada de 1. Os valores mnimo e mximo so fornecidos pelas propriedades Min e Max, a que ns atribumos
1 e 5, respectivamente. Assim sendo, enquanto o boto for sendo acrescido, faremos uma adio ao item da canvas
nr_git. Preencha, agora, o cdigo correspondente para a situao de subtrao (SpinDown).
Faa o teste acima. Nem tudo foi esclarecido neste ponto. Voc certamente ter dvidas. Para a utilizao de um
objeto OCX indispensvel que voc conhea bem o que faz o objeto que voc incluiu na sua aplicao. Desta
forma, suas dvidas sero direcionadas apenas para como implementar as aes desejadas no Forms.
PACOTES EMBUTIDOS
Falaremos, agora, nos pacotes que aparecem sob o n Pacotes Embutidos (Built-in Packages).
Conheceremos o objetivo de todos eles, mas exemplificaremos apenas alguns.
Quando estivermos falando sobre cada um deles, expanda o n correspondente para que voc possa visualizar as
rotinas pertencentes a eles e entender um pouco melhor seus objetivos.
Para os testes deste grupo, criaremos uma outra aplicao com as mesmas caractersticas da aplicao anterior. Seu
nome ser Pacote. Essa aplicao est baseada na tabela Func com as colunas cd_mat, nm_func, cd_depto, nr_cargo,
nr_git, in_sexo, dt_nasc, vl_sal, todas do tipo texto. O layout foi montado com 1 (um) registro e formato Form e
uma barra de rolagem. Adicionamos um boto de nome Boto, onde desenvolveremos as lgicas (quando houverem)
e tambm um alerta de nome Alerta com um nico boto OK para apresentao das mensagens de teste.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
815
FTREE
Este pacote o suporte a um novo tipo item, rvore hierrquica.
Este tipo de item permite a apresentao dos dados com o aspecto do Object Navigator, ou seja, com ns, subns e elementos.
Os usurios podero expandir ou contrair ns na hierarquia, obtendo visualizao de subns e elementos folha.
Podemos preencher esta rvore com valores oriundos de um Record Group ou com dados obtidos diretamente por
uma query.
Para efeito de teste, adicionaremos em nossa aplicao um novo bloco (sem a ajuda do Assistente) de nome Htree.
Neste bloco incluiremos um item chamado Arvore. Na paleta de propriedades do item alteraremos seu tipo para
rvore Hierrquica.
Um item do tipo rvore Hierrquica deve estar presente em um bloco com 1 linha e como nico item. Caso
contrrio, a tempo de execuo receberemos a mensagem de erro: FRM-32089: As rvores devem estar em blocos
de apenas uma linha e item.
Antes de iniciarmos os testes, faamos uma verificao nas propriedades relativas ao grupo Funcional deste item
rvore Hierrquica (as demais so similares a itens de um modo geral).
Ativado (Enabled) determina se o usurio final poder usar o mouse para manipular o item.
Permitir Ramificaes Vazias (Allow Empty Branches) indica se podem existir ns sem filhos. Se esta opo
estiver habilitada, os ns sem filhos sero convertidos para elementos (ou seja folhas). Caso esta propriedade
esteja desabilitada, um n vazio ser apresentado como um n no expandido.
Multisseleo (Allow Multiselect) indica se o usurio poder ou no selecionar mais de um elemento na rvore.
Mostrar Linhas (Show Lines) determina se as linhas de ligao entre os ns devem ser apresentadas.
Mostrar Smbolos (Show Symbols) indica se os smbolos + ou devem ser apresentados na frente de um n vazio.
O smbolo + indica que o n tem filhos mas no est expandido. O smbolo indica que o n est expandido.
Grupo de Registros (Record Group) indica o nome do Record Group de onde os dados sero originados para o
preenchimento do item.
Consulta de Dados (Data Query) indica o texto da query de onde os dados sero originados para o preenchimento
do item.
Nosso prximo passo ser o preenchimento da query para carga do item. O dados da query devem obedecer ao
layout especificado na Tabela 7.08 a seguir.
Tabela 7.08 Layout Linha rvore Hierrquica
Coluna
Contedo
Descrio
Estado Inicial
Pode ser preenchido com 0 (indicando que este um elemento no um n), 1 (indicando que
este n deve ser apresentado inicialmente expandido), -1(indicando que este n deve ser
apresentado inicialmente contrado).
Profundidade do N
Esta posio indica o nvel do n na hierarquia, sendo o nvel 1 considerado raiz e quanto maior
o nmero maior o nvel de subordinao.
Label
cone para o N
Determina o nome de um arquivo (.ICO) a ser usado ao lado dos smbolos + e -. O arquivo deve
estar presente em um dos diretrios nomeados pela varivel de ambiente UI_ICON. No
preencha a extenso no nome do arquivo.
Dado
Simularemos uma hierarquia com o uso da clusula Connect By em nossa tabela Depto. Se voc se lembra, no
modelo (Captulo 2) temos um auto-relacionamento nesta tabela.
Desta forma, na primeira coluna fizemos uso da pseudocoluna Level para indicar o estado inicial do n. Portanto, se
o nvel for 1, o n aparecer expandido, se o nvel for 2, o n aparecer contrado e se o nvel for 3 indicamos que se
trata de uma folha (um elemento). Da mesma forma para a indicao do cone escolhemos trs cones quaisquer
no diretrio default (includo na lista da varivel de ambiente UI_ICON) e os associamos a cada um dos nveis.
Para completarmos o teste, devemos, ainda, colocar este item na Canvas (altere a propriedade correspondente) e
executar uma rotina predefinida.
Para esta ltima etapa poderamos escolher a trigger de Pre-Form, na qual devemos incluir o texto descrito na
Listagem 7.25.
Podemos passar, agora, etapa de execuo desta pequena aplicao. A Figura 7.97 nos mostra o resultado aps
termos expandido, manualmente, o n D01.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
817
STANDARD EXTENSIONS
Este o pacote que contm as rotinas bsicas para utilizao dentro de uma aplicao Forms. Com ele podemos
alterar as propriedades de um objeto (item, janela, canvas, etc.), obter propriedades, navegar na aplicao e muitas
outras funcionalidades, algumas delas j utilizadas ao longo dos exemplos e exerccios deste captulo.
A lista completa das rotinas separadas por funcionalidade est presente no Captulo 15.
DDE
Este pacote permite a utilizao do suporte a Dynamic Data Exchange (DDE) dentro dos componentes do Forms 6i.
DDE um mecanismo pelo qual aplicaes podem se comunicar e trocar dados em um ambiente Windows.
As funes DDE habilitam as aplicaes Oracle (Client) a se comunicarem com outras aplicaes do ambiente
Windows compatveis com DDE (Server), possibilitando trs tipos de aes:
Importao de dados.
Exportao de dados.
Execuo de comandos para o servidor DDE (a outra aplicao).
No desenvolveremos exemplos com esse pacote. Para maiores informaes, utilize a ajuda do Form Builder para
exemplos e forma de utilizao.
O conjunto de procedimentos e funes referentes a ele est presente no Captulo 15.
DEBUG
O pacote Debug oferece um conjunto de rotinas, funes e condies de erro para realizarmos depurao em
aplicaes Forms.
Esse pacote foi bastante utilizado no tpico de Depurao. O conjunto de rotinas se acha presente no Captulo 15.
No desenvolveremos exemplos com esse pacote. Para maiores informaes, utilize a ajuda do Form Builder para
exemplos e forma de utilizao.
OLE2
Conjunto de rotinas PL/SQL APIs para criao, manipulao e acesso a atributos de objetos OLE2 Automation.
Os objetos OLE2 Automation encapsulam um conjunto de atributos e mtodos que podem ser manipulados ou
invocados de um OLE2 Automation Client. O pacote OLE2 permite que faamos acesso aos objetos OLE2 Automation Servers diretamente do PL/SQL.
No trabalharemos com esse pacote. Em vez disso, nos exerccios usaremos as rotinas do pacote Standard Extensions que substituem a utilizao desse pacote.
ORA_FFI
Este pacote prov uma interface de uso de funes C (terceira gerao) diretamente dentro do PL/SQL.
No ambiente Windows, as funes externas devem ser DLLs que, depois de registradas via funes ORA_FFI,
podem ser usadas em uma aplicao Forms.
Para utilizao de uma DLL em uma aplicao Forms, devemos:
Usar a funo Load_Library para obter um handle da DLL, ou seja, uma identificao fsica (nome diretrio, etc.).
ORA_NLS
Este pacote permite que obtenhamos informaes sobre o ambiente corrente.
Faremos um pequeno teste a ttulo de exemplo.
Na Listagem 7.26 apresentamos o trigger When-Button-Pressed anexado ao item Boto. Nesse gatilho utilizamos
duas rotinas do pacote Ora_Nls: a funo American_Date, que retorna um boleano indicando se o formato de data
corresponde ao padro americano, e a funo Get_Lang_Str, que pode fornecer diversas caractersticas do ambiente,
tais como o nome da linguagem, do territrio, do character set, abreviaturas de dias, de meses, etc.
O parmetro recebido por esta rotina corresponde a uma constante definida no pacote. Os nomes e significados
dessas constantes esto na Ajuda do Form Builder sob o ttulo Ora_Nls Character Constants.
ORA_PROF
Este pacote contm procedimentos, funes e condies de erro que nos permitiro verificar o tempo de execuo
de uma determinada unidade de programa.
Faremos um pequeno teste a ttulo de exemplo. Utilizaremos, novamente, o trigger When-Button-Pressed do item
Boto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
819
Na Listagem 7.27, decidimos determinar o tempo total de somar 1 a uma varivel 10.000 vezes. Para isto criamos
o timer, iniciamos a contagem (start), executamos a operao desejada, interrompemos a contagem (stop), destrumos
a rea de contagem do tempo e obtivemos o valor do tempo transcorrido (retornado em milissegundos).
Poderamos criar este controle no incio da aplicao e contabilizar diversas aes internas que julgssemos muito
demoradas. Para reinicializar o contador de tempo, devemos usar a rotina Reset_Timer desse pacote.
TEXT_IO
Este pacote permitir que venhamos a ler ou gravar informaes para um arquivo do ambiente. equivalente ao
pacote Utl_File da PL/SQL, com a diferena de que o arquivo lido ou gravado se encontra no ambiente cliente.
Faremos um teste a ttulo de exemplificao ainda usando o trigger When-Button-Pressed do item Boto.
A Listagem 7.28 nos mostra a criao de um arquivo com o nome de sada com todos os registros que estiverem no
buffer naquele momento. executada a rotina First_Record (do pacote Standard) para que seja feito o posicionamento
do cursor no primeiro registro, e a cada registro navegado feita a gravao no arquivo at que a varivel de
sistema Last_Record ( uma varivel caracter, no boleana) indicar se atingimos o ltimo registro do buffer.
Aps a gravao deste ltimo registro, fechamos o arquivo.
Observe que as rotinas do pacote voc j conhece, quando estudamos o pacote Utl_File da PL/SQL. Existem algumas
diferenas mnimas de alguns parmetros. Para maiores informaes, utilize a ajuda do Form Builder.
Para que o teste produza o resultado desejado, necessrio que o diretrio C:\TESTE seja previamente criado. O Forms Runtime cria o arquivo e
no o diretrio.
TOOL_ENV
Permite que obtenhamos informaes das variveis de ambiente do Oracle.
Faremos um teste a ttulo de exemplificao. Utilize um novo item do tipo Button e crie um trigger When-Button-Pressed.
Na Listagem 7.29 utilizamos a nica rotina do pacote, na qual solicitamos o nome de algumas variveis do ambiente.
Voc pode ver o nome dessas variveis no registrador do Windows com o RegEdit (n Hkey_Local_Machine, subn
Software, subn Oracle, subn Home3, no meu caso).
A rotina permite a obteno destas informaes dinamicamente.
TOOL_ERR
O pacote Tool_Err fornece um conjunto de informaes a respeito do erro acontecido em uma rea chamada Error
Stack. Essa rea contm cdigos e mensagens de erro organizadas em uma rea indexada de 0 a n-1 (onde n o
nmero de erros). Esse pacote permitir a manipulao dessa rea de stack.
No desenvolveremos exemplos com esse pacote. Para maiores informaes, utilize a ajuda do Form Builder para
exemplos e forma de utilizao.
TOOL_RES
Este pacote fornece um mecanismo para extrairmos informaes de um arquivo de recursos. Os arquivos de recursos
so providos pelas ferramentas (Form Builder, Report Builder, etc.) e contm informaes diversas utilizadas pelos
softwares. Podemos gerar nossos prprios arquivos de recursos com o utilitrio ResPa21 a partir de um texto com
extenso PRN. Esse utilitrio fornecido juntamente com o Oracle*Terminal.
No desenvolveremos exemplos com esse pacote. Para maiores informaes, utilize a ajuda do Form Builder para
exemplos e forma de utilizao.
PECS
Este pacote fornece ao desenvolvedor ou ao administrador do sistema meios de anlise da performance tanto do
Form Builder quanto das aplicaes geradas.
No desenvolveremos exemplos com esse pacote. Para maiores informaes, utilize a ajuda do Form Builder para
exemplos e forma de utilizao.
VBX
Este pacote contm um conjunto de rotinas relacionadas interface com controles VBX, que podem ser anexadas
a uma aplicao de 16 bits.
No desenvolveremos exemplos com esse pacote. Para maiores informaes, utilize a ajuda do Form Builder para
exemplos e forma de utilizao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
821
WEB
Este pacote, composto por uma nica rotina, tem a finalidade de definir a URL do documento a ser carregado em
aplicaes Web.
No desenvolveremos exemplos com esse pacote. Para maiores informaes, utilize a ajuda do Form Builder para
exemplos e forma de utilizao.
FORMS_OLE
Este pacote contm um conjunto de rotinas para acionamento e manipulao de um item do tipo OLE Container.
J foi comentado quando estudado o item OLE.
STANDARD
Este pacote utilizado implicitamente por ns todas as vezes que trabalhamos com PL/SQL; corresponde ao conjunto
de rotinas de PL/SQL vlidas no ambiente.
Est sendo utilizado em praticamente todos os exemplos e exerccios vistos at agora.
EXERCCIOS
7.52) Crie uma aplicao que estabelea o cadastramento de Departamentos, os quais devem ser apresentados
como uma rvore hierrquica. Deve ser possvel a incluso e alterao de departamentos utilizando esta estrutura.
Para o boto Incluir quando o usurio apertar o boto incluir j deve ter, previamente, selecionado um n-pai.
Este boto incluir um elemento filho neste n selecionado com label *** (3 asteriscos) e valor nulo.
Simultaneamente deve ser includa uma linha no vetor de controle indicando que deve ser feita uma incluso
no banco de dados.
Para o boto Alterar quando o usurio pressionar o boto alterar j dever, previamente, ter selecionado um
n. Os dados preenchidos na tela sero incorporados a este n para posterior atualizao do banco de dados.
7.53) Construa uma aplicao de nome EX53 baseada na aplicao EX48. Acrescente a seguinte funcionalidade:
Criar um pacote local com as seguintes funcionalidades:
a) Declarar um arquivo de texto.
b) Abrir este arquivo de texto para gravao.
c) Gravar uma linha no arquivo de texto.
d) Fechar o arquivo de texto.
As seguintes informaes devem ser gravadas neste arquivo-texto: ao (I, E, A), usurio, matrcula, nome +
sobrenome, salrio, data de nascimento, cdigo do departamento.
O nome do arquivo deve ser LOGddmmyyyy.txt
Se o arquivo j existir em disco, os registros devem ser adicionados; caso contrrio, o arquivo deve ser criado.
Cada linha includa, excluda ou alterada deve ser logada nesse arquivo de texto.
O arquivo deve ser aberto apenas no incio do processo transacional.
7.54) Construa uma aplicao de nome EX54 baseada na aplicao EX53. Acrescente a seguinte funcionalidade:
Criar um avaliador de tempo que inicie a marcao quando houver o incio do processo transacional e contabilize
o tempo de execuo deste processo.
Apresente o tempo decorrido em um alerta.
Figura-resposta 7.57A
Salve esta carta com o nome do funcionrio precedido do cdigo do departamento e seguido da data e hora
atuais no diretrio cartas.
METODOLOGIA
Apresentao das caractersticas gerais do mdulo e da ferramenta.
TCNICA
Modificao das caractersticas apresentadas e anlise dos resultados.
ESTUDANDO O MDULO
Analisaremos as propriedades do Mdulo. Para tal, selecione o mdulo de uma aplicao qualquer (o n que
contm o nome do programa). As informaes que estabelecermos em nvel de mdulo podem vir a funcionar
como default.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
823
PREFERNCIAS
Para obtermos as preferncias do Form Builder, devemos escolher o menu Ferramentas e, neste, a opo Preferncias.
Ser apresentado um dilogo composto de quatro pastas que estudaremos separadamente.
PASTA GERAL
A pasta Geral contm caractersticas que afetam a salva e compilao dos mdulos desenvolvidos utilizando este
Form Builder.
Na Figura 7.98 encontramos as seguintes opes:
Salvar Antes de Desenvolver (Save Before Building) Esta opo, se marcada, indica que antes de gerar um FMX,
o Form Builder dever salvar o fonte da aplicao.
Desenvolver Antes da Execuo (Build Before Running) Esta opo, se marcada, indica que quando solicitarmos
a execuo da aplicao o Form Builder dever, automaticamente, gerar o FMX. Essa opo, porm, no compila
automaticamente nem Menus e nem Bibliotecas (Libraries) associadas ao mdulo. Essa compilao deve ser
feita em separado.
Suprimir Dicas (Suppress Hints) Indica se os hints (dicas) sero mostrados ou no na linha de mensagem no
Form Builder.
Usar Editor do Sistema (Use System Editor) Esta opo determina se o Form Builder deve apresentar seu editor
default ou o editor default do sistema quando acionarmos o editor de um campo multi-line.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
825
white
green
darkgreen
gray
darkgray
cyan
darkcyan
red
darkred
blue
darkblue
yellow
darkyellow
magenta
darkmagenta
A segunda parte da paleta (regio inferior esquerda) composta de oito clulas vazias em que podemos definir
cores customizadas.
As prximas quatro colunas so compostas de variaes de cinza. Cada cor tem o formato gray<valor>, onde o
valor varia de acordo com a percentagem de cinza. Os valores vlidos esto no intervalo de 4 a 96, com incremento
de 4. Por exemplo: gray4, gray8, gray12, gray16, gray20, gray24, gray28, gray32, ...., gray96.
O restante da paleta de cores contm cores especificadas por variaes percentuais das cores vermelha, verde e azul
(RGB). Sendo que os valores percentuais para vermelho ou verde so: 0, 25, 50, 75, 88 ou 100, enquanto os valores
percentuais para a cor azul so: 0, 50, 75, 88 ou 100.
Cada cor nomeada de acordo com o formato: r<valor>g<valor>b<valor>, de acordo com seus valores RGB. Por
exemplo, uma cor composta de 100% de vermelho, 88% de azul e 0% de verde teria o nome: r100g0b88.
Para sabermos o nome de uma determinada cor, basta que a selecionemos na paleta.
Para editar uma cor, selecione uma das cores na parte vazia (branca), clique sobre o boto Editar. Ser apresentado
um dilogo com cores bsicas e matizes. Selecione uma cor bsica, varie seu matiz, saturao e luminosidade,
clique sobre o boto Adicionar Cores Personalizadas e d OK. A cor definida ocupar a posio selecionada
inicialmente na tabela. Salve esta nova paleta de cores (Menu Arquivo File, opo Exportar Export, Paleta de
Cores Color Palette), volte ao modo Read Only Shared, preencha o nome do novo arquivo na opo Paleta de
Cores, feche o Form Builder e torne a abri-lo com essa nova paleta.
Somente Leitura Compartilhado (Read Only Shared) Nesta opo, ao fazer a carga da paleta de cores
para a tabela de cores do sistema, o Form Builder verifica atravs do nome se uma determinada cor j existe
na tabela de cores do sistema para fazer o posicionamento similar. Se a cor no existir, ser adicionada
PASTA ACESSO
Esta pasta definir opes para as aes de abertura ou salva de uma aplicao.
PASTA ASSISTENTES
Esta pasta indica se desejamos ou no que o dilogo de abertura dos assistentes seja mostrado como primeiro dilogo.
A Figura 7.100 nos mostra as opes disponveis.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
827
PASTA RUNTIME
As opes desta pasta afetam a execuo de uma aplicao atravs do Form Builder. Cada uma das opes marcadas
aqui possui uma palavra-chave que pode ser passada como parmetro para o Forms Runtime e que enviada
automaticamente quando iniciamos a execuo atravs do Form Builder.
OPES DE EXECUO
Estas opes determinam as caractersticas de execuo para o Forms Runtime. Podemos definir estas opes de
duas formas:
A primeira, j vista anteriormente, atravs do dilogo Forms Runtime Options dentro do Form Builder.
A segunda, na linha de comando, a tempo de execuo do Forms Runtime.
Neste item, trataremos da segunda forma de especificao. A sintaxe para definio de cada uma das opes
(parmetros) precisa de uma palavra-chave seguida do sinal de igual e do valor, como no exemplo da Figura 7.102.
No deve haver espao entre o parmetro e o sinal de igual e nem entre o sinal de igual e o valor.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
829
Descrio
Term
Este parmetro determina o nome do arquivo de recursos para o Oracle terminal. Se no for especificado, o
Forms Runtime utilizar o padro especfico para a plataforma. Por exemplo, FMRUSW.RES para ambientes
Windows.
Debug
Executar em modo de Depurao. A interrupo do processamento pode ser feita com o uso da built-in BREAK ou
com a opo Debug do menu Help (Form Runtime).
Debug_Messages
Keyout
Determina o nome de um arquivo onde sero gravadas todas as teclas utilizadas durante a execuo da aplicao.
S aplicvel a terminais Character Mode.
Keyin
Determina o nome de um arquivo de onde sero lidas todas as aes a serem executadas durante a execuo da
sesso. Este arquivo deve conter toda a seqncia de teclas para execuo, salva, navegao, etc. Aplicvel apenas
a terminais Character Mode.
Output_File
Determina o nome de um arquivo onde todas as respostas para o vdeo sero gravadas. Aplicvel apenas a
terminais Character Mode.
Interactive
Boleano (True ou False). Indica se as respostas (telas de sada) devero ou no ser mostradas no vdeo. Pode ser
utilizada juntamente com as opes Keyin e Output_File. Aplicvel apenas a terminais Character Mode.
Array
Buffer_Records
Logon_Screen
Este parmetro, quando True, fora a presena da tela de Login. Neste caso, o Forms Runtime ignora o userid e
password informados na linha de comando.
Block_Menu
OptimizeSQL
OptimizeTP
Quiet
Modo Silencioso
Statistics
Estatstica
UseSdi
Indica se o Forms Runtime deve utilizar o padro SDI. O default NO, indicando que o padro a ser utilizado o
MDI, onde a janela do Forms Runtime visvel. No padro SDI ser mostrada apenas a janela da aplicao.
Query_Only
Help
Window_State
Determina o estado da janela MDI no incio da aplicao. Podemos informar: Maximize, Minimize ou Normal
(default).
Pecs
Executa o Forms Runtime com Performance Event Collection Services (Pecs) habilitada para coleta de informaes
para anlise de performance.
Options_Screen
Session
Especifica se ser possvel a execuo de uma operao de Open_Form com uma sesso em separado. O valor
default para esta opo NO.
Record=Collect
Indica que deve ser gerado um arquivo para acompanhamento da execuo do programa para diagnstico de
problema. Veja, no prximo tpico, a criao deste arquivo.
Log
Neste parmetro indicamos o nome do arquivo a ser gerado para o parmetro Record=Collect.
Listagem 7.30 Formato do texto para Triggers com Forms Runtime Diagnostics
<nome do trigger> Trigger Fired:
Form: <nome do Form>
Block: <nome do bloco>
Item: <nome do item>
Se o trigger estiver includo em nvel de bloco a linha referente ao item no ser apresentada. Em nvel de Form, as
linhas de bloco e item no sero apresentadas.
Alm destas informaes apresentado um conjunto de informaes sob o ttulo de State Delta (como no exemplo
da Listagem 7.31), onde apresentado o nome da aplicao, do bloco, do item corrente (se houver), o estado do
Form, do bloco, do registro, o nome de cada item e seu valor. Este State Delta gravado para o arquivo aps o
trigger ser acionado. Corresponde a um dump das informaes que tenham sido alteradas desde a ocorrncia do
estado delta anterior. O primeiro estado delta faz um dump de todo o Forms para o arquivo.
STATUS
QUERY
BLOCK FUNC
STATUS
QUERY
RECSTATUS QUERY
FIELD ROWID
VALUE
000000D2.0000.0002
FIELD NM_FUNC
VALUE
CRISTINA
Para Built-ins
Listagem 7.32 Formato do texto para Built-Ins com Forms Runtime Diagnostics
Executing <nome da Built-in> Built-in:
In Argument 0 - Type: <tipo do argumento> Value: <valor do argumento>
In Argument 1 - Type: <tipo do argumento> Value: <valor do argumento>
...
Out Argument 0 - Type: <tipo do argumento> Value: <valor do argumento>
...
Quando uma built-in executada, so mostrados seus argumentos de entrada e sada incluindo os valores informados
e recebidos, de acordo com o padro mostrado na Listagem 7.32.
Para Mensagens
Listagem 7.33 Formato do texto para Mensagens com Forms Runtime Diagnostics
Error Message: <mensagem>
Qualquer mensagem produzida pela opo aparece no arquivo de acordo com o padro mostrado na Listagem 7.33.
Para Arquivos
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
831
Listagem 7.35 Formato do texto para Exceptions com Forms Runtime Diagnostics
Unhandled Exception: <nome da exception>
Ou
Unhandled Exception: ORA-<nmero da exception>
CONSTRUO DE UM EXEMPLO
Para verificarmos o contedo de um arquivo produzido, crie uma nova aplicao de nome Teste_Frd. Com a ajuda
do Assistente de Bloco de Dados, selecione as colunas Nm_Func, Cd_Depto, Nr_Ramal, Dt_Adm e In_Sexo. Escolha
formato tabular com 3 registros na tela.
Para ativarmos esta opo devemos incluir na linha de comando os parmetros Record=Collect e Log=<nome de
um arquivo>. Sendo assim, compilamos nossa aplicao para que o FMX fosse gerado (menu Arquivo, submenu
Administrao, opo Compilar Arquivo ou Ctrl + T). Em seguida criamos um cone no Windows e preenchemos
o campo Alvo (do cone) com o contedo da Listagem 7.36 a seguir.
Executamos, ento, esta aplicao e efetuamos as seguintes operaes: Consulta a todos os dados, navegao entre
o primeiro item e o segundo e alterao do nome de um dos funcionrios. Salva e sada da aplicao.
RESULTADO GERADO
Na Listagem 7.37 apresentamos o trecho final do arquivo gerado.
No registro 6 encontramos a modificao do item nm_func. No primeiro registro 7 encontramos o State Delta
indicativo do estado em que o registro ficou aps a modificao. No segundo registro 7 encontramos a execuo da
ao Salvar presente no submenu Ao do menu padro (Default). Em seguida encontramos a mensagem fornecida
pelo programa e o State Delta posterior gravao. Finalmente no registro 8 encontramos a ltima ao executada
(Sair do submenu Ao do menu Default).
EXERCCIOS
7.58) Criar uma aplicao de nome EX58 baseada na aplicao EX56. Acrescente a seguinte funcionalidade:
Retirar a janela de mensagens.
Adiar a verificao de obrigatoriedade de preenchimento para quando a validao do registro ocorrer.
Garantir a leitura de diversas linhas a cada acesso ao banco de dados.
Estabelecer a leitura simultnea de seis linhas de cada vez para as tabelas Func e Proj e de todas as linhas para Depto.
7.59) Criar uma aplicao de nome EX59 baseada na aplicao EX58. Acrescente a seguinte funcionalidade:
Gerar estatsticas e verificar o resultado (testar e em seguida desmarcar).
Testar a aplicao somente para consulta (testar e em seguida desmarcar).
Garantir que seja possvel ao Form Builder abrir cursores independentes para cada uma das operaes.
Marcar as seguintes opes para desenvolvimento:
a) Salvar antes de gerar.
b) Gerar antes de executar.
c) Mdulos armazenados no sistema operacional.
7.60) Criar uma aplicao de nome EX60 baseada na aplicao EX59. Acrescente a seguinte funcionalidade:
Determinar um tempo mximo de consulta.
Determinar uma quantidade mxima de linhas para consulta.
Associar uma barra de ferramentas horizontal janela da aplicao.
Associar uma barra de ferramentas vertical janela da aplicao.
Quando ocorrer um erro de banco de dados, soar um alarme sonoro.
7.61) Criar uma aplicao de nome EX61 baseada na aplicao EX60. Acrescente a seguinte funcionalidade:
Criar duas novas cores em sua paleta de cores.
Exporte a paleta de cores com o nome de pteste.pal.
Execute a aplicao em modo silencioso e cause um erro de banco de dados (incluir um funcionrio j existente,
por exemplo).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
833
METODOLOGIA
Apresentao das diversas formas para criao de padres e aproveitamento de cdigo.
TCNICA
Desenvolvimento de fontes-padro que contemplem as caractersticas apresentadas.
DESCRIO
O Form Builder possui diversas formas de aproveitarmos partes da aplicao j definidas e estabelecermos um
padro, tanto aproveitando cdigo quanto aproveitando layouts de canvas, definies, objetos diversos.
Este tpico abordar as diversas formas de reutilizao, seja com objetivo de padro ou de simples aproveitamento
de cdigo.
TEMPLATE
Voc j observou que quando inicia uma aplicao a tela inicial do Wizard pergunta se queremos criar uma aplicao
baseada em um gabarito?
Isto significa que criaremos uma aplicao copiando todas as informaes de outra aplicao, exceto seu nome.
Esta forma de trabalho similar a abrir a outra aplicao e usar a opo Salvar Como (Save As) do menu Arquivo
(File), com a diferena de que oferece mais segurana. No corremos o risco de esquecer e salvar por cima do original.
Para estabelecer um padro, voc poderia criar um esqueleto com objetos-padro de uso da sua instalao, por
exemplo a barra de ferramentas, o bloco de controle com os botes da barra e suas respectivas triggers, atributos
visuais mais comuns, alertas, etc.
CLASSE DE PROPRIEDADES
A Classe de Propriedades uma outra forma de estabelecermos uma padronizao em nvel de objeto.
Suponhamos que desejemos que todos os botes sejam apresentados no formato icnico, com um tamanho padro
de 18 por 18 e que no sejam navegveis nem por teclado e nem por mouse.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
835
Quando atribuirmos esta classe a um boto, este herdar no s as propriedades como tambm o trigger.
O BOTO HERDAR
Suponhamos que voc, em determinado boto, no queira que ele seja icnico, mas as demais propriedades herdadas
voc deseja manter. Retorne aplicao Valida.
Selecione a tela de propriedades do boto desejado. Altere o valor da propriedade Icnico (Iconic). A indicao de
herana ficou diferente, indicando que havia uma informao herdada que foi alterada.
Suponhamos que voc mudou de idia de novo. Basta selecionar a propriedade Icnico e pressionar o boto
Herdar. A propriedade recebe novamente o valor bsico da Classe.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
837
BIBLIOTECA DE OBJETOS
Outra forma de padronizao a biblioteca de objetos.
Uma biblioteca de objetos um outro tipo de arquivo gerado pelo Form Builder; no parte integrante da aplicao.
O objetivo dessa biblioteca armazenar objetos que possam ser aproveitados em outras aplicaes.
Como teste, aps as modificaes no item anterior, arraste-o de volta para a biblioteca.
SMARTCLASS
As bibliotecas de objetos podem ser usadas para a especificao de classes que sejam freqentemente utilizadas.
Selecione um dos itens na biblioteca, utilize a opo SmartClass do menu Objeto (Object).
O elemento receber um sinal esquerda, como apresentado na Figura 7.108.
Selecione, agora, um item na sua aplicao. V ao Navegador de Objetos e use o boto direito do mouse sobre este
item que voc selecionou. Ser apresentada a opo Classes Inteligentes (SmartClasses) e, na lista apresentada
aparecer a SmartClass NR_CARGO. Observe que o mesmo no acontece para IN_SEXO, pois esta opo no
acontece com um objeto da biblioteca que no esteja marcado como SmartClass.
A utilizao de SmartClass para aqueles objetos que venhamos a usar com mais freqncia facilita a modificao
(alterao) de objetos presentes em nossa aplicao e que, agora, desejamos modificar.
Para que a indicao aparea, necessrio que a biblioteca esteja aberta simultaneamente com a aplicao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
839
REFERNCIA
Com o mouse, fazendo as operaes de clicar e arrastar, arraste um trigger da aplicao Relao para a aplicao
Valida (faa subclasse). Verifique a indicao na propriedade Diviso em Subclasses (Subclass Information).
Repita a operao para um item (do bloco Func de uma aplicao para o bloco Depto da outra). Olhe novamente
a propriedade Diviso em Subclasses (Subclass Information).
Como ltimo teste, arraste um trigger de bloco de um lado para outro (ainda subclasse) e verifique a propriedade
correspondente.
A propriedade Diviso em Subclasses (Subclass Information), quando o objeto faz referncia a outro, indica qual o
objeto origem e de que mdulo.
CPIA
Abra uma aplicao vazia. Arraste de uma das aplicaes anteriores para a atual um bloco inteiro, mas faa uma
cpia. Observe que somente os objetos subordinados foram copiados, isto , os triggers e itens. A Canvas onde os
itens deste bloco so apresentados no foi copiada. Abra a tela de propriedades de um dos itens do bloco e verifique
o valor da propriedade Canvas no grupo Fsico (continua preenchida).
Aps a cpia devemos fazer as adaptaes necessrias para que os objetos copiados estejam compatveis com o
novo ambiente. Eles no tm nenhuma relao com os objetos originais. Verifique a propriedade Diviso em
Subclasses (Subclass Information) e comprove.
CONCLUSES
O Form Builder ps a nossa disposio diversas formas de aproveitarmos as especificaes de objetos pertencentes
a outras aplicaes ou presentes em uma biblioteca de objetos.
Podemos estabelecer todos os tipos de padres desejados, desde cpia de uma aplicao-esqueleto (template),
grupos de objetos ou um nico objeto.
Estude com cuidado estas opes e utilize aquela que for mais conveniente para sua instalao.
EXERCCIOS
7.62) Criar uma aplicao de nome ExTemp, baseada na aplicao EX61, contendo apenas as seguintes informaes:
Todos os atributos visuais.
Todos os editores.
Todos os alertas.
Retirar os parmetros.
O bloco de controle somente com os botes, exceto Ajuda, Lob, Depto e Navega.
As triggers On-Message, On_Error, Pre-Form e Key-*.
As canvas de botes com os respectivos botes.
A janela Janela1.
Manter a unidade de programa Mens.
Retirar do Pre-Form a montagem do Record Group.
Criar uma classe de propriedades Texto com as seguintes caractersticas:
a) Salto automtico
b) Todas as letras maisculas
c) Prompt justificado esquerda
d) Deslocamento da conexo do prompt 5.
Compile esta aplicao corrigindo os erros de sintaxe encontrados (em funo de objetos ausentes).
7.63) Criar uma aplicao de nome EX63 baseada no template Extemp.
Crie um bloco de dados para a tabela Depto.
Utilize os atributos visuais.
Utilize a classe Texto para todos os itens do tipo Text Item.
Associe o editor Edtexto ao item nm_depto.
7.64) Crie uma biblioteca de objetos de nome Bib64 contendo os elementos a seguir. Determine uma pasta para
cada tipo de objeto.
Todos os atributos visuais.
Todos os editores.
Todos os alertas.
Todos os parmetros.
O bloco de controle somente com os botes, exceto Ajuda, Lob, Depto e Navega.
As triggers On-Message, On_Error, Pre-Form e Key-*.
As canvas de botes com os respectivos botes.
A janela Janela1.
Uma classe de propriedades.
Transforme os alertas em smart classes.
Transforme as rotinas Mens e Idade em smart classes.
7.65) Crie uma aplicao de nome Ex65 contendo um bloco de funcionrio e todos os campos. Obtenha os seguintes
objetos da biblioteca de objetos Bib64:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
841
METODOLOGIA
Apresentao conceitual de bibliotecas e mtodos para criao e uso.
TCNICA
Desenvolvimento de exemplos e exerccios que contemplem o conceito apresentado.
CONCEITUAO
At este ponto trabalhamos mais freqentemente com um mdulo do tipo FMB, ou seja, um fonte Form criado
pelo Form Builder. Sabemos, no entanto, que esta ferramenta capaz de criar outros tipos de arquivo, como por
exemplo um mdulo Object Library ou um mdulo Library (extenso PLL).
Uma Biblioteca (Library) uma coleo de programas PL/SQL incluindo procedimentos, funes e pacotes.
Estas rotinas grupadas em um arquivo podem ser compartilhadas, no ambiente cliente, por diversas outras aplicaes,
sejam elas Forms, Menus, outras Bibliotecas (Libraries) ou at mesmo Reports.
A biblioteca criada deve ser associada a cada mdulo no qual desejamos utiliz-la (Attach).
Uma vez anexada, podemos fazer referncia s rotinas presentes na biblioteca em qualquer gatilho (trigger), unidade
de programa (program unit) ou itens de menu (inclusive de Popup menu).
Para acompanharmos sua utilizao, criaremos uma outra aplicao (Form) cujo nome ser Form_Lib. Essa aplicao
est baseada na tabela Func com as colunas cd_mat, nm_func, cd_depto, nr_cargo, nr_git, in_sexo, dt_nasc, vl_sal,
todas do tipo texto. O layout foi montado com 1 (um) registro e formato Form e uma barra de rolagem. Adicionamos
um boto de nome Boto, onde desenvolveremos as lgicas (quando houver) e tambm um alerta de nome Alerta
com um nico boto OK para apresentao das mensagens de teste.
Aps a criao desta aplicao, salve-a e feche-a. S a utilizaremos aps a criao e compilao da biblioteca.
A Figura 7.109 mostra o dilogo que ser apresentado quando efetuarmos esta ao. Pressionaremos o boto
Pesquisar (Select) para encontrar a biblioteca em disco.
Aps identificarmos a biblioteca, devemos pressionar o boto Anexar.
Neste momento, ser apresentado um dilogo indicando que podemos armazenar internamente na aplicao
apenas o nome da biblioteca (no nosso caso, LibPL.PLL) ou podemos armazenar todo o caminho (no nosso caso,
C:\Forms60\LibPL.PLL).
De um modo geral prefervel que faamos a remoo do caminho (Path), ou seja, que a informao armazenada
contenha apenas o nome da biblioteca, porque essa aplicao certamente ser executada em um ambiente de
produo com caractersticas de diretrio diferentes daquelas encontradas no ambiente de teste.
Quando retiramos o diretrio do nome da biblioteca, a tempo de execuo o Forms Runtime procurar essa biblioteca
nos diretrios que estiverem preenchidos na varivel de ambiente Forms60_Path.
A Figura 7.110 nos mostra o n Bibliotecas Anexadas (Attached Libraries) com a biblioteca LibPl includa.
Utilizaremos, a seguir, a rotina Nome na aplicao Form_Lib.
NUMBER;
ALERT
:= FIND_ALERT ('ALERTA');
VARCHAR2 (200);
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
843
Finalmente o trigger When-Button-Pressed apresentado na Listagem 7.40 mostra a utilizao de uma rotina da
biblioteca na aplicao Form_Lib (escolha um boto e teste este exemplo).
EXERCCIOS
7.66) Criar uma biblioteca de PL/SQL de nome BPL66 que contenha as seguintes rotinas:
Rotina (Dv_Matr) para calcular o dv da matrcula do funcionrio (noves fora).
Rotina (Intervalo) para determinar o intervalo de anos entre duas datas recebidas como parmetro.
Rotina (Abono) para calcular o abono salarial (trimestral) de acordo com o nmero de anos de casa. A rotina
deve receber como parmetros o tempo de servio e o salrio.
Menos de um ano de casa No recebe abono.
De um a menos de trs anos de casa Recebe 3% de abono.
De trs a menos de seis anos de casa Recebe 10% de abono.
Mais de seis anos de casa Recebe 15% de abono.
7.67) Criar uma aplicao de nome EX67 baseada na aplicao EX60. Anexe a biblioteca Bpl66.
Acionar a rotina Dv_Matr quando for feita a incluso do funcionrio (criar um item do tipo exibio).
Acionar a rotina Abono quando a linha for obtida do banco de dados (criar um item do tipo exibio).
Para acionar a rotina Abono, obtenha o tempo de servio atravs da rotina Intervalo.
METODOLOGIA
Apresentao conceitual de menus e mtodos para sua criao e uso.
TCNICA
Desenvolvimento de exemplos e exerccios que contemplem o conceito apresentado.
DESCRIO
Neste tpico falaremos sobre dois tipos de Menus. Sobre o mdulo menu, que um tipo de arquivo totalmente
parte da sua aplicao, e sobre o Menu Pop-up, que faz parte integrante do mdulo Forms. Ao longo do tpico
estudaremos o mdulo Menu, porm, sinttica e funcionalmente, os dois so iguais. Sendo assim, nos exerccios
faremos referncia a um e a outro.
Para acompanharmos o estudo deste mdulo, seguiremos os seguintes passos:
Feche todos os mdulos abertos no Form Builder.
Selecione o n Menus e use a ferramenta Criar (Create).
Dentro deste novo aplicativo, selecione o n Menus e, novamente, use a ferramenta Create.
Expanda este n.
D a esta aplicao o nome de Menu_Principal e salve-a.
O resultado destas operaes apresentado na Figura 7.111.
O Navegador apresentado contm os seguintes ns principais: Form (vazio), Menus (Menu_Principal), Bibliotecas
PL/SQL (vazio), Bibliotecas de Objetos (vazio).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
845
Mais uma vez enfatizamos que Menu_Principal um mdulo totalmente independente das aplicaes Form vistas
at o momento. Procure no Windows Explorer a extenso do arquivo que voc acabou de salvar. O fonte de um
mdulo Menu MMB e o executvel MMX.
Visto isto, concentremos nossa ateno nos ns internos do Menu. So eles:
Bibliotecas Anexadas Se desejarmos associar alguma biblioteca de PL/SQL ao menu. Mdulo Library.
Menus N onde desenvolveremos, na verdade, este mdulo.
Grupos de Objetos Se desejarmos grupar objetos deste mdulo para enviar para outros mdulos ou tivermos
copiado dados de outro mdulo para o atual (semelhante ao que estudamos para uma aplicao Forms).
Parmetros Quando desejamos que um item deste mdulo receba parmetro (ser visto).
Unidades de Programa Local onde desenvolveremos cdigos de PL/SQL para estruturao do cdigo.
Classes de Propriedade Para estabelecermos padres dentro deste mdulo.
Atributos Visuais Para estabelecermos padres visuais dentro deste mdulo.
Desta lista identificada, a novidade o n Menus. Os demais j foram vistos no estudo do mdulo Form e so
exatamente iguais queles presentes em uma aplicao deste tipo.
Trabalharemos, ento, basicamente em relao ao n Menu.
Voc pode alterar o nome de cada elemento dentro do prprio Navegador, bastando clicar o mouse sobre o nome
do elemento que voc deseja alterar. Nesta situao, o Form Builder ativa o editor de texto (no abre janela).
A seguir, analisaremos as propriedades dos itens de menu; portanto, escolha um dos itens, boto direito do mouse
e Paleta de Propriedades.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
847
Antes de compilarmos a aplicao, d uma olhada no navegador. Verifique se existe um menu para cada lingeta
do diagrama. Veja os nomes dados pelo Form Builder.
Para passarmos compilao, escolha Ctrl+T ou Menu Arquivo, Administrao, Compilar Arquivo.
Se houver algum erro, retorne s definies feitas anteriormente e refaa o que tiver ficado incorreto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
849
Como teste adicional, tente incluir o item Sair (Magic) em outro menu (por exemplo, Atualizar). Verifique o que acontece.
Antes de passar aos exerccios, tente criar um item de menu do tipo Opo. Como tarefa adicional, voc dever indicar
qual o menu ser considerado como Grupo de Opes (use o menu Editar). Inclua estes itens sob o menu Editar.
CALL_FORM X NEW_FORM
Voc observou o que acontece quando acionamos uma aplicao Form com a rotina Call_Form e outra com a
rotina New_Form? No? Ento execute a aplicao Form_Lib novamente e faa os seguintes testes:
No menu Consultar, escolha a opo Departamento, e em seguida acione a opo Atividade.
Acione a opo Sair do Menu Aplicao.
Voc est observando que a aplicao anterior ainda est ativa?
A rotina Call_Form ativa uma outra aplicao sem fechar a anterior.
Voc observou que o Menu se manteve o mesmo para todas as aplicaes?
Isto ocorre porque as aplicaes subordinadas herdam o menu da aplicao anterior.
Faamos, agora, o teste do New_Form.
No menu Consultar escolha a opo Funcionrio.
Acione Sair (boto da barra de ferramentas).
O que aconteceu?
Quando acionamos a opo Funcionrio, a aplicao anterior foi fechada e a aplicao Funcionrio foi acionada.
No existe ligao entre as duas, e assim o menu utilizado na segunda foi o menu-padro, uma vez que ela no
possua associao ao menu Menu_Principal.
Conclumos, ento, que Call_Form aciona outra aplicao sem fechar a atual, tendo como conseqncia a herana
do menu. J a rotina New_Form aciona outra aplicao, fechando, primeiramente, a aplicao atual.
Quando estivermos montando um sistema, podemos criar uma aplicao de entrada (e sada) no sistema que
contenha o menu principal. Nesse menu, acionamos as demais aplicaes com Call_Form de tal forma que sempre
venhamos a retornar a esta aplicao principal. Quando viermos a chamar uma aplicao por meio de outra,
podemos forar que a aplicao anterior seja fechada usando New_Form.
Esta forma de trabalho bastante comum; somente devemos cuidar para que o usurio no abra todas as aplicaes
do sistema simultaneamente de forma que no haja um acmulo de dados em memria. Este controle pode ser
feito por programao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
851
RESTRIO
No devemos usar itens de menu do tipo Check, Radio ou Separator no menu principal ou em um menu que
venha a ser apresentado no nvel mais alto.
PROPRIEDADES DE UM MENU
A nica propriedade do grupo Funcional apresentada seguir:
Menu Tirar (Tear-off Menu) um submenu que os operadores podem retirar da barra de menu e reposicionar
em qualquer lugar da tela. Pode-se habilitar a funcionalidade tear-off para qualquer submenu, porm somente
quando o gerenciador de janelas suportar esta caracterstica.
PARMETROS PREDEFINIDOS
Existem seis parmetros de menu j predefinidos e com valores atribudos pelo Forms Runtime. So eles:
UN Username corrente.
PW Password corrente.
AD Diretrio onde o MMX est armazenado, obtido das propriedades Menu FileName e Menu Directory.
SO Item de menu corrente.
TT Tipo de terminal utilizado para conexo.
LN Linguagem corrente, obtido da varivel de ambiente NLS_LANG.
PARMETROS DO USURIO
No n Parmetros (Parameters) podemos criar nossos prprios parmetros.
Podemos atribuir valor a eles ou solicitar que os operadores forneam os dados necessrios.
Quando um usurio seleciona um item de menu que faz meno a um parmetro, o Forms Runtime mostra o
dilogo Enter Parameter Values para que o usurio fornea o valor do parmetro desejado. Em seguida, o Forms
Runtime executa o comando de menu solicitado.
A seguir, veremos as propriedades mais relevantes deste tipo de parmetro. No grupo Funcional, encontramos:
Etiqueta (Label) Indica um texto a ser apresentado para o parmetro quando este for solicitado.
Restrio a Maisculas/Minsculas (Case Restriction) Converte a informao digitada pelo usurio se a propriedade
receber o valor Superior (Upper) ou Inferior (Lower). O valor Misto (None) no afeta a informao digitada.
Ocultar Dados (Conceal Data) Esta propriedade determina se o valor informado pelo usurio aparecer ou no na tela.
Menus Associados (Parameter Menus) Aplicvel somente a menus apresentados no formato Tela Inteira (Full
Screen). Indica os nomes dos menus com os quais o parmetro deve ser associado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
853
EXERCCIOS
7.68) Criar um Menu de nome MN68.
Cadastros
Relatrios
Ajuda
Edio
EX65
REP10
Mostrar Ajuda
Copiar
EX64
REP11
Retirar Ajuda
Recortar
EX63
REP12
Colar
EX61
REP13
EX30
EX60
REP14
EX31
Window
RELATRIOS (REPORTS)
Este tpico ser visto aps termos estudado o Reports Builder. Retornaremos ao Form Builder para construir a
chamada de um relatrio e, neste momento, veremos do que consiste este n.
METODOLOGIA
Reviso dos tipos presentes no banco de dados e anlise da utilizao destes tipos em uma aplicao cliente.
TCNICA
Desenvolvimento de exemplos e exerccios que testem os tipos para verificarmos as possibilidades e limitaes existentes.
TLOB
Utilizaremos, para efeito de teste, a mesma tabela Tlob j criada por ns no banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
855
Retorne ao navegador e inclua um boto de nome Botao e etiqueta Copia. Coloque-o na canvas criada no passo
anterior e inclua uma trigger When-Button-Pressed com o texto da Listagem 7.41.
Como curiosidade podemos inspecionar como o Form Builder monta o comando Insert para incluir uma linha contendo
colunas Lobs. Para que seja possvel esta visualizao, devemos introduzir um erro na operao de incluso; para tal,
altere o tipo de dado da coluna C_Number para Char. Em seguida execute a aplicao preenchendo este campo com
uma letra (isto causar erro no comando Insert gerado pelo Form) e poderemos verificar como ocorre a incluso.
RESTRIES
Como restrio ao uso de Lobs (nesta verso) temos que os lobs do tipo Bfiles so read-only uma vez que so
arquivos armazenados fora do banco de dados (no ambiente servidor). O servidor armazena apenas o endereamento
do arquivo; desta forma, os Bfiles no podem participar de transaes do banco de dados e, portanto, podem ser
utilizados apenas para leitura em aplicaes Forms.
Como restrio adicional os Clobs no podem exceder 65534 bytes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
857
Na Figura 7.118, apresentamos o n cd_gerente j expandido. Observe que fizemos a escolha das colunas cd_depto (da
tabela Tb_Depto), nm_depto (da tabela Tb_Depto) e cd_mat (da tabela tb_Func apontada pelo atributo REF cd_gerente).
Desta forma, com muita facilidade, podemos apresentar na tela os dados do Departamento e dados do gerente do
departamento correspondente, sem que tenhamos de manter esta informao com triggers (post-query, por exemplo).
Verifique que esta expanso de atributos no pra no primeiro nvel. O objeto apontado pelo REF tambm possui
um REF (cd_depto) que aponta para outro objeto (Tb_Depto); voc tambm poder expandi-lo, porm a obteno
de colunas para uso na aplicao Forms pra no segundo nvel. Observe, tambm, que o atributo Nr_Tel (em
Tb_Func) no est disponibilizado para expanso, pois se trata de uma coleo (ainda no disponvel para uso
nesta verso).
Sigamos, ento, com nosso exemplo, escolhendo o nome do gerente (nm_func), cd_depto, nm_depto e matrcula
gerente (cd_mat).
O prximo dilogo surge em funo de termos escolhido um item REF (cd_gerente). Nele indicamos se desejamos
que seja criada uma Lov para acesso aos dados referenciados que venham a permitir a atualizao da referncia
(endereo). Crie a Lov, marcando o check box esquerda (cd_gerente). Em seguida selecione na lista da direita a
tabela Tb_Func (o REF cd_gerente faz referncia a um objeto armazenado na Object Table Tb_Func). Conclua,
agora, a construo do bloco e layout.
Antes da execuo vamos verificar os itens gerados no bloco TB_Depto. Observe que foi criado, alm dos quatro campos
selecionados (escalares), o item cd_gerente que do tipo Ref, necessrio para a atualizao do gerente do Departamento.
Na Figura 7.119 encontramos as propriedades do Record Group associado Lov. Observe que o comando Select
obtm a referncia da linha para que, quando o usurio escolher um novo gerente, sua referncia seja atualizada
no item cd_gerente do bloco. Abra a Lov e verifique o campo de retorno do item OID do Record Group.
Faamos a execuo desta aplicao para observarmos seu desenvolvimento.
Na execuo observamos que tanto o item cd_mat quanto o item nm_func esto associados Lov. Apesar de estes
itens serem alterveis, a troca de gerente s ocorre quando usamos a Lov e trocamos a Ref.
No exerccio referente a este tpico faremos mais testes com o uso do Ref.
PERFORMANCE
A utilizao de um banco de dados a partir do Oracle8 juntamente com o pacote de desenvolvimento Oracle
Developer 6i traz uma srie de vantagens relativas ao uso das caractersticas do banco de dados, tais como:
uso de tabelas com at 1000 colunas.
acesso a tabelas e ndices particionados.
uso de memria cache no ambiente cliente.
Alm destas caractersticas do banco de dados, outras relativas ao ambiente cliente foram implementadas no
Oracle Developer sem a necessidade da interveno direta do desenvolvedor:
Prefetch o Forms utiliza esta caracterstica do banco de dados (juntamente com o mecanismo de Array Size)
para aumentar a performance de acesso sem que o desenvolvedor tenha de realizar qualquer ao especfica.
Returning o Forms utiliza esta caracterstica do banco de dados quando realiza Inserts e Updates a fim de
eliminar a necessidade de efetuar uma segunda consulta aps a atualizao (em funo de modificaes realizadas
por triggers), da mesma forma aumentando a velocidade do processamento. Esta caracterstica pode ser controlada
pelo usurio atravs da propriedade Valor de Retorno de DML (DML Returning Value).
Instead Of Triggers A existncia deste tipo de trigger prov a possibilidade de, no ambiente cliente, criarmos
uma aplicao de atualize, normalmente, uma view, como se fosse uma tabela. Esta view tanto pode ser baseada
em uma nica tabela, em joins, subselects, objetos, etc. A trigger faz a separao adequada das informaes e as
atualiza quando conveniente. Isto torna a aplicao Forms bastante simplificada.
SUPORTE AO PL/SQL
A compatibilidade com a verso 8 do PL/SQL comeou na verso 5 do Form Builder. Esta compatibilidade ainda
no completa no ambiente cliente; por exemplo, as unidades de programa no ambiente cliente no suportam a
funcionalidade relativa a objetos, isto , no podemos criar um item com tipo objeto. Uma rotina com esta
caracterstica deveria ser criada no banco de dados para uso no ambiente cliente.
As principais caractersticas ainda no disponibilizadas so:
Colees (Nested Tables e Varrays).
Stored Procedures que retornam objetos.
Tipos escalares Nchar e Nvarchar2.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
859
EXERCCIOS
7.70) Faa uma aplicao, de nome EX70, que estabelea o cadastramento de funcionrios (use a tabela TB_Func).
Na tela de cadastramento deve ser apresentado simultaneamente o nome do gerente e o nome do departamento
do funcionrio. Use uma Lov para que estas informaes sejam selecionadas. Gere, simultaneamente, um arquivo
que demonstre todas as aes realizadas pelos usurios e que seja auxiliar no processo de depurao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
861
O prximo teste a navegao com a tecla Seta para Baixo e o retorno com a tecla Seta para Cima, onde ocorre a
navegao unitria num sentido ou no outro.
A seguir posicionamos o cursor no registro de matrcula 150 e pressionamos o boto Inserir Registro (Add Record)
da barra de ferramentas para a incluso de dois novos registros, seguida da salva.
Nosso prximo passo uma tentativa de remoo do registro de matrcula 100. Ocorre, porm, um erro indicando que
existem registros subordinados (filho) ao registro de matrcula 100 (para visualizao da mensagem de erro, escolha a
opo Ajuda da barra de menu, opo Erro de Exibio). Isto porque, como sabemos, em nosso modelo de dados a
tabela de Funcionrios possui um relacionamento de Gerncia com a tabela de Departamentos. Sendo assim, o funcionrio
de matrcula 100 gerente de um departamento e, portanto, em funo deste relacionamento no pode ser removido.
Para que pudssemos cancelar a tentativa de excluso, deveramos selecionar o registro com erro e remov-lo da lista de
pendncias. Isto no possvel, porque o registro no aparece na lista de registros do bloco. Porm, se tentarmos sair da
aplicao Entrar, Executar Consulta ou Limpar o Bloco, o Forms Runtime apresentar um dilogo indagando se desejamos
efetivar as modificaes. Quando pressionarmos o boto No (No), estaremos cancelando a tentativa de excluso.
Encerremos a execuo da aplicao. Em seguida, efetuaremos uma salva e o fechamento do fonte.
7.03) Abra a aplicao do exerccio anterior e salve-a com o nome de EX03.
Acrescente um bloco para a tabela Depto com as colunas cd_depto, cd_gerente e nm_depto na mesma canvas da
tabela Func, mas em outra Tab.
Desmarcar a opo de juno automtica dos blocos de dados.
Defina os prompts adequados para cada coluna. O formato do layout deve ser Form com a apresentao de
quatro registros.
O ttulo do quadro deve ser Departamento. Apresente uma barra de rolagem.
A tempo de execuo:
Qual a primeira pasta apresentada? Por qu?
Navegue para a pasta de departamentos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
863
Executemos a aplicao. Voc observou que a primeira pasta (Tab) apresentada foi a de funcionrios? Isto ocorreu
porque no Navegador o bloco Func est na frente do bloco Depto.
Clique na pasta de Departamento (no meu caso Page5). Pressione o boto Executar Consulta. O que aconteceu? As
linhas consultadas foram as de funcionrio e no de departamento. A pasta de funcionrio foi apresentada
novamente. Isto ocorreu porque o foco (de novo!) est posicionado sobre o item cd_mat (primeiro do bloco Func).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
865
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
867
7.06) Crie uma aplicao de nome EX06 baseada nas tabelas Func e Depto, com as seguintes caractersticas:
Para a tabela Func as colunas cd_mat, cd_depto, nm_func, vl_sal, nr_cargo e in_sexo devem ser selecionadas.
Para a tabela Depto as colunas cd_depto, nm_depto e cd_gerente devem ser selecionadas.
No estabelecer relacionamento.
Tanto Depto quanto Func devem ser apresentadas em formato Form com 1 (um) registro cada um.
Ambas devem ser apresentadas na mesma canvas. Definir barra de rolagem para ambos os blocos.
Os dados de Funcionrio devem estar ordenados por cargo e nome do funcionrio.
Os dados de Departamento devem estar ordenados por nome do departamento.
Na ltima coluna de Funcionrio, deve ser feita a navegao para Departamento.
Na ltima coluna de Departamento, no entanto, deve ser feita a navegao para o prximo registro de Departamento.
O bloco Departamento somente poder realizar consultas.
J o bloco Funcionrio poder realizar consultas, excluses e alteraes, mas no poder efetuar incluses.
Deve ser permitida ao usurio navegao com o uso de Block Menu.
Aps a construo bsica dos blocos realizada com o Assistente de Bloco de Dados (Data Block Wizard), deveremos
alterar algumas propriedades para garantir as demais especificaes.
Para garantir a ordenao dos dados de Func, devemos preencher a propriedade Order By presente no grupo Database
com o texto: Order By nr_cargo, nm_func. O mesmo deve ser feito para nome do departamento no bloco Depto, ou
seja, preenchimento da propriedade com o texto: Order By nm_depto (a expresso Order By no necessria).
No grupo Navegao (Navigation), devemos associar ao bloco Func o valor Alterar Bloco de Dados (Change Block)
para a propriedade Estilo de Navegao (Navigation Style); para o bloco Depto, essa propriedade deve receber o
valor Alterar Registro (Change Record).
Para garantirmos que o bloco Depto somente realize consultas, devemos inibir as propriedades Insero Permitida
(Insert Allowed), Atualizao Permitida (Update Allowed) e Excluso Permitida (Delete Allowed), deixando habilitado
(Sim) apenas em Consulta Permitida (Query Allowed). Essas propriedades esto includas no grupo Database.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
869
Execute agora esta aplicao e verifique que em uma consulta total apenas 15 registros so trazidos. Navegue para
o ltimo registro. No ocorre outra tentativa de leitura. So mantidos apenas os primeiros 15 registros obtidos.
7.09) Crie uma aplicao de nome EX9 com as seguintes caractersticas:
No SQL*Plus, crie uma view que estabelea um join entre as tabelas Func e Depto e inclua as colunas cd_mat,
nm_func, cd_depto, vl_sal, nm_depto, cd_gerente e que veja apenas os funcionrios que no so gerentes.
Crie um bloco nesta aplicao baseado nesta view. Garanta que somente consultas sejam permitidas.
Crie um bloco baseado na tabela Depto, mas que obtenha simultaneamente os gastos totais de cada departamento
(total de salrio). Garanta que somente consultas sejam realizadas. No utilize View.
Para este exerccio, o nosso primeiro passo ser criar a view no banco de dados, de acordo com a Listagem-resposta 7.09A.
Em seguida, devemos usar o Assistente de Bloco de Dados (Data Block Wizard) para criar um bloco baseado nesta
view em vez de numa tabela. Como etapa seguinte devemos desabilitar as propriedades Insero Permitida (Insert
Allowed), Atualizao Permitida (Update Allowed) e Excluso Permitida (Delete Allowed) para esse bloco.
Para desenvolver a segunda parte do programa, devemos criar normalmente o bloco a partir da tabela Depto,
selecionando as colunas cd_depto, nm_depto, cd_gerente e cd_depto_ctb.
O prximo passo modificar o valor da propriedade Tipo de Origem de Dados de Consulta (Query Data Source
Type) para indicar que os dados sero obtidos a partir de um comando Select a ser definido. O valor dessa propriedade
deve ser Consulta da clusula From (Sub-query).
O comando Select a ser usado como origem dos dados deve ser includo na propriedade Nome de Origem de Dados
de Consulta (Query Data Source Name) com o seguinte texto:
Listagem-resposta 7.09B
SELECT D.CD_DEPTO, D.NM_DEPTO, D.CD_GERENTE, D.CD_DEPTO_CTB,
SUM (F.VL_SAL) SAL_TOTAL
FROM FUNC F, DEPTO D
WHERE F.CD_DEPTO = D.CD_DEPTO
GROUP BY D.CD_DEPTO, D.NM_DEPTO, D.CD_GERENTE, D.CD_DEPTO_CTB
Observe, no entanto, que existem cinco colunas selecionadas neste SQL Select, e portanto o nosso bloco deve
conter cinco colunas. Sendo assim, v ao Navegador e inclua uma nova coluna neste bloco com o nome de
Sal_Total (o mesmo nome utilizado na sub-query). Altere as propriedades Tipo de Dado (Data Type) do grupo
Dados (Data) para numrico e Canvas do grupo Fsico (Physical) para o nome da Canvas.
As propriedades Insero Permitida (Insert Allowed), Atualizao Permitida (Update Allowed) e Excluso Permitida
(Delete Allowed) devem ser desabilitadas para esse bloco.
Como ltima restrio, a coluna cd_depto deve ter a propriedade Chave Primria (Primary Key) marcada com Sim
(Yes). Isto necessrio quando usamos consulta da clusula From. Teste!
7.10) Crie uma aplicao de nome EX10 baseada em um pacote com as seguintes caractersticas:
Um tipo registro (RLer) com todas as colunas da tabela Func, acrescido de uma coluna de tipo Rowid.
Um tipo registro (Rlock) com apenas uma coluna de tipo Rowid.
Uma varivel cursor baseada no registro RLer.
Um tipo tabela baseado no registro Rler.
Um tipo tabela baseado no registro Rlock.
Uma procedure para incluso que receba como parmetro o tipo tabela do registro Rler.
Uma procedure para excluso que receba como parmetro o tipo tabela do registro Rlock.
Uma procedure para bloqueio que receba como parmetro o tipo tabela do registro Rlock.
Uma procedure para leitura que receba como parmetro o cdigo da matrcula (opcional), o cdigo do
departamento (opcional) e que retorne o tipo cursor do registro Rler.
Uma vez que esta forma de trabalho a mais complexa, faamos passo a passo todas as etapas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
871
Listagem-resposta 7.10A
SQL> CREATE OR REPLACE PACKAGE PFORMS IS
2
TYPE RLER
IS RECORD (CD_MAT
FUNC.CD_MAT%TYPE,
3
NM_FUNC
FUNC.NM_FUNC%TYPE,
4
NM_SOBRENOME FUNC.NM_SOBRENOME%TYPE,
5
CD_DEPTO
FUNC.CD_DEPTO%TYPE,
6
NR_RAMAL
FUNC.NR_RAMAL%TYPE,
7
DT_ADM
FUNC.DT_ADM%TYPE,
8
NR_CARGO
FUNC.NR_CARGO%TYPE,
9
NR_GIT
FUNC.NR_GIT%TYPE,
10
IN_SEXO
FUNC.IN_SEXO%TYPE,
11
DT_NASC
FUNC.DT_NASC%TYPE,
12
VL_SAL
FUNC.VL_SAL%TYPE,
13
ENDERECO
ROWID);
14
TYPE RLOCK IS RECORD (ENDERECO
ROWID);
15
TYPE CFUNC IS REF CURSOR RETURN RLER;
16
TYPE TFUNC IS TABLE OF RLOCK INDEX BY BINARY_INTEGER;
17
TYPE TLER
IS TABLE OF RLER
INDEX BY BINARY_INTEGER;
18
PROCEDURE
INCLUI (PTAB
IN OUT TLER);
19
PROCEDURE
EXCLUI (PTAB
IN OUT TFUNC);
20
PROCEDURE
BLOQUEIA (PTAB
IN OUT TFUNC);
21
PROCEDURE
CONSULTA (PCD_MAT
IN NUMBER := NULL,
22
PCD_DEPTO IN VARCHAR2:= NULL,
23
PTAB
IN OUT CFUNC);
24 END;
25 /
A Listagem-resposta 7.10A nos mostra a parte de especificao do pacote com os tipos solicitados acima. Observe
que o tipo Rler corresponde a todas as colunas da tabela Func, acrescido do Rowid. O objetivo de obteno do
Rowid a possibilidade de bloqueio e excluso utilizando diretamente o endereo da linha.
Listagem-resposta 7.10B
SQL> CREATE OR REPLACE PACKAGE BODY PFORMS IS
2
PROCEDURE
INCLUI (PTAB
IN OUT TLER) IS
3
I
NUMBER := 1;
4
BEGIN
5
WHILE PTAB.EXISTS (I) LOOP
6
INSERT INTO FUNC (CD_MAT, NM_FUNC, NM_SOBRENOME,
7
CD_DEPTO, NR_RAMAL, DT_ADM, NR_CARGO,
8
NR_GIT, IN_SEXO, DT_NASC, VL_SAL) VALUES
9
(PTAB (I).CD_MAT, PTAB (I).NM_FUNC, PTAB (I).NM_SOBRENOME,
10
PTAB (I).CD_DEPTO, PTAB (I).NR_RAMAL, PTAB (I).DT_ADM,
11
PTAB (I).NR_CARGO, PTAB (I).NR_GIT, PTAB (I).IN_SEXO,
12
PTAB (I).DT_NASC, PTAB (I).VL_SAL);
13
I := I + 1;
14
END LOOP;
15
END INCLUI;
16
PROCEDURE
EXCLUI (PTAB
IN OUT TFUNC) IS
17
I
NUMBER := 1;
18
BEGIN
19
WHILE PTAB.EXISTS (I) LOOP
20
DELETE FROM FUNC
21
WHERE ROWID = PTAB (I).ENDERECO;
22
I := I + 1;
23
END LOOP;
24
END EXCLUI;
25
PROCEDURE
BLOQUEIA (PTAB
IN OUT TFUNC) IS
26
I
NUMBER := 1;
27
DUMMY
NUMBER;
28
BEGIN
29
WHILE PTAB.EXISTS (I) LOOP
30
SELECT 1 INTO DUMMY FROM FUNC
31
WHERE ROWID = PTAB (I).ENDERECO FOR UPDATE;
32
I := I + 1;
33
END LOOP;
34
END BLOQUEIA;
35
PROCEDURE
CONSULTA (PCD_MAT
IN NUMBER := NULL,
36
PCD_DEPTO IN VARCHAR2:= NULL,
37
PTAB
IN OUT CFUNC) IS
BEGIN
OPEN PTAB FOR SELECT CD_MAT, NM_FUNC, NM_SOBRENOME,
CD_DEPTO, NR_RAMAL, DT_ADM, NR_CARGO,
NR_GIT, IN_SEXO, DT_NASC, VL_SAL, ROWID
FROM FUNC
WHERE CD_MAT
= NVL (PCD_MAT,
CD_MAT)
AND CD_DEPTO = NVL (PCD_DEPTO, CD_DEPTO);
END CONSULTA;
END;
/
A Listagem-resposta 7.10B nos mostra a rotina de consulta, que pode receber dois parmetros opcionais e abre o
cursor para as linhas selecionadas de acordo com o parmetro. Esse cursor retornado ao programa que executou
esta procedure. J a procedure de excluso se baseia apenas no endereo de cada uma das linhas recebidas como
parmetro. A rotina de bloqueio tambm baseada no rowid e a de incluso, baseada nas colunas da tabela Func.
Passemos agora construo do nosso Form.
O primeiro passo desta etapa criar uma nova aplicao de nome EX10 com o auxlio do Assistente de Bloco de dados.
Na primeira tela apresentada, indicaremos que o nosso bloco se basear em um procedimento e no em uma tabela.
A seguir, seremos convocados a fornecer o nome da rotina que efetua consulta na base de dados. Preencha o
campo especfico com o nome da rotina no formato <pacote>.<rotina> e aperte o boto Renovar. Neste ponto o
Form Builder faz acesso ao banco de dados e obtm a descrio dos parmetros da rotina, preenchendo o campo
Colunas Disponveis com as colunas presentes no parmetro de sada da rotina, ou seja, do tipo cursor. Na parte
inferior da tela, so apresentados os parmetros de entrada, aos quais devemos associar nomes de itens para que a
tempo de consulta, quando preenchermos estes itens, seus valores sejam devidamente atribudos aos parmetros.
Sabemos que o Form Builder criar os itens com os mesmos nomes das colunas que definimos no registro Rler. Por
este motivo, podemos informar que o parmetro Pcd_mat receber um valor proveniente do item :cd_mat e que o
parmetro Pcd_depto receber um valor do item :cd_depto.
Se voc no ficou muito seguro quanto a estas informaes, simplesmente preencha-as e confira depois da
gerao do bloco.
Passemos prxima rotina. Na prxima tela, devemos informar qual a nossa rotina de incluso de dados.
O preenchimento deste dilogo ser feito da seguinte forma:
Campo Procedimento ser preenchido com Pforms.Inclui.
Pressionar o boto Renovar.
A tabela referente aos argumentos precisa da nossa interveno apenas para a coluna Valor, a qual ser preenchida
com Bfunc para o parmetro Ptab.
Desta vez, desejamos que todos os itens do bloco que est sendo criado sejam transferidos para o parmetro, uma
vez que se trata de uma rotina de incluso. O nome do bloco ainda no foi dado pelo Form Builder, por isso eu
arbitrei que se chamar Bfunc. Quando o bloco tiver sido criado com o nome XXX, alteraremos seu nome para
Bfunc. Na verdade a informao do nome do bloco no indispensvel, pois o prprio Form Builder passa como
parmetro o nome do bloco na ausncia de outra informao ( o default).
Se ocorrer alguma mensagem de erro durante o preenchimento destas telas, no se assuste. Caso voc d OK e os
campos apaream preenchidos, ento est tudo bem.
A prxima tela solicitada de atualizao (alterao). No forneceremos, pule.
Na excluso, observe que a nica coluna encontrada foi Endereo, pois somente precisaremos do Rowid da linha
para exclu-la. Para este parmetro, portanto, deve ser informado o nome do item que corresponde ao Rowid. Para
facilitar a ligao, dei o mesmo nome tanto no registro Rler quanto no registro Rlock, ou seja, Endereo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
873
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
875
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
877
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
879
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
881
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
883
Para que os botes fiquem com fundo cinza, preencha a propriedade Cor de Fundo (Background Color), a segunda
de cima para baixo, com o valor Gray.
No desenvolvimento desta aplicao utilizei o mesmo cone para indicao de todas as aes. Isto torna a aplicao um pouco confusa. Se voc
possuir outros cones em seu micro, prefervel que identifique as aes com botes mais compatveis.
Num ambiente real de produo, voc copiar todos os cones para um diretrio comum e, em seguida, preencher a varivel de ambiente UIIcon com o diretrio onde se encontram estes arquivos.
7.21) Crie uma aplicao de nome EX21 a partir da aplicao EX16. Inclua a seguinte funcionalidade:
Estabelecer uma distncia entre a linha do quadro e cada objeto de 5 pontos, tanto na vertical quanto na horizontal.
A distncia interna entre os objetos deve ser de 3.
No mximo devem ser colocados trs objetos em cada linha.
O ttulo do quadro deve ser posicionado no centro do quadro (horizontalmente).
A distncia entre os prompts dos objetos e os prprios objetos deve ser de 5 pontos.
Altere o ttulo do quadro usando o editor de Layout.
Todos os prompts dos itens devem ser vermelhos.
Coloque os objetos com cor de fundo amarela.
Altere o tipo da letra dos objetos para Arial com tamanho 9.
A Figura-resposta 7.21A nos mostra apenas a janela da aplicao durante uma execuo.
7.22) Crie uma aplicao de nome EX22 a partir da aplicao EX17. Inclua a seguinte funcionalidade:
Ajustar o tamanho do quadro aos objetos.
Alinhar o prompt pela parte inferior do objeto.
Deslocar o prompt lateralmente em relao ao objeto em 5 pontos.
Alinhar o ttulo do quadro pela direita com um distanciamento da vertical de 15 pontos.
Separar o ttulo da linha que envolve o quadro em 8 pontos.
Alterar o tamanho e a cor da canvas pelo editor de Layout.
Alterar a cor de fundo dos objetos.
Aumentar o tamanho de todos os objetos horizontalmente.
Trocar a cor da letra de todos os objetos.
Construir dois retngulos em torno de grupos de objetos desenhados e colocar essa linha em terceira dimenso
usando duas opes diferentes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
885
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
887
A partir deste tpico, alm de estudarmos os triggers, comearemos a utilizar nos exerccios as rotinas disponibilizadas
pelo Form Builder para realizar diversas aes. Voc conhecer muitas dessas rotinas, porm no n Pacotes Embutidos
(Extenses Standard) existem muito mais rotinas. Na Parte III: Referncia voc encontrar um captulo contendo
todas estas rotinas organizadas por tipo de uso. O objetivo simplesmente dar alguma facilidade na hora de definir
qual a rotina a usar; no entanto, a consulta Ajuda do Form Builder indispensvel para que voc saiba quais os
parmetros possveis e a capacidade da rotina.
Voc encontrar, ainda, neste material um tpico que trata especificamente deste n Pacotes Embutidos, porm
nosso estudo das rotinas j comea agora.
Listagem-resposta 7.26A
LOOP
NEXT_RECORD;
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
EXIT;
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
MESSAGE ('Navegao invlida');
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
889
Alguns destes botes (por exemplo, Inserir, Limpar, Remover, Consultar) necessitam de que o foco no se mova do
lugar quando o boto for acionado, ou seja, no devemos permitir que haja navegao para o boto quando o
usurio clic-lo. Caso contrrio, como o boto est pendurado no bloco de controle e no no bloco Func, o Forms
Runtime tentar executar a ao solicitada para o bloco de controle e receber um erro que ser repassado para o
usurio (Esta ao no pode ser executada aqui). Sendo assim, marcaremos as propriedades Navegvel com
Teclado (Keyboard Navigable) e Navegao do Mouse (Mouse Navigate) com No (False).
Para validao, temos, como sabemos, dois triggers: When-Validate-Item e When-Validate-Record. Uma vez que
desejamos a comparao do valor de dois itens e, ainda, queremos impedir a navegao (causar uma falha), devemos
criar a crtica num trigger When-Validate-Record (em nvel de bloco), conforme a Listagem-resposta 7.26B (trecho).
Listagem-resposta 7.26B
IF :FUNC.NR_CARGO <= 46 THEN
IF :FUNC.VL_SAL NOT BETWEEN 500 AND 1500 THEN
MESSAGE ('Salrio deve estar entre 500 e 1500 para este cargo');
RAISE FORM_TRIGGER_FAILURE;
ELSE
GOTO FIM;
END IF;
END IF;
IF :FUNC.NR_CARGO BETWEEN 47 AND 52 THEN
IF :FUNC.VL_SAL NOT BETWEEN 1501 AND 2000 THEN
MESSAGE ('Salrio deve estar entre 1501 e 2000 para este cargo');
RAISE FORM_TRIGGER_FAILURE;
ELSE
GOTO FIM;
END IF;
END IF;
IF :FUNC.NR_CARGO BETWEEN 53 AND 55 THEN
IF :FUNC.VL_SAL NOT BETWEEN 2001 AND 2500 THEN
MESSAGE ('Salrio deve estar entre 2001 e 2500 para este cargo');
RAISE FORM_TRIGGER_FAILURE;
ELSE
GOTO FIM;
END IF;
END IF;
IF :FUNC.NR_CARGO BETWEEN 56 AND 58 THEN
IF :FUNC.VL_SAL NOT BETWEEN 2501 AND 3000 THEN
MESSAGE ('Salrio deve estar entre 2501 e 3000 para este cargo');
RAISE FORM_TRIGGER_FAILURE;
ELSE
GOTO FIM;
END IF;
END IF;
IF :FUNC.NR_CARGO BETWEEN 59 AND 60 THEN
IF :FUNC.VL_SAL NOT BETWEEN 3001 AND 3500 THEN
MESSAGE ('Salrio deve estar entre 3001 e 3500 para este cargo');
RAISE FORM_TRIGGER_FAILURE;
ELSE
GOTO FIM;
END IF;
END IF;
IF :FUNC.NR_CARGO BETWEEN 61 AND 62 THEN
IF :FUNC.VL_SAL NOT BETWEEN 3501 AND 4000 THEN
MESSAGE ('Salrio deve estar entre 3501 e 4000 para este cargo');
RAISE FORM_TRIGGER_FAILURE;
ELSE
GOTO FIM;
END IF;
END IF;
IF :FUNC.NR_CARGO >= 63 THEN
A prxima etapa garantir fazer com que a janela do Forms Runtime e a janela da prpria aplicao sejam
maximizadas quando a aplicao iniciar a execuo.
Escolhemos o gatilho Pre-Form para definir o cdigo. Usaremos a rotina Set_Window_Property a fim de alterar a
propriedade Window_State das duas janelas e pass-las para o estado maximizado. Observe na Listagem-resposta
7.26C que informamos como parmetro Janela1 correspondendo ao nome da janela da nossa aplicao (expanda
o n Janelas Windows e verifique o nome). Para a janela do Forms Runtime, utilizamos o mneumnico
Forms_Mdi_Window (verifique no arquivo de Ajuda).
Listagem-resposta 7.26C
SET_WINDOW_PROPERTY ('JANELA1', WINDOW_STATE, MAXIMIZE);
SET_WINDOW_PROPERTY (FORMS_MDI_WINDOW, WINDOW_STATE, MAXIMIZE);
Para garantirmos o preenchimento de nome, sobrenome e salrio, basta que habilitemos a propriedade Obrigatrio
(Required) no grupo Dados (Data).
A ltima crtica determina que a data de nascimento deve ser maior que 1940. Neste caso, basta que preenchamos
a propriedade Mnimo Valor Permitido (Lowest Allowed Value) do grupo Dados (Data) com o valor 01/01/1940
para que o prprio Forms Runtime se encarregue da crtica.
7.27) Crie uma aplicao de nome EX27 baseada na aplicao EX26, incluindo a seguinte funcionalidade:
Traga a coluna nm_foto coluna para a sua aplicao.
Inclua essa coluna na canvas imediatamente abaixo de um item do tipo imagem, criado no bloco Func, mas no
pertencente ao banco de dados.
A tempo de execuo, o campo nm_foto dever ser preenchido com o caminho e nome de arquivos do tipo BMP
presentes em seu disco. Quando a coluna for preenchida, a imagem correspondente dever ser trazida para a tela.
Crie uma canvas do tipo stack e preencha essa canvas com um boilerplate que especifique como deve ser feito
o preenchimento dessa tela.
Esta canvas dever ser apresentada quando o usurio pressionar a tecla Help. Quinze segundos depois, esta tela
deve ser escondida novamente.
A janela da aplicao no pode ser fechada.
A janela da aplicao no pode ser minimizada.
Anexar o smbolo da empresa na barra de ferramentas.
Como primeiro passo devemos salvar a aplicao com o nome de EX27. A incluso das novas colunas requer:
a) Criao de dois novos itens no bloco Func.
b) O item nm_foto deve ter tipo caracter e tamanho 200, ser coluna do banco de dados e visvel na canvas2.
c) O item foto deve ser do tipo imagem, no ser coluna do banco de dados e visvel na canvas2.
A prxima etapa grfica e ser apresentada ao fim de toda a montagem.
Para trazer a imagem para a tela, devemos criar um trigger, que pode ser When-Validate-Item ou Post-Text-Item.
Escolhi When-Validate-Item para que a leitura ocorra a tempo de validao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
891
Na Listagem-resposta 7.27B apresentamos a rotina Read_Image_File que realiza a leitura do arquivo. No primeiro
parmetro informamos o nome do arquivo (no nosso caso, este nome est armazenado dentro do item nm_foto,
por este motivo preenchemos com :nm_foto, ou seja, o contedo do item). No segundo parmetro informamos o
tipo do arquivo a ser lido; considerei que no sabemos ou que podem ser arquivos de tipos diferentes, deixando
que o Forms Runtime descubra o tipo do arquivo pela extenso. No terceiro parmetro devemos informar o nome
do item do tipo imagem que receber a foto (por este motivo informamos o nome entre aspas).
A criao da canvas feita no Navegador com a ferramenta Criar (Create). Em seguida, abrimos a tela de propriedades
e alteramos seu tipo para Empilhado (Stack). A seguir, navegamos para o Editor de Layout e diminumos seu
tamanho para que fique como uma barra. Ento inclumos um boilerplate de texto contendo uma informao
para o preenchimento da tela.
Para termos visualizao e posicionarmos a canvas no local em que ela deve aparecer, navegamos para a canvas2,
acionamos no menu Visualizar (View) a opo Views Sobrepostas (Stacked Views). No dilogo apresentado estaro
listadas todas as canvas do tipo Stack. Selecionaremos nossa canvas e clicaremos o boto OK. Retornaremos ento
canvas2 com a visualizao simultnea da canvas ST_Func (canvas do tipo Stack) na mesma tela. Poderemos,
ento, arrast-la para a posio desejada. Para realizar este movimento, a canvas ST_Func deve estar selecionada e
voc deve clicar exatamente em um dos quadradinhos indicativos de seleo para arrast-la (ou usar o teclado com
Shift+Seta para baixo ou para cima).
Se voc no conseguir selecionar a canvas, retorne ao Layout dela (sozinha), tire a visibilidade do ViewPort (Show
View) e selecione a canvas. Retorne, ento, canvas2 e a canvas ST_Func aparecer selecionada.
A apresentao da canvas deve ser realizada pelo trigger Key-Help (em nvel de aplicao), como solicitado.
Listagem-resposta 7.27C
DECLARE
TEMPO
TIMER;
BEGIN
TEMPO := CREATE_TIMER ('TIMER_TEMPO', 15000, NO_REPEAT);
SHOW_VIEW ('ST_FUNC');
END;
Para controle de tempo, criaremos um objeto Timer. O nome deste objeto ser Timer_Tempo. Os parmetros para
a rotina Create_Timer so: o nome do timer a ser criado, o tempo em que ele ser considerado expirado (em
milissegundos) e uma indicao de recontagem de tempo ou no. Quando preenchemos o terceiro parmetro com
No_Repeat, indicamos que quando o tempo expirar o timer pode ser destrudo, pois no ser utilizado novamente.
Para executarmos uma ao quando o tempo expirar, devemos criar um trigger When-Timer-Expired em nvel de
aplicao para solicitar que a view seja escondida.
Listagem-resposta 7.27D
HIDE_VIEW ('ST_FUNC');
Para que a canvas ST_Func no seja apresentada por default, devemos alterar sua propriedade Visvel (Visible) para
No (False) a fim de que ela s aparea quando acionada.
Os dois tpicos seguintes voc j sabe onde deve alterar.
Para anexarmos uma imagem qualquer em nossa aplicao, devemos navegar para o Layout desejado (escolhi a
canvas Horizontal) e usar no submenu Importar (Import) do menu Arquivo (File) a opo Imagem (Image). Quando
a imagem for carregada, podemos arrast-la e dimension-la para o posicionamento adequado.
7.28) Crie uma aplicao de nome EX28 baseada na aplicao EX27, incluindo a seguinte funcionalidade:
Inclua uma nova canvas do tipo contedo para a manuteno na tabela Departamento (utilize o Assistente para
efetuar essa incluso). O nome do Departamento pode ocupar mais de uma linha.
Inclua uma nova canvas do tipo contedo para a manuteno na tabela Projetos (utilize o Assistente para
efetuar esta incluso). O nome do Projeto pode ocupar mais de uma linha.
Nomeie as canvas de acordo com o bloco que contm: Cfunc, Cdepto e Cproj.
Deve ser criada uma canvas stack para cada uma destas novas canvas de contedo contendo, respectivamente,
informaes sobre o preenchimento de dados em departamento e projetos.
Incluir um boto na barra de ferramentas vertical que estabelea a navegao entre os blocos. Quando estivermos
posicionados em funcionrio, ocorrer a navegao para departamento. Quando estivermos posicionados em
departamento, ocorrer a navegao para projetos, e quando estivermos posicionados em projetos, ocorrer a
navegao para funcionrio. A ajuda do boto dever indicar para onde ocorrer a navegao.
Quando houver navegao para cada um dos blocos, a janela da aplicao dever indicar o nome do bloco correspondente.
Somente poderemos efetuar consulta pelas colunas nr_cargo e departamento (do bloco de controle). A atualizao
poder ser efetuada para todas as colunas, sendo que Matrcula poder ser includa, mas no alterada.
Altere as caractersticas dos itens, de acordo com as especificaes a seguir:
a) O item in_sexo deve ser do tipo radio group, para os valores F, M e Null.
b) O item nr_cargo deve ser do tipo List Item para os valores (48 analista jnior, 49 analista pleno, 50
analista snior, 51 dba, 52 analista de dados, 53 suporte de software, 54 suporte de hardware, 55
coordenador de projeto, 56 gerente de sistema, 57 instrutor, 58 gerente de suporte, 59 gerente de
treinamento, 60 diretor). O usurio poder informar outros valores no presentes na lista, inclusive Null.
c) A coluna nr_git deve corresponder a uma lista com os seguintes valores (12 primeiro grau incompleto, 13
primeiro grau completo, 14 segundo grau incompleto, 15 segundo grau completo, 16 superior incompleto,
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
893
Listagem-resposta 7.28A
IF :CONTROLE.BLOCO = 'FUNCIONARIO' THEN
:CONTROLE.BLOCO := 'DEPARTAMENTO';
SET_ITEM_PROPERTY ('CONTROLE.NAVEGA', TOOLTIP_TEXT, 'Projeto');
GO_BLOCK ('DEPTO');
ELSIF :CONTROLE.BLOCO = 'DEPARTAMENTO' THEN
:CONTROLE.BLOCO := 'PROJETO';
SET_ITEM_PROPERTY ('CONTROLE.NAVEGA', TOOLTIP_TEXT, 'Funcionrio');
GO_BLOCK ('PROJ');
ELSE
:CONTROLE.BLOCO := 'FUNCIONARIO';
SET_ITEM_PROPERTY ('CONTROLE.NAVEGA', TOOLTIP_TEXT, 'Departamento');
GO_BLOCK ('FUNC');
END IF;
Quando ocorre a troca de bloco, alteramos o valor da varivel de controle para o nome do prximo bloco e
alteramos o texto da propriedade Dica da Ferramenta do boto Navega. A rotina Set_Item_Property permite que, a
tempo de execuo, alteremos algumas das propriedades dos itens.
Para que esta varivel tenha um valor inicial, no trigger Pre-Form (j existente), preencha-a com o valor Funcionrio,
que o primeiro bloco visvel na aplicao.
Nossa prxima tarefa alterar o ttulo da janela. Utilizaremos mais uma vez a rotina Set_Window_Property, agora
para a propriedade Title. Veja a Figura-resposta 7.28B.
Listagem-resposta 7.28B
SET_WINDOW_PROPERTY (FORMS_MDI_WINDOW, TITLE, :CONTROLE.BLOCO);
Escolhemos o gatilho When-New-Block-Instance em nvel de Form, ou seja, todas as vezes que houver uma mudana
de bloco provocada ou no pelo boto, ocorrer a execuo deste trigger. Sendo assim, basta que faamos uma
atribuio do contedo da varivel Bloco para o ttulo da janela. Voc vai observar que alteramos o ttulo da janela
da aplicao Forms Runtime. Se voc preferir modificar o nome da janela da sua aplicao, deve passar como
primeiro parmetro da rotina o nome da sua janela (Janela1, no caso do exemplo).
Voltamos s propriedades. Para que no seja possvel a consulta pelos demais campos, devemos desabilitar a
propriedade Consulta Permitida (Query Allowed) de todos os itens e habilit-la apenas para nr_cargo, uma vez que
o cdigo do departamento do bloco de controle no item do banco de dados.
Listagem-resposta 7.28C
IF :FUNC.NR_GIT < 16 THEN
MESSAGE ('Grau de Instruo Invlido');
RAISE FORM_TRIGGER_FAILURE;
END IF;
A Listagem-resposta 7.28C nos apresenta a crtica anexada, porm ainda incompleta, pois a solicitao era de que
a tempo de incluso esta crtica fosse realizada. Para tal deveramos saber o estado do registro, que tambm
fornecido por variveis de ambiente; portanto, o trmino deste item ficar para outro exerccio.
7.29) Crie uma aplicao de nome EX29 baseada na aplicao EX28, incluindo a seguinte funcionalidade:
Inclua uma coluna para clculo da gratificao por tempo de servio, que dever utilizar a frmula: (tempo de
servio / 3) multiplicado por 1/5 do salrio para todos os funcionrios que tiverem mais de dois anos de casa.
Inclua um item do tipo check box que poder ser marcado pelo usurio. Quando isto acontecer, o salrio do
funcionrio dever ser acrescido de 5% a tempo de alterao.
Garanta que o cdigo do projeto siga o padro de duas letras e quatro nmeros.
No so admitidos funcionrios menores de 21 anos do sexo feminino e 18 anos do sexo masculino.
No so admitidos funcionrios com mais de 60 anos.
A data inicial do projeto dever ser igual ou superior data do dia do cadastramento e inferior data final.
O usurio somente poder utilizar as teclas Ajuda, Prximo Item, Item Anterior. As demais teclas devero ser
desabilitadas com mensagem adequada.
Se o cdigo do departamento (do bloco de controle) no for preenchido, dever ser feita a consulta de todas as
linhas da tabela Func.
Quando o boto Consultar for acionado, navegue para um item do bloco atual.
Aps criarmos a nova aplicao de nome EX29 baseada em EX28, criaremos uma coluna no prprio bloco de
funcionrio (poderia ser em controle tambm) contendo a seguinte frmula:
Trunc ( ( ( (sysdate - :func.dt_nasc)/365.25)/3) * (:func.vl_sal/5),2)
Essa frmula deve ser inserida no grupo Clculo (Calculation). A propriedade Modo de Clculo (Calculation Mode)
deve ser preenchida com a indicao de frmula e a propriedade Frmula (Formula) com a frmula descrita.
Alm destas propriedades no devemos nos esquecer de definir esta coluna como numrica (grupo Dados Data),
no pertencente ao banco de dados e desativada (s leitura).
A seguir, criamos uma nova coluna no bloco Func novamente, do tipo Caixa de Seleo, chamado Premio, que no
pertence ao banco de dados e cujos valores vlidos so S e N (so valores de livre escolha). Para garantir que em
uma mesma execuo o salrio no ser atualizado duas vezes, a ao de aumento do salrio foi includa num
trigger de Pre-Update do bloco Func. Temos, porm, um pequeno problema. Um trigger transacional s ativado
se o Forms Runtime acusar uma alterao no registro. Como o item Premio no pertence ao banco de dados,
quando alteramos seu valor ele passa por uma validao; porm o estado do registro no alterado (no necessria
nenhuma alterao para o banco de dados). A fim de forar esta ao, criamos um trigger de validao para Premio
que atribui o valor de salrio a ele mesmo, causando, ento, a modificao no estado do registro (isto tambm
poderia ser feito atravs da rotina Set_Record_Property).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
895
Para garantirmos a crtica de cdigo do projeto, basta que a mscara do campo seja AA9999.
A crtica de idade foi anexada ao trigger When-Validate-Record do bloco Func.
Listagem-resposta 7.29B
<<FIM>>
IF :FUNC.IN_SEXO = 'F' OR
:FUNC.IN_SEXO IS NULL THEN
IF (SYSDATE - :FUNC.DT_NASC) / 365.25 < 21 THEN
MESSAGE ('Deve ter mais de 21 anos');
RAISE FORM_TRIGGER_FAILURE;
END IF;
ELSE
IF (SYSDATE - :FUNC.DT_NASC) / 365.25 < 18 THEN
MESSAGE ('Deve ter mais de 18 anos');
RAISE FORM_TRIGGER_FAILURE;
END IF;
END IF;
Listagem-resposta 7.29C
IF (SYSDATE - :FUNC.DT_NASC)/ 365.25 > 60 THEN
MESSAGE ('No permitido maior de 60 anos');
RAISE FORM_TRIGGER_FAILURE;
END IF;
Para crtica de data do projeto utilizamos as propriedades valor mnimo e valor mximo. Sendo o mnimo igual a
$$DBDATE$$ e o mximo igual a :proj.dt_fim.
Para controlar o teclado, utilizamos os triggers a seguir com os respectivos comandos:
Key-Next-Item Next_Item;
Key-Prev-item Previous_Item;
Key-Others Message (Tecla Invlida);
Para que a restrio da consulta fique varivel, devemos retirar o preenchimento da clusula Where em nvel de
propriedade e incluir um trigger Pre-Query que altere dinamicamente a clusula Where de acordo com o valor
preenchido em :controle.depto. Veja a Listagem-resposta 7.29D.
Listagem-resposta 7.29D
IF :CONTROLE.DEPTO IS NULL THEN
SET_BLOCK_PROPERTY ('FUNC', DEFAULT_WHERE, '');
ELSE
SET_BLOCK_PROPERTY ('FUNC', DEFAULT_WHERE,
'WHERE CD_DEPTO = '''||:CONTROLE.DEPTO||'''');
END IF;
A propriedade Default_Where do bloco permite a alterao dinmica da clusula Where a ser aplicada Query.
Para evitarmos a navegao para o bloco Func cada vez que preenchemos o cdigo do departamento, faremos a
navegao automtica no boto Consultar (trigger When-Button-Pressed), conforme a Listagem-resposta 7.29E.
Listagem-resposta 7.29E
GO_ITEM ('FUNC.CD_MAT');
EXECUTE_QUERY;
Listagem-resposta 7.30A
EXIT_FORM (no_commit);
A Listagem-resposta 7.30A (When-Button-Pressed do boto Sair) mostra a rotina Exit_Form recebendo um parmetro.
Existem quatro possibilidades de parmetro para essa rotina: Ask_Commit (que a opo default e que apresenta
a mensagem indesejada atualmente), Do_Commit (executa um Commit_Form antes de encerrar), No_Commit
(efetua todo o processo de validao, mas no atualiza o banco de dados) e No_Validate (no executa a fase de
validao e no atualiza o banco de dados).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
897
A Listagem-resposta 7.30B nos mostra a operao realizada pela ao de consulta (boto Consultar). Como a rotina
Execute_Query no possui os parmetros que desejvamos e a limpeza do bloco necessria, executamos um Clear_Block
indicando a ao a ser realizada. Nas duas situaes registradas no ocorre mais a pergunta para o operador.
Nosso prximo passo acionar uma outra aplicao em uma sesso diferente da atual.
Listagem-resposta 7.30C
OPEN_FORM ('EX29', ACTIVATE, SESSION, SHARE_LIBRARY_DATA);
Na Listagem-resposta 7.30C (boto Aplicar) resolvemos este problema usando a rotina Open_Form, cujos
parmetros indicam:
O nome da aplicao a ser executada.
Se a nova aplicao ativada imediatamente ou no. Podemos navegar de uma para outra atravs do menu Window.
Se deve ou no (No_Session) ser aberta uma nova sesso, isto , uma nova conexo com o banco de dados.
Se devemos ou no (No_Share_Library_Data) compartilhar as bibliotecas entre aplicaes, isto , se duas aplicaes
que invocam uma mesma biblioteca (Library) devem ou no compartilhar a cpia desta biblioteca em memria
no ambiente cliente. Esta opo pode resguardar memria no ambiente cliente.
O prximo passo apresentar o contedo da foto a tempo de leitura; portanto devemos criar o trigger Post_Query
para o bloco Func. J sabemos que este trigger ser acionado uma vez para cada linha retornada do banco de dados
(bem dentro das nossa necessidades). Veja a Listagem-resposta 7.30D.
Listagem-resposta 7.30D
IF :FUNC.NM_FOTO IS NOT NULL THEN
READ_IMAGE_FILE (:FUNC.NM_FOTO, NULL, 'FUNC.FOTO');
IF NOT FORM_SUCCESS THEN
MESSAGE ('NOME DE FOTO INVLIDA');
END IF;
END IF;
No prximo passo voc j sabe o que fazer: alterar a propriedade Obrigatrio (Required) dos itens.
J garantir que o responsvel trabalhe no departamento que coordena o projeto requer PL/SQL.
Listagem-resposta 7.30E
DECLARE
DEP
VARCHAR2 (3);
BEGIN
SELECT CD_DEPTO INTO DEP
FROM FUNC WHERE CD_MAT = :PROJ.CD_RESP;
IF DEP IS NULL OR
:PROJ.CD_DEPTO <> DEP THEN
MESSAGE ('Este coordenador no pertence ao '||
'Departamento Responsvel');
RAISE FORM_TRIGGER_FAILURE;
END IF;
END;
Criamos um gatilho When-Validate-Record em nvel de bloco para Proj e preenchemos conforme a Listagemresposta 7.30E.
Para as mensagens de erro utilizamos o trigger On_Error, que por comear com ON j sabemos que substitui a
funcionalidade default; portanto, devemos incluir tanto a apresentao das mensagens do Forms Runtime quanto
as mensagens do banco de dados, incluindo a apresentao da tela de erro. Verifique a Listagem-resposta 7.30F.
Nossa ltima tarefa a apresentao das teclas, que facilmente resolvida com a execuo da rotina Show_Keys
em um boto recm-criado de nome Keys.
Neste tpico abandonaremos, temporariamente, a aplicao que temos incrementado at agora. Trabalharemos
apenas com as caractersticas dos relacionamentos mestre-detalhe.
7.31) Crie uma nova aplicao de nome EX31. As seguintes tabelas devem ser apresentadas numa mesma canvas:
Departamento: formato Form, todas as colunas, 1 (um) registro por tela.
Funcionrio: formato Tabular, todas as colunas, oito registros por tela.
As seguintes caractersticas devem ser configuradas para esta aplicao:
O bloco de funcionrio deve ser construdo em uma canvas do tipo Empilhado (Stack) com uma barra de
rolagem de tal forma que parte dos dados fique visvel na canvas principal. Para visualizao das demais
informaes, o usurio dever se utilizar da barra de rolagem. A canvas fica visvel todo o tempo sobre a canvas
de Contedo (Content) onde foi construdo Departamento.
O relacionamento entre os blocos deve ser do tipo Departamento (pai), Funcionrio (Filho).
No deve ser possvel excluir um registro em um pai quando houver registros nos respectivos filhos.
No deve ser possvel uma pesquisa em um filho se no houver registro alocado no pai correspondente.
To logo o registro-pai seja trazido, o(s) registro(s)-filho deve(m) ser trazido(s) imediatamente.
A Figura-resposta 7.31A nos apresenta o esquema do relacionamento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
899
Iniciaremos pelo Assistente criando os trs blocos e estabelecendo os relacionamentos-padro. Os trs blocos devem
ser criados na mesma tela para facilitar a visualizao dos testes.
Voc observar no Navegador que existem dois objetos de relacionamento: um controla a ligao de Departamento
com Projeto e outro controla a ligao de Projeto com Projeto Atividade. Lembre-se de que o objeto Relao
sempre encontrado no bloco Mestre do relacionamento.
As demais caractersticas so informadas diretamente nas propriedades da relao, ou seja:
A propriedade Excluir Comportamento do Registro (Delete Record Behavior) deve receber o valor No-Isolado
(Non-Isolated) para o relacionamento de Departamento com Projeto e Em Cascata (Cascading) para o
relacionamento de Projeto com Projeto-Atividade.
J a propriedade Impedir Operaes sem Mestre (Prevent Masterless Operation) deve receber o valor No (False)
em ambas as ligaes.
Por fim, as propriedades Diferido (Deferred) e Consulta Automtica (Automatic Query) so responsveis pela
coordenao de leitura. Para a ligao de Departamento com Projeto, Diferido deve receber No (consulta
Quando estivermos utilizando o Assistente, a tempo do relacionamento de Projeto sero apresentadas duas
possibilidades de relao. Devemos escolher aquela associada a Func, pois a ligao desejada entre Func e Proj e
entre Func e Depto.
Neste exerccio os dois objetos Relao (Relation) esto pendurados em Func, pois este bloco o mestre das duas ligaes.
As demais caractersticas so informadas diretamente nas propriedades da relao, ou seja:
A propriedade Excluir Comportamento do Registro (Delete Record Behavior) deve receber o Em Cascata (Cascading) para ambos os relacionamentos. No nosso caso especfico, esta ao no funcionar, pois existem dois
relacionamentos entre Func e Depto, ou seja, o departamento no pode ser removido uma vez que existam
funcionrios pertencentes a ele. Outro problema que Projeto deve ser removido antes de Departamento, pois
tambm filho de departamento.
A propriedade Impedir Operaes sem Mestre (Prevent Masterless Operation) deve receber o valor No (False)
em ambas as ligaes.
Por fim, as propriedades Diferido (Deferred) e Consulta Automtica (Automatic Query) so responsveis pela
coordenao de leitura. Diferido deve receber Sim e Consulta Automtica No em ambas as relaes.
7.34) Crie uma nova aplicao de nome EX34. As seguintes tabelas devem ser apresentadas numa mesma canvas:
Projeto: formato Form, todas as colunas, 1 (um) registro por tela.
Atividade: formato Form, todas as colunas, 1 (um) registro por tela.
Projeto Atividade: formato Tabular, todas as colunas, oito registros por tela.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
901
Quando voc vier a usar o Assistente para a montagem dos relacionamentos, selecione os blocos na seguinte
ordem: bloco Projeto (Mestre), bloco Atividade (Mestre) e, por ltimo, o bloco Projeto-Atividade.
Para a montagem dos relacionamentos, para o bloco Projeto Atividade ser mostrada uma lista com dois
relacionamentos: um com projeto e outro com atividade. Selecione o de projeto e d OK, mas no clique no boto
Prximo. Clique no boto Definir Relacionamento novamente e selecione a ligao com atividade. S ento continue o processo. Sero criados dois objetos Relao (Relation). Um entre Projeto e Projeto Atividade e outro de
Atividade com Projeto Atividade.
Com as demais propriedades voc j sabe o que fazer. Teste o resultado. A leitura de Projeto-Atividade s ocorre
com os dois registros-mestre selecionados. Verifique!
7.35) Crie uma nova aplicao de nome EX35 baseada na aplicao EX32. As seguintes caractersticas devem ser
configuradas para esta aplicao:
No ser permitida a remoo de Departamento se existirem projetos.
No ser permitida a remoo de Projeto se existirem registros em Projeto Atividade.
No deve ser possvel uma pesquisa em um filho se no houver registro alocado no pai correspondente.
To logo o registro de Departamento seja trazido o(s) registro(s) filhos devem ser trazido(s) imediatamente.
Porm somente devem ser consultados os registros de Projeto Atividade quando o usurio estabelecer a navegao
para este bloco.
Quando um projeto for trazido do banco de dados, deve ser trazido simultaneamente o nome do coordenador
do projeto.
Quando uma atividade for trazida ou alterada, deve ser apresentada a sigla da nova atividade.
Neste exerccio partimos de uma aplicao que possua os relacionamentos definidos. No entanto, alteramos as
propriedades dos relacionamentos para que atendessem s especificaes. Esta parte voc j utilizou bastante nos
exerccios anteriores. A novidade deste exerccio que foi solicitada a apresentao do nome do responsvel pelo
projeto e a sigla da atividade.
Para tal criamos dois itens no pertencentes ao banco de dados: um no bloco Projeto, chamado Nm_Coordenador,
o outro no bloco Prjatv, chamado Sg_Atividade.
O prximo passo garantir que a tempo de leitura seja obtido o nome de cada coordenador. Por este motivo
criamos um trigger Post-Query (nvel bloco) que obtenha o nome do funcionrio que seja coordenador, ou seja,
semelhante ao cd_resp.
Listagem-resposta 7.35A
SELECT NM_FUNC INTO :NM_COORDENADOR
FROM FUNC
WHERE CD_MAT = :CD_RESP;
Listagem-resposta 7.35B
SELECT NM_SIGLA INTO :SG_ATIVIDADE
FROM ATIV
WHERE CD_ATIV = :CD_ATIV;
Para garantir que quando o usurio modificar a atividade sua sigla seja alterada tambm, repetimos esta ao num
trigger When-Validate-Item associado ao item cd_ativ.
7.36) Construa uma aplicao de nome EX36 baseada na aplicao EX30. Acrescente a seguinte funcionalidade:
Corrija os pontos da aplicao 30 em que no foram usadas variveis de ambiente:
a) Tecla Ajuda Contexto de bloco.
b) Navegao entre os blocos.
c) Nome do bloco atual.
d) Crtica de grau de instruo s na incluso.
e) Quando o boto Consultar for acionado, navegue para um item do bloco atual.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
903
Listagem-resposta 7.36A
DECLARE
TEMPO
TIMER;
NM_CANVAS VARCHAR2 (30);
BEGIN
NM_CANVAS := GET_ITEM_PROPERTY (:SYSTEM.CURSOR_ITEM, ITEM_CANVAS);
IF NM_CANVAS = 'CFUNC' THEN
TEMPO := CREATE_TIMER ('TIMER_FUNC', 15000, NO_REPEAT);
SHOW_VIEW ('ST_FUNC');
ELSIF NM_CANVAS = 'CDEPTO' THEN
TEMPO := CREATE_TIMER ('TIMER_DEPTO', 15000, NO_REPEAT);
SHOW_VIEW ('ST_DEPTO');
ELSIF NM_CANVAS = 'CPROJ' THEN
TEMPO := CREATE_TIMER ('TIMER_PROJ', 15000, NO_REPEAT);
SHOW_VIEW ('ST_PROJ');
END IF;
END;
Na Listagem-resposta 7.36A apresentamos uma soluo para o problema (trigger Key-Help em nvel de Form).
Inicialmente, obtemos o nome da canvas em que o item que detm o foco (System.Cursor_Item) est pendurado.
Esta opo foi adotada em funo de termos mais de um bloco (Controle) na mesma canvas e, ainda, utilizaremos
este mesmo bloco para incluir itens em outras canvas. Deste modo no seria suficiente obtermos o nome do bloco
atual, precisvamos de uma informao que identificasse, sem dvida, o posicionamento atual; portanto, adotamos
o nome da canvas. Em seguida, criamos um timer com nome especfico para cada canvas e acionamos o texto de
ajuda correspondente.
Listagem-resposta 7.36B
DECLARE
NM_TIMER
VARCHAR2 (30);
BEGIN
NM_TIMER := GET_APPLICATION_PROPERTY (TIMER_NAME);
IF NM_TIMER = 'TIMER_FUNC' THEN
HIDE_VIEW ('ST_FUNC');
ELSIF NM_TIMER = 'TIMER_DEPTO' THEN
HIDE_VIEW ('ST_DEPTO');
ELSIF NM_TIMER = 'TIMER_PROJ' THEN
HIDE_VIEW ('ST_PROJ');
END IF;
END;
Em seguida corrigimos o trigger When-Timer-Expired para que escondesse a canvas de ajuda que tenha sido acionada.
A rotina Get_Application_Property recebendo como parmetro Timer_Name indica o nome do controle de tempo
que expirou. Desta forma pudemos esconder a canvas adequada.
A navegao entre os blocos est apresentada na Listagem-resposta 7.36C. No trigger When-Button-Pressed do
boto Navega utilizamos o mesmo estratagema de obter o nome da canvas. O restante j havia sido feito. Aps este
acerto, podemos remover o item Bloco do bloco de controle.
Listagem-resposta 7.36C
DECLARE
NM_CANVAS VARCHAR2 (30);
BEGIN
NM_CANVAS := GET_ITEM_PROPERTY (:SYSTEM.CURSOR_ITEM, ITEM_CANVAS);
Para que a crtica seja realizada apenas na incluso devemos controlar o estado do registro, como podemos verificar
na Listagem-resposta 7.36D.
Para efetuar a navegao para o bloco correto, mais uma vez adotamos obter o nome da canvas atual. Esta ao est
montada na Listagem-resposta 7.36E.
A prxima solicitao a apresentao do ltimo comando Select executado. Isto resolvido atravs da varivel de
ambiente System.Last_Query; basta que a utilizemos em um comando message.
Pede-se, agora, a criao de uma rotina que receba como parmetro uma data e calcule a idade relativa.
Nossa ltima tarefa criar uma rotina que receba como parmetro um texto e determine a quantidade de letras
que o mesmo contm.
7.37) Construa uma aplicao de nome EX37 baseada na aplicao EX36. Acrescente a seguinte funcionalidade:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
905
A contabilizao da idade e letras a tempo de leitura depende da localizao do item que receber o valor. Se o item
for includo no bloco de dados correspondente, podemos acionar as rotinas no trigger de Post-Query. Se o item for
includo no bloco de controle (que no tem sincronismo com o bloco de dados e, no nosso caso, do tipo Registro
Simples Single Record), devemos acionar as rotinas na trigger de When-New_Record_instance de tal forma que,
quando o usurio navegar para frente ou para trs no bloco de dados, o item seja calculado novamente.
Para efeito de teste criamos a idade e a quantidade de letras para nome do funcionrio e nome do projeto no bloco
de controle e a quantidade de letras para departamento no bloco Depto. Teste as duas formas de trabalho.
Para garantir que todos os itens alfanumricos sejam informados com letras maisculas, basta que alteremos a
propriedade Restrio a Maisculas/Minsculas (Case Restriction) para Superior (Upper).
A ltima ao diz respeito ao item imagem. Para efeito de teste, alteramos:
Mostrar Paleta (Show Palette) para Sim (Yes).
Estilo de Dimensionamento (Sizing Style) para Ajustar (Adjust).
D uma lida nas propriedades do grupo funcional de um item do tipo imagem. A Figura-resposta 7.37A apresenta
a verso atual da aplicao.
Como ltima tarefa, devemos criar um parmetro (veja o n Parmetros) do tipo caracter com tamanho 1 (escolha
um valor inicial para teste). No trigger de Pre-Form, fazemos a crtica relativa ao horrio.
7.38) Construa uma aplicao de nome EX38 baseada na aplicao EX37. Acrescente a seguinte funcionalidade:
Criar um boto na barra de ferramentas horizontal que acione a aplicao EX37 passando como parmetro o
perodo de execuo.
Quando for lido um funcionrio que seja gerente, impea que seu salrio seja alterado modificando as
caractersticas do item na canvas.
Na tela de funcionrio, se o usurio passar o mouse sobre o cdigo do departamento, o nome deste deve ser
apresentado em um item flutuante (semelhante ao Dica da Ferramenta) prximo ao campo.
Utilizar a rotina Letras para validao de nome e sobrenome, impedindo que a soma das duas informaes
ultrapasse 20 caracteres.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
907
Na Listagem-resposta 7.38A escolhemos chamar a segunda aplicao com Call_Form. Uma vez que esta aplicao
deve receber um ou mais parmetros, devemos criar uma lista de parmetros para efetuar esta passagem. A rotina
Create_Parameter_Lista criou uma lista de nome LEX37 e adicionou a esta lista o parmetro Horrio (nome do
parmetro na aplicao chamada) com o valor A.
Quando acionamos a chamada da rotina Call_Form, indicamos o nome da lista. Entre no arquivo de Ajuda do
Form Builder e verifique o que significam os demais parmetros informados na chamada.
Aps a utilizao da lista de parmetros, devemos destru-la para que no ocupe memria desnecessariamente.
Nosso prximo passo ser apresentar o nome do departamento. Devemos cumprir diversas etapas para a realizao desta
ao. Inicialmente, devemos ler e armazenar o nome do departamento a cada funcionrio que for lido do banco de dados.
Com este objetivo montamos uma lgica que leia o nome do departamento dentro de uma rea (Pacote.Texto) que
possa ser consultada da prxima vez que executarmos este trigger, ou seja, em um item ou em uma varivel de
pacote (escolhemos criar um pacote de nome Pacote e dentro dele duas variveis de controle depto_ant e texto). Se
o cdigo do departamento for igual ao anterior, no precisamos realizar a leitura novamente, pois a informao j
est armazenada na varivel de pacote Texto.
NUMBER := 0;
VARCHAR2 (300);
Para armazenamento, criamos um item no bloco de departamento chamado nm_depto (no item do bloco de
dados). Com esta rotina preenchemos o nome do departamento para cada linha de funcionrio. Desta forma
possvel a navegao para a frente e para trs, pois o nome est preservado.
Para apresentao da informao criamos um item no bloco Controle chamado nome_depto, que um item
apenas de visualizao. Preenchemos sua propriedade Visvel (Visible) com No (No) para que ele ficasse
temporariamente invisvel. No entanto, estabelecemos seu posicionamento e tamanho na canvas de Cfunc. Outra
propriedade importante a ser preenchida chama-se Finalizado (Rendered), seu valor deve ser preenchido com No
(No) para que quando este objeto se torne visvel ele no seja recoberto pelos objetos prximos.
Para tornar o item visvel, alteramos sua propriedade a tempo de execuo. Sendo assim, usamos os triggers WhenMouse_Enter para tornar o item visvel, e When-Mouse-Leave para torn-lo invisvel novamente.
Se voc executar sua aplicao neste ponto possvel que venha a receber alguns erros de crtica relativo a cargo e
salrio. Isto pode acontecer porque criamos um novo item no bloco de funcionrio (nm_depto), que mesmo no
sendo um item do banco de dados, teve seu valor alterado, fazendo com que o registro precisasse de validao e,
conseqentemente, acionando o trigger When-Validate-Record. Observe que o estado do registro no foi alterado,
ele continua com o estado de Query, porm necessitando de validao.
Para contornar esta situao, inclumos no trigger When-Validate-Record um teste, como mostrado na Listagemresposta 7.38E, com a finalidade de pular as crticas quando o registro est na situao de Query.
Nosso prximo passo ser impedir a atualizao do salrio do gerente. Este controle pode ser feito de duas formas
diferentes: podemos trocar a propriedade Updateable da instncia, para indicarmos que naquele registro o item
vl_sal no pode ser alterado, como mostrado na Listagem-resposta 7.38F.
Listagem-resposta 7.38F
IF :FUNC.GERENTE IS NOT NULL THEN
IF :FUNC.CD_MAT = :FUNC.GERENTE THEN
SET_ITEM_INSTANCE_PROPERTY ('FUNC.VL_SAL', UPDATEABLE,
CURRENT_RECORD, PROPERTY_FALSE);
END IF;
END IF;
A segunda forma de controle , a cada linha lida, armazenar o cdigo do gerente, e quando houver navegao para
um novo registro compararmos esta informao com a matrcula e alterarmos a propriedade Enabled do item.
Como j temos pronta a rotina de leitura do nome do departamento, acrescentamos um novo item no bloco de
funcionrio chamado Gerente e, ao efetuarmos a leitura do nome do departamento, obtemos tambm o cdigo do
gerente. Veja a Listagem-resposta 7.38B. Mostramos na Listagem-resposta 7.38G a seguir a alterao da propriedade
Enabled feita no trigger When-New-Record-Instance.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
909
A ltima tarefa requer apenas a utilizao da rotina letras, que foi acrescida no fim do trigger When-Validate-Record.
7.39) Construa uma aplicao de nome EX39 baseada na aplicao EX38. Acrescente a seguinte funcionalidade:
Crie uma procedure na base de dados de nome Qtsexo que receba como parmetro um determinado departamento
e retorne a quantidade de funcionrios de cada sexo do departamento informado.
Acione a rotina Qtsexo quando um departamento for escolhido (na canvas de Funcionrio) e quando cada
departamento for lido na canvas de Departamento.
A cada 30 minutos a aplicao deve verificar se a hora atual ainda est dentro dos limites de tempo autorizados
para esta aplicao.
Neste exerccio nosso primeiro teste a criao da rotina na base de dados. Veja a Listagem-resposta 7.39A.
Listagem-resposta 7.39A
PROCEDURE QTSEXO (PDEPTO IN VARCHAR2,
QTFEM OUT NUMBER, QTMASC OUT NUMBER) IS
BEGIN
SELECT FEM, MAS INTO QTFEM, QTMASC
FROM (SELECT COUNT (*) FEM FROM FUNC
WHERE IN_SEXO = 'F' AND CD_DEPTO = PDEPTO) F,
(SELECT COUNT (*) MAS FROM FUNC
WHERE IN_SEXO = 'M' AND CD_DEPTO = PDEPTO) M;
END;
Para fazer esta criao, basta que voc selecione o n Unidades de Programas Armazenadas (Stored Program Units)
subordinado ao usurio Desenv no n Objetos do Banco de Dados (Database Objects).
Para utilizao da rotina, criamos dois itens no bloco de controle SexoF e SexoM para receberem os valores calculados.
Inclumos, ento, um trigger When-Validate-Item para o item Depto do bloco de controle.
Observe que, para acionarmos a rotina QtSexo, criamos duas variveis locais ao bloco de PL/SQL e quando obtivemos
o valor atribumos ao item. Um item no deve ser passado como parmetro para uma rotina armazenada no banco
de dados (ocorre erro na execuo).
A prxima etapa requer que verifiquemos a hora atual a cada 30 minutos. Uma vez que repetiremos a mesma
crtica j desenvolvida no Pre-Form, preferimos criar uma funo.
A funo deve ser acionada no Pre-Form a cada 30 minutos. Desta forma, criamos uma varivel de tempo permanente
no pacote.
Na rotina de Pre-Form inicializamos esta varivel com a indicao de que esta verificao se faa a cada 30 minutos
ou 1.800.000 milissegundos.
Finalmente, no trigger When-Timer-Expired devemos verificar se este Timer especfico foi acionado e fazer as
validaes necessrias.
7.40) Construa uma aplicao de nome EX40 baseada na aplicao EX39. Acrescente a seguinte funcionalidade:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
911
Observe que nos utilizamos daquela varivel Texto existente no package Pacote (no precisamos declarar uma
nova varivel, pois ela tem existncia por toda a aplicao). Atribumos como valor inicial para esta varivel o
texto Order By (nove posies). No se esquea de esvaziar a varivel ao trmino do uso.
A solicitao seguinte tem o objetivo de acionar um outro relatrio de nome Rep17.
O processo o mesmo de quando acionamos uma outra aplicao com parmetro. A diferena est na rotina
necessria para executarmos o relatrio, chamada Run_Product. Essa rotina executa tanto um relatrio quanto um
mdulo do Oracle Graphics.
Como ltimo passo, devemos criar o trigger na base de dados; portanto, retorne ao n Objetos do Banco de Dados
(Database Objects), expanda o n do usurio Desenv, expanda o n das tabelas (Tables) e expanda o n da tabela
Func. Crie um objeto no n Triggers (Figura-resposta 7.40A).
7.41) Construa uma aplicao de nome EX41 baseada na aplicao EX40. Acrescente a seguinte funcionalidade:
Crie uma rotina que recebe um texto e mostre este texto em uma janela de Alerta que possua um nico boto.
Todas as mensagens enviadas pelo programa (as messages) devem ser substitudas por mensagens apresentadas
pelo Alerta.
Todas as mensagens de erro ou aviso fornecidas pelo Forms Runtime devem ser apresentadas na janela do Alerta.
Criamos, inicialmente, um objeto Alerta de nome Aviso contendo um nico boto. Em seguida, criamos uma
unidade de programa chamada Mens.
Para substituir as chamadas Message por chamadas Mens, utilize a opo Localizar/Substituir PL/SQL do menu Programa.
A Listagem-resposta 7.41B mostra a incluso do trigger On-Message para garantir que as mensagens do sistema
tambm sejam fornecidas pelo alerta. O trigger On-Error j se encontrava presente na aplicao e a chamada
rotina Message foi substituda por Mens.
7.42) Construa uma aplicao de nome EX42 baseada na aplicao EX41. Acrescente a seguinte funcionalidade:
Crie um editor com letra Courier New, tamanho 8, azul, quebra de linha em fronteira de palavra e que contenha
uma barra de rolagem vertical.
Crie um boto na barra de ferramentas horizontal que acione o editor apenas para os itens: nm_depto, nm_foto
e nm_proj.
Para os demais itens vedada a utilizao de editor.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
913
Listagem-resposta 7.42A
IF :SYSTEM.CURSOR_ITEM IN ('FUNC.NM_FOTO', 'DEPTO.NM_DEPTO',
'PROJ.NM_PROJ') THEN
EDIT_TEXTITEM;
END IF;
Para que o editor possa ser acionado pela rotina Edit_textitem, devemos indic-lo nas propriedades do item, uma
vez que esta rotina no recebe como parmetro o nome do editor.
Neste conjunto de propriedades (n Editor) podemos informar o nome do editor ou Sytem_Editor para que seja
acionado o editor do sistema (no nosso caso o bloco de notas) e as coordenadas de apresentao do editor. Para
calcular estas coordenadas, obtenha as coordenadas do objeto sobre o qual o editor ser apresentado e acrescente
a largura da barra de ferramentas vertical (coordenada X) ou a largura da barra de ferramentas horizontal + largura
do menu (coordenada Y).
7.43) Construa uma aplicao de nome EX43 baseada na aplicao EX42. Acrescente a seguinte funcionalidade:
Especificar os seguintes atributos visuais:
a) av_prompt letra vermelha, Arial, tamanho 8.
b) av_editor letra azul, Courier New, tamanho 8.
c) av_item_atu letra preta, Arial, tamanho 8, cor de fundo branca.
d) av_item_cons letra cinza, tipo Courier New, tamanho 8, cor de fundo branca.
e) av_item_atu_corr cor de fundo cinza.
f) av_item_mod cor de fundo vermelha.
g) av_item_inc cor de fundo azul.
h) av_item_check letra vermelha, Arial, tamanho 8.
i) av_item_radio letra vermelha, Arial, tamanho 8.
Aplique os atributos visuais da seguinte forma:
a) Para os prompts de todos os itens av_prompt
b) Para o editor av_editor
c) Para os itens atualizveis av_item_atu
d) Para os itens somente consultados av_item_cons
e) Para os itens com ocorrncia, aplicvel ao registro corrente av_item_atu_corr
f) Para os itens-chave cujo registro tenha sido modificado (s na instncia modificada) av_item_mod
g) Para os itens-chave cujo registro tenha sido includo (s na instncia modificada) av_item_inc
h) Para os radio groups av_item_radio
i) Para os check box av_item_check
A criao dos objetos atributos visuais feita no n Atributos Visuais (Visual Attributes).
Para que somente a instncia do registro corrente seja alterada, devemos modificar por programao seus atributos,
como apresentado no trecho de cdigo (parte do trigger) da Listagem-resposta 7.43A.
7.44) Construa uma aplicao de nome EX44 baseada na aplicao EX43. Acrescente a seguinte funcionalidade:
Criar um boto Ajuda na barra de ferramentas horizontal. Ao primeiro toque, deve ser mostrado na rea de mensagem
um texto de ajuda sobre o item que detm o foco. No segundo toque, deve ser mostrada na rea de mensagem a
canvas de ajuda referente ao bloco corrente. Como esta ao um pouco trabalhosa, teste apenas para trs itens.
Retire o uso da tecla Ajuda; utilize apenas o boto.
Nesta aplicao, inicialmente incluiremos trs itens do tipo Item de Texto (no ativado) e os posicionaremos
exatamente sobre a rea de mensagem em cada uma das canvas. Esses itens devem ter cor de fundo cinza ou no
ter cor de fundo. As propriedades indicativas de mltiplas linhas e tamanho devem ser habilitadas e alteradas para
300 respectivamente.
Em seguida devemos incluir o boto na barra de ferramentas horizontal com o seguinte trigger: When-ButtonPressed (Listagem-resposta 7.44A).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
915
Observe que criamos um item no pacote chamado Vez (inicializado com zero). Se o valor deste item for zero,
montada dinamicamente uma mensagem de acordo com o item. Se o valor do item for um, executamos as aes
previstas para a tecla de Ajuda.
Criamos, ainda, em nvel de bloco (em todos os trs blocos de dados) um trigger When-New-Item-Instance para
que, quando o usurio navegar para um outro item, a varivel vez retorne a zero e os textos sejam inicializados.
Listagem-resposta 7.44B
PACOTE.VEZ := 0;
:CONTROLE.TXT_FUNC := NULL;
:CONTROLE.TXT_DEPTO := NULL;
:CONTROLE.TXT_PROJ := NULL;
7.45) Construa uma aplicao de nome EX45 baseada na aplicao EX44. Acrescente a seguinte funcionalidade:
Crie um record group esttico com as seguintes colunas: nm_item (30 caracteres), tx_ajuda (300 caracteres).
Preencha o record group anterior com o nome de dez itens da sua aplicao juntamente com dez mensagens de ajuda.
Faa uma funo que receba como parmetro o nome do item e o pesquise no record group anterior, retornando
a mensagem correspondente ou No encontrada mensagem de ajuda.
Substitua o teste presente no boto de ajuda pelo uso da rotina.
Nosso primeiro passo neste exerccio criar o Record Group do tipo esttico.
7.46) Construa uma aplicao de nome EX46 baseada na aplicao EX45. Acrescente a seguinte funcionalidade:
Crie uma rotina para preencher um record group dinmico que contenha o menor e o maior valor salarial de
cada cargo.
Utilize esse record group para estabelecer a crtica de cargo x salrio.
Utilize esse record group para apresentar na rea de mensagem a faixa salarial vlida quando o usurio passar o
mouse sobre o cdigo do cargo.
Nosso primeiro passo nesta aplicao a criao do Record Group dinmico. Inclumos a criao deste objeto no
trigger Pre-Form; no entanto criamos no package Pacote um conjunto de variveis a fim de armazenar os
identificadores referentes ao grupo criado. Nesta primeira listagem-resposta (7.46A), so mostradas as variveis
criadas para dar suporte criao do grupo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
917
500 - 1500');
1501 - 2000');
2001 - 2500');
2501 - 3000');
3001 - 3500');
3501 - 4000');
4001 - 10000');
Esta criao e este preenchimento so apresentados na Listagem-resposta 7.46B. Inicialmente, criamos o grupo,
em seguida, cada uma das colunas e posteriormente preenchemos cada uma das linhas com o intervalo de cargos,
o intervalo de salrios e a mensagem de erro a ser apresentada.
Para que uma mensagem seja apresentada prxima ao item nr_cargo, devemos criar um item do tipo Item de
Exibio (Display Item) com tamanho de 120 bytes, presente na canvas Cfunc, alinhado prximo ao item, sem
bevel, com a propriedade Finalizado (Rendered) desabilitada (No), amarelo claro, com letras cinza, invisvel.
A atribuio a este item deve ser feita no trigger When-Mouse-Enter do item nr_cargo. Devemos tambm torn-lo
visvel neste momento. Quando o mouse sair de cima do item devemos limpar o item e torn-lo invisvel de novo.
Listagem-resposta 7.46C
DECLARE
ISAL
NUMBER;
SSAL
NUMBER;
BEGIN
:CONTROLE.MSG_CARGO := '';
FOR I IN 1..7 LOOP
IF GET_GROUP_NUMBER_CELL (PACOTE.RGC_CD_CARGO_INF, I) <= :FUNC.NR_CARGO AND
GET_GROUP_NUMBER_CELL (PACOTE.RGC_CD_CARGO_SUP, I) >= :FUNC.NR_CARGO THEN
ISAL := GET_GROUP_NUMBER_CELL (PACOTE.RGC_VL_INF, I);
SSAL := GET_GROUP_NUMBER_CELL (PACOTE.RGC_VL_SUP, I);
:CONTROLE.MSG_CARGO := 'Intervalo salarial vlido entre '||
isal||' e '||ssal;
EXIT;
END IF;
Observe que feito um controle para que a lista somente seja preenchida a cada 10 minutos, a fim de diminuir o
trfego na rede.
Quando a Lista apresentada ao usurio e este faz uma escolha, devemos atribuir ao item da canvas correspondente
o valor presente no item controle.cd_depto.
Neste caso utilizamos a rotina Copy. Essa rotina recebe como primeiro parmetro o valor a ser atribudo e o item
para o qual o valor deve ser informado. O nome do item est contido na varivel de sistema Cursor_Item, sendo
por este motivo utilizado.
7.48) Construa uma aplicao de nome EX48 baseada na aplicao EX47. Acrescente a seguinte funcionalidade:
Crie um record group esttico contendo uma coluna de data.
Este record group dever ser preenchido dinamicamente da seguinte forma:
a) O dia ser sempre 10.
b) A partir da data atual, obter um ms para trs e seis meses para frente.
c) Incluir a data atual.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
919
Listagem-resposta 7.48A
DECLARE
RETORNO
NUMBER;
BEGIN
RETORNO := POPULATE_GROUP_WITH_QUERY ('RG_DATA',
'SELECT ADD_MONTHS (TRUNC (SYSDATE, ''MM'') + 9, '||
'ROWNUM - 2) FROM DEPTO WHERE ROWNUM < 9');
END;
Na Listagem-resposta 7.48A encontramos uma forma de preencher as oito linhas de data com todas as
especificaes pedidas.
Listagem-resposta 7.48B
DECLARE
LISTA
BOOLEAN;
RETORNO
NUMBER;
BEGIN
IF :SYSTEM.CURSOR_ITEM = 'FUNC.DT_ADM' THEN
LISTA := SHOW_LOV;
GOTO FIM;
ELSIF PACOTE.LOV_TIMER IS NULL THEN
RETORNO := POPULATE_GROUP ('RG_DEPTO');
IF RETORNO = 0 THEN
PACOTE.LOV_TIMER := SYSDATE;
END IF;
ELSIF (SYSDATE - PACOTE.LOV_TIMER) > 10/1440 THEN
RETORNO := POPULATE_GROUP ('RG_DEPTO');
IF RETORNO = 0 THEN
PACOTE.LOV_TIMER := SYSDATE;
END IF;
END IF;
LISTA := SHOW_LOV;
IF LISTA THEN
COPY (:CONTROLE.CD_DEPTO, :SYSTEM.CURSOR_ITEM);
END IF;
<<FIM>>
NULL;
END;
Listagem-resposta 7.50A
IF :SYSTEM.CURSOR_ITEM = 'FUNC.CD_MAT' THEN
DEBUG.SUSPEND;
END IF;
A Listagem-resposta 7.50A mostra esta forma de interrupo. Poderamos tambm usar a varivel de exception
Break, porm, neste caso, deveramos causar a exceo: Raise Debug.Break (o efeito o mesmo).
7.51) Continue utilizando a aplicao EX49. Acrescente a seguinte funcionalidade:
Crie um trigger na pesquisa do record group de cargo para ser acionado quando for lida a partir da terceira linha
de cargo.
Teste as interrupes verificando:
a) O valor das variveis de ambiente.
b) O valor das variveis locais.
c) O valor dos itens.
No caso do trigger, definimos uma ao a tempo de execuo que cause a interrupo condicionalmente, como
vemos na Figura-resposta 7.51A.
Para posicionamento desta interrupo selecione o trigger When-Mouse-Enter do item cargo, posicione o mouse
sobre a linha 11 (SSAL := GET_GROUP_NUMBER_CELL(PACOTE.RGC_VL_SUP, I);) e, em seguida escolha a opo Gatilho do
menu Depurar para que o dilogo seja apresentado. Preencha, ento, com o texto apresentado na Figura 7.51.
Faa, agora, os testes pedidos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
921
7.52) Crie uma aplicao que estabelea o cadastramento de Departamentos, os quais devem ser apresentados
como uma rvore hierrquica. Deve ser possvel a incluso e alterao de departamentos utilizando esta estrutura.
Para o boto Incluir quando o usurio apertar o boto Incluir j deve ter, previamente, selecionado um n-pai.
Este boto incluir um elemento filho neste n selecionado com label *** (3 asteriscos) e valor nulo. Simultaneamente
deve ser includa uma linha no vetor de controle indicando que deve ser feita uma incluso no banco de dados.
Para o boto Alterar quando o usurio pressionar o boto Alterar j dever, previamente, ter selecionado um
n. Os dados preenchidos na tela sero incorporados a este n para posterior atualizao do banco de dados.
A aplicao desenvolvida no estabeleceu critrios rgidos de crtica. Certamente, voc poder sofisticar
tremendamente o exemplo que veremos a seguir. Nosso intuito apenas o de testar o pacote Ftree juntamente
com o item do tipo rvore Hierrquica.
Inicialmente criamos uma aplicao vazia contendo um bloco de nome Htree contendo um nico item de nome
Adepto e tipo rvore Hierrquica. Esta rvore ser preenchida inicialmente atravs do comando select apresentado
na Listagem-resposta 7.52A, apresentada a seguir.
Listagem-resposta 7.52A
SELECT
Em seguida limitamos as teclas disponibilizadas para o usurio, e desta forma criamos as triggers Key-Next-Item
(com a chamada rotina Next_Item), Key-Exit (com a chamada rotina Exit_Form) e Key-Others (com o texto
Null; impedindo o uso de qualquer outra tecla).
Para que os dados do item selecionado fossem incorporados tela, usamos uma trigger When-Tree-Node-Selected
subordinada ao item Adepto, com o texto apresentado na Listagem-resposta 7.52C.
Em nossa canvas acrescentamos trs botes: Incluir, Alterar e Salvar. Para o boto Incluir adicionamos o seguinte cdigo:
A rotina Add_Tree_Node recebe como parmetro o nome do item, um n (informamos o n-pai), a indicao do
tipo de n (Parent_Offset indica que o n informado deve ser o pai do n a ser criado. Poderamos informar
tambm Sibling_Offset, indicando que o n informado seria irmo, ou seja, com o mesmo nvel do n a ser
criado), posicionamento do n no grupo (escolhemos Last_Child), o estado do n aps a incluso (decidimos que
o n deveria ser mostrado contrado) e os valores de Label, cone e Valor para o n a ser criado.
Aps a incluso do n na rvore, adicionamos uma linha no vetor declarado no Package Pacote contendo a ao
a ser realizada no banco de dados e o endereo do n.
A seguir veremos o contedo do boto Alterar.
Iniciamos esta lgica verificando se este n j se acha presente no vetor. Caso isto seja verdade no temos necessidade
de incluir uma segunda indicao. Se este n no houver sido modificado ainda, devemos incluir a solicitao de
modificao no vetor (para controle). Em seguida, alteramos as propriedades do n para que refletissem os valores
preenchidos pelo usurio. Observe que o n selecionado, representado pela varivel Pacote.N utilizado como
referncia de atualizao (no h crtica).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
923
Para que o array Vetor fosse sempre inicializado, na trigger Pre-form removemos todo o seu contedo.
Finalmente, quando o usurio pressiona o boto Salvar, simulamos um processo transacional do Oracle. Percorremos
o Vetor e para cada linha encontrada enviamos o comando Insert ou Update para o banco de dados. Para forar a
atualizao executamos um Commit_Form. Nossa ltima etapa limpar novamente o vetor para que no faamos
as atualizaes duas vezes.
Listagem-resposta 7.52H
DECLARE
WCD_DEPTO
DEPTO.CD_DEPTO%TYPE;
WNM_DEPTO
DEPTO.NM_DEPTO%TYPE;
WCD_DEPTO_CTB DEPTO.CD_DEPTO_CTB%TYPE;
NO_PAI
FTREE.NODE;
BEGIN
FOR I IN 1..PACOTE.INX LOOP
WCD_DEPTO
:= FTREE.GET_TREE_NODE_PROPERTY ('ADEPTO', PACOTE.VETOR(I).N,
FTREE.NODE_LABEL);
WNM_DEPTO
:= FTREE.GET_TREE_NODE_PROPERTY ('ADEPTO', PACOTE.VETOR(I).N,
FTREE.NODE_VALUE);
NO_PAI
:= FTREE.GET_TREE_NODE_PARENT('ADEPTO', PACOTE.VETOR(I).N);
WCD_DEPTO_CTB := FTREE.GET_TREE_NODE_PROPERTY ('ADEPTO', NO_PAI,
FTREE.NODE_LABEL);
IF PACOTE.VETOR(I).IND_STATUS = 'I' THEN
INSERT INTO DEPTO (CD_DEPTO, NM_DEPTO, CD_DEPTO_CTB)
VALUES (WCD_DEPTO, WNM_DEPTO, WCD_DEPTO_CTB);
ELSIF PACOTE.VETOR(I).IND_STATUS = 'A' THEN
UPDATE DEPTO
SET NM_DEPTO
= WNM_DEPTO,
CD_DEPTO_CTB = WCD_DEPTO_CTB
WHERE CD_DEPTO
= WCD_DEPTO;
END IF;
END LOOP;
END;
COMMIT_FORM;
PACOTE.INX := 0;
PACOTE.VETOR.DELETE;
PACOTE.N := NULL;
Observe que at mesmo o cdigo do departamento contbil pode ser preenchido no banco de dados, pois podemos obter
o n-pai relativamente ao n includo ou alterado e determinar o cdigo do departamento na propriedade Node_Label.
Muitas crticas poderiam ser acrescidas a este programa garantindo, por exemplo, que o cdigo do departamento
no pudesse ser preenchido em uma alterao, ou que um registro com cdigo de departamento 3 asteriscos no
fosse includo no banco de dados. A sofisticao sua. Divirta-se !
7.53) Construa uma aplicao de nome EX53 baseada na aplicao EX48. Acrescente a seguinte funcionalidade:
Listagem-resposta 7.53A
PACKAGE PLOCAL IS
ARQ
TEXT_IO.FILE_TYPE;
ACAO
VARCHAR2 (1);
PROCEDURE ABRE;
PROCEDURE GRAVA;
PROCEDURE FECHA;
END;
Listagem-resposta 7.53B
PACKAGE BODY PLOCAL IS
PROCEDURE ABRE IS
BEGIN
ARQ := TEXT_IO.FOPEN ('C:\TESTE\LOG'||
TO_CHAR (SYSDATE, 'DDMMYYYY')||'.TXT','A');
END ABRE;
PROCEDURE GRAVA IS
BEGIN
TEXT_IO.PUT_LINE (ARQ, ACAO||' '||RPAD (USER,10)||' '||
LPAD (:CD_MAT,3)||' '||RPAD (:NM_FUNC||' '||:NM_SOBRENOME, 24)||
' '||LPAD (:VL_SAL,11)||' '||
TO_CHAR (:DT_NASC, 'DD/MM/YYYY')||' '||:FUNC.CD_DEPTO);
END;
PROCEDURE FECHA IS
BEGIN
TEXT_IO.FCLOSE (ARQ);
END;
END;
Aps cada ao de atualizao gravamos as linhas, portanto, nos triggers Post-Update, Post-Insert e Post-Delete. A
Listagem-resposta 7.53D apresenta o Post-Update.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
925
Listagem-resposta 7.53E
PLOCAL.FECHA;
7.54) Construa uma aplicao de nome EX54 baseada na aplicao EX53. Acrescente a seguinte funcionalidade:
Criar um avaliador de tempo que inicie a marcao quando houver o incio do processo transacional e contabilize
o tempo de execuo deste processo.
Apresente o tempo decorrido em um alerta.
Altere o smbolo do cone (para ampulheta) enquanto este processo estiver em andamento.
Neste exerccio trabalharemos com o pacote Ora_Prof, responsvel pela contabilizao de tempo decorrido e til
quando desejamos controlar a performance de uma determinada ao.
Criaremos, ento, o controlador de tempo no incio da aplicao (Pre-Form) com o comando
Ora_Prof.Create_Timer (transacao).
Quando iniciamos o processo transacional, damos incio contabilizao e, simultaneamente, alteramos o formato
do cone do cursor.
7.55) Construa uma aplicao de nome EX55 baseada na aplicao EX54. Acrescente a seguinte funcionalidade:
Altere as mscaras de edio dos campos de data de acordo com o ambiente em que atue o programa:
a) Americano data= fxdd-mon-yyyy
b) Brasileiro data = fxdd/mm/rrrr
Nesta aplicao usaremos o pacote Ora_Nls. Podemos obter qualquer informao que desejemos do ambiente
relativamente ao National Language Support. Nessa aplicao obteremos o nome da linguagem e de acordo com
esta informao alteraremos a formatao da mscara de edio dos campos dt_adm e dt_nasc.
7.56) Construa uma aplicao de nome EX56 baseada na aplicao EX55. Acrescente a seguinte funcionalidade:
Verifique se a varivel de ambiente COM_SESSAO est com o valor True ou False.
Caso esteja com TRUE, o comando OPEN_FORM do boto aplicao deve ser do tipo SESSION.
Caso esteja com FALSE, o comando OPEN_FORM do boto aplicao deve ser do tipo NO_SESSION.
Neste exerccio utilizaremos o pacote Tool_Env que nos permitir obter informao a respeito de qualquer varivel
do ambiente subordinada ao grupo Oracle. Por esse motivo, em vez de lidarmos com uma das variveis de ambiente
j conhecidas do Oracle, criaremos nossa prpria varivel (subordinada ao mesmo n). Desta forma execute o
Regedit, expanda o n Hkey_Local_Machine e em seguida os ns Software e Oracle. Pressione o mouse sobre o n
Homex (referente sua instalao) para que na rea direita sejam mostradas as variveis de ambiente do Oracle.
Use, agora, o menu Editar, submenu Novo, opo Valor da Seqncia e crie a varivel COM_SESSAO e preencha-a
com o valor TRUE. Retornaremos ao Forms para utilizar esta varivel. Observe a Listagem-resposta 7.56A.
7.57) Construa uma aplicao de nome EX57 contendo o bloco de funcionrio, com as colunas cd_mat, nm_func,
nm_sobrenome, nr_cargo, vl_sal e in_sexo.
Monte uma carta no Word relativa ao aumento de salrio dos funcionrios, com o seguinte layout:
Figura-resposta 7.57A
Salve esta carta com o nome do funcionrio precedido do cdigo do departamento e seguido da data e hora
atuais no diretrio cartas.
Neste exerccio faremos, atravs de um conjunto de rotinas do Form Builder, acesso ao Word. Nosso objetivo
abrir o Word, criar um documento, preencher o documento, salvar o documento e fech-lo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
927
Em seguida, realizaremos exatamente os passos que desejamos reproduzir, ou seja, abrir um novo documento,
digitar os textos especificados, salvar o documento em um determinado diretrio e fechar o documento.
Quando estas tarefas estiverem concludas, devemos interromper a gravao da macro. Isto pode ser feito atravs
da pequena janela que aparece na tela durante a gravao ou podemos retornar ao menu Ferramentas, submenu
Macro, opo Parar Gravao a fim de encerrar o procedimento de gravao.
Para obtermos os comandos a serem executados devemos, agora, retornar ao menu Ferramentas, submenu Macro,
opo Editor do Visual Basic.
Quando a janela for aberta, selecione o menu Exibir, opo Explorer de Projeto, para que a janela tome o aspecto
apresentado na Figura-resposta 7.57C.
Nesta janela existem ns. Um deles tem o nome de Normal (quando voc determinou o local onde seria gravada a
macro, se voc tiver escolhido Normal.dot, expanda o n Normal. Se voc determinou que a macro fosse gravada sob
o nome do documento atual, expanda o n correspondente ao documento atual, e assim por diante); expanda-o.
Sob este n voc encontrar um outro n de nome Mdulos e subordinado a ele um objeto de nome NewMacros
( este objeto que estamos procurando). D um clique duplo neste objeto para que seja mostrada a macro que voc
acabou de gerar em uma janela prxima. Veja a Figura-resposta 7.57D.
Nosso objetivo ser reproduzir, na aplicao Form, exatamente os passos definidos nesta macro. Voc pode mandar
imprimi-la, copiar o texto para outro arquivo, etc. O importante guardar os passos a serem executados. Com isto
encerramos a primeira etapa de nosso estudo.
Nossa segunda etapa um estudo do arquivo Vbawrd8.hlp (este arquivo fornecido pela Microsoft juntamente
com o Office). Nesse arquivo encontramos a estrutura de objetos do Word.
Abra-o, clique sobre o boto Tpicos da Ajuda e, na pasta ndice, digite Application. Existem dois itens subordinados
a Application: Objeto e Propriedade. Escolha o n Objeto.
O objeto Application corresponde ao prprio Word, ou seja, a aplicao Word. a raiz de todos os objetos.
Observe na Figura-resposta 7.57E que, na parte superior da janela, encontramos quatro botes: Consulte tambm,
Propriedades, Mtodos e Eventos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
929
Um objeto um elemento complexo composto de propriedades, mtodos e eventos. No vamos estudar este
assunto profundamente; no entanto, devemos ter alguma noo do que nos espera.
Um mtodo corresponde a uma ao, ou seja, uma rotina que realiza alguma ao sobre o objeto ao qual est associado.
Uma propriedade corresponde a uma caracterstica deste objeto. A propriedade subdividida em trs tipos:
propriedades escalares (ou simples), colees e objetos.
Uma propriedade simples aquela que possui um valor diretamente armazenado e que afeta de alguma forma o
objeto. J uma coleo como um array composto por diversos objetos (que por sua vez possui propriedades,
mtodos e eventos). O terceiro tipo de propriedade aquele que aponta para um outro objeto (que por sua vez
possui propriedades, mtodos e eventos).
Voc achou complicado? primeira vista parece, mas observe o esquema da Figura-resposta 7.57F.
Toda vez que encontrarmos um objeto, j sabemos que ele pode possuir outras propriedades, mtodos e eventos.
Quando encontramos uma coleo significa que devemos escolher um dos objetos da coleo (talvez usando um
mtodo que aponte para um deles) para alterar suas propriedades ou invocar seus mtodos, e assim por diante. As
aes se repetem sempre da mesma forma.
A Listagem-resposta 7.57A mostra os passos para a abertura do Word. Usar a rotina Create_OleObj. Para esta
funo passamos como parmetro o nome do aplicativo que desejamos abrir. Ela retorna um objeto (raiz) que
representa o aplicativo aberto. Deve ser atribudo a uma varivel do tipo Oleobj. Como sabemos que o objeto-raiz
do Word se chama Application, criei nossa varivel com o nome de App. Toda vez que a usarmos estaremos
modificando caractersticas da aplicao como um todo.
Com a execuo deste comando o Word entra em execuo, porm no fica visvel (no aparece na tela). desta
forma que voc vai usar se estiver querendo gerar uma carta sem que seu usurio tenha acesso a ela. No nosso caso
achei mais interessante que pudssemos acompanhar a montagem da carta, e por este motivo foi necessrio tornar
o Word visvel. Portanto, precisei modificar o valor da propriedade Visible do objeto Application (por curiosidade,
retorne ao Vbawrd8 e verifique se para o objeto Application voc encontra esta propriedade).
Quando desejamos modificar ou obter ou acionar um mtodo ou propriedade, devemos primeiro obter o cdigo
correspondente a esta propriedade ou mtodo. A funo Get_Ole_MemberId recebe como parmetro o objeto ao
qual a propriedade ou mtodo pertence (por isso usamos App) e a propriedade ou mtodo que desejamos usar.
Retorna o nmero correspondente a ele (observe que Membro do tipo Number).
A rotina Set_Ole altera o valor de uma propriedade. Recebe como parmetro o objeto ao qual a propriedade
pertence (App), o cdigo da propriedade (Membro), o valor da propriedade (True) e o tipo da propriedade (Vt_Bstr
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
931
Listagem-resposta 7.57B
Obtendo a coleo Documents
MEMBRO := GET_OLE_MEMBERID(APP, 'DOCUMENTS');
DOCS := GET_OLE_OBJ (APP, MEMBRO);
Invocando o Mtodo Add: passo1 - argumentos
INIT_OLEARGS(1);
ADD_OLEARG('C:\ARQUIVOS DE PROGRAMAS\MICROSOFT OFFICE\MODELOS\NORMAL.DOT', VT_BSTR);
Invocando o Mtodo Add: passo2 - acionando
MEMBRO := GET_OLE_MEMBERID(DOCS, 'ADD');
CALL_OLE(DOCS, MEMBRO);
A Listagem-resposta 7.57B mostra a primeira ao da macro: criar um documento vazio a partir do arquivo
Normal.dot. Observe que foi utilizado o mtodo Add que pertence coleo Documents.
Devemos, ento, descobrir a que objeto a coleo Documents est associada. Se voc pesquisar no arquivo Vbawrd8
descobrir que a coleo Documents est subordinada diretamente ao objeto Application.
Neste caso, em nossa aplicao devemos: obter a coleo Documents, criar uma lista de argumentos com o nome
do Normal.dot e acionar o mtodo Add da coleo.
Observe os passos correspondentes ao Form Builder apresentados na Listagem-resposta 7.57B.
A funo Get_Ole_Obj retorna o objeto correspondente ao cdigo informado. No nosso caso ser retornada a
coleo Documents. Desta forma a varivel (de tipo OleObj) est apontando para o objeto Documents.
A rotina Init_OleArgs inicializa uma rea de memria que ser passada como argumento. O parmetro indica
quantos argumentos sero transferidos a tempo de Call_Ole. No nosso caso passaremos um nico parmetro que
corresponde ao nome de um modelo (Normal.dot).
Em seguida, obtemos o cdigo correspondente ao mtodo Add (da coleo Documents) e acionamos o mtodo.
Gravar um texto no documento
Listagem-resposta 7.57C
Obtendo o objeto Selection
MEMBRO := GET_OLE_MEMBERID(APP, 'SELECTION');
OBJSEL := GET_OLE_OBJ (APP, MEMBRO);
Invocando o Mtodo TypeText: passo1 - argumentos
INIT_OLEARGS(1);
ADD_OLEARG('Rio de Janeiro, '||
TO_CHAR(SYSDATE, 'dd/mm/yyyy')||'.', VT_BSTR);
Invocando o Mtodo TypeText: passo2 - acionando
MTEXTO := GET_OLE_MEMBERID(OBJSEL, 'TYPETEXT');
CALL_OLE(OBJSEL, MTEXTO);
O prximo comando encontrado em nossa macro aciona o mtodo TypeText, porm de um objeto chamado
Selection. Para descobrirmos a que este objeto est subordinado, retornemos ao Vbawrd8.
Ao efetuarmos a pesquisa, descobriremos que Selection uma propriedade que retorna um nico objeto e que pertence ao
objeto Application. Por este motivo definimos uma outra varivel (ObjSel) de tipo OleObj para apontar para este objeto.
Em seguida preparamos a rea de argumentos e invocamos o mtodo TypeText.
Pular linha.
Listagem-resposta 7.57D
Invocando o Mtodo TypeParagraph
INIT_OLEARGS(0);
MPARAG := GET_OLE_MEMBERID(OBJSEL, 'TYPEPARAGRAPH');
O mtodo TypeParagraph no recebe parmetros e subordinado ao prprio objeto Selection. Sendo assim, a ao
correspondente no Form Builder ficou fcil: inicializamos a rea de memria indicando tamanho 0 (isto obrigatrio,
pois caso contrrio voc receber erro), pois no temos argumentos a serem enviados, e em seguida acionamos o
mtodo trs vezes pois desejamos duas linhas em branco.
Criando as demais linhas de texto.
Estas duas ltimas operaes se repetem para todos os textos da carta.
Listagem-resposta 7.57E
Invocando o Mtodo TypeText: passo1 - argumentos
INIT_OLEARGS(1);
IF :IN_SEXO = 'M' THEN
TEXTO := 'Caro Sr. ';
ELSIF :IN_SEXO = 'F' THEN
TEXTO := 'Cara Sra. ';
ELSE
TEXTO := 'Caro(a) Sr(a). ';
END IF;
ADD_OLEARG (TEXTO||INITCAP(:NM_FUNC)||' '||
INITCAP(:NM_SOBRENOME)||',', VT_BSTR);
Invocando o Mtodo TypeText: passo2 - acionando
MTEXTO := GET_OLE_MEMBERID(OBJSEL, 'TYPETEXT');
CALL_OLE(OBJSEL, MTEXTO);
Invocando o Mtodo TypeParagraph
INIT_OLEARGS(0);
CALL_OLE(OBJSEL, MPARAG);
CALL_OLE(OBJSEL, MPARAG);
CALL_OLE(OBJSEL, MPARAG);
Invocando o Mtodo TypeText: passo1 - argumentos
INIT_OLEARGS(1);
ADD_OLEARG('Confira as alteraes ocorridas em seus dados funcionais a partir de '||
TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'MM'),1), 'DD/MM/YYYY')||'.', VT_BSTR);
Invocando o Mtodo TypeText: passo2 - acionando
MTEXTO := GET_OLE_MEMBERID(OBJSEL, 'TYPETEXT');
CALL_OLE(OBJSEL, MTEXTO);
Invocando o Mtodo TypeParagraph
INIT_OLEARGS(0);
CALL_OLE(OBJSEL, MPARAG);
CALL_OLE(OBJSEL, MPARAG);
CALL_OLE(OBJSEL, MPARAG);
Invocando o Mtodo TypeText: passo1 - argumentos
INIT_OLEARGS(1);
ADD_OLEARG('
'||RPAD('Cargo Anterior ', 17)||'= '
||:NR_CARGO_ANT, VT_BSTR);
Invocando o Mtodo TypeText: passo2 - acionando
MTEXTO := GET_OLE_MEMBERID(OBJSEL, 'TYPETEXT');
CALL_OLE(OBJSEL, MTEXTO);
Invocando o Mtodo TypeParagraph
INIT_OLEARGS(0);
CALL_OLE(OBJSEL, MPARAG);
Invocando o Mtodo TypeText: passo1 - argumentos
INIT_OLEARGS(1);
ADD_OLEARG('
'||RPAD('Cargo Atual ', 17)||'= '
||:NR_CARGO, VT_BSTR);
Invocando o Mtodo TypeText: passo2 - acionando
MTEXTO := GET_OLE_MEMBERID(OBJSEL, 'TYPETEXT');
CALL_OLE(OBJSEL, MTEXTO);
Invocando o Mtodo TypeParagraph
INIT_OLEARGS(0);
CALL_OLE(OBJSEL, MPARAG);
Invocando o Mtodo TypeText: passo1 - argumentos
INIT_OLEARGS(1);
ADD_OLEARG('
'||RPAD('Salrio Anterior ', 17)||'= '
||TO_CHAR(:VL_SAL_ANT, 'L999G999D99'), VT_BSTR);
Invocando o Mtodo TypeText: passo2 - acionando
MTEXTO := GET_OLE_MEMBERID(OBJSEL, 'TYPETEXT');
CALL_OLE(OBJSEL, MTEXTO);
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
933
Por este motivo, a Listagem-resposta 7.57E mostra os trechos de cdigo do PL/SQL inserido na aplicao. Se voc
seguir todas as linhas da carta, conseguir mont-la sem dificuldades.
Identificando o diretrio para armazenamento.
Listagem-resposta 7.57F
Invocando o Mtodo ChangeFileOpenDirectory: passo1 - argumentos
INIT_OLEARGS(1);
ADD_OLEARG('C:\cartas\', VT_BSTR);
Invocando o Mtodo ChangeFileOpenDirectory: passo2 - acionando
MEMBRO := GET_OLE_MEMBERID(APP, 'ChangeFileOpenDirectory');
CALL_OLE (APP, MEMBRO);
Listagem-resposta 7.57G
Obtendo a propriedade ActiveDocument
MEMBRO := GET_OLE_MEMBERID(APP, 'ACTIVEDOCUMENT');
DOCS := GET_OLE_OBJ (APP, MEMBRO);
Invocando o Mtodo SaveAs: passo1 - argumentos
INIT_OLEARGS(1);
ADD_OLEARG(LOWER(:CD_DEPTO||:NM_FUNC||
TO_CHAR(SYSDATE,'YYYYMMDDHH24MI')), VT_BSTR);
Invocando o Mtodo SaveAs: passo2 - acionando
MEMBRO := GET_OLE_MEMBERID(DOCS, 'SaveAs');
CALL_OLE (DOCS, MEMBRO);
Listagem-resposta 7.57H
Invocando o Mtodo Close
INIT_OLEARGS(0);
MEMBRO := GET_OLE_MEMBERID(DOCS, 'Close');
CALL_OLE(DOCS, MEMBRO);
END;
A ltima etapa o fechamento do arquivo. Utilizamos o mtodo Close do objeto Document (visto anteriormente).
Concluso.
Voc observou que os passos so bastante repetitivos. Se voc tiver tempo e interesse, leia um pouco mais sobre objetos
e navegue neste arquivo Vbawrd8 para obter maiores informaes sobre os objetos do Word. muito interessante!
Se voc precisa de informaes mais imediatas, siga os passos que apresentamos aqui: gerar a macro e seguir cada uma
das etapas registradas nela. Voc encontrar todos os objetos relativos ao Word no arquivo fornecido pela Microsoft.
Imagine, porm, que voc deseja trabalhar com Excel (e no com Word). O caminho o mesmo. A diferena o
arquivo de Ajuda da Microsoft; neste caso, se chama Vbaxl8.hlp. Boa sorte!
7.58) Criar uma aplicao de nome EX58 baseada na aplicao EX56. Acrescente a seguinte funcionalidade:
Retirar a janela de mensagens.
Adiar a verificao de obrigatoriedade de preenchimento para quando a validao do registro ocorrer.
Garantir a leitura de diversas linhas a cada acesso ao banco de dados.
Estabelecer a leitura simultnea de seis linhas de cada vez para as tabelas Func e Proj e de todas as linhas para Depto.
Em relao s solicitaes deste exerccio, a nica que produz efeito visual a retirada da janela de console (local
onde so apresentadas as mensagens produzidas pela rotina Message). Esta ao conseguida ao associarmos Null
propriedade Janela Console (Console Window) do mdulo EX58.
A segunda solicitao o adiamento da crtica de obrigatoriedade de preenchimento. Isto tambm obtido atravs
de uma propriedade do mdulo EX58. Corresponde propriedade Diferir Imposio Obrigatria (Defer Required
Enforcement), qual devemos atribuir Sim (Yes).
As demais solicitaes traro ganho de performance, pois a leitura ser feita a cada seis linhas. Para que esta ao
tenha efeito, devemos marcar a opo Processamento de Array (Array Processing) na opo Preferncias (Preferences) do menu Ferramentas (Tools).
Em seguida, devemos preencher com 6 a propriedade Tamanho do Array de Consulta (Query Array Size) para os
blocos Func e Proj. J para o bloco Depto usaremos a propriedade Consultar Todos os Registros (Query All Records)
com o valor Sim (Yes).
7.59) Criar uma aplicao de nome EX59 baseada na aplicao EX58. Acrescente a seguinte funcionalidade:
Gerar estatsticas e verificar o resultado (testar e em seguida desmarcar).
Testar a aplicao somente para consulta (testar e em seguida desmarcar).
Garantir que seja possvel ao Form Builder abrir cursores independentes para cada uma das operaes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
935
Quando encerramos a aplicao, recebemos a mensagem FRM41602: Total de cursores que usaram XXX provocada
pela opo de estatstica.
Alm dessa informao, essa opo gera um arquivo com o nome Ora<nmero do PID>.trc onde encontraremos
todos os comandos Selects executados pela aplicao durante o perodo em que esta ficou ativa. Esse arquivo deve
ser entregue ao seu DBA para que ele avalie se os comandos esto construdos adequadamente. Esse arquivo (se
voc instalou o Personal Oracle) est presente no diretrio Oracle\Admin\<sid>\Udump. No caso do exemplo, o
nome do arquivo Ora29259.trc.
A rotina Bell encarregada desta tarefa, porm somente quando h um sincronismo entre o Forms Runtime e a tela.
7.61) Criar uma aplicao de nome EX61 baseada na aplicao EX60. Acrescente a seguinte funcionalidade:
Criar duas novas cores em sua paleta de cores.
Exporte a paleta de cores com o nome de pteste.pal.
Execute a aplicao em modo silencioso e cause um erro de banco de dados (incluir um funcionrio j existente,
por exemplo).
Para editarmos a paleta de cores, devemos: alterar o modo das cores para Editvel (menu Preferncias) e salv-lo,
fechar o Form Builder, abrir o Form Builder com uma aplicao nova (vazia, sem canvas) e, finalmente, acionar o
editor de Layout (F2). No menu Formato, Opes de Layout, encontraremos a Paleta de Cores.
No nosso exerccio, inclumos duas novas cores a que chamamos de violeta e terra, respectivamente. Aps aceitarmos
este dilogo da paleta de cores, ainda com o editor de Layout aberto, devemos utilizar a opo Exportar Paleta de
Cores do menu Arquivo.
Quando for mostrado o dilogo da Figura-resposta 7.61, preencheremos o nome do arquivo da paleta de cores.
Para utilizarmos esta paleta de cores na aplicao EX61, devemos: fechar a aplicao atual, abrir a aplicao EX61,
abrir uma canvas (acionar o editor de Layout), e no menu Arquivo selecionar a opo Importar Paleta de Cores.
Quando o dilogo correspondente for apresentado, pesquisar e selecionar a paleta criada anteriormente. Retornar
s preferncias e colocar o modo das cores como Somente Leitura Compartilhvel. Agora, selecione um objeto
qualquer e abra a paleta de cores (no editor de Layout). Voc ver surgir as cores includas por voc.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
937
A ltima ao deste exerccio executar a aplicao em modo silencioso. Esta opo tambm est nas Preferncias
(pasta Runtime). Marque a opo desejada, salve e execute a aplicao causando um erro.
7.62) Criar uma aplicao de nome ExTemp, baseada na aplicao EX61, contendo apenas as seguintes informaes:
Todos os atributos visuais.
Todos os editores.
Todos os alertas.
Retirar os parmetros.
O bloco de controle somente com os botes, exceto Ajuda, Lob, Depto e Navega.
As triggers On-Message, On_Error, Pre-Form e Key-*.
As canvas de botes com os respectivos botes.
A janela Janela1.
Manter a unidade de programa Mens.
Retirar do Pre-Form a montagem do Record Group.
Criar uma classe de propriedades Texto com as seguintes caractersticas:
a) Salto automtico
b) Todas as letras maisculas
c) Prompt justificado esquerda
d) Deslocamento da conexo do prompt 5.
Compile esta aplicao corrigindo os erros de sintaxe encontrados (em funo de objetos ausentes).
O objetivo deste exerccio criarmos uma aplicao-esqueleto contendo os principais padres da instalao.
Escolhemos alguns objetos com este objetivo.
Devemos retirar todos os erros de sintaxe causados pela utilizao de objetos inexistentes na aplicao.
Este esqueleto no deve ser utilizado diretamente. Quando houver a criao de uma nova aplicao, partiremos
deste arquivo.
Podemos, em uma instalao, criar vrios tipos diferentes de esqueletos (Templates) caractersticos de tipos de
programas (consulta, atualizao, etc.) ou que incorporem padres de layout diferentes.
O objetivo do esqueleto aumentar a produtividade e estabelecer uma forma segura e prtica de estabelecermos padres.
Com mais este exemplo, voc ter condies de escolher a melhor forma de trabalhas em sua instalao.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
939
Podemos manter este dilogo aberto e arrastar de uma aplicao aberta os objetos desejados para a biblioteca de
objetos na pasta programada.
Como ltima etapa devemos marcar as Smart Classes. Para tal, basta que selecionemos o objeto desejado na Object
Library e selecionar a opo SmartClass do menu Objeto do Form Builder.
7.65) Crie uma aplicao de nome Ex65 contendo um bloco de funcionrio e todos os campos. Obtenha os seguintes
objetos da biblioteca de objetos Bib64:
Utilize os atributos visuais.
Utilize a classe Texto para todos os itens do tipo Text Item.
Associe o editor Edtexto ao item nm_foto.
Na aplicao EX65 iniciaremos criando o bloco Func atravs do Assistente. Podemos obter os objetos da biblioteca
de maneiras diferentes:
Remova a janela Janela1 da aplicao EX65. Arraste a janela Janela1 da biblioteca de objetos. Faa uma cpia.
Associe a classe Texto aos itens diretamente a partir da biblioteca de objetos. Para tal, selecione um dos itens e
abra a propriedade Diviso em Subclasses (Subclass Information). Selecione o mdulo Bib64 e o boto de opo
Classe de Propriedades, em seguida selecione a classe Texto (ver Figura-resposta 7.65A).
Crie um alerta no n Alertas. Em seguida, com o boto direito do mouse escolha a opo Classes Inteligentes
(Smart Classes) e marque Aviso.
Repita esta operao para a unidade de programa Mens.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
941
Nosso primeiro passo neste exerccio ser efetuar a anexao da biblioteca. Isto feito no n Bibliotecas Anexadas
(Attached Libraries). Quando selecionarmos o n e pressionarmos o boto Criar, ser mostrado o dilogo da Figuraresposta 7.67A para que informemos o nome da biblioteca e sua localizao.
Ao pressionarmos o boto OK, um dilogo ser mostrado nos questionando sobre a manuteno ou no do caminho.
De um modo geral, conveniente retirar o caminho uma vez que a instalao deste programa em ambiente de
produo certamente estabelecer novos diretrios para as bibliotecas, executveis, cones, etc.
Com esta etapa pronta, podemos acionar as rotinas. Para tal, criamos dois itens, que no pertencem ao banco de
dados, no bloco Func. O preenchimento do DV s feito a tempo de incluso de linha; por este motivo utilizamos
um trigger When-validate-Item, porm o clculo s acionado quando o estado do registro New. O clculo do
abono foi adicionado ao trigger Post-Query.
Listagem-resposta 7.67A
:FUNC.ABONO := ABONO (INTERVALO (SYSDATE, :DT_ADM), :VL_SAL);
Cadastros
Relatrios
Ajuda
Edio
EX65
REP10
Mostrar Ajuda
Copiar
EX64
REP11
Retirar Ajuda
Recortar
EX63
REP12
Colar
EX61
REP13
EX30
EX60
REP14
EX31
Window
A Figura-resposta 7.68A nos mostra a primeira fase, ou seja, a montagem inicial da hierarquia de menus.
A seguir preencheremos o menu Cadastros da seguinte forma: EX65 e EX64 com Call_Form, EX63 e EX61 com
New_Form, EX60 e EX30 com Open_Form em outra sesso e, finalmente, EX31 com New_Form na mesma sesso.
De todos estes aplicativos, apenas o EX65 possui parmetro e, portanto, sua chamada ficou mais complexa.
A chamada dos demais mais simples, pois no temos de criar a lista de parmetros.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
943
No prximo submenu temos os radios Mostrar ou Retirar Ajuda. O radio Retirar Ajuda deve ser o primeiro da lista
pois ele aparecer como se houvesse sido marcado.
Utilizamos a mesma lgica do boto Ajuda da aplicao. O temporizador, no entanto, no necessrio (poderia ser
omitido) uma vez que existe uma outra opo que retira a mensagem.
No trigger do radio Retirar Ajuda podemos apenas usar a rotina Hide_View para as trs canvas.
Ao item de menu separador no associamos nenhuma lgica.
No prximo menu inclumos apenas itens mgicos: Copiar, Recortar e Colar, que no possuem qualquer comando
associado a eles (Nulo).
O item Window, da mesma forma, um item mgico sem subitens ou comandos.
Com esta aplicao compilada (Arquivo -> Administrao -> Compilar Arquivo), podemos associ-la aplicao
EX68 criada. A associao feita nas propriedades da aplicao. Informe o nome do arquivo de menu MN68.MMX
e o nome do menu principal (no meu caso Principal).
Com esta associao feita, podemos testar a aplicao e verificar o que acontece quando acionamos uma aplicao
com Call_Form, New_Form, Open_Form na mesma sesso e Open_Form em sesses diferentes.
Verifique antes de cada chamada quais as janelas abertas (utilize o menu Window) para realizar este acompanhamento.
Observe tambm que as aplicaes 68, 64, 63, 61 e 60 utilizam as barras de ferramentas associadas janela MDI; j
as aplicaes 65, 30 e 31 no tm esta utilizao. Verifique o que ocorre.
7.69) Crie uma aplicao de nome EX69 baseada na aplicao EX68 contendo:
Um Pop-up Menu possui as mesmas caractersticas de um Menu (relativamente s suas propriedades), porm tem
visibilidade de todos os itens criados na aplicao uma vez que est incorporado ao aplicativo. A Listagem-resposta
7.69A mostra a ao de Mostrar Ajuda no Popup semelhante quela do boto Ajuda da barra de ferramentas
(fazendo meno aos itens da aplicao).
A Listagem-resposta 7.69B apresenta a troca de menu a tempo de execuo. Nesta rotina, podemos informar a
forma de apresentao do menu (Pull_Down, Bar ou Full_Screen) e o nome do submenu principal. Experimente
informar apenas o nome do menu sem os demais parmetros e veja a diferena.
7.70) Faa uma aplicao, de nome EX70, que estabelea o cadastramento de funcionrios (use a tabela TB_Func).
Na tela de cadastramento devem ser apresentados simultaneamente o nome do gerente e o nome do departamento
do funcionrio. Use uma lov para que estas informaes sejam selecionadas. Gere, simultaneamente, um arquivo
que demonstre todas as aes realizadas pelos usurios e que seja auxiliar no processo de depurao.
A resoluo deste exerccio pode ser feita, praticamente, toda pelo Assistente de Bloco.
Iniciamos definindo as colunas a serem obtidas da tabela TB_Func: todas as colunas escalares e a coluna nm_depto
(obtida a partir da referncia cd_depto).
Seguimos estabelecendo a lov a partir de cd_depto (Tb_Depto), formato Form com 1 registro e barra de rolagem.
Para que o usurio no tenha a falsa impresso de que poder alterar o nome do departamento, tornamos o campo
referenciado como campo apenas de consulta (Item de Exibio).
Como o Assistente gera a lov automaticamente, no tivemos necessidade de realizar esta etapa, porm o campo
default de acionamento da lov tornou-se item de exibio e, portanto, no recebe o foco.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
945
Listagem-resposta 7.70A
IF NOT SHOW_LOV('L_DEPTO', 300, 120) THEN
RAISE FORM_TRIGGER_FAILURE;
END IF;
Quando conclumos os testes de incluso, excluso e alterao, criamos um cone no Windows com o comando
apresentado na Listagem-resposta 7.70B a seguir.
Listagem-resposta 7.70B
C:\ORAWIN95\BIN\IFRUN60.EXE MODULE=EX70.FMX USERID=DESENV/DESENV@DESENV
RECORD=COLLECT LOG=EX70.LOG
A partir do arquivo gerado poderemos acompanhar as aes realizadas pelo usurio at que ocorra a homologao
da aplicao.
Com este exerccio encerramos, por enquanto, os testes com o Form Builder. A seguir, iniciaremos nosso estudo
com o Report Builder. Mais tarde retornaremos ao Form Builder para estabelecer a chamada a um Report.
Captulo 8
O REPORT BUILDER R6I
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
947
SOBRE O PACOTE
O Reports Developer corresponde a um conjunto de ferramentas usadas para a construo de relatrios que,
dinamicamente, recuperam, formatam e distribuem informaes armazenadas no banco de dados. Com este pacote
tanto podemos publicar relatrios na Web ou em um ambiente de trs camadas quanto gerar relatrios em ambiente
cliente-servidor. As ferramentas agregadas nos do uma grande flexibilidade na construo e gerenciamento dos relatrios.
O Report Builder 6i a principal ferramenta deste ambiente, pois a ferramenta para desenvolvimento dos relatrios
e obteno das informaes de uma base de dados Oracle.
Para apoiar o Report Builder 6i, as seguintes ferramentas fazem parte do pacote Reports Developer:
Procedure Builder a ferramenta que nos auxilia no desenvolvimento de programas PL/SQL, tanto no ambiente
cliente (em bibliotecas de programas compartilhadas por aplicaes Report), quanto no ambiente servidor (criao de
procedures, functions, packages e database triggers), permitindo uma depurao passo a passo das aplicaes criadas.
Graphics Builder a ferramenta que permite que visualizemos os dados do banco de dados de forma grfica.
Os produtos gerados por essa ferramenta podem ser utilizados em aplicaes Reports.
Project Builder Esta uma ferramenta integradora e organizadora, permitindo que associemos as diversas
aplicaes que componham um projeto de desenvolvimento em uma hierarquia manipulvel. Projetos so
associaes de arquivos com as ferramentas usadas para edit-los. Esses arquivos podem ser de qualquer tipo:
form, report, display (grficos), mdulos de 3GL, documentao e scripts de teste. O grupamento e visualizao
de todos os componentes de um projeto apenas uma das vantagens. A ferramenta permite tambm aes
coletivas, como por exemplo uma compilao.
Query Builder uma ferramenta auxiliar na construo de consultas ao banco de dados. Possui uma interface
grfica e intuitiva que nos permite rpida e facilmente a montagem de queries para a recuperao de informaes.
Schema Builder Esta ferramenta nos auxilia na criao, cpia, modificao e remoo de objetos (e
relacionamentos) do banco de dados.
Translation Builder Esta uma ferramenta para suporte e gerenciamento no processo de converso de aplicaes
Oracle para uma das linguagens suportadas. Suporta a converso de arquivos do tipo .fmb, .ogd, .rdf, .res e .msg.
O pacote Reports Developer contm ferramentas que abrangem todas as reas necessrias ao desenvolvimento de aplicaes
(grficos, queries, manuteno do banco de dados, traduo), e, ainda, uma ferramenta para controle do ambiente.
Neste livro, o objeto de nosso estudo ser o Report Builder 6i.
SOBRE A FERRAMENTA
Ao desenvolvermos um relatrio, em qualquer ferramenta, claramente identificamos duas reas principais de
trabalho: a parte de obteno dos dados e a parte de especificao do layout. A ferramenta que estudaremos a
seguir possui estas duas reas ou estes dois conceitos bastante definidos, o que nos facilitar o estudo.
Da mesma forma que o Form Builder, o Report Builder no uma ferramenta isolada; composta de diversos
executveis com finalidades diversas. Destacaremos aqueles que mais afetam o nosso estudo:
RWBLD60 Report Builder Este o aplicativo para desenvolvimento e compilao individual de um relatrio.
Gera arquivos de quatro categorias: RDF/REP (fonte e executvel Report), SQL (fonte de uma consulta externa),
PLL (PL/SQL Library) e TDF (Template). O fonte tambm pode ser armazenado em formato XML.
RWRUN60 Report Runtime Este o aplicativo para execuo dos relatrios desenvolvidos (Reports e Libraries PL/SQL). Existem duas verses deste aplicativo: uma para usurios que estejam executando seus relatrios a
partir de mquinas character-mode (por exemplo VT220) e outra para usurios que estejam executando seus
relatrios a partir de mquinas bit-mapped (por exemplo um ambiente Windows). Em ambos os casos podemos
executar tanto relatrios character-mode quanto relatrios bit-mapped. O nico fator limitante o perifrico de
sada (por exemplo, no podemos executar um relatrio bit-mapped para a tela de um VT220).
RWCON60 Report Convert Este aplicativo permite a converso da forma de armazenamento (fonte de
relatrio armazenado no banco de dados para fonte, template ou executvel de relatrio em disco; fonte no
disco para fonte armazenado no banco de dados. Os fontes tanto podem ser de relatrios quanto de bibliotecas).
Durante este processo o Convert poder efetuar a compilao das rotinas de PL/SQL como parte do processo de
converso (por exemplo quando tentamos criar um .rep ou quando usamos um .rex como origem ou quando
usamos um fonte gerado em outra plataforma).
RWRBE60 Report Background Engine Este aplicativo aguarda por qualquer linha de comando para a execuo
de relatrios. Quando recebe uma linha de comando ele coloca o relatrio em uma fila. Isto ocorre,
automaticamente, quando um Forms ou Graphics usa a rotina RUN_PRODUCT ou de um Reports usamos
SRW.RUN_REPORT. A submisso de relatrio para o Report Background Engine tambm pode ser feita atravs
do utilitrio RWISV60 (em substituio ao Reports Runtime, pois mais leve. Sua linha de argumentos igual
do Reports Runtime). O Report Background Engine somente utilizado em ambientes cliente-servidor, ou seja,
quando o relatrio executado localmente. Para a submisso em um ambiente de trs camadas ou Internet,
devemos usar o RWCLI60 para enviar o relatrio para o Reports Server.
Durante este captulo trataremos da construo, compilao e teste de relatrios. Desta forma, trabalharemos,
basicamente, com o Report Builder e o Report Runtime. No Captulo 9, onde estudaremos o ambiente de trs
camadas ou o uso do produto para Internet, estaremos analisando outros executveis associados a este ambiente.
SOBRE O ESTUDO
Neste captulo desenvolveremos o estudo com exemplos passo a passo. Os captulos da parte Referncias contero
a lista de propriedades, de rotinas predefinidas, de triggers, etc. Faremos um estudo similar quele desenvolvido
para a ferramenta Form Builder.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
949
TCNICA
Criao de pequenos programas seguindo os dilogos apresentados.
CONCEITOS INICIAIS
A ferramenta Report Builder capaz de construir quatro tipos de mdulos diferentes:
Report Que consiste do relatrio em si, contendo reas para obteno dos dados, definio do layout, parmetros,
etc. O fonte de um mdulo Report possui a extenso RDF e o executvel REP. Alternativamente podemos gerar
o fonte de um relatrio com extenso .XML (nesta extenso as especificaes de layout no so arquivadas,
somente a estrutura do relatrio).
Consulta SQL Externa Que consiste de um comando de SQL Select armazenado externamente ao relatrio e
que pode ser utilizado como fonte de obteno de dados para mais de um relatrio. O arquivo contendo este
comando possui a extenso SQL.
PL/SQL Library Que consiste de um conjunto de programas PL/SQL que podem ser compartilhados por diversas
aplicaes Report (ou Form) que executam no ambiente. O fonte de um mdulo PL/SQL Library possui a extenso
PLL e o executvel PLX.
Gabarito Que consiste de um conjunto de especificaes, principalmente relativas ao layout, que so
incorporadas ao relatrio que estivermos preparando. Pode conter especificao para diferentes tipos de layouts
de relatrio. Possui a extenso .TDF.
Durante este captulo, trataremos de cada um destes mdulos individualmente a fim de analisarmos suas
caractersticas e usos.
A primeira tela apresentada contm um conjunto de opes para iniciarmos a construo dos relatrios sob o
grupo Projetando e um outro conjunto de opes de apresentao da ferramenta sob o grupo Fixando na memria.
Antes de construirmos nosso primeiro relatrio, veremos como navegar dentro da ferramenta. Por este motivo
escolheremos a opo Criar um novo relatrio manualmente.
Relatrios (Reports) Subordinado a este n estar o mdulo de Reports que viermos a desenvolver. Na Figura
8.02 aparece uma aplicao de nome Module1. Observe que o n Relatrios est preenchido com o smbolo
( - ), indicando que o n est expandido. O n do mdulo Module1 est preenchido com o smbolo ( + ),
indicando que o n est contrado, ou seja, existem elementos subordinados a este n que no esto visveis.
Gabaritos Subordinado a este n estar o mdulo de Gabarito (Template) que viermos a desenvolver. Na Figura
8.02 no existe nenhum mdulo aberto, portanto o n est vazio. No h nenhum smbolo preenchendo o n.
Consultas SQL Externas Subordinado a este n incluiremos comandos de SQL Select armazenados em arquivos.
Esses comandos Select podem ser compartilhados por diversos relatrios, caracterizando uma origem de dados
e diversos layouts. No inclumos ainda nenhum mdulo subordinado a este n.
Bibliotecas PL/SQL Subordinado a este n estar o mdulo Library de PL/SQL que viermos a desenvolver. Na
Figura 8.02 tambm no existe nenhum mdulo aberto, portanto o n est vazio.
Aes de Depurao e Stack Nestes ns no sero cadastrados mdulos. Sero includas aes temporrias,
criadas para efeito de depurao.
Pacotes Embutidos Subordinado a este n existem diversos pacotes (packages) contendo uma variedade de
rotinas que poderemos utilizar no desenvolvimento da aplicao. Observe que este n est contrado ( + ).
Objetos do Banco de Dados Subordinado a este n sero visualizados os diversos objetos do banco de dados a
que o usurio ao qual estamos conectados tem acesso. Atualmente o n est vazio, pois no estabelecemos,
ainda, conexo com o banco.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
951
EXPANDIR OU CONTRAIR
Para expandir um n ou contra-lo, basta que pressionemos o mouse sobre o smbolo ( + ) para expandi-lo ou sobre
o smbolo ( - ) para contra-lo.
A Figura 8.04 apresenta os botes que realizam as aes de expanso e contrao na barra de ferramentas.
Como teste, utilize o boto de Expandir Tudo sobre o n Pacotes Embutidos. Voc verificar que a expanso se dar
em todos os ns subordinados ao n principal. Todos sero expandidos simultaneamente. A ao inversa obtida
com o boto Contrair Tudo.
CRIAR OU DELETAR
Diferentemente do Form Builder, no Report Builder nem todos os objetos podem ser criados no Navegador. Para
determinados objetos, devemos utilizar o editor adequado para manipulao do objeto.
Quando o objeto puder ser criado pelo Navegador, o boto Criar (presente na barra de ferramentas) ficar habilitado.
Caso contrrio, ficar desabilitado.
Na Figura 8.05 mostramos os botes Criar e Deletar em ambas as situaes: habilitados e desabilitados.
Para realizarmos esta ao basta que selecionemos o n ou um objeto do mesmo tipo daquele que desejamos criar
e pressionemos o boto Criar.
Como teste, selecione o n Consultas SQL Externas (corresponde a um elemento do tipo SQL) e pressione o boto
Criar. Voc observar que ser criado um novo mdulo de nome Module2.
Outra forma de realizar a mesma operao realizarmos um clique duplo sobre o n em que desejamos criar um
elemento. Teste sobre o n Parmetros de Usurio (subordinado ao n Modelo de Dados do relatrio).
Com estes testes verificamos que podemos manipular com mais de um mdulo ao mesmo tempo usando a
ferramenta, uma vez que criamos Module1 e Module2. Isto se aplica a todos os ns principais (Reports, Gabaritos,
SQL Externas e Libraries). Porm, enquanto no tivermos prtica no desenvolvimento de aplicaes com esta
ferramenta, trabalharemos com um mdulo por vez.
Para removermos um elemento, devemos selecion-lo e pressionar a ferramenta Deletar ou pressionar o boto Del
do teclado.
Na Figura 8.06 apresentamos os dois botes ligados execuo da aplicao e o boto associado ao envio de mensagem.
Quando pressionamos um dos dois botes de execuo, acionamos o Report Runtime para execuo da aplicao
corrente. A diferena entre eles que o boto Executar apresenta a sada no vdeo por default e o boto Imprimir
apresenta a sada na impressora por default.
Para que o relatrio seja enviado por e-mail devemos execut-lo e, em seguida, pressionar o boto Mensagem a fim
de transmitir o resultado da execuo para outro usurio (via e-mail).
Em plataformas Windows, a tcnica para envio de e-mail o Microsoft Messaging Application Programming
Interface (MAPI). Os relatrios bitmap so atachados com formato PostScript, enquanto que os relatrios character-mode so atachados como textos ASCII.
Para que esta opo funcione precisamos ter a aplicao MAPI client instalada em nosso sistema operacional.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
953
ABRIR E SALVAR
Este ltimo conjunto de botes realiza aes sobre os mdulos.
A ao se d de acordo com o elemento que tivermos selecionado no momento. Por exemplo, se tivermos selecionado
um mdulo Report ou qualquer elemento subordinado a ele e pressionarmos o boto Salvar, efetuaremos a salva
do mdulo corrente, e se pressionarmos o boto Abrir sero apresentados outros arquivos com extenso RDF
(Report) para que faamos a escolha daquele que desejamos abrir.
Como exemplo, vamos salvar o mdulo atual.
Uma vez que o Report Builder pode ser salvo tanto no banco de dados quanto no disco e a primeira vez que
salvamos este mdulo, o Report Builder apresenta um dilogo para que indiquemos o meio de armazenamento.
Quando optamos por disco, o Report Builder apresenta um novo dilogo para que determinemos o diretrio onde
efetuaremos a salva e o nome desejado para o mdulo.
A partir do momento que definirmos o diretrio e o nome do mdulo, o Report Builder no mais apresentar este
dilogo nas prximas vezes que pressionarmos o boto Salvar.
Como teste, salve o mdulo ativo com o nome de Teste. Observe aps a salva que no navegador o nome do
mdulo foi alterado para Teste.
LOCALIZAR
Podemos usar o pesquisador do Navegador para encontrar elementos e ns dentro do Navegador. Para iniciarmos
uma busca devemos digitar a string que desejamos procurar no campo Localizar, que fica posicionado no canto
superior direito da janela do Navegador. A cada caracter que digitamos, o Report Builder movimenta o cursor para
o prximo elemento com o qual as letras digitadas sejam compatveis.
Por exemplo, selecionemos o mdulo Teste. Ao posicionarmos o cursor sobre o campo Localizar e digitarmos a letra
A, o Report Builder posicionar o cursor sobre o n After Parameter Form (n subordinado a Gatilhos de Relatrio).
Quando necessrio, podemos utilizar as duas lanternas posicionadas ao lado do campo Localizar para efetuar uma
busca para frente ou para trs.
NAVEGANDO NA HIERARQUIA
Da lado esquerdo da janela do Navegador existe um campo que apresenta o nome do elemento atualmente
selecionado. Ao abrirmos a lista desse campo, verificaremos que ele contm todos os ancestrais hierarquicamente
superiores em relao ao objeto selecionado. Ele apresenta a rvore de subordinao do elemento selecionado.
Podemos selecionar qualquer elemento dessa hierarquia, bastando que faamos a seleo do elemento desejado,
clicando o mouse sobre o nome do elemento na lista.
Esta rvore pode ser curta, apresentando apenas o n selecionado e o nome do mdulo ou mais longa, indicando
os vrios frames e repeating frames, se o objeto selecionado pertencer ao layout.
PAINIS DO NAVEGADOR
Podemos dividir o navegador em mltiplos painis horizontal ou verticalmente. Para tal, devemos pressionar e
arrastar o mouse sobre o ponto de diviso horizontal ou vertical mostrado na Figura 8.08.
S possvel dividi-lo num sentido (vertical ou horizontal) de cada vez. Podemos realizar mltiplas subdivises,
desde que num mesmo sentido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
955
ESTILO DO RELATRIO
A primeira tela apresentada aparece na Figura 8.10.
A Figura 8.11 nos mostra o primeiro dilogo apresentado pelo Query Builder. Neste dilogo devemos indicar de
que objetos desejamos obter dados.
Na parte superior do dilogo, devemos indicar se os objetos de onde viro os dados so: Tabelas (Tables), Views, Snapshots,
Sinnimos (Synonyms) ou uma combinao de tipos diferentes (podemos marcar mais de uma opo simultaneamente).
Na parte central, apresentada uma lista com trs opes: Desenv (que o usurio ao qual estabelecemos conexo),
<Local> (ou o banco de dados ao qual voc estiver conectado) e Bancos de Dados (Databases).
Se os objetos pertencerem ao usurio Desenv, eles sero apresentados na caixa de dilogo inferior.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
957
A tela apresentada corresponde ao dilogo principal do Query Builder. Observe que aparecem em cinza os dois
relacionamentos existentes entre as tabelas selecionadas.
Este dilogo principal se subdivide em duas reas:
Do lado direito se encontra a rea de objetos selecionados.
Do lado esquerdo se encontra a rea de restries da consulta.
Alm das reas, esta janela apresenta uma barra de ferramentas superior com todas as aes disponveis no Query
Builder. Testaremos as funes e utilizaremos os botes da barra passo a passo.
At este momento, apesar de termos selecionado as tabelas Func e Depto, ainda no estabelecemos quais colunas
faro parte desta consulta.
A Figura 8.13 nos mostra o dilogo para escolha das colunas que sero includas na clusula Select do comando.
Do lado esquerdo aparecem as colunas disponveis. Observe que as colunas que possuem o mesmo nome nas duas
tabelas j aparecem prefixadas com o nome do owner (usurio) e do objeto. As demais aparecem prefixadas apenas
com o nome da tabela.
Para incluirmos uma coluna no comando Select, devemos selecion-la no lado esquerdo e pressionar o boto Copiar.
Se quisermos retirar uma coluna da lista, devemos selecion-la no lado direito e pressionar o boto Remover.
Se desejarmos que o comando Select seja apresentado em uma determinada ordem, devemos selecionar as colunas
na ordem desejada.
As duas colunas a serem selecionadas usando este dilogo so cd_mat e nr_cargo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
959
Quando voc fechar este dilogo observar que as quatro colunas foram acrescentadas lista de colunas da tabela Func
(com um indicador de funo do lado direito), porm no apresentam o smbolo indicativo de que esto selecionadas.
Faa um clique simples sobre a caixa de seleo correspondente de cada uma delas (passando para o estado checado).
Para cada coluna definida marcada, a coluna original, presente na expresso, tambm ser considerada selecionada.
Antes de prosseguir, verifique novamente o comando Select montado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
961
A Listagem 8.01 nos mostra a clusula Where resultante. Pressione o boto OK. Havendo alguma incorreo,
modifique o comando SQL adequadamente.
Siga para a prxima pasta (Campos).
CAMPOS (FIELDS)
Neste dilogo determinaremos, dentre as colunas lidas pelo comando Select, quais as que sero apresentadas no relatrio.
Quando navegamos para esse dilogo, todas as colunas aparecem no campo Campos Disponveis. Ao pressionarmos
o boto (>>) passaremos para o campo da direita (Campos Exibidos Displayed Fields), todas as colunas apresentadas.
Se quisermos omitir alguma coluna, devemos selecion-la e devolv-la para o campo Campos Disponveis (Available Fields) usando o boto (<).
No nosso caso, todas as colunas devem ser selecionadas. Seguiremos para a prxima etapa.
TOTAIS (TOTALS)
Neste dilogo estabeleceremos campos de sumrio relativos s colunas selecionadas.
Escolheremos alguns totais para efeito de teste. Ao selecionarmos uma coluna do lado esquerdo um conjunto de
botes ser habilitado, de acordo com o tipo (data, numrico, char, etc.) da coluna.
Marque Mnimo e Mximo para Nasc e Contagem para Nr_Cargo.
Navegue para o prximo dilogo.
ETIQUETAS (LABELS)
Neste dilogo escolheremos os ttulos das colunas do relatrio.
Fizemos algumas alteraes, no apenas nos ttulos, como tambm na largura de determinadas colunas. Verifique
na Figura 8.16.
Navegue para o prximo dilogo.
GABARITO (TEMPLATE)
Neste dilogo veremos que o Report Builder oferece um conjunto de gabaritos predefinidos que poderemos usar e
customizar, de acordo com os padres de nossa instalao.
Neste primeiro exemplo no utilizaremos um Gabarito (escolha, portanto, o boto de opo No h Gabaritoe,
em seguida, Encerrar), para que possamos analisar exatamente o resultado da montagem sem qualquer interferncia.
Nos exerccios, no entanto, experimentaremos todas as opes.
Quando voc aceitar este dilogo, estar encerrando a montagem do relatrio. Automaticamente, entrar em
execuo o Previsualizador Ativo (Live Previewer) que nos mostrar o resultado da execuo do relatrio.
EXERCCIOS
Neste primeiro tpico estudaremos como usar o Assistente de Relatrios, o resultado fornecido pelos diversos tipos
de layout, os templates disponveis e, adicionalmente, o Query Builder para a construo dos comandos de SQL.
Sendo assim, em todos os exerccios voc deve se utilizar do Assistente e do Query Builder.
8.01) Criar um relatrio de nome REP01 com as seguintes caractersticas:
Formato tabular.
Todas as colunas da tabela Func.
Incluir a soma salarial dos funcionrios, o menor salrio e o maior salrio.
Fornecer nomes adequados para os ttulos de coluna.
Utilizar o gabarito Corporate 1.
8.02) Criar um relatrio de nome REP02 com as seguintes caractersticas:
Formato Form.
Todas as colunas da tabela Depto.
Incluir a quantidade de departamentos apresentados.
Fornecer nomes adequados para os ttulos de coluna.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
963
Figura-resposta 8.6
METODOLOGIA
Descrio e apresentao da parte relativa definio de variveis para a aplicao.
TCNICA
Exemplificao com desenvolvimento de mdulos que realizem os procedimentos descritos.
COMPONENTES DE UM RELATRIO
Agora que j montamos diversos relatrios usando o Assistente, estudaremos em detalhes as diversas partes de que
se compe um relatrio.
Comentamos anteriormente que um relatrio (desenvolvido em qualquer linguagem) sempre possui duas reas
principais de trabalho: dados (com ou sem parmetros) e layout.
O Report Builder possui estas reas bem definidas, o que nos facilitar o estudo.
Fechemos, ento, o relatrio anterior e criemos um novo; porm, escolha a opo de criar um relatrio manualmente
do menu principal ou use a opo Relatrio (ctrl + N) do menu Arquivo (File), submenu Novo (New). Salve esse
relatrio vazio com o nome de Data_Model1.
Observe novamente o Navegador de Objetos (verifique a Figura 8.03).
Nele, voc encontra quatro cones principais:
Previsualizador Ativo (Live Previewer) Este cone acionar a execuo do relatrio para avaliao (Preview).
Modelo de Dados (Data Model) Onde desenvolveremos a parte de dados do relatrio.
Layout Model (Layout Model) Onde desenvolveremos a parte de layout do relatrio.
Form de Parmetros (Parameter Form) Onde desenvolveremos a tela para solicitao dos parmetros do relatrio.
A PALETA DE FERRAMENTAS
Observe que a paleta de ferramentas esquerda possui dez botes (passe o mouse vagarosamente sobre esses
botes para que seus nomes sejam apresentados):
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
965
A BARRA DE FERRAMENTAS
A barra de ferramentas superior possui os seguintes botes:
Previsualizador Ativo (Live Previewer) Aciona o Preview. S possvel aps a montagem do layout.
Modelo de Layout (Layout Model) Aciona o Editor de Layout para que possamos modificar, criar ou apenas
visualizar o layout gerado.
Form de Parmetros (Parameter Form) Aciona o Editor da Tela de Parmetros para que possamos modificar,
criar ou apenas visualizar a tela de parmetros gerada.
Abrir (Open) Abre um novo relatrio.
Salvar (Save) Salva o relatrio atual.
Executar (Run) Executa o relatrio atual.
Imprimir (Print) Executa o relatrio atual, direcionando-o para a impressora default do sistema.
Limpar (Clear) Remove o objeto atualmente selecionado.
Ampliar (Zoom In) Aumenta o nvel de zoom.
Reduzir (Zoom Out) Reduz o nvel de zoom.
Assistente de Relatrios (Report Wizard) Aciona o Assistente de Relatrios.
Ajuda (Help) Aciona o arquivo de ajuda para esta tela.
A BARRA DE STATUS
A Barra de Status informa o nvel de zoom e a posio relativa do mouse dentro da rea de desenho (tanto na
horizontal quanto na vertical).
Se voc desejar, acione o Query Builder para construir o comando Select definido na Listagem 8.02.
Aceite este dilogo e verifique o esquema gerado na Figura 8.17.
CONSULTA (QUERY)
A consulta a parte superior do desenho mostrado na Figura 8.17, onde encontramos o ttulo Q_1.
Selecione a consulta e abra a tela de propriedades (use o boto direito do mouse ou a opo Paleta de Ferramentas
do menu Ferramentas ou F4 ou um clique duplo).
A paleta de propriedades apresentada possui apenas trs propriedades de interesse para ns neste momento:
Arquivo de Origem de Consulta Externa (External Query Source File) Nesta propriedade determinamos o
nome de um arquivo em disco (extenso SQL) que contenha um comando de SQL Select a ser usado para
obteno dos dados.
Instruo de Consulta SQL (SQL Query Statement) Esta propriedade contm o texto do comando SQL Select
atualmente associado a este objeto.
Mximo de Linhas a Obter (Maximum Rows to Fetch) Neste parmetro podemos limitar a quantidade de
linhas trazidas pela consulta. Isto especialmente til quando a base de dados muito extensa e desejamos
apenas testar a execuo do relatrio.
Em funo de muitas referncias dentro do Report Builder se fazerem por nome, alteraremos o nome de cada um
dos objetos que vierem a ser criados. No caso da Query, trocaremos seu nome para Qfunc (para tal, clique sobre a
propriedade Nome e altere o texto presente (Q_1) para Qfunc).
O segundo objeto de estudo o grupo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
967
GRUPO (GROUP)
Para o grupo daremos a identificao de G_Detalhe. Selecione-o e obtenha a paleta de propriedades e altere seu nome.
A nica propriedade a ser analisada, no momento, para o objeto o Tipo de Filtro (Filter Type) que determinar ou
no uma condio de filtragem para as linhas selecionadas no banco de dados.
Quando determinado Nenhum (None), indicamos que todas as linhas selecionadas pela Query sero utilizadas no relatrio.
Se desejarmos que apenas as N primeiras linhas sejam utilizadas, devemos escolher o valor Primeira (First) para
esta propriedade. Quando efetuamos esta escolha, uma nova propriedade apresentada Nmero de Registros
(Number of Records), onde definiremos qual o valor de N, ou seja, a quantidade de linhas iniciais da consulta a
serem utilizadas no relatrio.
Se desejarmos que apenas as N ltimas linhas sejam utilizadas, devemos escolher o valor ltima (Last) para esta
propriedade. Quando efetuamos esta escolha, a propriedade Nmero de Registros (Number of Records) apresentada
novamente para que possamos definir o valor de N, ou seja, a quantidade de linhas finais da consulta a serem
utilizadas no relatrio.
Finalmente, o ltimo valor vlido para esta propriedade PL/SQL. Nesta situao, acrescida a propriedade Filtro
PL/SQL(PL/SQL Filter). Nesta opo deveremos escrever um texto de PL/SQL indicando se a linha lida deve ou no
ser incorporada ao relatrio.
CRIANDO UM LAYOUT
Para a criao de um Layout que nos possibilite a impresso do relatrio, acionaremos o Assistente de Relatrios
(Report Wizard), cujas pastas j conhecemos.
Verificaremos que:
Na pasta Estilo, escolheremos o estilo Formato de Form.
Na pasta Dados, a query j est preenchida.
Na pasta Campos, as colunas no foram transferidas para exibio, o que devemos fazer agora.
No preencheremos a pasta Totais.
Modificaremos os nomes dos ttulos das colunas a gosto.
No usaremos Gabarito (s nos exerccios).
Ao encerrarmos o Assistente, o relatrio ser executado. Devemos observar as seguintes caractersticas da execuo:
De que departamentos foram selecionadas as linhas?
Foram selecionadas linhas do departamento D11 e D21, conforme o filtro especificado.
Houve algum departamento vazio?
No, porque o comando no filtro somente autoriza departamentos que comecem com D.
O relatrio est ordenado por alguma coluna?
No. Embora a especificao Ordem de Quebra esteja preenchida com Ascendente para todas as colunas deste
grupo, a ordenao no ocorre porque esta propriedade s aplicvel ao grupo de quebra.
Quantos registros foram apresentados por pgina?
Apenas um registro apresentado por pgina quando o estilo do relatrio Formato de Form (ou formulrio).
Salve o relatrio atual para que possamos fazer um novo teste.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
969
Neste caso, a propriedade Ordem de Quebra (Break Order) tem efeito para a coluna cd_depto. Criaremos o layout do
relatrio e executaremos para ver o resultado. Teste posteriormente para ordenao Descendente e verifique o resultado.
A propriedade Ordem de Quebra (Break Order) s utilizada pelo Report Builder em um grupo de quebra. ela indica acoluna ou as colunas de
quebra e a ordem com que os dados devem ser apresentados.
Acione o Assistente de Relatrios (Reports Wizard) e escolha como estilo Agrupar Esquerda. As demais pastas
voc j tem condies de escolher sozinho. Observe o aparecimento da pasta Grupos (Groups), que nos mostra
quais as colunas presentes em cada um dos grupos de quebra (no nosso caso, s temos uma).
Ao encerrarmos o Assistente, o relatrio ser executado. Devemos observar as seguintes caractersticas da execuo:
Por que todos os cdigos de departamento foram apresentados?
Isto ocorreu porque o filtro est posicionado no bloco-detalhe; sendo assim, a linha obtida do banco de dados,
montada a informao do grupo de quebra e, na hora de montar a informao do grupo detalhe, ocorre a filtragem.
Por que no foram apresentadas linhas para os outros departamentos?
Justamente por causa do filtro. Para contornar esta situao, isto , para que no sejam mostrados nem mesmo os
cdigos de departamento, devemos colocar o filtro no grupo de quebra. Para tal, retorne ao Editor, selecione o filtro
do grupo detalhe e copie o texto da funo (s o texto entre o Begin e o End). Remova o filtro, clicando no boto
Delete da janela do editor de PL/SQL. Na paleta de propriedades, defina que o Tipo de Filtro (Filter Type) Nenhum
(None). A seguir, abra a tela de propriedades do grupo de quebra, troque o tipo de filtro para PL/SQL, pressione o
boto da propriedade associada e, quando o editor de PL/SQL for acionado, cole o texto do filtro no local adequado.
Na Figura 8.19 apresentamos o resultado esperado.
Observe que os demais departamentos no so mais apresentados e todas as linhas de cada departamento aparecem
seguidas umas em relao s outras.
Salve esta aplicao. Iniciaremos uma outra usando um novo objeto, o Link.
RELACIONANDO DADOS
Neste exemplo criaremos um Link para relacionar duas queries.
Feche o relatrio anterior. Abra um novo e salve-o com o nome de Data_Model3. Navegue para o Modelo de Dados
(clique duplo no cone correspondente no Navegador ou F2 ou a opo Editor de Relatrios do menu Ferramentas).
Use a ferramenta SQL Consultar (Query) para criar o comando SQL Select apresentado na Listagem 8.04.
Crie uma segunda query com o comando de SQL Select apresentado na Listagem 8.05.
Observe na Figura 8.20 que os grupos receberam, automaticamente, o nome do primeiro campo selecionado na
Query precedido de Q_. Uma vez que o Report Builder no trabalha com qualificao (como ocorria com o Form
Builder em relao a item e bloco), quando inclumos em Queries distintas colunas com o mesmo nome, o prprio
Report trata de fazer a substituio dos nomes iguais, acrescentando um nmero seqencial coluna duplicata. O
mesmo ocorre para o nome do grupo.
Iniciaremos nossos testes montando um layout para estes dados e executando o relatrio.
Acione, portanto, o Assistente de Relatrios (Report Wizard). Na pasta Estilo, escolha Tabular. Na pasta Grupos,
escolha Vertical para ambos. Observe que os grupos no esto relacionados, so independentes. Na pasta Campos,
selecione todos. Aumente o tamanho do nome do departamento para 40. No anexe gabarito.
Execute a aplicao. Observe que todas as linhas de Departamento foram apresentadas primeiro com o layout
Tabular, seguidas de todas as linhas de Funcionrio, tambm apresentadas no formato Tabular.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
971
No existe nenhuma ligao entre os dados das duas queries. A ordem de apresentao dos grupos foi definida em
funo da ordem das queries no Editor. A query mais esquerda foi definida primeiro no Layout Model e a query
mais direita foi definida em seguida.
Se voc desejar fazer um teste a mais, retorne ao Modelo de Dados e troque a ordem dos objetos. Arraste-os,
trocando-os de lugar, ou seja, coloque a Query de Funcionrio mais esquerda e a de Departamento mais direita.
Em seguida remova o layout criado (este passo indispensvel). Para tal, entre no menu Exibir (View) e escolha
Modelo de Layout (Layout Model). Quando o layout for apresentado, escolha a opo Selecionar Todos (Select All)
do menu Editar (Edit). Em seguida, use a tecla Delete para que todos os objetos sejam removidos. Acione o Assistente
novamente, preencha as pastas adequadamente e execute o relatrio.
Nesta situao todos os funcionrios so apresentados primeiro. Em seguida, todos os departamentos.
Prossigamos, ento, retornando ao Modelo de Dados.
Desejamos, agora, que os dados se relacionem, ou seja, que para cada departamento sejam apresentados os
funcionrios correspondentes.
A ferramenta Ligao de Dados (Data Link) permite a montagem desta ligao de trs formas:
De Query para Query Devemos clicar inicialmente na ferramenta Ligao de Dados (Data Link), em seguida na
query-pai e, sem soltar o boto do mouse, arrast-lo at a query-filha. O Report Builder pesquisar no banco de
dados os relacionamentos existentes entre as duas tabelas envolvidas e estabelecer a ligao baseado no que for
encontrado no banco de dados.
De Grupo para Grupo Devemos clicar inicialmente na ferramenta Ligao de Dados (Data Link), em seguida
no grupo-pai e, sem soltar o boto do mouse, arrast-lo at o grupo-filho. Neste caso, o Report Builder estabelecer
a ligao apenas em relao ao grupo, independente das colunas presentes em cada um deles. Para cada linha do
grupo-pai, todas as linhas do grupo-filho sero associadas.
De Coluna para Coluna Devemos clicar inicialmente na ferramenta Ligao de Dados (Data Link), em seguida
na coluna-pai e, sem soltar o boto do mouse, arrast-lo at a coluna-filha (esta operao deve ser repetida para
todas as colunas que se relacionarem entre as duas queries chave composta). O Report Builder agir, agora, em
relao s colunas envolvidas. Cada vez que a coluna da query-pai mudar de valor, um novo conjunto de linhas
na query-filha ser selecionado.
Neste primeiro exemplo, devemos relacionar os dois conjuntos atravs das queries; portanto clique na ferramenta
Ligao de Dados (Data Link), em seguida na query Q_Depto e, sem soltar o boto esquerdo do mouse, arraste-o
Acionaremos, a seguir, o Assistente. Escolheremos estilo Agrupar Acima (Group Above). As demais pastas no
precisam ser preenchidas, pois j o esto. Observe a diferena de resultado na execuo deste relatrio.
Salve este relatrio e abra um novo. Testaremos, agora, a criao de uma query baseada em um Cursor.
VARIVEL CURSOR
Na paleta de ferramentas do Modelo de Dados podemos observar um boto (alm daquele associado Query) chamado
Consulta de Cursor de Ref. Este boto dar origem a uma query tambm, porm recebida de uma varivel cursor.
Esta funcionalidade semelhante ao uso de um bloco baseado em procedimento do Form Builder, ou seja, poderemos
criar uma rotina que retorne um cursor e nosso relatrio seja baseado neste resultado.
Para analisarmos esta questo, criaremos um relatrio vazio (Data_Model4) e definiremos uma especificao de
pacote no banco de dados, conforme apresentado na Listagem 8.06.
NUMBER,
VARCHAR2(30),
VARCHAR2(50));
REG;
Com esta definio criamos o tipo cursor e especificamos o tipo de retorno associado aos cursores deste tipo.
Em seguida, no Modelo de Dados criaremos uma consulta baseada em cursor. Quando soltarmos o mouse sobre a
rea grfica do editor, ser acionado o editor de PL/SQL para que faamos o preenchimento da funo apresentada.
Definimos um pequeno exemplo, apresentado pela Listagem 8.07 a seguir.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
973
EXERCCIOS
Neste tpico estaremos focando o Editor do Modelo de Dados, e portanto criaremos os grupos, os relacionamentos
entre queries manualmente. S o layout deve ser criado com o uso do Assistente.
8.07) Criar um relatrio de nome REP07 com as seguintes caractersticas:
Todas as colunas da tabela Func.
Restringir o resultado para que sejam fornecidas apenas as 25 primeiras linhas (a restrio deve ser feita em nvel
de grupo).
Formato Tabular.
Fornecer nomes adequados para os ttulos de coluna.
Utilizar o gabarito NCA Yellow.
8.08) Criar um relatrio de nome REP08 com as seguintes caractersticas:
Todas as colunas da tabela Func e da tabela Depto.
O relacionamento entre as tabelas deve ser feito com o uso de um Join pela coluna cd_depto.
Crie um grupo de quebra contendo os dados do departamento.
Estabelea uma restrio para que sejam fornecidos apenas os funcionrios com salrio maior que R$ 3.000,00
(a restrio deve ser feita em nvel de grupo).
Formato Agrupar Esquerda.
Fornecer nomes adequados para os ttulos de coluna.
Utilizar o gabarito NCA Yellow.
8.09) Criar um relatrio de nome REP09 com as seguintes caractersticas:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
975
METODOLOGIA
Apresentao dos tipos de variveis do Modelo de Dados e seu uso.
TCNICA
Utilizao das variveis em exemplos que os caracterizem.
SUMRIOS
Um sumrio um clculo executado em relao a diversas linhas de uma nica coluna. Por exemplo, um somatrio
de salrios, uma mdia salarial, um total de gastos, etc.
O Report Builder oferece um conjunto de funes que nos possibilitam criar diversas operaes de sumarizao.
Como sempre, estudaremos este assunto atravs de um exemplo. Abra, portanto, o exemplo Data_Model2 e salveo com o nome de Data_Model5.
Abra o Modelo de Dados e observe que nesse exemplo temos um grupo de quebra contendo o cdigo do
departamento e um grupo de detalhe contendo a matrcula, o nome e o salrio do funcionrio.
Observe o resultado na Listagem 8.08. D OK e retorne ao modelo de dados. Arraste a coluna GQ para o grupo Quebra.
O resultado deve ser similar ao da Figura 8.24. Como detalhe adicional, observe que a coluna GQ est marcada
com uma seta do lado esquerdo. Isto significa que, se seu valor for diferente, ela estar determinando a quebra.
Neste nosso caso, isto no vai acontecer, pois seu valor ser igual em todas as linhas.
A indicao de coluna de quebra (seta do lado esquerdo) somente tem utilidade no grupo de quebra. No grupo de detalhe esta informao ignorada.
Entre, agora, no Assistente, gere um novo layout (agrupar esquerda) e execute este relatrio. O que voc concluiu?
Na nossa execuo, a coluna GQ (quebra) foi impressa duas vezes, enquanto a coluna GD (detalhe) foi impressa
diversas vezes (quinze, no meu caso). Isto ocorre em funo da freqncia de impresso.
Se voc tiver entendido este conceito, no ter dificuldades de determinar o posicionamento das colunas de sumrio
que definiremos a seguir.
O primeiro passo para criarmos uma coluna de sumrio determinar sua freqncia de impresso; portanto, de
acordo com o tipo de sumrio definido a seguir, determine seu posicionamento no diagrama. Confira o resultado
na Figura 8.25 (mas tente fazer sozinho). Utilize o boto Coluna de Resumo (Summary Column) presente na paleta
de ferramentas do Modelo de Dados (Data Model).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
977
Total de salrios por departamento (Tot_Sal_Dep) somente dever ser impresso uma vez para cada departamento.
Quantidade de funcionrios por departamento (Qtd_Fun_Dep) somente dever ser impresso uma vez para
cada departamento.
Mdia salarial por departamento (Avg_Sal_Dep) somente dever ser impresso uma vez para cada departamento.
Total de salrios da empresa (Tot_Sal_Emp) somente dever ser impresso uma vez para todo o relatrio.
Quantidade de funcionrios da empresa (Qtd_Fun_Emp) somente dever ser impresso uma vez para todo o relatrio.
Maior salrio da empresa (Max_Sal_Emp) somente dever ser impresso uma vez para todo o relatrio.
Percentual de cada salrio em relao ao departamento (Pct_Sal_Dep) dever ser impresso uma vez para cada funcionrio.
Percentual de cada salrio em relao empresa (Pct_Sal_Emp) dever ser impresso uma vez para cada funcionrio.
Acumulado de cada salrio em relao ao departamento (Acm_Sal_Dep) dever ser impresso uma vez para
cada funcionrio.
Acumulado de cada salrio em relao empresa (Acm_Sal_Emp) dever ser impresso uma vez para cada funcionrio.
Observe que os totais relativos empresa no ficam posicionados dentro dos grupos uma vez que sua freqncia
de impresso nica ao final de todo o relatrio.
Os percentuais, apesar de serem calculados em relao ao departamento e empresa, devem ser impressos com a
mesma freqncia de impresso do registro de funcionrio uma vez que cada salrio ter um valor de percentual
diferente em relao empresa e em relao ao departamento.
Os acumulados correspondem a totais em que visualmente acompanhamos a soma, isto , cada vez que um novo
salrio acrescentado visualizamos o resultado do acumulado. Por este motivo, o acumulado de salrios em relao
ao departamento foi apresentado na freqncia do funcionrio. O acumulado em relao empresa poderia ser
feito em relao ao funcionrio ou em relao ao departamento. Eu escolhi manter no nvel de funcionrio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
979
FRMULAS
Uma frmula um clculo que envolve uma ou mais colunas de um mesmo registro. Uma frmula corresponde a uma
funo de PL/SQL que retorna um valor. Desta forma, uma varivel do tipo frmula retornar o resultado do clculo.
Suponhamos, ento, para a montagem de nosso exemplo que desejssemos calcular as seguinte informaes:
FGTS para cada funcionrio (Fgts_Func).
INSS para cada funcionrio (Inss_Func).
Ticket-alimentao para cada funcionrio (Ticket_Func).
Projeto em que o funcionrio est alocado (Proj_Func).
Projetos do Departamento (Proj_Depto).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
981
INSS para cada funcionrio (Inss_Func). Numrico. Tamanho: 7,2. Frmula: 0.08 * :vl_sal.
Ticket-alimentao para cada funcionrio (Ticket_Func). Numrico. Tamanho: 7,2. Frmula: dia_til* 5.00.
Projeto em que o funcionrio est alocado (Proj_Func). Alfanumrico. Tamanho: 6. Frmula: obter o projeto
que tenha um responsvel com a matrcula mais prxima da matrcula do funcionrio e no mesmo departamento.
Projetos do Departamento (Proj_Depto). Alfanumrico. Tamanho: 40. Frmula: obter todos os cdigos de projeto
desse departamento.
EXERCCIOS
Neste grupo de exerccios trabalharemos com os sumrios e frmulas; portanto, no devemos utilizar o Assistente
para a montagem destas colunas no Modelo de Dados.
8.11) Criar um relatrio de nome REP11 com as seguintes caractersticas (utilize o Assistente para a montagem dos totais):
Todas as colunas da tabela Func.
Crie os seguintes sumrios:
a) Total de funcionrios.
b) Total de salrios.
c) Mdia salarial.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
983
METODOLOGIA
Apresentao das formas de modificao do resultado de um relatrio atravs do uso de parmetros e da formatao da tela para obteno destas
informaes do usurio.
TCNICA
Anlise terica dos aspectos apresentados complementada por exemplos e exerccios.
CONCEITUAO
Neste tpico trataremos de dois assuntos relacionados: dos parmetros e da tela de parmetros.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
985
PARMETROS DE SISTEMA
Os parmetros de sistema so variveis predefinidas associadas a todas as aplicaes de relatrio.
Esto associados a aes especficas, que conheceremos a seguir:
BACKGROUND
Este parmetro indica se o relatrio deve ser executado em background. O valor Yes no suportado pelo Report
Builder (usando o Preview), apenas pelo Runtime.
Os valores vlidos so: Yes ou No (default).
COPIES
Este parmetro determina o nmero de cpias do relatrio. Ser ignorado se o destino no for impressora.
Os valores vlidos variam de 1 a 9.999.
O valor default 1.
CURRENCY
Este parmetro determina o smbolo a ser usado como smbolo financeiro para formatos numricos.
O valor default para este parmetro dado pela NLS em uso.
DECIMAL
Este parmetro determina o smbolo a ser usado como caracter decimal para formatos numricos.
O valor default para este parmetro dado pela NLS em uso.
DESFORMAT
Este parmetro possui dois significados diferentes:
Em ambientes BitMap, especifica o driver da impressora a ser usado quando o destino (DesType) arquivo.
Em ambientes Caracter, especifica as caractersticas da impressora cujo nome dado pelo parmetro DesName.
Esse parmetro ignorado se o destino for vdeo.
Alguns dos valores vlidos so: hpl, hplwide, dec, decwide, decland, dec180, deflt, wide, pdf, html, htmlcss, htmlcssie,
rtf, xml, delimited.
Quando escolhemos como formato PDF, estamos indicando que o arquivo gerado poder ser lido por um software
similar ao Adobe Acrobat Reader. As caractersticas do arquivo sero determinadas pelo driver de impressora
atualmente selecionado. Deve existir um driver de impressora configurado e selecionado na estao para que seja
possvel a gerao do arquivo.
DESNAME
Neste parmetro informamos o nome do arquivo, nome da impressora, email ID (ou lista de distribuio) para
onde o relatrio ser enviado.
Este parmetro ser ignorado se o destino for vdeo.
Se o destino for Preview, o Report Builder se utiliza desse parmetro para determinar o tipo de fonte a ser usado
para apresentao do resultado.
Se o destino for arquivo e este parmetro estiver vazio, o nome default para o arquivo gerado ser <nome do relatrio>.lis.
DESTYPE
Este parmetro determina o destino do relatrio em execuo.
Os valores vlidos so: screen, file, printer, preview, sysout ou mail.
O valor Screen direciona a sada para o Previewer, assim como o valor Preview. A opo Preview gerar a formatao
como PostScript.
A opo Sysout no vlida para execuo pelo Report Builder. Somente podemos us-la com o Runtime quando
o parmetro Batch (da linha de comando do Runtime) receber o valor Yes.
MODE
Indica se o relatrio ter formato grfico (BitMap) ou formato caracter (character mode). Se no ambiente Windows
especificarmos Mode=Character, ser acionado o driver ASCII para que seja produzida uma sada compatvel.
Os valores vlidos para este parmetro so: Bitmap, Character ou Default.
O valor Default (que o default) indica que o modo do relatrio deve ser compatvel com o executvel em uso.
ORIENTATION
Este parmetro determina a direo de impresso das pginas do relatrio.
Os valores vlidos so: Default, Landscape e Portrait.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
987
PRINTJOB
Este parmetro determina se deve ou no ser apresentado o dilogo de Print Job antes da execuo do relatrio.
Esse dilogo permite que o usurio imprima parte do relatrio, determine a impressora, nmero de cpias, etc.
Os valores vlidos para esse parmetro so: Yes (default) e No.
THOUSANDS
Este parmetro determina o smbolo a ser usado como separador de milhar para formatos numricos.
O valor default para esse parmetro dado pela NLS em uso.
Durante os exerccios deste tpico, utilizaremos os parmetros predefinidos para verificar as diferenas de resultado.
PARMETROS DE USURIO
Os parmetros de usurio so variveis criadas na aplicao que podem ser utilizadas em qualquer ponto do relatrio.
Seu uso mais comum a restrio de linhas a serem selecionadas por alguma das queries definidas no relatrio.
Existem duas formas de referenciarmos os parmetros na aplicao: Bind e Lexical.
Estudaremos, inicialmente, a forma Bind.
BIND REFERENCE
Uma referncia do tipo Bind usada para substituio de um valor em uma expresso SQL ou PL/SQL. muito comum
sua utilizao nas clusulas Select, Where, Group By, Order By, Having, Connect By e Start With da query do relatrio.
Esse tipo de referncia no pode ser usado na clusula From ou em substituio a palavras reservadas. Sua utilizao
feita com os dois-pontos precedendo o nome do parmetro na clusula escolhida.
Faamos um teste para melhor entendimento.
Salve seu mdulo Data_Model6 como Data_Model7, retire todas as variveis de frmula e qualquer filtro de grupo
que ainda reste na aplicao. Em seguida, salve-a.
Abra a query da aplicao e inclua a clusula Where apresentada na Listagem 8.14.
Quando clicarmos no boto OK, a mensagem apresentada na Figura 8.28 ser mostrada, indicando que o Report
Builder criou o parmetro mencionado na sintaxe da Query QFunc.
Ao retornarmos para o Navegador, veremos que foi adicionado um parmetro no n Parmetros de Usurio
(User Parameters).
A criao automtica do parmetro no nos exime da tarefa de verificar as caractersticas do parmetro gerado;
portanto, d um clique duplo (ou use o boto direito do mouse) para obter a tela de propriedades desta varivel.
Observe que o tipo do parmetro caracter e o tamanho 40. Apesar de o tipo ser compatvel com o tipo da coluna
cd_depto, o tamanho foi determinado de forma independente do comprimento da coluna. Alteremos seu tamanho
para 3 e faremos nossa primeira execuo para descobrir onde o parmetro solicitado.
A tela de parmetros apresentada na Figura 8.29 construda automaticamente pelo Report Builder quando executa um relatrio que possui parmetros e no encontra a tela de parmetros correspondente.
LISTA DE VALORES
Suponhamos, agora, que nosso usurio, alm de poder escrever o valor do parmetro, poder selecionar o valor de
uma lista predefinida.
Para tal, retornemos s propriedades do parmetro e selecionemos a propriedade Lista de Valores (List of Values).
O dilogo da Figura 8.30 mostra que podemos montar os valores para a lista de duas formas: fornecendo valores estticos
(static values) ou fornecendo um comando Select (Select Statement) que obtenha os valores do banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
989
Observe que no comando Select definido inclumos duas colunas: cd_depto e nm_depto.
A primeira coluna definida no comando Select sempre atribuda ao parmetro. Desta forma, se o usurio escolher
a terceira linha da lista de valores, o cdigo do departamento desta linha ser atribudo ao parmetro P_Depto,
mesmo que esse cdigo no fique visvel.
No canto superior direito deste dilogo temos dois check boxes que nos indicam:
Restringir Lista a Valores Predeterminados (Restrict List to Predetermined Values) Quando marcamos esta
opo, o usurio somente poder selecionar um dos valores da lista. No poder efetuar nenhuma digitao.
Ocultar Primeira Coluna (Hide First Column) Quando marcamos esta opo, indicamos que na lista de valores
apresentada no ser mostrado o valor da primeira coluna. Desta forma, o usurio ver o nome do departamento,
porm estaremos obtendo para o parmetro o cdigo do departamento.
Faamos, a seguir, a execuo da aplicao com estas (ambas) condies marcadas e vejamos o resultado na Figura 8.31.
LEXICAL REFERENCE
Outra forma de fazermos referncia a um parmetro dentro do comando SQL Select chamada de lxica, porque
podemos alterar o texto do comando Select a ser enviado para o banco de dados.
Suponhamos, ento, que desejssemos que a ordenao da consulta fosse feita ora por matrcula, ora por nome e
ora por salrio, de acordo com um parmetro informado.
Para realizar este teste, salve sua aplicao com o nome de Data_Model8.
Usaremos um parmetro com o nome de P_Order, do tipo caracter e com comprimento de 40 bytes. Voc poder
cri-lo pelo Navegador ou se utilizar do mesmo estratagema anterior, isto , mencion-lo no comando Select da
Query e deixar que o Report Builder crie-o automaticamente para voc.
No caso de uma referncia lxica, a sintaxe a ser utilizada no comando Select diferente daquela usada na referncia
Bind. Veja a Listagem 8.16.
Neste caso, estamos informando ao Report Builder que haver uma alterao na sintaxe do comando Select a ser
enviado para o banco de dados.
Para que o usurio possa decidir qual a melhor ordem para o resultado, criaremos uma lista esttica com os valores:
matrcula, nome e salrio.
Adicionalmente, impediremos que o usurio informe qualquer outro valor.
Estes valores, se anexados ao comando de SQL, naturalmente geraro um erro de sintaxe. Por este motivo devemos,
de acordo com o valor recebido, montar a clusula Order By da forma que desejamos.
Sendo assim, usaremos a propriedade Gatilho de Validao (Validation Trigger) para escrever um cdigo de PL/SQL
adequado. Abra a tela de propriedades do parmetro criado, selecione a propriedade Gatilho de Validao.
Quando voc selecionar a propriedade Gatilho de Validao (Validation Trigger), ser acionado o editor de PL/
SQL, contendo uma funo boleana. Como esse gatilho de validao, isto significa que poderamos efetuar uma
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
991
No nosso caso, selecionaremos os parmetros DesType e P_Depto. Para o parmetro P_Depto preencheremos a
coluna Etiqueta (Label) com o texto Departamento.
Ainda temos, neste mesmo dilogo, possibilidade de escrever trs outros textos aplicveis tela como um todo:
Ttulo (Title), Linha de Dicas (Hint Line) e Linha de Status (Status Line).
Preencheremos com os seguintes textos:
Ttulo (Title) Parmetros do Relatrio.
Linha de Dicas (Hint Line) Preencha adequadamente.
Linha de Status (Status Line) O preenchimento obrigatrio.
Quando voc clicar em OK, ser acionado o Editor da Tela de Parmetros.
Se voc j estudou o Form Builder, no ter dificuldades em alterar a tela de parmetros gerada, pois o editor
semelhante ao editor de Layout do Form Builder. Se voc ainda no estudou o Form Builder, em breve veremos o
editor de Layout do Report Builder, que permitir a voc fazer as modificaes que faremos a seguir.
Faremos algumas poucas modificaes no layout, a fim, principalmente, de visualizarmos integralmente o texto
do parmetro.
Aumente o tamanho da caixa de texto dos dois parmetros apresentados.
Troque a cor do texto Parmetros do Relatrio para vermelho e tipo de letra Arial, tamanho 12, negrito.
Sublinhe o texto Preencha adequadamente.
Coloque em branco o texto O preenchimento obrigatrio.
O resultado no ficou mais agradvel?
Quando usamos o editor da tela de parmetros, aparece uma linha preta do lado direito da tela. Essa linha
indicadora do tamanho da tela. Em breve veremos como alter-lo. Neste momento, estamos limitados ao tamanho
definido atualmente.
EXERCCIOS
Neste grupo de exerccios estaremos focando os parmetros; portanto, se voc desejar, pode se utilizar do Assistente.
8.16) Criar um relatrio de nome REP16 com as seguintes caractersticas:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
993
TCNICA
Anlise de uso dos diferentes objetos, exemplos e exerccios.
INTRODUO
Neste tpico, comearemos a estudar como o Report Builder formata o layout de nossos relatrios. Nosso objetivo
principal o entendimento que nos possibilitar interferir no resultado gerado.
Para o acompanhamento passo a passo, iniciaremos montando um relatrio, porm sem a definio do layout, ou
seja, sem o auxlio do Assistente (Wizard).
Para este fim, criaremos um novo relatrio ainda sem nome. Abriremos o editor do Modelo de Dados, criaremos
uma Query (com a ferramenta adequada), o que causar o aparecimento do dilogo Instruo de Consulta de SQL.
Preencheremos este dilogo com o comando Select apresentado acima e clicaremos em OK. O Modelo de Dados
ser novamente apresentado j com o objeto grfico (da consulta) montado.
Para completar, retorne ao Navegador e salve o relatrio indicando o nome de Layout1.
Nosso estudo comea agora.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
995
Para que o relatrio fique pronto para a execuo, falta apenas fazermos a associao entre cada um dos elementos
e o objeto do Modelo de Dados correspondente. Portanto, usaremos a tela de propriedades de cada um dos objetos
do Layout para estabelecer esta associao.
Abra a tela de propriedades do Repeating Frame; estudaremos, inicialmente, apenas algumas das propriedades:
Origem (Source) Esta propriedade determina qual o grupo do Modelo de Dados que corresponde a esse Repeating Frame.
Direo de Impresso (Print Direction) Nesta propriedade determinamos de que forma esse Repeating Frame
se desenvolver ao longo da pgina.
Mximo de Registros por Pgina (Maximum Records per Page) Nesta propriedade definimos o nmero mximo
de Repeating Frames por pgina, ou seja, o nmero mximo de registros deste grupo em uma determinada
pgina do relatrio.
Espaamento Horiz. Entre Quadros (Inter-Frame Horizontal) Nesta propriedade definimos o espao a ser
preservado entre um Repeating Frame e outro no sentido horizontal.
Espaamento Vert. Entre Quadros (Inter-Frame Vertical) Nesta propriedade definimos o espao a ser preservado
entre um Repeating Frame e outro no sentido vertical.
Devemos, portanto, preencher a propriedade Origem com o nome do grupo G_CD_MAT.
Repetiremos esta ao para os campos (Fields), com o objetivo de tambm definir qual a coluna correspondente ao campo.
As propriedades iniciais de um campo (Field) so:
Origem (Source) Esta propriedade relaciona o campo (Field) definido no Layout com um objeto do Modelo de
Dados, seja ele um objeto criado pelo usurio, um parmetro de sistema ou um objeto do prprio Report Builder
(como, por exemplo, Data Atual).
Tipo de Dados de Origem (Source Datatype) Esta propriedade no pode ser alterada, read-only, e indica qual
o tipo de dados do objeto que estamos associando. Esta informao necessria quando o tipo de dados no foi
declarado por ns no Modelo de Dados, ou seja, para os objetos do Report Builder.
Visvel (Visible) Esta propriedade indica se o campo (Field) ficar visvel no Layout. Ser usada quando desejarmos
incluir o contedo de um objeto (coluna por exemplo) no meio de um texto (por exemplo, uma carta).
Mscara de Formato (Format Mask) Esta propriedade define uma mscara a ser aplicada ao campo (Field) a
tempo de impresso. S vlida para objetos numricos ou datas.
Para cada um dos Fields de nosso relatrio, associaremos as colunas correspondentes, ou seja:
Como resultado, temos que apenas trs Repeating Frames foram impressos em cada uma das pginas e,
conseqentemente, apenas trs linhas da tabela Func foram apresentadas.
Retornemos novamente ao layout e alteremos a propriedade Direo de Impresso (Print Direction). Esta tambm
uma propriedade do Repeating Frame. Observe que essa propriedade possui quatro opes: Vertical (Down),
Horizontal (Across), Vertical/Horizontal (Down/Across) e Horizontal/Vertical (Across/Down).
Para que essa propriedade possa apresentar um resultado compreensvel, seu Repeating Frame deve ter um tamanho
horizontal suficiente para que ao menos dois sejam impressos horizontalmente. No caso do meu desenho, o
Repeating Frame possui um tamanho um pouco maior que 3 polegadas de largura. Como a minha pgina est com
disponibilidade de at 7,5 polegadas, cabem duas impresses no sentido horizontal. Verifique o seu desenho antes
de fazer este teste. Caso seja necessrio, diminua o tamanho dos campos e do Repeating Frame e aproxime o
desenho da margem esquerda superior do relatrio.
No caso do exemplo desenvolvido at agora, podemos alterar essa propriedade para o valor Vertical/Horizontal
(Down/Across). Isto significa que o Repeating Frame ser impresso inicialmente no sentido vertical; quando a
pgina acabar, ser iniciada a impresso na segunda coluna da mesma pgina e assim por diante. Antes de iniciarmos
a execuo, devemos retirar a restrio referente ao nmero de registros por pgina.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
997
A quantidade de matrculas impressa verticalmente na pgina depende da altura do Repeating Frame. Quanto maior, menos matrculas aparecero
em uma coluna.
Um novo teste para que essa propriedade fique bem clara para ns. Alteremos novamente a propriedade Direo
de Impresso (Print Direction). Vamos escolher desta vez o valor Horizontal/Vertical (Across/Down).
Observe agora a diferena de resultado. No sentido horizontal, temos as matrculas 10 e 20. Como acabou a pgina
(no sentido horizontal), foi necessria a criao de uma segunda linha com as matrculas 30 e 50. Mais uma vez
acabou a pgina horizontalmente e uma nova linha (vertical) foi adicionada, e assim por diante, at que a pgina
tenha se completado.
A Figura 8.36 apresenta a imagem dos Repeating Frames para as quatro opes de desenvolvimento de impresso.
As setas presentes na borda do objeto indicam exatamente como se desenvolver a impresso do objeto.
Nosso ltimo teste com este objeto ser aumentarmos o espacejamento entre os Repeating Frames a tempo de impresso.
Usando na direo de impresso o valor horizontal/vertical, preenchemos o valor da propriedade Espaamento
Horizontal Entre Quadros (Inter-Frame Horizontal) com 0.1 (polegadas), e na propriedade Espaamento Vertical
Entre Quadros (Inter-Frame Vertical) o valor 0.6 (polegadas).
Na execuo obtemos como resultado a impresso dos Repeating Frames com um intervalo entre eles tanto na
horizontal como na vertical.
CAMPOS (FIELDS)
Voc observou que o tamanho do desenho que fazemos determina o tamanho do objeto a tempo de impresso e
que as caractersticas que definimos para os objetos so refletidas na impresso.
Para entendermos como o Report Builder monta os objetos no Layout, diminuiremos o tamanho vertical dos
campos (fields), atribuiremos mscara para os campos numricos e trabalharemos com cor.
Inicialmente, diminuiremos verticalmente o tamanho dos campos e aproximaremos as bordas do Repeating Frame.
O valor para formato N no Report Builder corresponde ao valor para formato 9 do Form Builder e do PL/SQL.
Antes da execuo, vamos atribuir nomes adequados aos campos para que possamos identific-los com mais
facilidade. Associe, portanto, o nome do objeto do Modelo de Dados a que corresponde incluindo um F na frente,
ficando desta forma F_cd_mat, F_cd_depto, e assim por diante. No Layout, os campos agora sero apresentados
com o nome que atribumos, ficando, portanto, mais fcil de identificarmos o resultado.
Para que tenhamos um resultado mais coerente, retire o espaamento que definimos tanto horizontalmente quanto
verticalmente para os Repeating Frames. Execute o relatrio e verifique o resultado at aqui.
Para que este resultado fique com mais aspecto de relatrio, devemos retirar a cor dos objetos. Sendo assim, selecione
o objeto e utilize na barra de ferramentas vertical o boto Cor de Linha (Line Color). No quadro de cores apresentado,
escolha a opo Nenhuma Linha (No Line). Da mesma forma, selecione cada objeto (inclusive o Repeating Frame) e,
com o boto Cor de Preenchimento (Fill Color), escolha a opo Nenhum Preenchimento (No Fill).
Na Figura 8.38 vemos o resultado desta ao no Layout. Execute a aplicao e veja o que acontece na impresso. Se
voc desejar que o intervalo entre as linhas seja ainda menor, dever diminuir ainda mais o tamanho do campo e
o espao entre o campo e o quadro.
BOILERPLATES
Nosso prximo objeto de estudo o boilerplate, ou seja, um objeto que s apresentado no Layout e tem a
finalidade de permitir a montagem grfica do relatrio. Temos dois tipos de boilerplates: os grficos e os de texto.
Os boilerplates grficos permitiro que desenhemos linhas, retngulos, curvas, e outros objetos de desenho.
Poderemos at montar um relatrio tipo pr-impresso, com linhas, campos, etc., s que gerado pelo Report Builder.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
999
Ao executarmos este relatrio, verificaremos que, embora o Repeating Frame tenha se repetido na horizontal, o
boilerplate foi impresso uma nica vez sobre o primeiro grupo de registros. Se desejarmos que ele tambm aparea
sobre a segunda coluna, devemos desenh-lo novamente na posio desejada.
Na Figura 8.41 apresentamos esta situao. Tente montar este layout e verifique o resultado na execuo.
CAMADAS DE IMPRESSO
O Editor de Layout composto de diversas camadas de impresso. Cada vez que desenhamos um objeto ele
includo em uma diferente camada. No temos dois objetos presentes na mesma camada.
A Figura 8.42 nos mostra o que acontece quando desenhamos cada um dos objetos no layout. Cada objeto pertence
a uma camada diferente. Para que um objeto seja considerado contido em outro, ele no s deve estar dentro dos
limites do outro como tambm deve estar em uma camada acima do outro.
Veja o field F_cd_mat na figura frontal (abaixo); ele est contido nos limites de R_1. Na figura em perspectiva
(superior), este campo F_cd_mat est frente de R_1. Neste caso podemos dizer que ele est contido em R_1.
Faamos um teste em nossa aplicao. Como primeiro passo removeremos o Repeating Frame criado (R_1).
Vamos colorir (usando o boto Cor de Preenchimento Fill Color), agora, os campos de amarelo.
No prximo passo criaremos um Repeating Frame em torno dos campos (pinte-o de verde).
Voc observar que o Repeating Frame ficou na frente de todos os campos. Sendo assim, os campos no esto
contidos nesse Repeating Frame.
Para testarmos o erro que ocorre a tempo de execuo, associe o Repeating Frame ao Grupo (preencha a propriedade
Origem Source) e execute a aplicao.
O erro recebido indica que a coluna F_cd_mat est com uma freqncia de impresso inferior ao seu grupo. Isto
quer dizer que existem mais linhas com cd_mat do que a quantidade de linhas a serem impressas. Est sobrando
matrcula. Como o campo F_cd_mat no est contido no Repeating Frame R_1, ele s ser impresso uma vez; no
entanto, existem diversos registros com matrculas a serem impressas, o que causa o erro REP1213: O campo
F_cd_mat referencia a coluna CD_MAT a uma freqncia abaixo de seu grupo.
Para corrigirmos esta situao, devemos posicionar o Repeating Frame R_1 atrs dos demais objetos. Selecione-o e
utilize a opo Mover para Trs (Move Backward) ou F8, do menu Organizar (Arrange) para que voc v movendo
o Repeating Frame para trs passo a passo. Voc perceber que o objeto F_vl_sal ser o primeiro a aparecer, em
seguida o objeto F_cd_depto e assim por diante. Como cada um est em uma camada diferente, cada vez que o
Repeating Frame navega uma camada para trs, um objeto aparece.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1001
FREQNCIA DE IMPRESSO
Um bom entendimento de Freqncia de Impresso nos garantir uma execuo sempre bem-sucedida do relatrio,
pois este um dos pontos mais importantes de nosso estudo.
J verificamos que existe uma ligao bastante significativa entre as camadas de um relatrio e a freqncia de
impresso. Aprofundaremos um pouco mais nosso estudo neste sentido.
A Figura 8.43 nos mostra nosso relatrio contendo os objetos R_1 (Repeating Frame), F_cd_mat (Field) e dois
outros objetos chamados de Corpo (Body) e Margem (Margin). Esses ltimos so objetos internos do Report Builder
e esto presentes em todos os relatrios.
Quando um relatrio executado, o Report Builder executa os seguintes passos:
Monta todos os objetos que estiverem diretamente pendurados na Margem.
Monta todos os objetos que estiverem pendurados diretamente no Corpo.
No nosso caso, o nico objeto pendurado diretamente no corpo o Repeating Frame R_1. Sendo assim, ele monta
o primeiro registro (G_CD_MAT) relativo a R_1. Como existem objetos pendurados em R_1, ele monta os objetos
pendurados em R_1.
Mas existem mais registros a serem impressos; sendo assim, ele monta o prximo registro (G_CD_MAT) relativo a
R_1. Como existem objetos pendurados em R_1, ele monta esses objetos.
Este ltimo pargrafo se repete enquanto houver registros referentes ao grupo G_CD_MAT.
Observe, ento, que o objeto R_1, a tempo de execuo, acontece mais de uma vez, isto , existe mais de um objeto
R_1 na impresso, tantos quantos forem os registros G_CD_MAT.
Conclumos, ento, que, para uma determinada pgina de relatrio, o Report Builder imprime:
Uma vez todos os objetos que estiverem pendurados na margem.
Uma vez todos os objetos que estiverem pendurados no corpo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1003
ELASTICIDADE
Montaremos, agora, um relatrio com um nvel de quebra. Salve o relatrio atual com o nome de Layout2 e
retorne ao Editor do Modelo de Dados.
Criaremos um grupo de quebra contendo a coluna cd_depto. Clique sobre ela e arraste-a para fora e para cima do
grupo G_CD_MAT.
Como resultado, temos um grupo G_CD_MAT contendo trs colunas (cd_mat, nm_func e vl_sal), um grupo G_CD_DEPTO
contendo uma coluna (cd_depto). Este resultado deve ser reproduzido no Layout, conforme a Figura 8.44.
Definimos um novo Repeating Frame, associamos o grupo G_CD_DEPTO e enviamos este Repeating Frame para
trs. O Field F_cd_depto saiu do Repeating Frame R_1 e ficou pendurado apenas no Repeating Frame R_2, da
mesma forma que no Modelo de Dados ele saiu do grupo G_CD_MAT e ingressou no grupo G_CD_DEPTO.
A execuo deste relatrio, no entanto, ser uma surpresa.
A pgina exata do seu relatrio poder variar de acordo com os tamanhos especificados para os fields e repeating frames. Encontre a pgina em
que aparece a nica linha do departamento E01 e voc encontrar a mesma situao apresentada na Figura 8.45.
Se voc consultar sua base de dados, verificar que o funcionrio Joaquim est alocado no departamento D21. O
nico funcionrio do departamento E01 o Joo (matrcula 50) e que a Eliane um dos funcionrios do departamento
E11. O que observamos, ento, que nessa pgina cada um dos registros pertence a departamentos diferentes, ou
seja, formatamos o Repeating Frame R_2 trs vezes (so 3 R_2 presentes nessa pgina). Ao navegarmos para a pgina
22, veremos a presena solitria do funcionrio Joo (matrcula 290), que tambm pertence ao departamento E11 (o
mesmo da Eliane). Por que, ento, este funcionrio no foi impresso na mesma pgina da Eliane?
Retorne ao seu layout e d uma boa olhada em seu desenho. Voc sabe que o Repeating Frame R_1 ser impresso
diversas vezes (uma para cada registro). Quando ele estava sozinho diretamente pendurado no Corpo, era impresso
tantas vezes quantas coubessem em uma pgina. Agora ele est pendurado no Repeating Frame R_2. Logo, ele est
sendo impresso tantas vezes quantas cabem no Repeating Frame R_2. Como fizemos um desenho muito pequeno, s
cabe uma impresso. Sendo assim, o Report Builder quebra a pgina, pois no consegue montar uma segunda impresso.
Podemos resolver este problema de duas formas:
Na primeira, esticaremos o Repeating Frame R_2 verticalmente at o fim do Corpo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1005
A Figura 8.47 nos mostra o resultado grfico de modificarmos a elasticidade no sentido vertical para o Repeating
Frame R_2. Para cada uma das opes um indicador adicionado ao Repeating Frame.
Nosso teste, porm, ainda no acabou. Analisaremos apenas mais uma situao antes dos exerccios.
Limite a quantidade de registros do Repeating Frame R_1 (o de dentro) a trs por pgina. Execute novamente seu relatrio.
A Figura 8.48 nos apresenta a pgina 1 do relatrio. Antes de chegarmos aos exerccios, faamos um teste adicional.
Modifique a propriedade Mximo de Registros por Pgina do repeating frame R_1 (o de dentro) para 3, execute-o
e navegue para a segunda pgina do relatrio.
O registro de matrcula 1 pertence ao departamento A00; no entanto, o cdigo do departamento no foi impresso
nessa pgina. Por qu?
Voltamos freqncia de impresso. O Repeating Frame R_2 foi formatado na primeira pgina para o departamento
A00. Quando ocorreu a mudana de pgina (por causa do limite que impusemos), o que foi impresso na segunda
pgina foi a continuao do Repeating Frame R_2, ainda do departamento A00. Como a freqncia de impresso
do objeto F_cd_depto Primeira Pgina (First), ele no foi impresso na segunda.
Quando mudamos de departamento, podemos dizer que tambm mudamos de Repeating Frame; um outro
Repeating Frame R_2 que est sendo impresso (uma outra instncia deste objeto), e por isso, quando este novo
EXERCCIOS
Nos exerccios deste tpico estaremos estudando os objetos de Layout. Criaremos, tambm, uma query que possa
ser utilizada nos exemplos. A utilizao do Assistente para a gerao do Layout ser minimizada.
8.20) Crie uma query externa que apresente numa mesma linha o nome, sobrenome (concatenados), o cargo, o
salrio, matrcula e data de admisso do funcionrio; o cdigo e nome do departamento; o nome e sobrenome
(concatenados) e ramal do gerente. Salve essa query com o nome Q20.
8.21) Crie um relatrio com o nome de REP21 baseado na query externa Q20. O relatrio deve ter formato tabular.
8.22) Crie um relatrio com o nome de REP22 baseado na query externa Q20. O relatrio deve ter uma quebra
contendo os dados do gerente e do departamento.
8.23) Crie um relatrio com o nome de REP23 baseado na query externa Q20. O relatrio deve conter a seguinte carta:
Figura-resposta 8.23
8.24) Crie um relatrio com o nome de REP24 baseado na query externa Q20. O relatrio deve ter quebra por
gerente (primeiro nvel) e por departamento (segundo nvel). Devem ser apresentados os seguintes sumrios:
Soma salarial por departamento.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1007
METODOLOGIA
Descrio das capacidades de organizao e visualizao do editor.
TCNICA
Manipulao dos diversos objetos do layout e organizao de trechos do relatrio.
WORKSPACE
a rea de janela do Layout, ou seja, a rea disponvel para desenho. Seu tamanho independente do tamanho
atual da janela, isto , o Workspace pode ser maior ou menor que a rea da janela.
Quando o Workspace maior que a janela, podemos rolar a janela para ver outras partes do Workspace.
O tamanho dessa rea de desenho definido dentro das propriedades do relatrio atual, ou seja, nas propriedades
do mdulo relatrio que estamos trabalhando (o Layout2). Esta definio ser vista quando estudarmos as
propriedades especficas do mdulo.
RGUAS (RULERS)
Uma rgua horizontal (em cima) e uma vertical (lateral esquerda). Essa rgua pode ser apresentada em unidades
diferentes (ex.: centmetros, caracteres, ps, etc.), de acordo com a unidade em vigor no relatrio.
GUIAS
Podem ser selecionadas guias (tracejadas) horizontais e verticais para referncia. Para selecionarmos uma guia,
basta que posicionemos o mouse sobre uma das rguas, o pressionemos e arrastemos at a posio desejada para
apresentao da guia.
GRID
Existe uma grade dentro do Workspace para auxlio no posicionamento de objetos. Se desejarmos visualizar esta
grade, devemos usar o menu Exibir (View), opo Grade (Grid). Aparecem uns pontinhos na rea de desenho com
um determinado espacejamento vertical e horizontal.
Podemos alterar a quantidade de pontos se utilizarmos a opo Rguas (Rulers) do submenu Opes de Layout
(Layout Options) do Menu Formatar (Format).
O dilogo da Figura 8.49 apresentado.
Nesse dilogo, podemos alterar a unidade de apresentao das rguas, a quantidade de linhas de grade (de quantos
em quantos pontos da unidade escolhida ser definida uma grade grid) e a quantidade de pontos dentro da grade
para alinhamento (se usarmos a opo de alinhamento pela grade).
Por exemplo: suponhamos que tenhamos definido que a grade ser impressa a cada polegada. Se definirmos que a
quantidade de pontos de alinhamento cinco, na verdade estaremos dizendo que a grade ser criada a cada 0.2 polegadas,
porm somente ser mostrada visualmente a cada 1 polegada. Desta forma, para efeito de alinhamento, existiro cinco
linhas de grade por polegada, o que permitir que um determinado objeto seja posicionado em 0.2, 0.4, 0.6, etc.
Visualmente, no entanto, o objeto no estar sobre uma das linhas de grade (que s ocorrem a cada polegada).
AS BARRAS DE FERRAMENTAS
Ao olharmos para a tela do Layout Editor, observamos a presena de duas barras de Ferramentas Superiores e uma
Vertical, na lateral esquerda. Comearemos nosso estudo por elas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1009
Selecionar (Select) Seleciona um objeto ou grupo de objetos. Basta que efetuemos um clique sobre o objeto desejado.
Seleo de Quadro (Frame Select) Quando selecionamos esta ferramenta e clicamos sobre um objeto, faz com
que esse objeto e todos que estiverem contidos dentro dele sejam selecionados simultaneamente. til para
Quadros de Repetio (Repeating Frames) e Quadros (Frames).
Girar (Rotate) Gira os objetos (grficos, itens no podem ser rodados). Para girarmos um elemento devemos
selecion-lo, clicar na ferramenta e, com o mouse, pressionar um dos indicadores de tamanho (presentes nos
cantos do objeto) e, sem soltar o boto esquerdo do mouse, rodar.
Reformar (Reshape) Permite que se modifique um objeto (grfico) selecionado (por exemplo, ngulo de um arco).
Para efetuarmos um teste com esta ferramenta, devemos criar um objeto do tipo Arco; selecione-o na paleta de ferramentas
e faa um arco. Com esse objeto selecionado, pressione o boto Reformar. Voc perceber que apenas dois pontos ficam
indicados no elemento. Utilize o mouse para arrastar um destes pontos e modificar o ngulo do arco.
Ampliar (Magnify) Aumenta ou reduz a apresentao do Layout (fator - 2x), isto , zoom. Para obtermos este
efeito, devemos clicar sobre o boto e em seguida sobre o Layout. O efeito inverso obtido com os mesmos
movimentos, porm a tecla Ctrl (ou Shift) deve estar pressionada simultaneamente.
O segundo grupo de botes composto de ferramentas grficas, ou seja, ferramentas para a criao de elementos
grficos, tambm chamados de boilerplates grficos. Neste grupo se encontram as ferramentas:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1011
A informao de cor de cada objeto armazenada com um ndice para localizao de cor na paleta. Se alterarmos a paleta, como conseqncia
teremos a modificao involuntria da cor do objeto.
CRIANDO OBJETOS
Para criarmos um novo objeto, devemos cumprir os seguintes passos:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1013
MOVER OBJETOS
Para mover um objeto, usamos o mouse. Esta opo ir alterar o posicionamento do objeto na rea de desenho e,
possivelmente, sua freqncia de impresso, se for retirado de dentro do objeto onde est contido atualmente.
REDIMENSIONANDO UM OBJETO
O redimensionamento individual de um objeto tambm feito com o mouse. Basta que cliquemos sobre o objeto
para que sejam mostrados pequenos quadrados sobre a borda do objeto. Para modificar seu tamanho, devemos
clicar sobre um destes quadrados e arrastar o mouse na direo desejada: para aumentar, em direo parte externa
do objeto, e para diminuir, em direo parte interna do objeto.
Neste dilogo, poderemos dimensionar os objetos selecionados pelo maior, pelo menor, pela mdia ou atribuir um
valor especfico, tanto em relao largura quanto em relao altura.
Este valor pode ser fornecido nas unidades: polegadas, centmetros, pontos ou caracteres.
Posteriormente, podemos reutilizar as opes definidas sem necessidade de reabrir o dilogo usando a opo
Repetir Dimensionamento (Repeat Sizing) do mesmo menu Organizar (Arrange).
ALINHANDO OBJETOS
O alinhamento pode ser feito em relao grade (grid) ou um objeto em relao ao outro. Para tal, devemos
escolher a opo Alinhar Objetos (Align Objects) no menu Organizar (Arrange).
As opes de alinhamento dependem da direo horizontal ou vertical.
Horizontalmente temos: esquerda, direita, centralizado, distribuir (espaos entre objetos horizontalmente iguais)
e pilha (objetos colados lateralmente uns nos outros).
Verticalmente temos: por cima, por baixo, centralizado, distribuir (espaos entre objetos verticalmente iguais) e
pilha (objetos colados lateralmente uns nos outros).
O alinhamento tambm pode ser repetido com a opo Repetir Alinhamento (Repeat Alignment) do menu
Organizar (Arrange).
BOILERPLATE GRFICO
Para adicionarmos um boilerplate grfico a uma Canvas, usamos as ferramentas adequadas da paleta de ferramentas.
O modo de criao semelhante ao visto anteriormente para Boilerplate de Texto, Items, etc.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1015
ATRIBUINDO FONTE
Para modificarmos a fonte de um elemento qualquer, devemos selecion-lo e escolher a opo Fonte (Font) no
menu Formato.
Neste dilogo, podemos determinar a fonte, estilo de letra, tamanho e efeitos para o item ou boilerplate selecionado.
Observe que algumas dessas opes se acham presentes na Barra de Ferramentas Horizontal Inferior.
MODIFICANDO A LINHA
Ainda no menu Formato (Format), encontramos cinco opes para customizao de linha:
Largura da Linha (Line Width) Apresenta um conjunto de opes de espessuras de linha.
Bevel (Bevel) Apresenta um conjunto de opes de relevo para linha.
Borda Apresenta a possibilidade de apresentarmos ou escondermos qualquer um dos quatro lados da borda de
um elemento.
Trao (Dash) Apresenta um conjunto de tipos de linhas (tracejado, pontilhado, contnua, etc.).
Seta(Arrow) Apresenta opes para incluso de setas nas linhas.
ALINHAMENTO E ESPACEJAMENTO
O alinhamento e espacejamento dos textos dos itens podem ser feitos com as opes Espacejamento de Texto
(Spacing) e Justificar (Alignment).
O espacejamento diz respeito ao espao interno entre linhas de um objeto. Facilmente visvel quando um boilerplate
de texto ocupa mais de uma linha.
A justificao est relacionada ao alinhamento horizontal do contedo dentro de um determinado objeto. Esta
opo tambm se encontra presente na barra de ferramentas horizontal (Estilo).
OPERAES
As seguintes operaes podem ser feitas com objetos (fields e boilerplates):
Movimentao Pode ser feita diretamente com o cursor.
Redimensionamento Pode ser feito diretamente com o cursor.
Recorte Aps a seleo, devemos escolher a opo Recortar (Cut) ou Copiar (Copy) do menu Editar (Edit).
Colagem Selecionar a opo Colar (Paste) do menu Editar (Edit).
Excluso Usar a opo Limpar (Clear) do menu Editar (Edit) ou apertar a tecla Delete.
Duplicao Aps a seleo, usar a opo Duplicar (Duplicate) do menu Editar (Edit).
GRUPANDO OBJETOS
No menu Organizar (Arrange) encontramos as opes:
Agrupar (Group)/Desagrupar (Ungroup) Estas opes permitem que montemos ou desmontemos um
grupamento formado de dois ou mais objetos.
O grupamento um auxlio que o Report Builder proporciona para que, aps o desenho (Layout) do relatrio,
esses objetos possam sempre ter o mesmo posicionamento perante outros objetos, ou seja, quando movemos um
objeto, movemos, na verdade, o grupo, ficando o objeto em si com o mesmo tamanho e alinhamento anteriores.
Quando grupamos objetos, o Report Builder os tratar como se fossem um nico objeto.
Agrupar Operaes (Group Operations) So operaes realizadas sobre grupamentos, tais como:
a) Selecionar Pai (Select Parent) Marca o grupo-pai, ou seja, o envoltrio.
b) Selecionar Filhos (Select Children) Marca todos os objetos pertencentes ao grupo.
c) Adicionar ao Grupo (Add To Group) Adiciona um objeto ao grupo.
d) Remover do Grupo (Remove From Group) Retira um objeto do grupo.
Cabealho (Header) Primeira seo a ser impressa se houver sido criado um layout para ela.
Principal (Main) Seo principal (boto selecionado na Figura 8.56). Normalmente desenvolvemos o relatrio
usando esta seo.
Trailer ltima seo do relatrio, somente impressa se houver sido criado um layout para ela.
Margem (Margin) Corresponde rea de margem de cada uma das partes do relatrio. A navegao ocorrer
para a margem da seo correspondente.
O editor de layout s apresenta uma parte do relatrio de cada vez. Quando escolhemos a trailer, cabealho ou
principal, estamos definindo qual delas desejamos que esteja ativa para desenharmos.
Obs.: A maioria dos desenhos feita na seo principal do relatrio.
Usando o Layout2, no Navegador, expanda o n Layout Model. Voc observar a presena de trs sees Cabealho,
Principal e Trailer. Aparentemente no encontramos diferena com relao verso anterior; no entanto, faamos
a expanso de uma destas sees (por exemplo Seo Cabealho) e encontraremos dois ns: Corpo e Margem.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1017
Observamos que, quando navegamos para a margem, continuamos a visualizar o corpo, porm no conseguimos
selecionar nenhum dos objetos pertencentes a ele (tente!). A linha escura que aparece em torno dos objetos do
corpo corresponde aos limites de desenvolvimento dos objetos do corpo. Voc pode moviment-los (clique o
mouse sobre a linha preta e arraste-a) ou alterar seu dimensionamento. Quando clicar o mouse sobre a linha preta,
alguns quadradinhos brancos aparecero nos cantos e no meio da linha, permitindo seu dimensionamento. Teste!
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1019
INSERIR NUMERAO
Ao criarmos um objeto de paginao (ferramenta Inserir Nmero de pgina Insert Page Number), o dilogo
presente na Figura 8.60 nos permite definir apenas o posicionamento da numerao.
Observe que o tipo de objeto diferente do anterior. Neste caso, foi criado um boilerplate que faz referncia aos
objetos internos &<PageNumber> (Nmero da Pgina) e &<TotalPages> (Total de Pginas). Esta forma de montagem
prtica, pois podemos alinhar com mais facilidade o texto com o valor da quantidade; no entanto, tem como
desvantagem a utilizao direta do nome interno do objeto (em ingls, inclusive).
Podemos resolver esta situao de outra forma, criando um objeto do tipo Field (F_pgina) e associando o objeto
interno desejado (Nmero da Pgina Fsica), da mesma forma que fizemos, anteriormente, com a data. Em seguida,
criamos o boilerplate com o texto que desejamos preceder ou adicionar ao valor e fazemos alinhamento como
fizemos com os demais objetos do layout. Esta forma permite que trabalhemos sem ter de saber o nome exato do
objeto interno. Faremos a seleo a partir de uma lista.
Se voc abrir a tela de propriedades do objeto F_pgina, verificar que podemos estabelecer uma mscara de
formato (format mask). Outra propriedade disponibilizada neste caso a Numerao de Pgina (Page Numbering),
onde podemos definir quais sees (Cabealho, Principal e/ou Trailer) devem ser contabilizadas para este field.
Desta forma podemos criar um contador de pgina que contabilize somente as pginas do relatrio desenvolvido
na seo Principal, um outro que somente contabilize as pginas da seo de cabealho e assim por diante. Podemos,
ainda, determinar o valor inicial de contagem e quando essa numerao dever ser zerada (em um determinado
Repeating Frame, ou seja, em uma determinada quebra ou no final do relatrio).
EXERCCIOS
Neste grupo de relatrio estaremos testando a funcionalidade do Editor de Layout. As alteraes no layout sero manuais.
8.25) Baseado no relatrio REP22, crie um relatrio de nome REP25 e acrescente a seguinte funcionalidade:
Campos numricos formatados e alinhados direita.
Campos de data formatados e alinhados esquerda.
Letra arial, tamanho 9 para todos os campos e tamanho 8 e negrito para os cabealhos.
Incluir cabealho de coluna.
Alinhamento horizontal e vertical de todos os campos e cabealhos.
Limitar a apresentao a um departamento por pgina.
8.26) Baseado no relatrio REP25, crie um relatrio de nome REP26 e acrescente a seguinte funcionalidade:
Crie uma Capa que apresente o nome do relatrio e a lista de departamentos com seus respectivos nomes (use
gabarito NCA Grey para a capa).
Crie uma Contracapa que indique o trmino do relatrio e o usurio solicitante.
Determine cor azul para todos os itens e cor vermelha para os cabealhos.
Inclua um ttulo que seja apresentado em todas as pginas.
8.27) Baseado no relatrio REP24, crie um relatrio de nome REP27 e acrescente a seguinte funcionalidade:
Campos numricos formatados e alinhados direita.
Campos de data formatados e alinhados esquerda.
Letra arial tamanho 9 para todos os campos.
Alinhamento horizontal e vertical de todos os campos e cabealhos.
Crie uma marca dgua que seja apresentada como fundo de pgina (texto inclinado).
Crie uma linha horizontal que separe o Gerente de seu Departamento.
Os campos de nome do gerente e nome do departamento devem ter a possibilidade de crescimento horizontal.
Inclua um nmero de pgina que seja reiniciado a cada novo gerente (no rodap).
Inclua um ttulo que seja apresentado em todas as pginas.
Inclua a data de emisso do relatrio em todas as pginas.
8.28) Baseado no relatrio REP27, crie um relatrio de nome REP28 e acrescente a seguinte funcionalidade:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1021
METODOLOGIA
Apresentao da tcnica a ser empregada na construo da parte de lgica dos relatrios.
TCNICA
Desenvolvimento de pequenas lgicas a serem embutidas nos relatrios.
CONCEITOS INICIAIS
No Report Builder tambm podemos nos utilizar da PL/SQL a fim de aumentar a flexibilidade de nossos relatrios.
Existem quatro tipos de PL/SQL nossa disposio:
PL/SQL Intrnseca So programas de PL/SQL armazenados dentro do nosso relatrio e que fazem parte
constitutiva dos objetos; so intrnsecos aos objetos do Modelo de Dados ou do Layout, tais como Format
Triggers, Frmulas, Filtros, etc.
PL/SQL Interna So rotinas armazenadas dentro da prpria aplicao. So utilizadas para estruturao do cdigo.
Gatilhos de Relatrio So rotinas armazenadas dentro de nosso relatrio e que so acionadas de acordo com a
ocorrncia de um determinado evento.
PL/SQL Externa So programas de PL/SQL armazenados em uma biblioteca na rede (Libraries) ou armazenados
no banco de dados (Stored Procedures).
Iniciaremos nosso estudo pela PL/SQL Intrnseca revendo todos os locais onde podemos incluir cdigo de PL/SQL
e analisando a utilizao de cada um deles.
PL/SQL INTRNSECA
Consistem em funes acionadas pelo Report Builder e associadas a elementos do Modelo de Dados ou do Layout.
Faremos, ento, uma reviso de todos estes pontos e objetos em que podemos associar cdigo de PL/SQL.
Para acompanharmos essa reviso, precisamos de um relatrio de Teste. Por este motivo, abrimos o relatrio
Layout2 e salvamos com o nome de PLSQL1. No Layout retiramos as formataes feitas na seo Cabealho (corpo
No exemplo da Listagem 8.19, fizemos uma lgica bastante simplificada. Sabemos, porm, que em um cdigo de
PL/SQL poderemos nos utilizar de todas as partes da linguagem, inclusive realizando acesso ao banco de dados.
Esta ao, no entanto, no recomendada, uma vez que tornar a aplicao mais lenta, pois este filtro executado
uma vez para cada linha lida.
Como regra geral de filtragem, devemos tentar somente trazer as linha teis aplicao, isto , tentar filtrar ao
mximo na prpria query que traz as linhas para impresso. Desta forma estaremos diminuindo o fluxo de
informaes pela rede. Se isto for totalmente impossvel, ento, nos utilizamos da filtragem do grupo, procurando
colocar na lgica de PL/SQL apenas restries que no necessitem de acesso ao banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1023
No exemplo da Listagem 8.20 criamos uma crtica para o parmetro P_1 (no esquea de adicionar o uso do gatilho
na query, isto , acrescentando a clusula Where cd_mat >= :p_1).
No texto do gatilho de validao, vemos aparecer pela primeira vez meno ao pacote SRW. Se voc expandir o n
Pacotes Embutidos, verificar que quase todos os pacotes j so de nosso conhecimento, pois so os mesmos utilizados
pelo Form Builder. O pacote SRW, no entanto, ainda no foi apresentado, pois se trata de um conjunto de rotinas
especficas do Report Builder. Dentre elas encontramos aquela que nos permite enviar uma mensagem. Teste esta
crtica e veja os resultados. Existe um tpico especfico para que faamos uma reviso das rotinas deste pacote.
Retorne ao Navegador e verifique a existncia de dois cones (P), indicando a presena dos dois cdigos de PL/SQL
adicionados at agora. O Report Builder, como j sabemos, faz a indicao visual da presena de PL/SQL nos
objetos (G_CD_DEPTO e P_1).
FRMULA (FORMULA)
Uma frmula nada mais do que uma coluna adicionada em um dos grupos ou fora da query no Modelo de
Dados. Seu posicionamento define a freqncia com que o cdigo de PL/SQL ser executado.
Criaremos, ento, uma frmula que define o valor do INSS dos funcionrios. Como se trata de uma ao a ser
calculada para cada funcionrio, criaremos esta frmula no grupo G_CD_MAT.
Na tela de propriedades deste novo objeto encontramos uma propriedade com o nome de Frmula PL/SQL (PL/SQL
Formula), onde poderemos adicionar um cdigo de PL/SQL que ser retornado para a varivel associada ao cdigo.
Observe ainda que o tipo da varivel definir o tipo da frmula, ou seja, nossa varivel numrica, e portanto a
funo criada pelo Report Builder ser do tipo numrica, retornando um Number.
Neste exemplo, utilizamos o pacote SRW para estabelecer a formatao desejada para o campo.
O resultado deste cdigo est apresentado na Figura 8.61.
PL/SQL INTERNA
A PL/SQL Interna consiste de funes, procedures ou pacotes armazenados dentro da prpria aplicao. So utilizados
para estruturao do cdigo e no tm utilizao em outros mdulos.
Est localizada localmente porque:
No precisa ser compartilhada por outras aplicaes.
No utiliza estruturas do banco de dados ou utiliza apenas para atualizao, no causando impacto no trfego da rede.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1025
Neste caso, o tipo de cdigo Unidade de Programa. Observe que o campo Objeto fica desabilitado.
PL/SQL EXTERNA
ROTINAS ARMAZENADAS NO BANCO DE DADOS
Quando decidimos pelo cadastramento de uma determinada rotina no banco de dados, nossa principal motivao
compartilhamento. Aquele cdigo pode ser aproveitado (reutilizado) por diversas aplicaes, estejam elas no ambiente
cliente (mdulos de tela ou relatrio) ou no ambiente servidor (outras rotinas armazenadas no banco de dados).
Porm, o compartilhamento tambm possvel com bibliotecas. Escolheramos seu uso no banco de dados porque:
A rotina executa aes de leitura e atualizao no banco de dados (local ou remoto), de tal forma que sua
performance seja melhorada em funo da diminuio do trfego na rede.
A rotina no est associada a aes especficas do ambiente cliente (tela, navegao, etc.).
A rotina ser utilizada por aplicativos em batch (PL/SQL, PRO*C, etc.) apesar de no fazer acesso a estruturas do
banco de dados. Neste caso especfico, deve-se analisar o impacto de se duplicar essa rotina: uma para utilizao
por aplicativos online (no ambiente de cliente) e outra para os aplicativos em batch (no ambiente servidor).
A criao ou manuteno de uma stored procedure pode ser feita com o prprio Report Builder da seguinte forma:
Expanda o n Objetos do Banco de Dados (Database Objects). Veremos a lista de usurios criados no banco.
Expanda o n Desenv (nosso usurio de trabalho). Sero apresentados quatro ns principais: Unidades de Programa
Armazenadas (Stored Program Units), Tabelas (Tables), Bibliotecas de PL/SQL (PL/SQL Libraries) e Views.
Se voc expandir o n Tabelas, ver a lista de tabelas do usurio Desenv.
Escolha uma tabela qualquer e expanda novamente o n. Encontrar dois ns: Trigger (Database Trigger) e
Colunas (Columns).
Se desejarmos agora dar manuteno em uma rotina gravada no banco de dados ou se quisermos incluir uma nova
rotina, devemos selecionar o n Unidades de Programa Armazenadas (Stored Program Units) e expandir para encontrar
a rotina desejada, ou pressionar o boto Criar (Create) para que seja apresentado novamente o dilogo da Figura 8.60.
Para efeito de teste, abra uma delas (clique duplo no cone ou boto direito do mouse com a opo Editor de PL/SQL).
Observe que a janela do editor de PL/SQL ligeiramente diferente daquelas vistas anteriormente. Ela mostra quem
o usurio dono da rotina (Owner), o nome e tipo da rotina.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1027
Com estas especificaes resolvidas podemos passar para o dilogo seguinte, o qual permitir que verifiquemos o
resultado antes de aplic-lo ao banco de dados. Observe a Figura 8.66.
Quando pressionamos o boto Encerrar, a especificao do tipo aplicada ao banco de dados, porm fica faltando
a criao do corpo do tipo, onde desenvolveremos o corpo da funo Ver_Tel. O Report Builder, automaticamente,
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1029
EMPACOTAMENTO DA LGICA
As formas de empacotamento (procedimentos, funes e pacotes) apresentadas acima existem tanto no ambiente
cliente quanto no ambiente servidor.
Com todas estas opes no h justificativa para um cdigo no modular, no estruturado.
Considere quebrar seu cdigo PL/SQL em um pacote (do cdigo X) se a visualizao do texto ultrapassar trs
pginas (em torno de 80 linhas).
Considere criar rotinas (procedures ou functions) para trechos de programas repetitivos.
Crie uma biblioteca com rotinas que voc possa utilizar em diversos sistemas. Podem existir solues j criadas
em um sistema, que facilitem sua programao em outro.
Documente sempre.
A lista acima apenas de sugestes. Voc encontrar a forma mais adequada para o desenvolvimento das suas aplicaes.
DATABASE TRIGGERS
J vimos que a atualizao de objetos do banco de dados possvel com a ferramenta Report Builder. Veremos a
manuteno de um trigger do banco de dados.
Expandiremos o n Objetos do Banco de Dados (Database Objects), o n Desenv (usurio em uso), o n Tabelas
(Tables) e a tabela Func para encontrarmos o n Trigger.
Acionaremos, ento, a ferramenta Criar (Create) para que seja mostrado o dilogo de manuteno de Database
Triggers (o mesmo apresentado pelo Form Builder).
Neste dilogo pressionaremos o boto Novo (New) para que a tela seja habilitada.
Poderemos preencher ento:
a) O nome do trigger no campo Nome (Name).
b) A definio do evento do trigger no campo Disparando (Triggering) e no campo Instruo (Statement). Observe
que, se a instruo for Update, o campo de Colunas (Of Columns) fica habilitado para que informemos as
colunas que causaro o evento quando modificadas.
c) Indicao de trigger de comando ou de linha. Se marcarmos o check box Para Cada Linha (For each Row)
estamos indicando um trigger de linha, o que faz com que os dois campos abaixo fiquem habilitados.
d) Alterao do nome das reas de trabalho (quando usamos trigger de linha). Ao preenchermos o campo
Referenciando Antigo Como (Referencing Old as) e Novo Como (New as).
e) Definio de uma restrio de leitura ao preenchermos o campo Quando (When).
f) Finalmente o texto do trigger no campo Corpo do Gatilho (Trigger Body).
Para relembrar as caractersticas bsicas de um database trigger, retorne ao captulo de PL/SQL.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1031
O EDITOR DE PL/SQL
O Editor de PL/SQL do Report Builder exatamente igual ao do Form Builder. Para que no tenhamos de retornar
ao Captulo 7 para lembrar sua funcionalidade repetiremos sua aes. A janela do editor nos apresenta algumas
informaes a respeito do cdigo de PL/SQL em definio.
Na parte superior encontramos um conjunto de botes com as seguintes funcionalidades:
Compilar (Compile) Aciona a execuo do compilador PL/SQL para o cdigo.
Reverter (Revert) Desfaz todas as modificaes realizadas desde a ltima salva ou compilao bem-sucedida
(que realiza uma salva).
Novo (New) Cria um novo gatilho (trigger) com o mesmo escopo do atual. Um dilogo contendo a lista de
eventos apresentado.
Deletar (Delete) Remove o gatilho atual.
Fechar (Close) Fecha e salva as modificaes efetuadas, sem compilar.
Ajuda (Help) Aciona o mecanismo de ajuda. Apresenta um dilogo contendo informaes sobre o editor PL/SQL.
Imediatamente abaixo dos botes so apresentados o tipo e o escopo do objeto atual:
Tipo Indica o tipo de cdigo de PL/SQL (Tudo, Nvel de Objeto ou Local). O editor de PL/SQL o mesmo nas
trs situaes com esta mesma janela de dilogo.
Objeto Indica a que tipo de objeto (se for o caso) o cdigo est associado. Alguns valores vlidos so: Parmetro,
Coluna, Quadro, Quadro de Repetio, Grfico, Boto, Relatrio, etc.
sem ttulo Quando o campo Objeto est preenchido com um tipo de objeto do relatrio, neste campo
encontramos o nome do objeto.
Finalmente, a ltima linha de informaes apresenta o campo Nome, no qual o Report Builder identifica o tipo
de cdigo de PL/SQL (Gatilho de Formatao, Frmula, Gatilho de Formato, etc.) associado com o objeto
identificado anteriormente.
Abra a janela de um dos textos de PL/SQL j digitados e verifique os itens comentados a seguir.
INDENTAO AUTOMTICA
Observe que a cada linha digitada o posicionamento do cursor na linha subseqente acompanha a indentao da
linha que lhe superior.
INDENTAO MANUAL
Para indentao manual contamos com as opes Endentar e Endentar Invertido do menu Editar (se usarmos o
mouse) e com as teclas Tab e Shift + Tab, respectivamente, se usarmos o teclado.
CORES
No texto digitado, pudemos observar que houve variao no colorido das informaes. As palavras-chaves,
comentrios, constantes strings e numricas, os smbolos de atribuio ( := ) e de concatenao ( || ) so destacados
com cores diferentes que os identificam facilitando a localizao das informaes.
SELEO
Podemos selecionar tanto linhas de texto quanto colunas.
OPO DESFAZER
A opo Desfazer (Undo) pode ser repetida muitas vezes (e no apenas uma). O Report Builder guarda todas as
modificaes realizadas no cdigo desde a ltima operao de Salvar. Esta ao est disponvel no menu Editar.
EXERCCIOS
8.29) Crie um relatrio de nome REP29 que apresente a seguinte funcionalidade:
Selecione as colunas dt_adm, dt_nasc, nm_func, nm_sobrenome e cd_mat da tabela Func.
Defina uma rotina local que receba uma data e retorne-a no formato dd/mm/yyyy hh24:mi:ss.
Defina uma rotina local que receba dois textos, retire os brancos finais e iniciais, concatene os dois textos com
um branco entre eles e retorne a primeira letra de cada palavra em maiscula.
Utilize essas rotinas dentro do Modelo de Dados para formatar as datas de nascimento e admisso e o nome do
funcionrio (nome e sobrenome).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1033
METODOLOGIA
Apresentao e descrio dos objetos e do seu relacionamento interno.
TCNICA
Apresentao prtica da aplicabilidade dos objetos e suas diversas particularidades.
INTRODUO
Aps termos trabalhado bastante no layout conheceremos mais alguns de seus objetos especficos: Quadros (Frames),
ncoras (Anchors) e Botes (Buttons).
Neste tpico continuaremos desenhado o layout manualmente para que nosso entendimento seja o melhor possvel.
Criaremos uma nova aplicao de nome Layout3 contendo duas queries, relacionadas a seguir:
QFunc contm o seguinte comando Select cd_mat, cd_depto, nm_func, vl_sal from Func.
QPrjatv contm o seguinte comando Select cd_proj, cd_ativ, dt_ini, dt_fim from PrjAtv.
No Layout, inicialmente criaremos apenas a Query QFunc, de acordo com o formato apresentado na Figura 8.67.
Neste Layout desenhamos o Repeating Frame Rfunc contendo as quatro colunas presentes na query. Abaixo deste
Repeating Frame criamos um objeto do tipo imagem.
Sabemos que o Repeating Frame vai se desenvolver verticalmente ao longo da pgina. O que acontecer? Os dados
passaro sobre o desenho?
Ao executarmos, observamos que o Report Builder empurrou o objeto at o fim do relatrio. O arquivo BMP s foi
impresso na ltima pgina do relatrio, aps a ltima linha impressa. Por qu?
A Figura 8.68 nos d uma explicao. Subordinado ao objeto B_1 e ao objeto R_G_CD_MAT, aparece um n
chamado de Informaes sobre Ancoragem. Isto significa que existe uma ncora ligando o objeto B_1 ao objeto
R_G_CD_MAT. Essa ncora vai garantir que somente aps a formatao do objeto R_G_CD_MAT, o objeto B_1 ser
formatado, impedindo que o Repeating Frame se sobreponha ao objeto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1035
Na pasta Geral (General) temos apenas duas opes que indicam se desejamos visualizar os cones dos objetos e se
desejamos visualizar o cone indicador de PL/SQL.
Na pasta Layout indicamos se desejamos visualizar os boilerplates de texto, boilerplates grficos, boilerplates externos
(Arquivo de Ligao Link File), boilerplates de imagens, campos, botes, grficos (do Graphics Builder), objetos
OLE2 e informaes sobre ancoragem (que o nosso objetivo).
NCORAS (ANCHORS)
ncoras determinam o posicionamento relativo de todos os objetos na impresso do relatrio. Elas associam um
objeto de Layout chamado de objeto-filho a um segundo objeto chamado de objeto-pai.
Elas tambm definem o posicionamento vertical e horizontal do filho em relao ao pai.
Existem dois tipos de ncoras no Report Builder: implcitas e explcitas. No exemplo anterior, tivemos um exemplo
de ancoragem implcita.
O Report Builder cria uma ncora implcita todas as vezes em que h o risco de um objeto se sobrepor a outro. Isto
muito comum quando definimos um objeto de tamanho varivel.
Como teste adicional, vamos diminuir o campo que apresenta o nome do funcionrio e vamos transform-lo em
varivel no sentido horizontal.
Retorne ao Navegador e verifique o que o Report Builder criou: ele ancorou o salrio do funcionrio no nome do
funcionrio. Observe que o campo F_nm_func pai na ancoragem que se relaciona com F_vl_sal.
Portanto, podemos entender os tipos de ncora da seguinte forma:
ncoras Implcitas Criadas pelo Report Builder a tempo de execuo. Ele as cria objetivando garantir que no ocorrer
sobreposio de objetos. Somente so geradas ncoras implcitas para objetos que no tenham ncora explcita definida.
ncoras Explcitas Criadas pelo desenvolvedor no Report Builder. So criadas com o objetivo de garantir o
posicionamento relativo de objetos. Se sobrepem a qualquer ncora implcita criada.
Como exemplo, criaremos uma ncora explcita entre F_nm_func e F_vl_sal. A criao da ncora deve seguir os
passos abaixo:
Clicar no objeto ncora (anchor) na paleta de ferramentas (vertical).
Clicar na linha (lateral esquerda) do objeto F_vl_sal. No adianta clicar no interior do objeto. Tem de ser na
linha. Se necessrio, aumente o nvel de zoom para melhor visualizao. Pode soltar o mouse.
Duplo clique na linha (lateral direita) do objeto F_nm_func.
No exemplo da Figura 8.71, o objeto-pai (F_nm_func) est com a ncora posicionada no lado direito ( Direita Right)
e o objeto-filho (F_vl_sal) est com a ncora posicionada no lado esquerdo ( Esquerda Left). esta a informao
fornecida pelas propriedades Tipo de Limite-Pai (Parent Edge Type) e Tipo de Limite-filho (Child Edge Type).
Estas propriedades, portanto, determinam as laterais dos dois objetos onde a ncora est pendurada.
Nosso prximo conjunto de propriedades chama-se Percentual de Limite (Edge Percent), tanto para pai (parent)
quanto para filho (child).
No nosso caso, os dois objetos esto posicionados lado a lado. Sendo assim, a distncia entre eles fixa ou seja,
a tempo de impresso, o posicionamento lateral ser sempre distante do tamanho da ncora no desenho. No
entanto, o posicionamento vertical fornecido como percentual. Isto ocorre porque nosso objeto poder crescer
tambm na vertical; sendo assim, a ncora garante que o posicionamento relativo dos dois objetos se manter
constante a tempo de execuo.
Se os objetos estivessem posicionados um sobre o outro, o que se manteria constante seria a distncia vertical,
enquanto a distncia horizontal se manteria varivel.
Na Figura 8.72 verificamos como o Report Builder controla o posicionamento com a ncora. Na parte superior do
desenho apresentamos a definio feita a tempo de Layout: o posicionamento lateral fixo e o posicionamento
vertical 50% para o pai e 50% para o filho em relao lateral onde est pendurada a ncora.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1037
Na parte inferior, verificamos o que acontece a tempo de execuo. Suponhamos que o objeto-pai tenha crescido
tanto verticalmente quanto horizontalmente. Sendo assim, aps sua formatao (ele formatado primeiro que o
objeto-filho), o Report Builder deve manter as mesmas propores definidas a tempo de Layout; portanto ele determina
o posicionamento vertical de 50% em relao lateral direita, traa uma distncia fixa na horizontal e monta o
objeto-filho com o ponto central (50%) de sua lateral esquerda exatamente na fronteira da distncia determinada.
O posicionamento relativo mantido. Esta a inteno da ancoragem: garantir que o posicionamento relativo dos
objetos seja mantido.
Ainda temos dois parmetros para analisar: Fechar Horizontalmente (Collapse Horizontally) e Fechar Verticalmente
(Collapse Vertically).
Estes parmetros indicam que, se o objeto-pai no for formatado, o objeto-filho dever ser formatado colado
posio onde terminaria o objeto-pai, sem a manuteno da distncia fixa.
Para entendermos toda esta explicao, retornemos ao nosso exemplo.
A Figura 8.73 nos mostra o layout de teste do nosso exerccio. A ncora foi tornada explcita. Para que o nome do
funcionrio no fosse formatado em determinada situao, criamos o gatilho de formatao associado a F_nm_func
apresentado na Listagem 8.24.
Quando o nome do funcionrio no formatado, a ncora posiciona o objeto-filho exatamente com a distncia
definida a tempo de layout. Veja que na Figura 8.74 desenhamos a ncora para mostrar esta distncia. O espao
entre a ncora e o objeto F_cd_depto corresponde distncia que existiria entre F_cd_depto e Fnm_func.
Alteraremos a propriedade desta ncora para definir o colapso horizontal. Observe que na linha de matrcula 10
(nm_func=Cristina), o salrio est alinhado com os demais nomes de funcionrios, ou seja, a coluna de salrio
ocupou, exatamente, a posio do nome. A distncia da ncora foi totalmente suprimida.
Observe o resultado na Figura 8.75.
QUADROS (FRAMES)
Um Quadro (Frame) possui um subconjunto das funes de um Repeating Frame. So semelhantes aos Quadros de
Repetio (Repeating Frame) nos seguintes aspectos:
Podem conter qualquer objeto de layout, incluindo outros Quadros (Frames).
Podem se expandir, contrair, ser variveis ou de tamanho fixo, horizontalmente ou verticalmente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1039
No exemplo da Figura 8.76, a propriedade Impresso de Objeto Ativada (Print Object On) foi preenchida com
Todas as Pginas (All Pages) apenas para o Quadro (Frame). Todos os boilerplates de texto esto com esta propriedade
preenchida com Primeira Pgina (First Page).
Uma vez que o Quadro (Frame) ser formatado em todas as pginas, ou seja, haver uma nova instncia do Frame
em cada pgina, os objetos pendurados no quadro sero formatados tambm em todas as pginas do relatrio,
porm na primeira pgina de cada instncia do objeto Frame.
Como segundo teste em nossa aplicao, criaremos agora um Layout que apresente no s Funcionrio como
tambm Projeto e Atividade.
No Layout montado, colocamos os dois Repeating Frames (funcionrio e projeto-atividade) lado a lado e abaixo de
ambos inclumos uma imagem. Sabemos que o Report Builder, percebendo que existe o risco de sobreposio dos
objetos, criar uma ncora implcita entre o objeto imagem e o objeto que cresce.
Neste caso, porm, existem dois objetos com crescimento vertical. Nesta situao o Report Builder determina onde
ser feito o posicionamento da ncora baseado em algoritmos internos, ou seja, a ncora tanto pode ficar pendurada
em R_G_CD_MAT quanto em R_G_CD_PROJ.
O que aconteceria se o Report Builder decidisse pela ancoragem em R_G_CD_MAT? Os objetos do Repeating Frame
R_G_CD_PROJ passariam sobre a imagem.
Este problema ocorre porque um objeto-filho s pode estar ancorado em um objeto-pai.
Como soluo de contorno, envolveremos os dois Repeating Frames em um Quadro (Frame), de tal forma que a
ancoragem ocorra em relao ao Frame e no mais em relao aos Repeating Frames.
A Figura 8.78 nos mostra a soluo referida acima. Observe que este Quadro (Frame) deve ter a propriedade de
elasticidade vertical ativada, pois os objetos em seu interior geraro diversas linhas.
BOTES (BUTTONS)
Podemos criar botes num relatrio a fim de gerar relatrios interativos (online), isto , um relatrio que apresente
o resultado no vdeo.
Esses botes servem para:
Permitir o acesso a arquivos multimdia (Imagens, Vdeo ou Som).
Permitir o acesso a imagens gravadas no banco de dados.
Executar cdigos PL/SQL (por exemplo, executar outro relatrio).
Criaremos um pequeno exemplo de utilizao. Para tal salvaremos nossa aplicao Layout3 com o nome de Layout4 e retiraremos todas as informaes referentes a Projeto-Atividade.
Neste exemplo anexaremos um boto ao lado do Repeating Frame de funcionrio, como apresentado no layout
da Figura 8.79.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1041
EXERCCIOS
8.33) Crie um relatrio contendo duas queries independentes apresentadas lado a lado (uma com dados de
funcionrio e outra com dados de projeto X atividade). Apresente duas imagens (uma sob cada querie) somente
quando todo o relatrio for concludo.
8.34) Crie um relatrio que contenha a lista de departamentos da empresa. Quando o usurio pressionar o boto
adequado, devemos acionar o relatrio REP31. Para os departamentos A00, B01 e C01 no apresentar fotos, para os
demais departamentos apresentar.
8.35) Crie um relatrio que selecione os seguintes dados da tabela de funcionrios: matrcula, nome, salrio e
cargo. O relatrio dever ter formato tabular, porm o layout dever variar de acordo com o parmetro recebido:
A Apresentar matrcula, nome e salrio.
B Apresentar matrcula, salrio e cargo.
C Apresentar matrcula, nome e cargo.
Os espaos entre os objetos apresentados na impresso devem ser constantes e semelhantes entre si.
METODOLOGIA
Apresentao e descrio de diversas rotinas previamente definidas, algumas das quais j analisadas durante o estudo do Form Builder.
TCNICA
Apresentao prtica da aplicabilidade de diversas rotinas apresentadas.
O N PACOTES EMBUTIDOS
Falaremos, agora, nos pacotes que aparecem sob o n Pacotes Embutidos (Built-in Packages).
Conheceremos o objetivo de todos eles, mas exemplificaremos apenas alguns.
Quando estivermos falando sobre cada um deles, expanda o n correspondente para que voc possa visualizar as
rotinas pertencentes a ele e entender um pouco melhor seus objetivos.
Para os testes deste grupo criaremos um relatrio de nome Pacote, com as seguintes caractersticas:
Colunas cd_depto e nm_depto da tabela Depto.
Boto (pode ser includo na linha de cada departamento ou ficar isolado).
SRW
Este o pacote-padro do Report Builder, ou seja, aquele pacote que contm as rotinas bsicas para utilizao
dentro de um relatrio. Com ele podemos alterar as propriedades de um objeto (Set_Attr), determinar a quantidade
mxima de linhas de uma query (Set_MaxRow), acionar outro relatrio (Run Report) e muitas outras funcionalidades,
algumas delas j utilizadas ao longo dos exemplos e exerccios deste captulo.
A lista completa das rotinas est presente no Captulo 21.
OLE2
Conjunto de rotinas PL/SQL APIs para criao, manipulao e acesso a tributos de objetos OLE2 Automation.
Os objetos OLE2 Automation encapsulam um conjunto de atributos e mtodos que podem ser manipulados ou
invocados de um OLE2 Automation Client. O pacote OLE2 permite que faamos acesso aos objetos OLE2 Automation Servers diretamente do PL/SQL.
No Form Builder este pacote, apesar de presente, deixar aos poucos de ser utilizado uma vez que as rotinas
presentes no pacote Standard Extensions realizam as mesmas operaes de forma mais simples e eficiente (veja
Exerccio 7.57 do captulo de Form).
No Report Builder, estas rotinas no esto disponibilizadas ainda. Para os mesmos resultados ainda devemos nos
utilizar do pacote OLE2.
DDE
Este pacote permite a utilizao do suporte a Dynamic Data Exchange (DDE) dentro dos componentes do Oracle
Developer.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1043
ORA_FFI
Este pacote prov uma interface de uso de funes C (terceira gerao) diretamente dentro do PL/SQL.
No ambiente Windows as funes externas devem ser DLLs que, depois de registradas via funes ORA_FFI, podem
ser usadas em uma aplicao Reports.
Para utilizao de uma DLL em uma aplicao Reports, devemos:
Usar a funo Load_Library para obter um handle da DLL, ou seja, uma identificao fsica (nome de diretrio,
nome do arquivo da biblioteca, etc.).
Usar a funo Register_Function para obter um handle da funo, ou seja, uma identificao no ambiente da
funo (C) a ser usada. Devem-se especificar o nome da funo e sua localizao (o handle da DLL).
Usar a funo Register_Parameter para registrar cada parmetro e estabelecer a paridade com os tipos de parmetro
da PL/SQL.
Usar a funo Register_Return para registrar o tipo de retorno da funo C e estabelecer a paridade com o
equivalente PL/SQL.
No desenvolveremos exemplos com este pacote. Para maiores informaes, utilize a ajuda do Report Builder para
exemplos e forma de utilizao.
ORA_DE
Este pacote para uso interno do Report Builder.
Contm construes usadas pelo Oracle Developer para servios privativos de PL/SQL.
No desenvolveremos exemplos com este pacote.
ORA_PROF
Este pacote contm procedimentos, funes e condies de erro que nos permitiro verificar o tempo de execuo
de uma determinada unidade de programa.
Repetiremos o teste feito no Form Builder para verificao de tempo transcorrido.
Na Listagem 8.25 decidimos determinar o tempo total de somar 1 a uma varivel 10.000 vezes. Para isto criamos o
timer, iniciamos a contagem (start), executamos a operao desejada, interrompemos a contagem (stop), destrumos
a rea de contagem do tempo e obtivemos o valor do tempo transcorrido (retornado em milissegundos).
Separaremos, agora, este procedimento em duas partes, uma que criar o Timer e outra que verificar o tempo
decorrido. Este dois procedimentos sero acionados por um boto a ser includo em nossa aplicao. O procedimento
da Listagem 8.26 apenas cria o Timer.
No procedimento da Listagem 8.27 apenas obtemos o resultado do tempo decorrido. Observe que utilizamos a
rotina Message do pacote SRW. Essa rotina mostra a mensagem em uma janela de Alerta. Recebe como parmetro
um nmero dado por ns e o texto da mensagem. O nmero tambm aparece na mensagem apresentada.
Com a seqncia de testes deste tpico, acionaremos estas rotinas a fim de contabilizar o tempo total de execuo
das aes programadas.
Para reinicializar o contador de tempo, devemos usar a rotina Reset_Timer deste pacote.
ORA_NLS
Este pacote permite que obtenhamos informaes sobre o ambiente corrente.
Faremos um pequeno teste a ttulo de exemplo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1045
Na Listagem 8.28 apresentamos uma procedure, na qual utilizamos duas rotinas do pacote Ora_Nls: a funo
Modified_Date_Fmt, que retorna um boleano indicando se o formato de data foi ou no modificado, e a funo
Get_Lang_Scalar que pode fornecer diversas caractersticas a respeito da linguagem corrente. Podemos obter dados numricos.
O parmetro recebido por esta rotina corresponde a uma constante definida no pacote. Os nomes e significados
destas constantes esto na ajuda do Report Builder sob o ttulo Ora_Nls Numeric Constants.
TEXT_IO
Este pacote permitir que venhamos a ler ou gravar informaes para um arquivo do ambiente. equivalente ao
pacote Text_IO do Form Builder. Trabalharemos com ele apenas nos exerccios.
TOOL_ENV
Permite que obtenhamos informaes das variveis de ambiente do Oracle.
Faremos um teste a ttulo de exemplificao.
Na Listagem 8.29 utilizamos uma rotina do pacote Tool_Env (Getvar) para obter o nome de uma das variveis do
ambiente. Voc pode ver o nome destas variveis no registrador do Windows com o RegEdit (n
Hkey_Local_Machine, subn Software, subn Oracle, subn HomeX de acordo com seu Oracle-Home).
A rotina permite a obteno destas informaes dinamicamente.
Com esta rotina encerramos os testes da aplicao Pacote. Podemos acionar todas as rotinas criadas no boto e
verificar o tempo transcorrido total.
O resultado mostrado na Listagem 8.30.
Para acionarmos o boto, devemos escolher a opo Previsualizador de Runtime no menu Exibir (View).
TOOL_RES
Este pacote fornece um mecanismo para extrairmos informaes de um arquivo de recursos. Os arquivos de recursos
so providos pelas ferramentas (Form Builder, Report Builder, etc.) e contm informaes diversas utilizadas pelos
software. Podemos gerar nossos prprios arquivos de recursos com o utilitrio ResPa21 a partir de um texto com
extenso PRN. Esse utilitrio fornecido juntamente com o Oracle*Terminal.
TOOL_ERR
O pacote Debug fornece um conjunto de informaes a respeito do erro acontecido em uma rea chamada Error
Stack. Essa rea contm cdigos e mensagens de erro organizadas em uma rea indexada de 0 a n-1 (onde n o
nmero de erros). Esse pacote permitir a manipulao desta rea de stack.
No desenvolveremos exemplos com esse pacote. Para maiores informaes, utilize a ajuda do Report Builder para
exemplos e forma de utilizao.
STPROC
Este pacote para uso interno do Report Builder.
Contm construes usadas pelo Oracle Developer para chamadas a subprogramas armazenados no banco de
dados. A utilizao deste pacote nos relatrios automaticamente montada quando solicitamos o uso de rotinas
presentes no banco de dados.
No desenvolveremos exemplos com esse pacote diretamente.
LIST
Este pacote contm procedure, funes e condies de erro que podamos usar para criar e manter listas de textos
(strings). Esta era a forma alternativa de trabalharmos com arrays no Report 2.5, uma vez que a PL/SQL disponvel era
verso 1. No Report Builder j no temos mais necessidade desta utilizao. Podemos usar o recurso do Type Table.
No desenvolveremos exemplos com esse pacote diretamente.
DEBUG
O pacote Debug oferece um conjunto de rotinas, funes e condies de erro para realizarmos depurao em
aplicaes Reports.
Esse pacote foi bastante utilizado no tpico de Depurao do Form Builder ( o mesmo). O conjunto de rotinas se
acha presente no Captulo 15 (do Form Builder).
Os exemplos de utilizao desse pacote sero vistos no tpico relativo ao Interpreter. Utilize a ajuda do Report
Builder para exemplos e forma de utilizao.
STANDARD
Este pacote utilizado implicitamente por ns todas as vezes que trabalhamos com PL/SQL. Corresponde ao
conjunto de rotinas de PL/SQL vlidas no ambiente.
J est sendo utilizado nos exemplos e exerccios vistos at agora.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1047
METODOLOGIA
Apresentao das formas armazenamento de informaes de trabalho fornecidas pelo Report Builder.
TCNICA
Anlise terica dos aspectos apresentados complementada por exemplos e exerccios.
INTRODUO
Neste tpico, trataremos dos diversos tipos de variveis de um relatrio. Trabalharemos um exemplo que mostrar
a utilidade de cada uma delas.
As variveis podem ser de diversos tipos, com caractersticas e abrangncias diferentes:
Variveis Locais a um PL/SQL.
Variveis PlaceHolders.
Variveis de Pacote.
Parmetros.
VARIVEIS LOCAIS
So aquelas declaradas dentro de um gatilho ou rotina. Os valores dessa varivel so acessveis apenas dentro do
trecho de PL/SQL em que declarada.
Ao trmino do bloco de PL/SQL, onde ela declarada, deixa de existir.
Tem sua vida til associada ao procedimento no qual esto declaradas.
Na Listagem 8.31 criamos uma varivel de nome Linguagem dentro do trigger Before Report. Essa varivel est
obtendo o nome da linguagem, territrio e charset em uso no banco de dados. Sua vida til, no entanto, o
trmino do trigger onde est inserida.
O tipo destas variveis similar aos tipos vlidos em PL/SQL (number, char, varchar2, date, <tabela ou
cursor>%rowtype, <coluna>%type, tipos do usurio, etc.).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1049
Essa mensagem nos avisa que no poderemos atualizar as variveis Atual e Anterior a tempo de montagem do
layout, o que nos impediria de realizar a operao desejada.
Precisamos acumular o salrio a tempo de montagem do layout e precisamos de uma varivel no Modelo de Dados que
nos permita a apresentao dos valores. No entanto, no podemos atualizar essa varivel durante a montagem do relatrio.
VARIVEIS DE PACOTE
Quando criamos a parte de especificao de um pacote no Report Builder, todas as variveis definidas neste local
so chamadas de variveis de pacote, pois so variveis de PL/SQL com visibilidade em toda a aplicao.
As variveis de pacote possuem os mesmos tipos de uma varivel local.
Em nossa aplicao substitumos as variveis PlaceHolders pela varivel do pacote no acmulo de valores. E no
tivemos erro de execuo.
Temos, ainda, de apresentar o valor. Sendo assim, criaremos um Field no incio da pgina (porm dentro do corpo)
e um trigger de Formatao para este Field e um outro Field aps o Repeating Frame com seu respectivo trigger de
formatao. Ambos os Fields devem fazer referncia ao Place Holder valor_salario (mesmo que este no venha a ser
usado). Para garantir que ocorram diversas quebras de pgina, o Repeating Frame receber como limitao um
nmero mximo de 5 registros por pgina.
A rotina Set_Field_Num permite que alteremos o valor a ser apresentado em um determinado field. Desta forma,
alteramos o valor do field Anterior, posicionado no incio da pgina, acumulamos os valores na varivel de pacote
Valor e novamente atribumos essa varivel ao field Atual, posicionado no fim da pgina.
PARMETROS
As variveis do tipo Parmetro j foram estudadas em tpico especfico anteriormente.
EXERCCIOS
8.36) Crie um relatrio de nome REP36 que receba como parmetro a pgina inicial a ser impressa e a quantidade
limite de registros. Devem ser mostrados na capa do relatrio os parmetros recebidos. Utilize a query Q20 para
montagem deste relatrio.
8.37) Crie um relatrio de nome EX37 que contenha:
Na linha detalhe o nome, cargo e salrio de cada funcionrio.
Na linha de quebra o nome e cdigo do departamento.
Apresente um total de salrios por departamento e um acumulado por departamento.
Apresente um total de salrios por pgina e um acumulado de salrios por pgina.
Na pgina seguinte deve ser apresentado o total da pgina anterior.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1051
METODOLOGIA
Apresentao da tcnica para formatao de um objeto de layout dinamicamente.
TCNICA
Desenvolvimentos de exemplos e exerccios que utilizem a tcnica descrita.
CONCEITOS INICIAIS
A tempo de execuo possvel modificar a formatao de um determinado objeto de Layout.
Para acompanharmos o exemplo deste tpico, criaremos um relatrio de nome Dinamico contendo as colunas
Cd_Mat, Nm_Func, Cd_Depto e Vl_Sal.
Suponhamos que desejssemos destacar todos os valores de salrio superiores a R$ 3.000. Poderamos fazer um
gatilho de formatao com a seguinte lgica, apresentada na Listagem 8.38 e j vista anteriormente.
No entanto o Report Builder nos ajuda na montagem desta formatao uma vez que conta com um mtodo para
formatao condicional bastante amigvel. Veja a seguir!
FORMATAO CONDICIONAL
Retorne ao navegador e abra a tela de propriedades da coluna F_Vl_Sal. No grupo Layout Geral encontramos uma
propriedade chamada Formatao Condicional. Selecione esta propriedade para que seja mostrada a Figura 8.83.
Preencheremos este dilogo com as condies associadas ao campo que desejarmos. Observe que a formatao ser
feita sobre o campo F_Vl_Sal, porm a condio pode ser montada em relao a qualquer dos parmetros ou
elementos presentes no Modelo de Dados.
O dilogo apresentado composto de duas partes: na parte superior trataremos de definir as condies e na parte
inferior as formataes.
Na parte superior contamos com um indicador de validade da condio (check box do lado esquerdo), de um
operador para a condio (entre, maior do que, igual a, etc.) e de dois campos para preenchimento de valores (no
caso de a condio necessitar).
Se marcarmos uma nova linha de condio, direita ser habilitado um campo para que informemos o operador
de ligao entre as condies (And ou Or).
Na parte inferior podemos formatar a fonte, cor de preenchimento, cor de linha e a supresso do elemento na
impresso (check box do lado esquerdo Ocultar o Objeto). O boto Redefinir Formato apaga toda a formatao
que tivermos estabelecido.
Para efeito de teste determinaremos como condio que cd_mat esteja entre 40 e 100 e como formatao escolheremos
como fonte Bookman Old Style (se voc no tiver esta fonte no ambiente Windows, escolha uma outra que seja bem
diferente), tamanho 12 e estilo Negrito e Itlico, cor de fundo Cinza e Cor de letra Azul (veja a Figura 8.85).
Quando voc retornar ao Navegador, verificar que foi anexado um trigger de formatao ao campo F_vl_sal, cujo
contedo apresentado na Listagem 8.39 a seguir.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1053
Este trigger usa um conjunto de rotinas do pacote SRW para a montagem da formatao dos itens.
Execute este relatrio e verifique o resultado produzido.
ROTINAS
As rotinas do pacote SRW relativas formatao de um determinado campo, dinamicamente, esto presentes no
captulo sobre os pacotes do Report Builder.
VALORES
O Report Builder utiliza uma paleta de cores-padro cujo arquivo se chama default.pal e que ser detalhada a seguir:
A primeira parte da paleta (regio superior esquerda) composta de 16 cores bsicas nomeadas como: black,
white, green, darkgreen, gray, darkgray, cyan, darkcyan, red, darkred, blue, darkblue, yellow, darkyellow, magenta, darkmagenta.
A segunda parte da paleta (regio inferior esquerda) composta de oito clulas vazias em que podemos definir
cores customizadas (no recomendado em funo da portabilidade).
As prximas quatro colunas so compostas de variaes de cinza. Cada cor tem o formato gray<valor>, onde o
valor varia de acordo com a percentagem de cinza. Os valores vlidos esto no intervalo de 4 a 96, com incremento de 4. Por exemplo: gray4, gray8, gray12, gray16, gray20, gray24, gray28, gray32, ...., gray96.
O restante da paleta de cores contm cores especificadas por variaes percentuais das cores vermelha, verde e
azul (RGB). Sendo que:
a) Os valores percentuais para vermelho ou verde so: 0, 25, 50, 75, 88 ou 100.
b) Os valores percentuais para a cor azul so: 0, 50, 75, 88 ou 100.
Cada cor nomeada de acordo com o formato: r<valor>g<valor>b<valor> de acordo com seus valores RGB. Por
exemplo, uma cor composta de 100% de vermelho, 88% de azul e 0% de verde teria o nome: r100g0b88.
Se desejarmos visualizar a cor em questo e seu nome correspondente, devemos efetuar os seguintes passos:
Na opo Preferncias (Preferences) do menu Ferramentas (Tools), preencher a propriedade Modo de Cor (Color
Mode) com o valor Editvel (Editable).
No editor do Layout, selecionar o menu Formatar (Format), submenu Opes de Layout (Layout Options),
opo Paleta de Cores (Color Palette).
Ser apresentado um dilogo contendo a paleta de cores. Ao selecionarmos uma cor, seu nome apresentado,
permitindo que o modifiquemos e faamos a customizao de novas cores.
A seguir apresentamos alguns valores de Pattern (textura do objeto) na Figura 8.85.
EXERCCIOS
8.38) Crie um relatrio de nome REP38 baseado na query Q20 e que contenha a seguinte funcionalidade:
Devem ser apresentados em vermelho todos os salrios maiores que R$ 4.000,00.
Devem ser apresentados em verde todos os salrios menores que R$ 2.000,00.
8.39) Crie um relatrio de nome REP39 baseado na query Q20 e que contenha a seguinte funcionalidade:
s segundas as letras do relatrio devem ser azuis.
s teras as letras do relatrio devem ser verdes.
Nos outros dias as letras devem ser pretas.
8.40) Crie um relatrio que formate uma borda para os campos numricos. A espessura da borda e cor sero
recebidas como parmetro:
Espessura variando de 0 a 200.
Cor de letra.
Cor de preenchimento.
Baseie o relatrio na Q20. Crie um grupo de quebra com desenvolvimento vertical. Teste a propriedade Column Mode.
METODOLOGIA
Apresentao das caractersticas gerais do mdulo e da ferramenta.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1055
PREFERNCIAS
Para obtermos as preferncias do Report Builder, devemos escolher o menu Ferramentas e neste a opo Preferncias.
Ser apresentado um dilogo composto de cinco pastas que estudaremos separadamente.
PASTA GERAL
A pasta Geral contm caractersticas que afetam a salva e compilao dos mdulos desenvolvidos utilizando este
Report Builder.
No dilogo apresentado, encontramos as seguintes opes:
Suprimir Editor de Relatrios na Abertura (Suppress Report Editor on Open) Indica se o editor de Relatrio
deve ou no ser apresentado a tempo de abertura de um relatrio.
Suprimir Paleta de Propriedades na Criao de Objetos (Suppress Property Palette on Object Creation) Esta
propriedade indica se a paleta de propriedades deve ou no ser apresentada imediatamente aps termos criado
um objeto de layout. A marcao desta propriedade agiliza o processo de criao dos objetos do layout; no
entanto, no devemos nos esquecer de que Fields e Repeating Frames necessitam de relacionamento com o
Modelo de Dados antes de o relatrio poder ser executado.
Suprimir Recuperao da Lista na Entrada da Caixa de Dilogo (Suppress List Retrieval on Dialog Box Entry) Indica
que nos dilogos de acesso ao banco de dados no ser trazida a lista de objetos do banco de dados por default.
Unidade de Medida (Unit of Measurement) Especifica a unidade a ser usada na definio de um novo relatrio.
As unidades disponveis so: centmetros, polegadas ou pontos. O default polegadas.
Modo de Cor (Color Mode) Esta opo determina como ser feita a carga da paleta de cores para a aplicao.
Quando criamos ou abrimos ou carregamos uma aplicao, a paleta de cores associada a ela carregada na tabela
de cores do sistema. Como esta tabela possui uma quantidade de espaos limitada, o Report Builder pode encontrar
dificuldade em dar manuteno a aplicaes utilizando diferentes paletas. Os valores vlidos para esta opo so:
a) Editvel (Editable) Indica que desejamos editar, ou seja, criar nossas prprias combinaes de cores. Quando
a propriedade Color Mode est preenchida com este valor, a paleta de cores fica vulnervel a modificaes da
nossa parte e, involuntariamente, em funo da necessidade de carga de uma nova paleta. Somente devemos
utiliz-la quando desejarmos fazer uma modificao na paleta. Ao trmino, devemos retornar ao estado
normal, que Read Only Shared. Para que esta opo tenha efeito, devemos salvar as preferncias e fechar
o Report Builder. Ao ativarmos novamente o Report Builder, devemos acionar o Editor de Layout e usar no
menu Formatar (Format), opes de Layout (Layout Options), Paleta de Cores (Color Palette).
O Report Builder utiliza uma paleta de cores-padro cujo arquivo se chama default.pal, j estudado no tpico anterior.
Para editar uma cor, selecione uma das cores na parte vazia (branca), clique sobre o boto Editar. Ser apresentado
um dilogo com cores bsicas e matizes. Selecione uma cor bsica, varie seu matiz, saturao e luminosidade,
clique sobre o boto Adicionar Cores Personalizadas e d OK.
A cor definida ocupar a posio selecionada inicialmente na tabela.
Salve esta nova paleta de cores (Menu Arquivo File, opo Exportar Export, Paleta de Cores Color Palette),
volte ao modo Read Only Shared, preencha o nome do novo arquivo na opo Paleta de Cores, feche o Report
Builder e torne a abri-lo com esta nova paleta.
PASTA ACESSAR
Esta pasta definir opes para as aes de abertura ou salva de uma aplicao.
O contedo da pasta analisado a seguir:
Acessar Indica se os mdulos sero lidos/gravados em arquivo (file) do sistema operacional, no banco de dados
ou arquivo/banco de dados. Esta ltima opo indica que a cada abertura ou salva ser mostrado um dilogo
que questionar o usurio do local de armazenamento (arquivo ou banco de dados).
Mostrar Esta opo filtra o que deve ser apresentado no caso de uma leitura: relatrios, gabaritos, consultas,
etc. ou uma combinao daqueles que desejarmos.
PASTA ASSISTENTES
Esta pasta indica se desejamos ou no que o dilogo de abertura dos assistentes seja mostrado como primeiro dilogo.
As opes disponveis so as seguintes:
Dilogo de Boas-vindas (Welcome Dialog) Indica se este dilogo deve ser apresentado quando o Report Builder
inicializado.
Pgina de Boas-vindas do Assistente de Relatrio (Report Wizard Welcome Page) Indica se este dilogo deve ser
apresentado quando iniciamos a execuo do Assistente de Relatrio.
Pgina de Boas-vindas do Assistente de Dados (Data Wizard Welcome Page) Indica se este dilogo deve ser
apresentado quando iniciamos a execuo do Assistente de Dados.
Pgina de Boas-vindas do Assistente da Web (Web Wizard Welcome Page) Indica se este dilogo deve ser
apresentado quando iniciamos a execuo do Assistente de Web.
Pgina de Boas-vindas do Assistente de Grficos (Chart Wizard Welcome Page) Indica se este dilogo deve ser
mostrado quando iniciamos o Assistente de Grficos.
Espaamento entre Objetos do Assistente de Relatrios (No h Gabarito) Este conjunto de propriedades
determina o espao a ser deixado entre os objetos definidos no Layout. Somente vlido quando no houver
gabarito especificado. Esses valores so fornecidos em unidade de caracter.
a) Intervalo Horizontal (Horizontal Gap) Determina o intervalo horizontal entre um objeto e os objetos que
ele envolve. Por exemplo, entre o Frame (externo) e o Repeating Frame (interno). Esta especificao ignorada
se gerarmos um relatrio Character Mode.
b) Intervalo Vertical (Vertical Gap) Determina o intervalo vertical entre um objeto e os objetos que ele envolve.
Por exemplo, entre o Frame (externo) e o Repeating Frame (interno). Esta especificao ignorada se gerarmos
um relatrio Character Mode.
c) Entrecampo Horizontal (Horizontal Interfield) Determina o espao horizontal entre dois campos (fields).
d) Entrecampo Vertical Determina o espao vertical entre dois campos (fields).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1057
ESTUDANDO O MDULO
As propriedades relativas ao relatrio so armazenadas juntamente com o mdulo e afetam a todas as execues deste.
So subdivididas em cinco grandes grupos: Relatrio (Report), Janela de Form de Parmetros (Parameter Form Window), Escapes de Relatrio (Report Escapes), Definies XML (Xml Definitions) e Modo Caractere (Character Mode).
RELATRIO (REPORT)
As propriedades deste grupo so:
Unidade de Medida (Unit of Measurement) Especificao da unidade de medida em que o Report Builder ir
trabalhar. As opes so: Centmetros, Polegadas e Pontos.
Mx. de Pginas de Corpo Horizontais (Maximum Horizontal Body Pages) Nmero mximo de pginas fsicas
no corpo do relatrio (para desenho), no sentido horizontal.
Mx. de Pginas de Corpo Verticais (Maximum Vertical Body Pages) Nmero mximo de pginas fsicas no
corpo do relatrio (para desenho), no sentido vertical.
Ordem de Impresso do Painel (Panel Print Order) Mostra a ordem de impresso das pginas fsicas: para o
lado e para baixo ou para baixo e para o lado.
Direo (Direction) Associado ao Panel Print Order indica a direo (esquerda para direita ou vice-versa).
Ttulo do Previsualizador (Previewer Title) Determina o ttulo do Previsualizador (Previewer).
Nome da Funo (Role Name) Indica o nome da role a ser adquirida a tempo de execuo. Observe que uma
role s pode ser adquirida se o usurio tiver autorizao (Grant) para esta role no banco de dados. Para informarmos
a password da role (se ela tiver) devemos clicar sobre o boto que apresentado para a propriedade para que seja
apresentado dilogo adequado.
Distribuio (Distribution) os nomes, formatos, quantidade de cpias, tipos de destino, etc. para os arquivos
gerados pelo Report Builder para distribuio (ser estudado em tpico especfico).
O nmero de pginas de corpo no representa o nmero de pginas necessrias para a impresso de um relatrio;
quem determina o nmero de pginas a Query.
Desta forma, podero ser impressas dez mil pginas ou uma e o parmetro maximum body pages (horizontal e
vertical) continuar sendo 10 x 10. Este nmero de corpo definido apenas para que possamos desenhar o relatrio
na pgina de Layout.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1059
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1061
EXERCCIOS
8.41) Crie um relatrio baseado na Q20 que contenha a seguinte funcionalidade:
Gerar estatsticas e verificar o resultado.
Permita que outras aplicaes executem enquanto o Report Builder obtm os dados para consulta.
Marcar as seguintes opes para desenvolvimento:
a) A unidade de dimensionamento pontos.
b) Incluir a mscara DD/MM/RRRR (para datas) e a mscara (9G999G990D00) para numricos.
c) Mdulos armazenados no sistema operacional.
d) Por default, obteno de mdulos do tipo Report.
Modo Caracter.
8.42) Crie um relatrio baseado na Q20 que contenha a seguinte funcionalidade:
Criar duas novas cores em sua paleta de cores.
Exporte a paleta de cores com o nome de pteste.pal.
Garanta que sejam lidos aproximadamente 20 registros a cada acesso ao banco de dados.
Quando o relatrio concluir com sucesso, deve ser enviado, automaticamente, um commit para o banco de
dados. Caso contrrio, deve ser acionado um Rollback.
No layout do relatrio devem ser utilizadas as novas cores criadas.
O relatrio deve alterar o ramal de todos os funcionrios para que sejam formados com quatro nmeros
comeando com 9. Se no houver nenhum nmero a ser alterado, deve ser dado um erro.
METODOLOGIA
Apresentao e descrio da capacidade de construo de relatrios matriciais.
TCNICA
Desenvolvimento de aplicativos utilizando os objetos descritos.
CONCEITOS
Uma matriz um relatrio tabular de, pelo menos, quatro conjuntos de dados:
Um conjunto de dados mostrado ao longo da largura da pgina.
Um conjunto de dados mostrado verticalmente na pgina.
Um conjunto de dados o produto do cruzamento, que determina todas as possveis localizaes onde os dados
se cruzam.
Um conjunto de dados mostrado como o recheio das clulas que se cruzam.
O esquema da Figura 8.86 nos mostra estas caractersticas.
Os conjuntos de dados desenvolvidos ao longo da largura da pgina, tanto horizontalmente quanto verticalmente,
so chamados de grupos de dimensionamento, porque determinam a dimenso da matriz.
Sendo assim, se uma matriz bidimensional, possui um grupo se desenvolvendo horizontalmente e outro
verticalmente; se uma matriz tridimensional, possui um grupo se desenvolvendo verticalmente, outro
horizontalmente e um terceiro na horizontal ou vertical.
Existem quatro tipos gerais de relatrios matriciais a serem abordados neste material, porm poderemos criar
outros tipos a nosso critrio. So eles:
Simple Matrix.
Nested Matrix.
Cross Product Master/Detail.
Matrix Break.
Para caracterizarmos as diferenas entre cada um destes tipos, criaremos relatrios-exemplo de cada um deles. Nosso
estudo comear pelo modelo Simple, que nos permitir estudar trs aspectos fundamentais de um relatrio matricial:
A quantidade de queries.
A quantidade de grupos.
A presena de sumrios.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1063
Como prximo passo devemos especificar o grupo que se desenvolver horizontalmente na pgina. Neste caso,
escolheremos nr_cargo.
Em seguida, devemos informar o que ser apresentado no interior de cada clula, ou seja, o recheio. Escolheremos
o campo QTD.
Criamos este primeiro exemplo sem gabarito para que tivssemos somente as informaes definidas por ns. Para
que o resultado ficasse mais claro, no entanto, as linhas do grupo Recheio foram pintadas de preto para ficar em
destaque. Veja o resultado na Figura 8.88.
Observe na Figura 8.90 que os grupos foram renomeados para que indicassem exatamente a informao que
contm. No deixe de fazer esta ao, pois faremos muitas referncias ao nome do grupo.
Outro fato que devemos observar a ordem em que foi feita a diviso dos grupos. Os grupos de dimensionamento
ficam acima do grupo Recheio, ou seja, os grupos de dimensionamento so pais do grupo de recheio. Para cada
clula (chave cargo e departamento) ser obtido um recheio.
Neste resultado ainda falta a determinao de um elemento que ligue os dois grupos de dimensionamento, isto ,
um grupo que faa o cruzamento de cada elemento vertical com cada elemento horizontal estabelecendo um
produto. Esse grupo chamado de Cruzamento.
Podemos defini-lo com a ferramenta Produto Hbrido da paleta de ferramentas (vertical) do Modelo de Dados.
Com esta ferramenta, devemos envolver os dois grupos de dimensionamento. Veja a Figura 8.90.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1065
O objeto marcado corresponde ao grupo de cruzamento. Podemos, ento, dar cor diferenciada a este grupo para
que tenhamos exata visibilidade do resultado gerado.
Como prxima etapa, criaremos o grupo Recheio, que ser desenhado dentro (e sobre) o grupo de cruzamento.
Passaremos, agora, a definir as colunas do Modelo de Dados nos locais correspondentes no Layout.
Observe na Figura 8.93 que criamos o grupo Matriz (ou de cruzamento) antes de relacionarmos a terceira query.
Esta ordem deve ser respeitada para que o resultado seja satisfatrio.
Na Figura 8.94 conclumos o Modelo de Dados deste relatrio. A ligao foi feita entre a coluna nr_cargo e a coluna
num_cargo, entre a coluna cd_depto e a coluna cod_depto. Clique no boto Ligao de Dados (Data Link), em
seguida na coluna nr_cargo e, sem soltar o mouse, arraste-o para a coluna num_cargo, soltando-o em seguida.
Repita esta operao para as colunas cd_depto e cod_depto.
A montagem do Layout semelhante ao anterior, com a diferena de que as colunas cod_depto e num_cargo no
so apresentadas no layout. Foram criadas apenas com a finalidade de relacionar as queries.
CONCLUSO
Conclumos destes exemplos que desenvolvemos que o nmero de queries no importa para o resultado final do
relatrio. O que define a quantidade de dimenses e a complexidade da matriz o nmero de grupos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1067
A criao de sumrio para uma matriz requer mais informao que a criao de sumrio para outros tipos de
relatrio. Quando criamos sumrios para colunas da sua matriz, necessitamos indicar:
A freqncia do sumrio A freqncia especifica os grupos de dimensionamento para os quais desejamos
calcular o sumrio.
A ordem na qual devemos calcular o sumrio A ordem determina o critrio de navegao para o clculo (de
cima para baixo ou da esquerda para a direita). No Report Builder esta especificao fornecida com a opo
Product Order para o(s) sumrio(s).
Obtenha a tela de propriedades da coluna de sumrio Sum_Depto. Trata-se de uma soma (propriedade Funo),
relativa ao item qtd (propriedade Origem), que deve ser zerada quando houver quebra de departamento (propriedade
Reinicializar em), cujo valor se no existir deve ser mostrado zero (propriedade Valor se Nulo) e que para realizar a
soma precisa que os valores estejam ordenados por departamento (propriedade Ordem do Produto).
A nica propriedade ainda no vista justamente a propriedade Ordem do Produto (Product Order), a qual indica
qual a ordenao a ser aplicada aos valores para que seja gerado o resultado desejado. No exemplo atual, a ordenao
dos dados apenas por departamento ou por departamento e cargo simultaneamente no faz diferena para o
resultado. O que necessrio para a soma correta da quantidade de funcionrios por departamento que os dados
estejam em ordem de departamento.
Baseado nestas explicaes, crie o sumrio relativo ao cargo.
O sumrio geral tambm no requer nenhuma informao adicional. Passemos, ento, ao layout para a criao
desses sumrios nos locais adequados. Veja o posicionamento do sumrio na Figura 8.96.
NESTED MATRIX
Neste tipo de matriz existem mais de duas dimenses. Trabalharemos com a quantidade de funcionrios por cargo,
por departamento e por sexo.
MODELO DE DADOS
Podemos criar o modelo de dados para uma Nested Matrix com uma query ou mltiplas queries.
Devemos ter, pelo menos, trs grupos no interior do grupo de cruzamento. A Listagem ilustra a query utilizada
para desenvolvimento deste teste.
Esse modelo matricial similar ao Simple, com a diferena da quantidade de dimenses. Utilizaremos os grupos na
seguinte ordem: Cargo, Departamento e Sexo. Prepare o Modelo de Dados adequadamente.
LAYOUT
Layout para uma Nested Matrix tambm semelhante ao Simple, independente do uso de uma ou mltiplas
queries no seu modelo de dados.
Na Figura 8.97 observamos a presena de mais de um Repeating Frame no sentido vertical (cargo e sexo) cruzado
por um Repeating Frame no sentido horizontal (Departamento).
Execute este relatrio e confira o resultado.
MODELO DE DADOS
O modelo de dados deve ser criado com mais de uma query para que seja possvel estabelecer o relacionamento
Master/Detail.
Novamente, devemos ter pelo menos trs grupos pertencentes ao grupo de cruzamento, como vemos na Figura 8.98.
Observe que existe um relacionamento Master/Detail entre duas das dimenses do grupo (G_Depto e G_Cargo).
Uma vez que um dos grupos depende do outro, somente os registros-detalhe relacionados aparecero para cada
registro-pai.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1069
LAYOUT
O layout para um relatrio Cross-Product Master/Detail est apresentado na Figura 8.99.
Execute o relatrio e observe que o resultado desse teste apresenta muito menos linhas que o do exemplo anterior
(Nested Matrix).
MATRIX BREAK
Um relatrio do tipo Matrix Break possui uma nova matriz para cada registro-pai. No exemplo seguinte, para cada
depto (master) no relatrio, existe uma nica matriz que contm somente os cargos de cada sexo para aquele
departamento.
MODELO DE DADOS
Quando desejamos uma matriz com quebra, devemos definir, no modelo de dados, um grupo-pai para o grupo
do cruzamento.
LAYOUT
A Figura a seguir ilustra o layout para uma matriz com quebra.
Observe que o Repeating Frame contendo o campo ano (F_cd_depto) envolve os Repeating Frames e o objeto
matricial que representam a matriz.
Este Repeating Frame externo que faz com que uma matriz separada seja apresentada para cada departamento.
EXERCCIOS
Para uma fixao maior do desenvolvimento de uma matriz, criaremos os relatrios deste tpico sem a ajuda do Assistente.
8.43) Crie um relatrio de nome REP43 que apresente uma matriz com as seguintes caractersticas:
Departamento contra sexo (nome do departamento e sexo por extenso).
Usar uma query.
8.44) Crie um relatrio de nome REP44 que apresente uma matriz com as seguintes caractersticas:
Departamento contra sexo (nome do departamento e sexo por extenso).
Quantidade de funcionrios por sexo e por departamento.
Usar mais de uma query.
Tornar visvel a clula da matriz.
8.45) Criar um relatrio de nome REP45 baseado no relatrio REP44 acrescentando a seguinte funcionalidade:
Sumrio com total de funcionrios por sexo.
Sumrio com total de funcionrios por departamento.
Sumrio com total geral de funcionrios.
Acumulado de funcionrios por departamento e por sexo.
8.46) Crie um relatrio de nome REP46 que apresente uma matriz com as seguintes caractersticas:
Usar uma query.
Sumrio de salrio por grau de instruo, departamento e sexo.
Sumrio de salrio por grau de instruo e departamento.
Sumrio de salrio por grau de instruo e sexo.
Sumrio de salrio por grau de instruo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1071
TCNICA
Desenvolvimento de exemplos e exerccios que contemplem o conceito apresentado.
INTRODUO
At este ponto trabalhamos exclusivamente com um mdulo do tipo RDF, ou seja, um fonte Report criado pelo
Report Builder. Sabemos, no entanto, que esta ferramenta capaz de criar outros tipos de arquivo, como por
exemplo um mdulo Library (extenso PLL).
Uma Biblioteca (Library) uma coleo de programas PL/SQL incluindo procedimentos, funes e pacotes.
Estas rotinas grupadas em um arquivo podem ser compartilhadas, no ambiente cliente, por diversas outras aplicaes,
sejam elas Relatrios, Telas, Menus e outras Bibliotecas (Libraries).
A biblioteca criada deve ser associada a cada mdulo no qual desejamos utiliz-la (Attach).
Uma vez anexada, podemos fazer referncia s rotinas presentes na biblioteca em qualquer ponto de PL/SQL do
relatrio ou em unidades de programa (program unit).
Para acompanharmos sua utilizao, criaremos um outro relatrio de nome Rep_Lib. Esse relatrio est baseado na
tabela Func com as colunas cd_mat, nm_func, cd_depto, nr_cargo, nr_git, in_sexo, dt_nasc e vl_sal. O estilo do
relatrio Tabular.
Aps a criao desta aplicao, salve-a e feche-a. S a utilizaremos aps a criao e compilao da biblioteca.
No Modelo de Dados, aps a criao da query, colocaremos a coluna cd_depto como grupo de quebra e junto a esta
criaremos a frmula Nome, conforme apresentada na Listagem 8.38.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1073
EXERCCIOS
8.47) Criar uma biblioteca de PL/SQL de nome BPL47 que contenha as seguintes rotinas:
Rotina (Dv_Matr) para calcular o DV da matrcula do funcionrio (noves fora).
Rotina (Intervalo) para determinar o intervalo de anos entre duas datas recebidas como parmetro.
Rotina (Abono) para calcular o abono salarial (trimestral) de acordo com o nmero de anos de casa. A rotina
deve receber como parmetro o tempo de servio e o salrio.
Menos de 1 ano de casa No recebe abono.
De 1 a menos de 3 anos de casa Recebe 3% de abono.
De 3 a menos de 6 anos de casa Recebe 10% de abono.
Mais de 6 anos de casa Recebe 15% de abono.
8.48) Crie um relatrio de nome REP48 que utilize a biblioteca REP47 para a construo do relatrio. Todos os
valores devem ser apresentados na linha-detalhe.
METODOLOGIA
Apresentao conceitual de gabaritos e mtodos para sua criao e uso.
TCNICA
Desenvolvimento de exemplos e exerccios que contemplem o conceito apresentado.
DESCRIO
Um gabarito um padro de layout que estaremos estabelecendo para o desenvolvimento de relatrios de uma instalao.
Esse gabarito pode conter cabealhos, rodaps, nmeros de pgina, capa, contracapa, Figura de marca dgua e
diversas outras caractersticas.
Podemos estabelecer padres gerais ou padres por estilo de relatrio (matricial, tabular, grupado acima, abaixo, etc.).
Para estudarmos criaremos um Gabarito, analisaremos as possibilidades de padro e faremos a gerao de um
relatrio com o padro criado.
A ESTRUTURA DE UM GABARITO
Se voc tiver algum mdulo aberto (seja biblioteca ou relatrio), feche-o para iniciarmos o estudo de gabaritos.
No Navegador de Objetos selecione o n Gabaritos e, com a ferramenta Create, crie um novo gabarito.
Observamos que contamos com uma rea de Modelo de Dados, um Layout, Gatilhos de Relatrio, Unidades de
Programa e Bibliotecas Armazenadas.
MODELO DE DADOS
Na rea relativa ao Modelo de Dados podemos criar parmetros de usurio e estabelecer valores-padro para os
parmetros de sistema.
No podemos, no entanto, definir queries ou quaisquer outros objetos relativos ao Modelo de Dados.
Expanda o n Modelo de Dados e observe o seu contedo.
PL/SQL NO GABARITO
Os Gatilhos de Relatrio, Bibliotecas Anexadas e Unidades de Programa que viermos a estabelecer em um gabarito
sero copiadas para o relatrio-destino a tempo de montagem do relatrio, o que nos permitir definir determinadas
rotinas que sempre venham a ser executadas.
LAYOUT
A rea de Layout onde nos deteremos mais a fim de estudarmos as diversas formas de padronizao.
Faamos a expanso do n Layout para que possamos visualizar o subn presente. Observe que somente encontramos o
n Seo, indicando que as especificaes que viermos a fazer afetaro s Sees do relatrio ao qual fizermos a associao.
Subordinado a este n encontramos os subns Margem e Corpo, exatamente como encontramos em um relatrio.
O n margem est vazio e poder ser preenchido com os mesmos tipos de especificao que costumamos usar em
um relatrio; isto quer dizer que poderemos criar boilerplates de texto, grficos, criar campos (fields) com origem
de data, nmero de pgina ou fazer referncia a qualquer objeto presente no modelo de dados (observe que no n
Modelo de Dados somente podemos especificar parmetros).
Na rea do corpo (Body), no entanto, no poderemos criar qualquer objeto, poderemos apenas estabelecer valor
para as propriedades dos objetos que vierem a ser definidos no corpo.
AS SEES DO CORPO
Se expandirmos o n Corpo, observaremos que ele est subdividido em duas partes: Default (Default) e
Sobreposio (Override).
SEO DEFAULT
Todas as propriedades que viermos a estabelecer neste local afetam a todos os estilos de relatrio que vierem a ser
desenvolvidos utilizando este Gabarito (Template).
Esta seo est subdividida em cinco partes:
Estruturas (Frames) Neste local definimos atributos para os frames (Repeating Frames ou Frames) que envolvam
os diversos tipos de elementos: frame-pai que envolve a seo, frame que envolve os cabealhos, frames que
envolvam os campos e frames que envolvam os sumrios.
Labels / Cabealhos de Campos (Field Labels/Headings) Neste local definimos atributos para os boilerplates
que atuam como Labels ou Cabealhos de campos. Encontramos a ns para especificao de propriedades de
boilerplates, cabealhos de campos do tipo alfanumrico, numrico e data.
Campos (Fields) Neste local definimos atributos para os campos do relatrio, com diferenciao para campos
do tipo alfanumrico, numrico e data.
Labels Sumariados (Summary Labels) Neste local definimos atributos para boilerplates que atuam como labels
(cabealhos) de sumrios. Encontramos a ns para especificao de propriedades de boilerplates, cabealhos de
sumrios do tipo alfanumrico, numrico e data.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1075
GRUPO LAYOUT
Neste grupo encontramos as propriedades:
Alinhamento (Alignment) Determina como os ttulos e campos em uma linha sero posicionados ao longo da
pgina. Essa propriedade s valida para o estilo Form. O nmero de campos por linha determinado pela
propriedade a seguir. Os valores vlidos para esta propriedade so: Esquerda (Left), Direita (Right), Centralizado
(Center), Esvaziar (Flush) e Coluna (Column). No caso de Flush, o campo mais esquerda ser alinhado
esquerda (junto com seu ttulo), o campo mais direita ser alinhado direita (junto com seu ttulo) e os
demais sero distribudos entre os dois primeiros de forma proporcional.
GRUPO ESPAAMENTO
Neste grupo, trataremos do espao entre os objetos.
Entre Quadros Vertical/Horizontal (Inter Frames) Indica a quantidade de espao entre quadros (na vertical e
na horizontal). Se a opo de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a
quantidade de espao. Esta propriedade fornecida na unidade de dimensionamento em uso. Se essa unidade
for trocada, essa propriedade deve ser alterada de acordo.
Entre Campos Vertical/Horizontal (Inter Fields) Indica a quantidade de espao entre campos (na vertical e na
horizontal). Se a opo de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade
de espao. Esta propriedade fornecida na unidade de dimensionamento em uso. Se essa unidade for trocada,
essa propriedade deve ser alterada de acordo.
Entre Mestre e Detalhado Vertical/Horizontal (Between Master and Detail) Indica a quantidade de espao entre o
quadro do grupo Mestre e o quadro do grupo-detalhe (na vertical e na horizontal). Se a opo de alinhamento para
o Grid for especificada, o alinhamento prevalece sobre a quantidade de espao. Esta propriedade fornecida na
unidade de dimensionamento em uso. Se esta unidade for trocada, essa propriedade deve ser alterada de acordo.
Entre Quadros Irmos Vertical/Horizontal (Between Sibiling Frames) Indica a quantidade de espao entre
quadros de grupos de mesmo nvel (na vertical e na horizontal). Se a opo de alinhamento para o Grid for
especificada, o alinhamento prevalece sobre a quantidade de espao. Esta propriedade fornecida na unidade
de dimensionamento em uso. Se essa unidade for trocada, essa propriedade deve ser alterada de acordo.
Entre Quadro e Campos Vertical/Horizontal (Between Frames and Fields) Indica a quantidade de espao entre
quadros e campos internos (na vertical e na horizontal). Se a opo de alinhamento para o Grid for especificada,
o alinhamento prevalece sobre a quantidade de espao. Esta propriedade fornecida na unidade de
dimensionamento em uso. Se essa unidade for trocada, essa propriedade deve ser alterada de acordo.
Entre Pgina e Quadros Vertical/Horizontal (Between Page and Frames) Indica a quantidade de espao entre a
borda da pgina e o quadro de maior nvel, isto , mais externo (na vertical e na horizontal). Se a opo de
alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade de espao. Esta propriedade
fornecida na unidade de dimensionamento em uso. Se essa unidade for trocada, essa propriedade deve ser
alterada de acordo.
Entre Campo e Labels Horizontal (Between Field and Labels) Indica a quantidade de espao entre o label e o
campo na horizontal. Esta opo s aplicvel ao estilo Form quando o ttulo do campo apresentado
esquerda do mesmo. Se a opo de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a
quantidade de espao. Esta propriedade fornecida na unidade de dimensionamento em uso. Se essa unidade
for trocada, essa propriedade deve ser alterada de acordo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1077
GRUPO TTULO
Fonte (Font) Esta propriedade determina o nome da fonte a ser usada para textos no Ttulo.
Justificar (Justify) determina o mtodo a ser usado para alinhamento do texto no Ttulo.
Cor do Texto (Text Color) determina a cor de texto do objeto.
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) As cores so dadas em duas camadas: a
primeira camada (Foreground Color) e a camada de fundo (Background Color). Aliado a estas duas camadas, existe
o padro de preenchimento que afeta o resultado apresentado (veja especificao de padro de preenchimento).
Para os demais padres, o desenho em preto apresentado com a cor da primeira camada (Foreground) e o desenho
branco apresentado com a cor da camada de fundo (Background).
Na paleta de padres apresentada pelo editor de layout, o padro slido representado pelo quadrado preto
(segundo a partir do canto esquerdo superior), o padro transparente representado pelo quadrado branco (primeiro
a partir do canto esquerdo superior) e o padro Clear (None, na paleta de propriedades) utilizado quando
selecionamos a opo Nenhum Preenchimento (No Fill) ou Nenhuma Linha (No Line).
Padro de Preenchimento (Fill Pattern) O padro de preenchimento determina como as duas camadas de
cores sero apresentadas para o usurio. Existem trs padres principais: Solid (o objeto apresentado com a cor
da primeira camada Foreground), Transparent (o objeto apresentado com a cor da camada de fundo
Background), Clear (None o objeto transparente e no afetado pelas cores das camadas).
Cor de Fundo do Limite (Edge Foreground Color)/Cor de Fundo do Limite (Edge Background Color) possui o
mesmo significado visto na propriedade Cor de Fundo, porm aplicvel a bordas.
Padro do Limite (Edge Pattern) possui o mesmo significado da propriedade Padro de Preenchimento, porm
aplicvel a bordas.
Trao (Dash) esta propriedade determina o estilo de linha (slido, ponto e trao, ponto, etc.).
Bordas (Borders) indica em que lados do objeto haver bordas.
O N ESTRUTURAS (FRAMES)
Neste item estudaremos as propriedades relativas ao n Estruturas, esteja ele presente em uma seo Default ou de
Sobreposio. Essas propriedades so as mesmas independentemente do tipo de seo.
Encontraremos neste n quatro subns: Estrutura da Seo (Section Frame), Estrutura dos Cabealhos (Headings
Frame), Estrutura dos Campos (Fields Frame) e Estrutura dos Resumos (Summaries Frame).
Selecione um destes subns e abra a pasta de propriedades. Voc notar que somente um grupo estar presente, o
grupo Estilo (Style). Selecione, alternadamente, cada um dos subns. Em todos eles as propriedades so as mesmas;
portanto faamos um estudo destas propriedades.
GRUPO ESTILO
Neste grupo encontramos as propriedades:
O N LABELS/CABEALHOS DE CAMPO
Neste n trataremos das caractersticas-padro aplicveis aos cabealhos (ou labels) dos campos. Se subdividem em trs
subns: Caractere, Nmero e Data. Nos trs casos as propriedades so iguais, no entanto, aplicveis a elementos diversos.
As propriedades estudadas aqui so semelhantes quelas presentes nos ns: Campos, Labels Sumariados e Resumos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1079
SEO DEFAULT
Expanda o n Seo, em seguida faa a mesma ao para o subn Corpo, selecione o n Default e abra a tela de
propriedades. Preencha as seguintes propriedades:
No grupo Layout:
Alinhamento (Alignment) Centralizado.
No grupo Ttulo:
Cor de Fundo (Foreground Color) Yellow (primeira de cima para baixo).
Padro de Preenchimento (Fill Pattern) Solid.
ESTRUTURAS (FRAMES)
Para todas as quatro estruturas (da Seo, dos Cabealhos, dos Campos e dos Resumos) preencha as seguintes propriedades:
Cor de Fundo do Limite (Edge Foreground Color) Darkblue.
Padro de Limite (Edge Pattern) Solid.
CAMPOS (FIELDS)
Estas propriedades devem ser modificadas para Caractere, Data e Nmero.
Cor do Texto (Text Color) black.
Fonte (Font) Arial Normal 9.
RESUMOS (SUMMARIES)
Estas propriedades devem ser modificadas para Caractere, Data e Nmero.
Cor do Texto (Text Color) red.
Fonte (Font) Arial Negrito 10.
Aps estas especificaes, salve o gabarito.
Estabelea um sumrio de contagem para a coluna cd_mat, uma soma e uma mdia para a coluna vl_sal.
A seguir, indique a utilizao do gabarito criado anteriormente. Veja a Figura 8.102.
Observe o resultado do modelo de Layout gerado. Verifique no seu relatrio os padres que estabelecemos em
nvel de gabarito. Confira as especificaes.
EXERCCIOS
8.49) Crie um gabarito de nome GT49 para os relatrios tabulares que determine:
Cor de letra para os cabealhos vermelha (etiqueta).
Tipo de letra para todos os items Arial.
Tamanho de letra para os cabealhos 9.
Tamanho de letra para os itens 8.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1081
METODOLOGIA
Apresentao e descrio das opes de distribuio e formatao dos resultados.
TCNICA
Descrio passo a passo e testes diversos.
CAPACIDADE DE DISTRIBUIO
Podemos efetuar a distribuio do relatrio gerado para diversos destinatrios.
Esta distribuio pode ser feita em nvel de relatrio, ou seja, todo o relatrio distribudo para meios de
armazenamento diferentes, quantidade de cpias diferentes, usurios diferentes, etc.
Esta distribuio tambm pode ser associada s diferentes sees presentes no Layout; desta forma cada seo
produzir arquivos independentes com caractersticas diferenciadas.
Como primeiro passo devemos definir a lista de distribuio. Esta lista poder ser gerada dentro do Report Builder
ou podemos criar um arquivo com extenso DST. Faremos um primeiro teste utilizando o dilogo fornecido pelo
Report Builder.
Crie um relatrio de nome RelDistr a partir da tabela Depto (todas as colunas), formato Tabular e gabarito Cyan
Grid Landscape.
Abra a paleta de propriedades do mdulo. L voc encontrar a propriedade Distribuio, que utilizaremos para
determinar os diversos destinos do relatrio como um todo. Se desejarmos, porm, criar sadas especficas por
seo devemos abrir a paleta de propriedades de uma das sees do Layout, por exemplo Seo de Cabealho. As
mesmas caractersticas que encontramos em nvel de mdulo encontramos em nvel de seo. Estudemos esta
opo com um exemplo.
Suponhamos, ento, que desejssemos definir, para todo o relatrio, uma lista de distribuio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1083
No se esquea que o campo Iniciar Em deve estar direcionado para o diretrio onde se encontra o mdulo.
USO DE DELIMITADORES
Podemos especificar delimitadores no relatrio com a finalidade de separao dos diversos dados, facilitando a
importao destes dados em outras ferramentas, tais como Microsoft Excel.
Esta opo permite a definio de quatro informaes:
Delimitador
Mscara de formato para nmeros
Mscara de formato para datas
Envoltrio de clulas
Para efetuarmos os testes criaremos um relatrio bem simples contendo todas as colunas da tabela Func. Uma vez
que incluiremos no arquivo apenas os dados, usaremos formato Tabular, sem gabarito e sem ttulo para as colunas
(apague todos os labels das colunas e no inclua ttulo no relatrio).
Observe que, como escolhemos um formato para nmeros, este formato foi aplicado a todos os nmeros (matrcula,
cargo, grau de instruo, etc.).
NUMBERFORMATMASK=LNNNGNN0D00
Na Listagem 8.49 apresentamos os parmetros que substituem o dilogo online apresentado anteriormente:
Delimiter determina o delimitador a ser usado entre os dados, como delimitador.
DateFormatMask determina a mscara de formatao para os dados do tipo data.
NumberFormatMask determina a mscara de formatao para os dados numricos.
CellWrapper determina um valor a ser includo antes e depois de cada dado, como um envoltrio da clula.
Observe que para o parmetro CellWrapper utilizamos a palavra reservada Tab no lugar de um caracter. Verifique
na relao de parmetros do Report Builder os valores vlidos para este parmetro.
Na Listagem 8.50 a seguir apresentamos parte da linha gerada usando os parmetros apresentados na Listagem 8.49.
SANDRA
KWAN
C01
Cr$415,00
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1085
Os parmetros associados aos objetos do Modelo de Dados nos permitem a modificao desta estrutura (XML), se desejarmos.
Da mesma forma que para os demais tipos de sada, podemos usar o parmetro DESFORMAT com o valor XML,
determinar um nome com o parmetro DESNAME (por exemplo SAIDA.XML) e indicar a gerao para arquivo
com o parmetro DESTYPE. O resultado produzido o mesmo visto acima.
EXERCCIOS
8.53) Gere um relatrio baseado na tabela Func com as seguintes caractersticas:
Formato: Agrupar Acima e Agrupar Esquerda.
Colunas: nome completo do funcionrio, matrcula do funcionrio, salrio do funcionrio, cdigo do
departamento, cargo, grau de instruo, data de nascimento. Determine quebra por departamento.
Escolha dois gabaritos diferentes.
O formato Agrupar Acima deve ser gerado em formato HTML.
O formato Agrupar esquerda deve ser gerado em formato RTF para ser visualizado no Word.
8.54) Crie um relatrio que gere arquivos a serem utilizados em aplicaes Microsoft Excel com as seguintes caractersticas:
Colunas da Tabela Func: matrcula, nome, cargo, salrio, data de nascimento, data de admisso.
METODOLOGIA
Apresentao e descrio das capacidades de depurao.
TCNICA
Uso do utilitrio para anlise de trechos de programa.
DESCRIO
Neste tpico, trataremos da utilizao da depurao em relatrio. A depurao no Report Builder significa que
acompanharemos a execuo dos trechos de PL/SQL definidos no programa passo a passo e, eventualmente,
poderemos intervir no processo.
A forma de depurarmos um relatrio um pouco diferente daquela que experimentamos com uma aplicao Form.
Para exemplificao, abra seu relatrio de nome Pacote para que possamos marcar os pontos de interrupo.
No Report Builder, devemos determinar os pontos e tipos de interrupo antes de iniciarmos a execuo do relatrio,
ou seja, a determinao esttica, mesmo para os BreakPoints.
Para acionarmos o interpretador (depurador), devemos selecionar a opo Interpretador PL/SQL no menu Programa.
Para desenvolvermos os testes deste tpico, usaremos a aplicao Pacote.
A JANELA DE DEPURAO
Quando acionamos o interpretador, aparece uma janela intitulada Interpretador PL/SQL.
Essa janela est subdividida em dois painis:
Painel de Fonte O painel superior nos mostrar trechos dos blocos de PL/SQL presentes na aplicao quando
fizermos a seleo da unidade de programa.
Painel de Comandos Neste painel, aparece uma linha de comando em que podemos executar comandos
diretamente no ponto de interrupo, alterando o valor de variveis, executando aes, etc. Corresponde a uma
linha de comando de PL/SQL.
Como ainda estamos na fase de desenvolvimento (no iniciamos a execuo), continuamos com acesso a todos os
ns de nossa aplicao. Observe que existe um n stack vazio no conjunto de ns do relatrio. Esse n ser
preenchido medida que estabelecermos os pontos de interrupo e/ou executarmos a aplicao.
Para que possamos marcar um ponto de interrupo, devemos expandir o n Unidades de Programa (Program
Units). Encontraremos a no apenas as unidades de programa criadas explicitamente por ns, como tambm
todos os triggers que porventura tivermos definido no relatrio.
Quando clicamos sobre o nome de uma destas unidades de programa, o texto correspondente apresentado no
Painel de Fonte do Interpretador. Veja a Figura 8.105.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1087
BREAKPOINT
Para efeito de teste (usaremos a rotina NLS), selecione a primeira linha aps o Begin (primeira linha executvel) do
trigger. Escolha no menu Depurar (Debug) a opo Interromper (Break) ou efetue um clique duplo no nmero da
linha que desejamos interromper.
Ser mostrado um dilogo para que vejamos ou preenchamos as seguintes informaes:
Ponto de Interrupo (Breakpoint) Indica se este um ponto de interrupo novo ou j existente. Se for um j
existente, aparecer um nmero.
Ativado (Enabled) Indica se este ponto est habilitado ou no.
Unidade de Programa (Program Unit) Identifica a unidade de programa. Nome dado pelo Report Builder.
Linha (Line) Especifica a linha dentro da unidade de programa em que o ponto de interrupo foi marcado.
Gatilho (Trigger) Define um cdigo de PL/SQL para o ponto de interrupo. Esse cdigo ser acionado cada
vez que o ponto de interrupo for atingido.
Listagem 8.52 Texto includo no Breakpoint da procedure NLS (quarta linha IF)
DEBUG.SETN ('DIA_SEMANA', 5);
TRIGGER
Um gatilho funciona ligeiramente diferente de um ponto de interrupo. No gatilho, escreveremos uma lgica
que determinar se a interrupo ocorrer ou no.
A criao do gatilho similar criao do ponto de interrupo. Selecionamos a linha desejada (mesma anterior),
escolhemos no menu Depurar (Debug) a opo Gatilho (Trigger).
O texto informado est descrito na Listagem 8.53. As informaes relativas ao dilogo so definidas a seguir:
Gatilho (Trigger) Indica se esse um gatilho novo ou j existente. Se for um j existente, aparecer um nmero.
Ativado (Enabled) Indica se esse gatilho est habilitado ou no.
Local (Location) Especifica a localizao do gatilho de depurao:
a) Unidade de Programa (Program Unit) Indica que o gatilho de depurao estar localizado exatamente na unidade
de programa especificada e na linha especificada. Somente nesta opo estes dois campos estaro preenchidos.
b) Depurar Entrada (Debug Entry) Nesta situao o depurador acionado quando a execuo do programa for
interrompida por um ponto de interrupo, gatilho de unidade de programa, etc.
c) Toda Instruo (Every Statement) Faz com que o trecho de PL/SQL seja avaliado antes de cada linha de PL/
SQL da aplicao.
Unidade de Programa (Program Unit) Identifica a unidade de programa. Nome dado pelo Report Builder.
Linha (Line) Especifica a linha dentro da unidade de programa em que o gatilho foi marcado.
Corpo do Gatilho (Trigger Body) Especifica o cdigo de PL/SQL para o gatilho.
Quando aceitarmos este dilogo (OK), retornaremos janela de depurao com a linha 4 preenchida com T(01) no
lugar do nmero da linha.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1089
Observe a Figura 8.106. O ponto em que o programa est parado marcado no Painel de Fonte com o sinal -> (em
amarelo). Verifique o n Stack, ele contm o valor das variveis locais deste trecho de cdigo.
Na parte superior da janela encontramos diversos botes, agora habilitados, que nos permitiro executar uma
linha de cada vez. So eles:
Entrar (Step Into) Esta opo executa cada linha do programa passo a passo. Ocorre a interrupo a cada
comando. Se o cdigo acionar uma unidade de programa, esta tambm acompanhada passo a passo.
Transpor (Step Over) Esta opo tambm executa cada linha do programa passo a passo, porm se houver chamada
a uma unidade de programa, esta no detalhada. A sub-rotina executada como se fosse uma linha simples.
Sair (Step Out) Esta opo para ser usada dentro de uma unidade de programa chamada, pois ela termina a
unidade de programa atual e retorna a quem a chamou. Se estivermos no cdigo principal, esta opo encerrar
a depurao. O trecho de cdigo final executado.
Ir (Go) Esta opo encerra a execuo passo a passo voltando para a forma normal do programa. O restante do
cdigo executado.
Reinicializar (Reset) Esta opo desiste da execuo passo a passo. O restante do cdigo no executado.
Faa outros testes com estas opes. Voc verificar que a depurao bastante similar ao processo j visto com o
Form Builder. A diferena est exatamente no momento em que marcamos o ponto de interrupo.
Observe que, ao encerrarmos a execuo, os pontos de interrupo ainda esto marcados. Podemos voltar a executar
o relatrio e interromper a ao novamente.
EXERCCIOS
8.55) Construa uma aplicao de nome REP55 baseada na aplicao REP48. Acrescente a seguinte funcionalidade:
Marque um Breakpoint no PL/SQL que aciona a rotina para clculo do intervalo de datas.
METODOLOGIA
Apresentao e caracterizao dos elementos responsveis pela gerao de relatrios com formato HTML e/ou PDF.
TCNICA
Utilizao dos novos elementos em exemplos e exerccios que desenvolvam suas caractersticas.
O PREVISUALIZADOR DA WEB
Se desejarmos verificar o resultado da execuo que um determinado relatrio ter quando for visualizado por um browser
(ou seja, na Web), podemos direcionar a execuo do relatrio para a Web diretamente de dentro do Report Builder.
Abra um relatrio qualquer (que possua o parmetro DesType como Screen). Execute este relatrio. Quando o
Previsualizador Ativo for acionado, selecione a opo Previsualizador de Web (Web Preview) presente no menu
Visualizar (View). As seguintes opes sero apresentadas:
Usar HTML (Use HTML) indica que o formato de sada deve ser HTML (default).
Usar Folhas de Estilos HTML (Use HTML Style Sheets) indica que o formato de sada deve ser HTMLCSS
(somente para browsers capazes de ler este formato).
Usar PDF (Use PDF) indica que o formato de sada deve ser PDF.
Mostrar Pgina Atual (Show Current Page) gera apenas a pgina atual do relatrio.
Mostrar Todas as Pginas (Show All Pages) gera todas as pginas do relatrio.
As especificaes acima funcionam como preferncias para a futura execuo na Web. Para que o relatrio seja
executado gerando a sada definida, devemos escolher a opo a seguir:
Criar para Navegador da Web (Generate to Web Browser) executa o relatrio e aciona o browser default da sua
estao (se voc tiver mais de um browser instalado, o Report Builder poder question-lo sobre qual browser usar).
Outra forma de executarmos para a Web a utilizao do boto Previsualizador da Web (Web Preview) presente na
tela do Previsualizador Ativo (Live Preview).
Utilize esta caracterstica para testar os relatrios a serem desenvolvidos nos prximos tpicos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1091
O arquivo de fechamento do relatrio ser igual ao texto apresentado na Listagem 8.55. Reproduza-a e crie o
arquivo Fechamento.htm.
Para analisarmos o resultado de uma gerao deste tipo usaremos o Assistente de Web. Posteriormente, modificaremos
nosso relatrio manualmente para conhecermos as propriedades associadas a estes tipos de arquivos.
Criemos, ento, um relatrio de nome Web, contendo as colunas cd_mat, nm_func, vl_sal e dt_nasc da tabela Func.
Aps a montagem da query, acione o Assistente de Web. No dilogo apresentado poderemos informar o nome de
um arquivo HTML que seja apresentado antes do relatrio (no nosso caso Abertura.htm) e outro arquivo HTML
que seja apresentado depois do relatrio (no nosso caso Fechamento.htm).
Prosseguiremos com o Assistente e outro dilogo nos ser apresentado.
Nesse dilogo, devemos marcar uma das seguintes opes:
Gerar sada HTML agora Indica que um arquivo com extenso HTM deve ser gerado imediatamente para que
possamos verificar o resultado em um Browser.
Gerar a sada da folha de estilo HTML agora Style Sheets so extenses para o HTML que fornecem maior
flexibilidade, como por exemplo qualquer tamanho ou estilo de fonte, objetos sobrepostos, paginao e outras
caractersticas. Para a visualizao de um documento HTML com as vantagens do Style Sheets, devemos usar
um Browser que suporte este tipo de extenso (por exemplo, Microsoft Internet Explorer 3.01 ou superior).
Gerar sada PDF agora Neste caso o arquivo gerado no HTML e sim PDF.
Retornar ao Designer Se escolhermos esta opo, as informaes relativas aos arquivos HTML a serem mostradas
antes e depois do documento so armazenadas em nosso fonte, mas o documento HTML no gerado.
Se marcarmos a opo Sada para o browser Web, alm de gerar o arquivo HTM, o Report Builder tambm aciona
o browser default instalado em seu ambiente.
Um trecho do resultado desta gerao est apresentado na Figura 8.107, na qual visualizamos o incio do relatrio
e o aparecimento do arquivo HTM mostrado no incio do relatrio.
Suponhamos, agora, que desejssemos regerar este relatrio para adicionar, por exemplo, uma restrio s linhas
lidas. Para indicarmos ao Report Builder que desejamos criar um arquivo HTM utilizaremos os parmetros de sistema:
DesFormat Este parmetro determina o formato da sada. Poderemos optar entre HTML, HTMLCSS (para a
utilizao de Style Sheets) ou PDF.
Destype Este parmetro indica o tipo de destino. Indicaremos File (pois desejamos gerar um arquivo em disco).
Desname Neste parmetro, forneceremos o nome do arquivo de sada a ser gerado. O nome pode ser diferente
do nome do relatrio, mas deve ter a extenso HTM.
PrintJob Neste parmetro indicamos se desejamos ou no que seja apresentado o dilogo relativo impresso.
Preencheremos com NO (faa um teste com Yes para verificar o resultado).
Mode Indicaremos que o resultado deste relatrio grfico, e portanto o Mode BITMAP.
Para que estes parmetros fiquem fixos, devemos alterar a propriedade Valor Inicial de cada um deles.
Aps o cumprimento desta etapa, podemos executar o relatrio quantas vezes quisermos, pois a cada execuo um
novo arquivo extenso HTM ser gerado.
Verificaremos, agora, onde o Assistente armazenou a informao sobre o nome do arquivo a ser apresentado antes
e depois do relatrio.
Trata-se da paleta de propriedades do mdulo. Retorne, pois, ao tpico Caractersticas Gerais e verifique que outras
informaes podem ser preenchidas nestas propriedades para incrementar a apresentao do relatrio na Web.
Observe a paleta de propriedades de um objeto de layout. Todos os objetos de layout possuem estas propriedades.
Destino de Hiperligao (Hyperlink Destination) Corresponde a um identificador nico para um objeto e que
ser utilizado como destino do Hypertext Link.
Marcador de Livros (BookMark) um Hypertext Link que aparecer em um BookMark Frame do documento
HTML principal ou na rea de BookMark do PDF Viewer. Clicando-se no BookMark ser mostrado o objeto
associado no topo da janela.
Ao PDF (PDF Action) Esta propriedade especifica um tipo de ao a ser associada com o objeto quando este clicado
no PDF Viewer. Os valores vlidos so Usar Hiperligao (Use Hyperlink) ou Inicializar Aplicativo (Launch Application).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1093
No Modelo de Dados estabeleceremos a coluna cd_depto como coluna de quebra e incluiremos uma varivel de
resumo que calcula a soma dos salrios por departamento (sum_sal).
Em seguida, com a ajuda do Assistente de Relatrios definiremos o layout como Agrupar Acima e o gabarito
como Corporate1.
Nosso prximo passo a criao do grfico. Desta forma acionaremos o Assistente de Grfico e preencheremos os
dilogos como descrito a seguir:
No primeiro dilogo definiremos o ttulo do grfico como Salrios por Depto. O Tipo de grfico como Pie e o
Subtipo de Grfico como Plain.
No segundo dilogo informaremos como eixo X a coluna cd_depto.
No dilogo seguinte informaremos como eixo Y, ou seja, o valor, a coluna sum_sal (resumo).
No prximo dilogo devemos indicar a freqncia de impresso do grfico. Escolheremos uma vez por
Cd_depto(R_G_cd_depto).
Finalmente ser solicitado o nome de um arquivo para a gravao do grfico. Definimos Hyper.ogd.
Cumprida esta etapa o grfico criado e includo no layout, dentro do grupo de departamento.
Nossa prxima etapa ser a definio do resultado na Web. Acionaremos, portanto, o Assistente de Web e
preencheremos os dilogos como se seguem:
No primeiro dilogo, ser possvel a escolha de uma coluna como BookMark. A nica coluna disponibilizada
cd_depto, e, portanto, a selecionaremos.
No segundo dilogo ser possvel escolhermos um grfico para gerar links entre este grfico e o restante do relatrio.
Como este exatamente o nosso objetivo, selecionaremos o nico nome de grfico presente: CT_1 (no meu caso).
No prximo dilogo poderemos escolher um arquivo HTML a ser includo apenas no incio do relatrio e outro
para ser includo apenas no fim do relatrio. Neste caso no fizemos qualquer preenchimento.
Para visualizarmos o resultado gerado, no ltimo dilogo escolhemos as opes: Criar Sada HTML agora e Gerar
Sada para um Browser da Web. O resultado grfico visto na Figura 8.108.
Do lado esquerdo visualizamos o marcador de livro gerado a partir da coluna cd_depto. Se voc clicar sobre um dos
cdigos de departamento apresentados ser feita a navegao para esta rea do relatrio.
Observe, porm, o grfico. Passe o mouse vagarosamente sobre cada um dos pedaos da Pizza. No rodap do
browser, nos apresentado o contedo deste campo, ou seja, cada cor aponta para uma parte do relatrio. Poderemos
navegar tambm desta forma.
Por exemplo, se desejarmos ver os detalhes dos salrios que fizeram a composio para o departamento D11, basta
que pressionemos o mouse sobre o desenho correspondente na Pizza.
Ao retornarmos ao Data Model perceberemos a incluso de um novo sumrio do tipo contagem sobre a coluna
cd_depto. Consideraremos o nome desta coluna cs_cd_depto (no menu caso). Esta coluna foi criada com o objetivo
de auxiliar a montagem e derivao do grfico.
A indicao de marcador de livro est presente na propriedade Marcador de Livro (Bookmark) do grupo Configuraes
da Web para o item F_Cd_Depto. Esta coluna recebeu dois apelidos, como mostrado na Listagem 8.57 a seguir:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1095
NAVEGAO
Para que isto fique vivel devemos estabelecer uma forma de navegao entre as pginas, uma vez que sero
arquivos diferentes. Isto pode ser feito de duas formas:
usando a rotina predefinida fornecida pelo Report Builder (em JavaScript).
desenvolvendo nossa prpria rotina.
Se decidirmos pela construo de nossa prpria rotina de paginao, podemos usar duas variveis de sistema no
script: &TotalPages(nmero total de paginas) e &file_name(nome do arquivo destino). O Report Builder associa
valores a estas variveis durante a formatao, fazendo a substituio do parmetro por seu valor.
A definio da navegao, manual, ou seja, definida por ns, pode ser feita de duas formas:
atravs do PL/SQL no trigger Before Report com a ajuda da rotina SRW.Set_Page_Navigation_Html.
na paleta de propriedades do relatrio (mdulo), com o preenchimento das propriedades Tipo de Controle da
Pgina de Navegao (que pode ser preenchido com File ou Texto) e Valor de Controle da Pgina de Navegao
(que pode ser preenchido com o nome do arquivo que contm o script ou com o texto do script, de acordo com
o que tiver sido definido na propriedade anterior).
PARMETRO
O parmetro PageStream deve ser informado na linha de comando (esta opo no pode ser habilitada atravs do
Report Builder).
Se voc preencher o parmetro Desname, no esquea de preencher a extenso HTM. Caso contrrio, o arquivo-base (o que deve ser executado
inicialmente) fica sem extenso, impossibilitando sua identificao pelo browser.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1097
O texto acima corresponde ao script padro gerado pelo Report Builder com algumas simplificaes. Crie um
arquivo com este texto.
Na propriedade do mdulo Tipo de Controle da Pgina de Navegao preencha com File e na propriedade Valor
de Controle da Pgina de Navegao preencha com o nome do arquivo. Em seguida, compile o relatrio novamente
e o execute.
Quando ativar o browser, para o arquivo <nome>.htm, no se esquea de fazer um Reload para que ele no
apresente o arquivo anterior. Utilize a opo de visualizao do cdigo HTML para conferir o resultado.
EXERCCIOS
8.56) Crie um relatrio baseado na Q20 que inclua as seguintes caractersticas:
Um boilerplate de Texto contendo uma Tag de HTML.
Uma imagem como URL, referenciada atravs de um Link File.
A Figura 8.109 nos mostra o dilogo apresentado quando criamos um objeto neste n. Nele podemos criar um
novo relatrio ou associar um relatrio j existente. Se viermos a criar um novo relatrio podemos escolher um dos
blocos da aplicao para que o relatrio se baseie. O assistente de relatrio acionado automaticamente usando
este bloco. Experimente!
Ao concluir a construo, retorne ao Forms e abra a paleta de propriedades deste objeto. Nesta paleta encontramos trs
grupos: Geral, Integrao do Oracle Developer e Relatrios. As informaes apresentadas no grupo Relatrios
correspondem a parmetros do prprio Report (j nossos conhecidos) e as informaes do grupo Integrao do Oracle
Developer dizem respeito forma como o Oracle Forms acionar o Report Builder para a construo do relatrio.
EXERCCIOS
8.57) Retorne aos exerccios de Forms (7.40) e teste a execuo de um dos relatrios (REP17) que recebem parmetro
a partir do Forms.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1099
TCNICA
Utilizao destes elementos em exemplos e exerccios.
Antes de passar para o layout, abra a tela de propriedades para a coluna Blob e altere o valor da propriedade
Formato de Arquivo para Imagem para que seja trazida a imagem armazenada no banco e no seu texto.
Acione, agora, o Assistente de Relatrio para a montagem do layout.
Na pasta Labels, altere o tamanho dos campos C_Clob1 para 50 (o default 4) e C_Blob1 para 100 (o default
tambm 4) a fim de que o layout gerado seja compatvel com as informaes armazenadas. Inicialmente gere o
relatrio sem modelo para que o resultado fique mais claro.
Para que a imagem seja apresentada com um tamanho maior podemos indicar elasticidade na vertical tanto para
o C_Blob1 quanto para o C_Clob1. Se voc escolher esta ao no esquea de expandir na vertical o Repeating
Frame que envolve os objetos.
No dilogo que apresenta os Campos Disponveis para que venhamos a escolher aqueles que sero apresentados no
relatrio, nos deparamos novamente com as mesmas caractersticas apresentadas pelo Form Builder, ou seja, as colunas do
tipo Ref podem ser expandidas para que venhamos a selecionar os atributos presentes no objeto apontado pela referncia.
Observe na Figura 8.111 que selecionamos as colunas cd_depto, nm_depto, cd_mat (gerente) e nm_sobrenome
(gerente). Conclua o desenvolvimento deste relatrio. Na pasta de layout aumente o tamanho da coluna nm_depto
para 40 posies e nm_sobrenome para 15.
A execuo deste relatrio se processa normalmente.
Observemos, no entanto, o Data Model produzido (veja a Figura 8.112).
Ele apresenta todas as colunas da tabela Tb_Depto (cd_depto, nm_depto, cd_depto_ctb e cd_gerente). Como no
utilizamos nenhum atributo do objeto apontado pela referncia cd_depto_ctb, esta aparece contrada.
Para a coluna cd_gerente j escolhemos os atributos cd_mat e nm_sobrenome; desta forma no s esta coluna aparece
expandida como tambm os atributos escolhidos esto localizados prximos s colunas cd_depto e nm_depto.
Retornemos ao Assistente de Relatrio e no dilogo para seleo das colunas expanda a coluna cd_depto_ctb,
conclua a montagem do relatrio e retorne ao Data Model (no precisa selecionar nada). Voc observar que no
Data Model os atributos apontados por cd_depto_ctb tambm aparecem expandidos. Esta ao tem a finalidade de
tornar visvel em nvel de Data Model os atributos derivados para que possamos utilizar (talvez) funes sobre eles.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1101
EXERCCIOS
8.58) Gere um relatrio baseado na tabela TB_Func com as seguintes caractersticas:
Formato carta
Colunas: nome completo do funcionrio, nome do gerente, nome do departamento, matrcula do funcionrio,
salrio do funcionrio.
Gabarito Corporate 1.
Cada carta deve ser gerada em um arquivo HTML em separado.
Deve ser possvel a navegao seqencial entre pginas (use um cone de navegao).
Garanta que para os funcionrios gerentes o salrio no seja mostrado.
Listagem-resposta 8.01A
SELECT ALL FUNC.CD_MAT, FUNC.NM_FUNC,
FUNC.NM_SOBRENOME, FUNC.CD_DEPTO, FUNC.NR_RAMAL, FUNC.DT_ADM,
FUNC.NR_CARGO, FUNC.NR_GIT, FUNC.IN_SEXO, FUNC.DT_NASC,
FUNC.VL_SAL, FUNC.NM_FOTO
FROM DESENV.FUNC
A ltima etapa na montagem do relatrio a definio do gabarito a ser usado. Neste primeiro caso, escolhemos Corporate1.
Quando encerrarmos as etapas do Assistente, nosso relatrio ser executado. Que tal o resultado?
8.02) Criar um relatrio de nome REP02 com as seguintes caractersticas:
Formato Form.
Todas as colunas da tabela Depto.
Incluir a quantidade de departamentos apresentados.
Fornecer nomes adequados para os ttulos de coluna.
Utilizar o gabarito Confidential Heading.
A construo deste relatrio similar construo do relatrio anterior. Iniciaremos criando um novo mdulo e
aceitando a utilizao do Assistente.
No primeiro dilogo apresentado, escolheremos o formato Formato de Form. O segundo dilogo aquele no
qual definimos a query. Mais uma vez utilizaremos o Query Builder para a construo do comando Select.
Escolheremos a tabela Depto e, quando o quadro contendo as colunas desta tabela for apresentado, executaremos
um clique duplo sobre o nome da tabela para que todas as colunas sejam selecionadas.
Quando aceitarmos esta construo, a query transferida para o Assistente de Relatrio. O comando Select Resultante
apresentado na Listagem-resposta 8.02A.
Listagem-resposta 8.02A
SELECT ALL DEPTO.CD_DEPTO, DEPTO.NM_DEPTO,
DEPTO.CD_GERENTE, DEPTO.CD_DEPTO_CTB
FROM DESENV.DEPTO
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1103
O Query Builder apresenta os dois relacionamentos existentes entre as duas tabelas. Quando o comando Select for
gerado para o Assistente, devemos retirar o relacionamento de Gerente-Matrcula pois desejamos obter todos os
funcionrios com seus respectivos departamentos (independente de serem ou no gerentes).
Na Listagem-resposta 8.03A a clusula Where apresentada somente estabelece a relao atravs da coluna cd_depto.
Em seguida, definimos quais as colunas pertencentes ao grupamento.
Para que mais de uma coluna seja includa no mesmo grupamento, antes de transferir a coluna clique sobre o
ttulo Nvel 1, indicando que a coluna a ser transferida o ser para este mesmo nvel. A ordem tambm pode ser
alterada, bastando que arrastemos a coluna selecionada para cima ou para baixo.
No temos necessidade de apresentar a coluna cd_depto duas vezes (cd_depto de Func e cd_depto de Depto). Por
este motivo, no exibiremos uma destas colunas.
No Query Builder, poderamos ter restringido a leitura de uma das colunas. Sempre que possvel, opte por esta
soluo, uma vez que a informao desnecessria no precisa ser transferida do ambiente servidor para o cliente,
diminuindo o trfego na rede.
Na etapa seguinte, indicamos os clculos a serem efetuados (mdia e percentual). Agora execute a aplicao.
Observe que o resultado gerado calcula a mdia do departamento e da empresa, o percentual do salrio do funcionrio
em relao ao departamento e do departamento em relao empresa.
O gabarito escolhido afetou a cor da letra, o preenchimento do campo, etc.
8.04) Criar um relatrio de nome REP04 com as seguintes caractersticas:
Formato grupado acima.
Todas as colunas da tabela Func, a coluna nm_depto da tabela Depto e todas as colunas da tabela Proj. O
relacionamento entre essas tabelas deve ser feito pelo cdigo do departamento.
Criar um grupo de quebra principal contendo o nome do departamento e seu cdigo.
Criar um grupo de quebra secundrio contendo o cdigo do projeto, seu nome, o cdigo do responsvel, data
de incio e fim.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1105
A prxima etapa a indicao do total salarial. Informamos apenas que desejamos que seja feito o clculo do total
em relao coluna vl_sal. No h necessidade de informarmos em que nvel deve ser realizado este clculo.
Quando vamos informar os cabealhos das colunas, j encontramos os trs campos includos justamente para
clculo da soma por projeto, departamento e geral.
Neste exerccio escolhemos o gabarito Confidential Heading Landscape. Observe que o uso de gabarito permite a
colocao de ttulos, nmero de pgina, letra diferenciada para quebra e detalhe, etc.
8.05) Criar um relatrio de nome REP05 com as seguintes caractersticas:
Formato etiqueta postal.
Colunas nome e sobrenome (concatenados), nascimento (dia e ms), salrio e ramal da tabela Func.
Ordene as informaes por nome do funcionrio.
Utilizar o gabarito Draft.
Neste exerccio utilizaremos o formato etiqueta para os dados de funcionrio.
No Query Builder pressionaremos o boto para definir coluna, a fim de incluirmos uma coluna que corresponda
concatenao de nome e sobrenome. Observe a Figura-resposta 8.05A.
Repetimos este procedimento para criar uma nova expresso que obtenha apenas o dia e ms de nascimento, ou
seja, to_char(dt_nasc, dd/mm).
Aps a criao destas novas colunas, devemos marc-las e tambm s colunas nr_ramal e vl_sal.
Resta ainda a indicao de ordenao. Para tal, devemos pressionar o boto relativo Sort na barra de ferramentas.
Indicaremos que a ordenao ser ascendente pela coluna Nome (criada anteriormente).
Antes de aceitarmos este dilogo, podemos visualizar o SQL a ser gerado para verificarmos se est compatvel com
o que desejamos.
Listagem-resposta 8.05A
SELECT ALL FUNC.NM_FUNC||FUNC.NM_SOBRENOME nome,
TO_CHAR(FUNC.DT_NASC, 'dd/mm') nasc, FUNC.NR_RAMAL, FUNC.VL_SAL
FROM DESENV.FUNC
ORDER BY FUNC.NM_FUNC||FUNC.NM_SOBRENOME ASC
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1107
No Query Builder, nosso primeiro passo ser calcular o abono. Definimos, portanto, uma nova coluna que efetue
o clculo desejado, ou seja, vl_sal * 0.15.
Precisamos, agora, formatar este abono. Definimos, ento, uma nova coluna chamada Abono_Formatado que
formata o abono calculado anteriormente, como nos mostra a Listagem-resposta 8.06A.
Listagem-resposta 8.06A
TO_CHAR(ABONO, 'L999G990D00', 'NLS_CURRENCY=R$')
Selecionamos tambm o dia e ms do nascimento do funcionrio. Para tal, definimos uma coluna Aniv para
montagem desta formatao. Como etapa seguinte, marcamos todas as colunas que desejamos sejam obtidas do
banco de dados: Abono_Formatado, Aniv, nm_func e nr_cargo.
Estabelecemos a restrio das linhas a serem trazidas na rea prpria (no quadro esquerda). Para verificarmos se
o comando Select ficou adequado, clicamos no boto Show SQL e conferimos o resultado.
Listagem-resposta 8.06B
SELECT ALL FUNC.NM_FUNC,
TO_CHAR(FUNC.VL_SAL*0.15, 'L999G990D00', 'NLS_CURRENCY=R$') ABONO_FORMATADO,
TO_CHAR(FUNC.DT_NASC, 'DD/MM') ANIV, FUNC.NR_CARGO
FROM DESENV.FUNC
WHERE TO_NUMBER(TO_CHAR(FUNC.DT_NASC, 'MM'))=TO_NUMBER(TO_CHAR(SYSDATE, 'MM'))
Em seguida, montamos a carta no espao adequado. Quando desejarmos que um valor seja includo no resultado,
basta que faamos a seleo da coluna para dentro do texto da carta.
Neste tpico estaremos focando o Editor do Modelo de Dados portanto criaremos os grupos, os relacionamentos
entre queries manualmente. S o layout deve ser criado com o uso do Assistente.
Listagem-resposta 8.07A
SELECT ALL FUNC.CD_MAT, FUNC.NM_FUNC, FUNC.NM_SOBRENOME, FUNC.CD_DEPTO,
FUNC.NR_RAMAL, FUNC.DT_ADM, FUNC.NR_CARGO, FUNC.NR_GIT,
FUNC.IN_SEXO, FUNC.DT_NASC, FUNC.VL_SAL, FUNC.NM_FOTO
FROM DESENV.FUNC
Como a restrio deve ser feita em nvel de grupo, devemos abrir a tela de propriedades do grupo e determinar que
apenas as 25 primeiras linhas devem ser selecionadas.
Com esta especificao, encerramos a parte relativa a dados. Para a construo do layout, acionamos o Assistente. Nesta
situao, o Assistente nos mostra as diversas pastas referentes s etapas da construo do relatrio. Podemos navegar por
cada uma delas. Nos interessa determinar quais as colunas a serem impressas e qual o gabarito do resultado.
Na definio das colunas a serem formatadas, escolheremos todas. Para gabarito, NCA Yellow.
8.08) Criar um relatrio de nome REP08 com as seguintes caractersticas:
Todas as colunas da tabela Func e da tabela Depto.
O relacionamento entre as tabelas deve ser feito com o uso de um Join pela coluna cd_depto.
Crie um grupo de quebra contendo o dados do departamento.
Estabelea uma restrio para que sejam fornecidos apenas os funcionrios com salrio maior que R$ 3.000,00
(a restrio deve ser feita em nvel de grupo).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1109
Listagem-resposta 8.08A
SELECT ALL DESENV.DEPTO.CD_DEPTO, DEPTO.NM_DEPTO, DEPTO.CD_GERENTE,
DEPTO.CD_DEPTO_CTB, FUNC.CD_MAT, FUNC.NM_FUNC,
FUNC.NM_SOBRENOME, DESENV.FUNC.CD_DEPTO, FUNC.NR_RAMAL,
FUNC.DT_ADM, FUNC.NR_CARGO, FUNC.NR_GIT, FUNC.IN_SEXO,
FUNC.DT_NASC, FUNC.VL_SAL, FUNC.NM_FOTO
FROM DESENV.DEPTO, DESENV.FUNC
WHERE DEPTO.CD_DEPTO=FUNC.CD_DEPTO
Devemos, agora, criar o grupo de quebra. Arraste, portanto, o cdigo do departamento para cima e para fora do
grupo de funcionrio. Desta forma, ser criado um grupo acima do grupo atual. Arraste para esse mesmo grupo as
demais colunas da tabela Depto.
A fim de estabelecermos a restrio, devemos abrir a paleta de propriedades do grupo Func e definir que haver um
filtro do tipo PL/SQL.
Em seguida, abrimos a funo associada Filtro e definimos o cdigo de PL/SQL compatvel. Quando o retorno
desta funo True, a linha aceita e apresentada no relatrio. Quando False, a linha omitida.
Listagem-resposta 8.08B
function G_funcGroupFilter return boolean is
begin
IF :VL_SAL > 3000 THEN
return (TRUE);
ELSE
RETURN FALSE;
END IF;
end;
Podemos, agora, acionar o Assistente de Relatrio (presente na barra de ferramentas do Modelo de Dados) a fim de
definirmos: o formato do relatrio, os campos a serem apresentados e os ttulos de cada campo, alm dos tamanhos.
No dilogo em que determinamos quais as colunas a serem impressas, devemos retirar uma das colunas cd_depto
para que no haja repetio (esta ao poderia ser feita diretamente no Query Builder).
O resultado final da execuo utiliza o gabarito NCA Yellow novamente.
8.09) Criar um relatrio de nome REP09 com as seguintes caractersticas:
Colunas Nome e Sobrenome concatenadas, matrcula, data de admisso (formatada), salrio (formatado) e foto
do funcionrio da tabela Func.
Colunas Nome do Departamento da tabela Depto.
O relacionamento entre as tabelas deve ser feito com o uso de um Join pelo cdigo do gerente.
Utilize o layout Form.
Fornecer nomes adequados para os ttulos de coluna.
Utilizar o gabarito Corporate1 Landscape.
Listagem-resposta 8.09A
Nome - FUNC.NM_FUNC||' '||FUNC.NM_SOBRENOME
Salario - TO_CHAR(FUNC.VL_SAL, 'C999G990D00')
Admissao - TO_CHAR(FUNC.DT_ADM, 'dd/mm/yyyy')
Aps estas definies, devemos selecionar essas colunas criadas e as colunas cd_mat e NM_FOTO. As colunas
dt_adm, nm_func, nm_sobrenome e vl_sal so selecionadas indiretamente pelo Query Builder em virtude da
seleo das colunas definidas.
A Listagem-resposta 8.09B apresenta a query resultante contendo as colunas originais mascaradas de acordo com
as solicitaes.
Listagem-resposta 8.09B
SELECT ALL FUNC.NM_FUNC||' '||FUNC.NM_SOBRENOME Nome,
FUNC.CD_MAT, TO_CHAR(FUNC.VL_SAL, 'C999G990D00') Salario, DEPTO.NM_DEPTO,
TO_CHAR(FUNC.DT_ADM, 'dd/mm/yyyy') Admissao, FUNC.NM_FOTO
FROM DESENV.DEPTO, DESENV.FUNC
WHERE ((DEPTO.CD_GERENTE=FUNC.CD_MAT)
AND (DESENV.FUNC.CD_DEPTO=DESENV.DEPTO.CD_DEPTO))
Para que seja apresentada a foto no lugar do seu texto, devemos abrir a tela de propriedades referente coluna
nm_foto e modificar as propriedades:
Ler a partir do Arquivo (Read from File) Indicando que o contedo deste campo, na verdade, o endereo de
um arquivo em disco, do qual desejamos apresentar o contedo.
Formato do Arquivo (File Format) Indicando que o arquivo a ser lido do disco uma imagem.
A ao resultante a apresentao da imagem correspondente ao caminho determinado na coluna nm_foto.
8.10) Criar um relatrio de nome REP10 com as seguintes caractersticas:
Todas as colunas da tabela Func e da tabela Depto.
O relacionamento entre as tabelas deve ser feito com o uso de um link pela coluna cd_depto.
Estabelea uma restrio para que sejam fornecidos apenas os funcionrios com salrio maior que R$ 2.000,00.
Formato Agrupar Acima.
Fornecer nomes adequados para os ttulos de coluna.
Utilizar o gabarito Confidential Background Landscape.
Neste relatrio, acionaremos o Query Builder duas vezes separadamente. Na primeira, obtemos as colunas da
tabela Func e na segunda, as colunas da tabela Depto, de tal forma que produzimos como resultado duas queries.
Estas duas queries so ligadas dentro do Modelo de Dados (e no por Join), como nos mostra a Figura-resposta 8.10A.
Uma vez que no foi solicitado local para estabelecermos a restrio de salrio, escolhemos faz-lo diretamente na query.
Listagem-resposta 8.10B
SELECT ALL FUNC.CD_MAT, FUNC.NM_FUNC, FUNC.NM_SOBRENOME, FUNC.CD_DEPTO,
FUNC.NR_RAMAL, FUNC.DT_ADM, FUNC.NR_CARGO, FUNC.NR_GIT,
FUNC.IN_SEXO, FUNC.DT_NASC, FUNC.VL_SAL, FUNC.NM_FOTO
FROM DESENV.FUNC
WHERE VL_SAL > 2000
Quando acionamos o Assistente para a montagem do layout, devemos indicar como os dados grupos devem ser
apresentados (verticalmente ou horizontalmente).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1111
Escolhemos o formato vertical (down) para ambos os grupos. Repita este exerccio em seguida e verifique a diferena
para o formato horizontal.
No grupo de exerccios a seguir, trabalharemos com os sumrios e frmulas, e portanto, no devemos utilizar o
Assistente para a montagem do Modelo de Dados.
8.11) Criar um relatrio de nome REP11 com as seguintes caractersticas (utilize o Assistente para a montagem dos totais):
Todas as colunas da tabela Func.
Crie os seguintes sumrios:
a) Total de funcionrios.
b) Total de salrios.
c) Mdia salarial.
d) Maior cargo.
e) Menor grau de instruo.
Formato Tabular.
Gabarito Confidential Background.
Iniciamos a resoluo acionando o Modelo de Dados e criando uma query (com a ajuda do Query Builder) que
obtenha todas as colunas de Func.
Em seguida, acionamos o Assistente de Relatrios para a construo do Layout. Primeiramente, selecionamos a
pasta Totais para indicarmos as totalizaes que desejamos: Soma de vl_sal, Contagem de cd_mat, Mdia de vl_sal,
Mximo e Mnimo de nr_cargo.
Em seguida, indicamos o gabarito desejado Confidential Background e executamos o relatrio.
8.12) Criar um relatrio de nome REP12 semelhante ao REP11, porm sem a utilizao do Assistente de Relatrio:
Todas as colunas da tabela Func.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1113
8.13) Criar um relatrio de nome REP13 com as seguintes caractersticas (no utilize o Assistente):
Todas as colunas da tabela Func e da tabela Depto.
O relacionamento entre as tabelas deve ser feito com o uso de um join pela coluna cd_depto.
Crie os seguintes sumrios:
a) Total de funcionrios por departamento.
b) Total de funcionrios geral.
c) Total de salrios por departamento.
d) Total de salrios geral.
e) Mdia salarial por departamento.
f) Percentual do salrio do funcionrio em relao ao departamento.
g) Percentual do salrio do funcionrio em relao empresa.
h) Percentual do total salarial do departamento em relao empresa.
i) Maior cargo por departamento.
j) Maior cargo da empresa.
k) Menor grau de instruo por departamento.
l) Menor grau de instruo da empresa.
Formato Agrupar Acima.
Gabarito Corporate 2.
Nesta resoluo, a utilizao do Query Builder no precisa mais ser apresentada, pois j efetuamos diversos testes.
Iniciamos, ento, a resoluo incluindo os seguintes sumrios (manualmente) no Modelo de Dados:
qtd_func_depto (grupo G_depto)
a) Funo (function) contagem (count)
b) Origem (source) cd_mat
c) Reinicializar em (reset at) g_depto
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1115
Listagem-resposta 8.14A
function FGTSFormula return Number is
begin
RETURN :VL_SAL * 0.08;
end;
Listagem-resposta 8.14B
function INSSFormula return Number is
VALOR
NUMBER;
begin
A terceira corresponde ao clculo dos dias teis (Segunda a Sexta) para determinao do valor do Ticket do ms vigente.
Listagem-resposta 8.14C
function TICKETFormula return Number is
DIAS
NUMBER := 0;
INICIO
DATE
:= TRUNC(SYSDATE, 'MM');
FIM
DATE
:= LAST_DAY(SYSDATE);
begin
WHILE INICIO <= FIM LOOP
IF TO_CHAR(INICIO, 'D') BETWEEN 2 AND 6 THEN
DIAS := DIAS + 1;
END IF;
INICIO := INICIO + 1;
END LOOP;
RETURN DIAS * 5;
end;
A prxima frmula depende das anteriores e corresponde soma das mesmas. A ltima acrescenta 15% ao valor do
salrio a ttulo de previso de aumento.
As colunas de sumrio faro referncia (origem) s colunas Gastos, Previso e vl_sal, respectivamente, e somente
sero zeradas no fim do relatrio.
O resultado deve ser gerado para o gabarito Bright1. Verifique se o resultado ficou coerente com os clculos.
8.15) Criar um relatrio de nome REP15 baseado no REP14 com as seguintes caractersticas adicionais (no utilize
o Assistente):
Total de gastos previstos por funcionrio.
Total de gastos por departamento previsto e atual.
Total de gastos da empresa previsto e atual.
Total de INSS por departamento e da empresa.
Total de TICKET por departamento e da empresa.
Total de FGTS por departamento e da empresa.
Percentual dos gastos do funcionrio em relao ao departamento.
Percentual dos gastos do funcionrio em relao empresa.
Percentual dos gastos do departamento em relao empresa.
Formato Agrupar acima.
Gabarito Cyan Grid Landscape.
Para diminuir um pouco a quantidade de informaes apresentadas, retiramos os trs sumrios criados no relatrio 14.
Neste relatrio, devemos acrescentar mais uma frmula em nvel de funcionrio para clculo da previso de gastos
acontecida com o aumento salarial previsto.
Listagem-resposta 8.15A
function GASTOS_PREVISTOSFormula return Number is
VALOR
NUMBER;
begin
VALOR := :PREVISAO * 0.1;
IF VALOR > 300 THEN
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1117
Listagem-resposta 8.16A
SELECT ALL FUNC.CD_MAT, FUNC.NM_FUNC, FUNC.NM_SOBRENOME, FUNC.CD_DEPTO,
FUNC.NR_RAMAL, FUNC.DT_ADM, FUNC.NR_CARGO, FUNC.NR_GIT,
FUNC.IN_SEXO, FUNC.DT_NASC, FUNC.VL_SAL, FUNC.NM_FOTO
FROM DESENV.FUNC
WHERE FUNC.VL_SAL>:P_SAL
A seguir, escolheremos a opo Criador de Form de Parmetros (Parameter Form Builder) a fim de criarmos a tela
de parmetros da forma mais adequada nossa aplicao.
O Report Builder, ento, apresentar um dilogo para que possamos selecionar, dentre os parmetros existentes nesta
aplicao, aqueles que devem ser apresentados na tela de parmetros. No nosso caso, escolhemos apenas P_sal.
Listagem-resposta 8.17A
SELECT ALL FUNC.CD_MAT, FUNC.NM_FUNC, FUNC.NM_SOBRENOME, FUNC.CD_DEPTO,
FUNC.NR_RAMAL, FUNC.DT_ADM, FUNC.NR_CARGO, FUNC.NR_GIT,
FUNC.IN_SEXO, FUNC.DT_NASC, FUNC.VL_SAL, FUNC.NM_FOTO
FROM DESENV.FUNC
WHERE FUNC.CD_DEPTO=:p_depto
Nosso prximo passo configurar o que deve ser apresentado ao usurio nesta tela de parmetro. Devemos, ento,
fazer acesso tela de propriedades do parmetro, determinar seu tipo e tamanho e determinar a lista de valores.
Como foi solicitada a apresentao do nome do departamento, devemos escolher a criao de um comando Select
para o preenchimento das opes de valores do parmetro. Selecione a propriedade Lista de Valores e preencha
como na Listagem-resposta 8.17B.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1119
Para que seja apresentado o nome do departamento e recebido o cdigo no parmetro, devemos colocar o cdigo
como primeira coluna do Select e definir que essa coluna seja oculta. Para obrigar o usurio a escolher dentre um dos
valores da lista, devemos marcar a opo Restringir Lista a Valores Predeterminados.
Para teste de posicionamento, preenchemos todas as opes de ttulo presentes no dilogo de construo da tela
de parmetro. Veja o resultado na Figura-resposta 8.17A.
8.18) Criar um relatrio de nome REP18 com as seguintes caractersticas:
Todas as colunas da tabela Func.
Formato tabular.
Este relatrio deve receber como parmetro uma das seguintes informaes:
a) Ordenar por departamento Se este parmetro for informado, os dados devem ser ordenados por cdigo de
departamento.
b) Ordenar por nome Se este parmetro for informado, os dados devem ser ordenados por nome do funcionrio.
c) Ordenar por matrcula Se este parmetro for informado, os dados devem ser ordenados por matrcula do funcionrio.
Apresente os textos para que o usurio escolha dentre uma das formas de ordenao ou nenhuma.
Use o editor do Form de Parmetro para modificar a tela de parmetros.
Utilize sintaxe lxica na query.
Neste exerccio, utilizaremos a sintaxe lxica do parmetro; isto significa que modificaremos um trecho da sintaxe
da query a tempo de execuo.
Listagem-resposta 8.18A
SELECT ALL FUNC.CD_MAT, FUNC.NM_FUNC, FUNC.NM_SOBRENOME, FUNC.CD_DEPTO,
FUNC.NR_RAMAL, FUNC.DT_ADM, FUNC.NR_CARGO, FUNC.NR_GIT,
FUNC.IN_SEXO, FUNC.DT_NASC, FUNC.VL_SAL, FUNC.NM_FOTO
FROM DESENV.FUNC
&p_ordem
Na Listagem-resposta apresentada, o parmetro P_ordem ser substitudo por um comando Order By ou Null (caso
no haja ordenao).
Para a montagem deste parmetro, utilizaremos a sintaxe da Lista de Valores com Select. A primeira coluna contm
o comando Order By a ser recebido pelo parmetro, e a segunda coluna o texto a ser apresentado na tela, bastando
Listagem-resposta 8.18B
SELECT 'order by cd_depto', 'Ordenar por Departamento' FROM DUAL
UNION ALL
SELECT 'order by nm_func', 'Ordenar por Nome' FROM DUAL
UNION ALL
SELECT 'order by cd_mat', 'Ordenar por Matrcula' FROM DUAL
UNION ALL
SELECT NULL, 'Sem ordenao' FROM DUAL
Listagem-resposta 8.19A
SELECT ALL FUNC.CD_MAT, FUNC.NM_FUNC, FUNC.NM_SOBRENOME, FUNC.CD_DEPTO,
FUNC.NR_RAMAL, FUNC.DT_ADM, FUNC.NR_CARGO, FUNC.NR_GIT,
FUNC.IN_SEXO, FUNC.DT_NASC, FUNC.VL_SAL, FUNC.NM_FOTO
FROM DESENV.FUNC
&p_where
Uma vez que o usurio fornecer uma matrcula e/ou um cdigo de departamento e/ou uma data de nascimento,
criamos trs outros parmetros (dep, mat e nasc). Estes sero visveis e utilizados pelo usurio. J o parmetro P_Where
no ser mostrado na tela de parmetros, pois sua montagem ser interna.
Os trs parmetros (dep, mat e nasc) so solicitados ao usurio, que poder ou no inform-los. De acordo com a
opo fornecida, a clusula Where ser montada adequadamente.
Listagem-resposta 8.19B
function MATValidTrigger return boolean is
begin
if :p_where is null then
if :mat is not null then
:p_where := 'WHERE CD_MAT = '||:MAT;
end if;
elsif :mat is not null then
:p_where := :P_WHERE||' AND CD_MAT = '||:MAT;
end if;
return (TRUE);
end;
Na Listagem-resposta 8.19B encontramos o trigger de validao associada ao parmetro MAT. Se o parmetro p_where no
estiver preenchido, inclumos a clusula Where. Caso tenha sido preenchido anteriormente, anexamos uma nova restrio
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1121
Listagem-resposta 8.19C
function DEPValidTrigger return boolean is
begin
if :p_where is null then
if :dep is not null then
:p_where := 'WHERE CD_DEPTO = '''||:DEP||'''';
end if;
elsif :dep is not null then
:p_where := :P_WHERE||' AND CD_DEPTO = '''||:DEP||'''';
end if;
return (TRUE);
end;
Nos exerccios a seguir, estaremos estudando os objetos de Layout. Criaremos, tambm, uma query que possa ser
utilizada nos exemplos. A utilizao do Assistente para a gerao do Layout ser minimizada.
8.20) Crie uma query externa que apresente numa mesma linha o nome, sobrenome (concatenados), o cargo, o
salrio, matrcula e data de admisso do funcionrio; o cdigo e nome do departamento; o nome e sobrenome
(concatenados) e ramal do gerente. Salve essa query com o nome Q20.
Neste exerccio, criaremos um arquivo em disco contendo uma query que ser utilizada em diversas montagens de
relatrio. Utilizaremos o n Consultas SQL Externas (External SQL Queries).
Quando efetuamos um clique duplo sobre a query criada, acionado o editor de query externa para que possamos
definir o comando SQL. Veja a Listagem-resposta 8.20A.
Listagem-resposta 8.20A
SELECT F.NM_FUNC||' '||F.NM_SOBRENOME NOME, F.NR_CARGO, F.VL_SAL,
F.CD_MAT, F.DT_ADM, D.CD_DEPTO, D.NM_DEPTO,
G.NM_FUNC||' '||G.NM_SOBRENOME GERENTE, G.NR_RAMAL
FROM FUNC F, DEPTO D, FUNC G
WHERE F.CD_DEPTO
= D.CD_DEPTO
AND D.CD_GERENTE = G.CD_MAT
AND F.CD_MAT
<> G.CD_MAT
Este editor no aciona o Query Builder como auxiliar na montagem do relatrio. Se desejarmos utilizar este recurso,
devemos criar um relatrio, acionar o Query Builder e salvar a query em disco com a extenso SQL.
8.21) Crie um relatrio com o nome de REP21 baseado na query externa Q20. O relatrio deve ter formato tabular.
Neste exerccio, utilizaremos o Assistente para a montagem do relatrio. Quando for solicitada a query, em vez de digitarmos
um novo texto, importaremos o arquivo Q20.SQL do disco pressionando o boto Importar Consulta de SQL.
O resultado da montagem deste relatrio ser feito com o gabarito Bright1.
A partir deste ponto, a montagem dos relatrios subseqentes dever ser feita sem a ajuda do Assistente para que
possamos estudar os objetos do Layout.
8.22) Crie um relatrio com o nome de REP22 baseado na query externa Q20. O relatrio deve ter uma quebra
contendo os dados do gerente e do departamento.
Neste exerccio, toda a construo ser manual; portanto, criamos uma query no Modelo de Dados e importamos
o texto da Q20. Observe que a importao no impede que faamos alguma alterao no texto resultante. Neste
caso inclumos uma ordenao por cdigo de matrcula.
Em seguida, estabelecemos o grupo de quebra com as colunas gerente, cdigo do departamento e nome do
departamento. Para identificarmos mais facilmente os grupos, estabelecemos nomes indicativos G_Func e G_Depto.
Para definio da quebra e conseqente ordenao, consideramos como quebra apenas o cdigo do departamento.
Essa caracterstica corresponde propriedade Definir Ordem de Interrupo.
Nosso prximo passo definir o layout deste relatrio. Uma vez que existem dois grupos no Modelo de Dados, devem
existir tambm dois Repeating Frames no Layout, cada um contendo os campos correspondentes.
Observe na Figura-resposta 8.22C que no Repeating Frame de fora (R_Depto) definimos que a elasticidade vertical
seria Expandir (Expand), pois o elemento interno (R_Func) precisa de espao para se desenvolver. Adicionalmente,
definimos elasticidade vertical tambm para os dois campos de nome (gerente e funcionrio) caso houvesse
necessidade de expanso. No caso de nome do funcionrio, tivemos de definir elasticidade vertical tambm para o
Repeating Frame que o contm (R_Func), pois, se houvesse expanso do nome, o Repeating Frame cederia espao
para uma segunda linha.
Antes de passar para o prximo exerccio, faa o seguinte teste: diminua o tamanho do campo de nome do funcionrio
e retire a elasticidade vertical do Repeating Frame R_Func. Observe que, quando ocorre a quebra de linha, o relatrio
ganha uma nova pgina. Isto ocorre porque quando o Report Builder no consegue formatar o campo por falta de
espao ele quebra de pgina e continua o campo na prxima.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1123
Figura-resposta 8.23A
Iniciamos o desenvolvimento deste relatrio criando uma query no Modelo de Dados e importando o texto do
arquivo Q20.
Uma vez que necessitamos da data de nascimento e de um valor de abono, fizemos algumas alteraes em seu contedo.
Listagem-resposta 8.23A
SELECT F.NM_FUNC||' '||F.NM_SOBRENOME NOME, F.NR_CARGO, TRUNC(F.VL_SAL /5) ABONO,
F.CD_MAT, F.DT_ADM, TO_CHAR(F.DT_NASC, 'DD/MM') ANIV,
D.CD_DEPTO, D.NM_DEPTO,
G.NM_FUNC||' '||G.NM_SOBRENOME GERENTE, G.NR_RAMAL
FROM FUNC F, DEPTO D, FUNC G
WHERE F.CD_DEPTO
= D.CD_DEPTO
AND D.CD_GERENTE = G.CD_MAT
AND F.CD_MAT
<> G.CD_MAT
AND TO_CHAR(F.DT_NASC, 'MM') = TO_CHAR(SYSDATE, 'MM')
A seguir, passamos ao layout. Como primeiro passo devemos criar o Repeating Frame e associ-lo ao grupo G_1
(nico grupo).
Em seguida, criaremos os cinco campos necessrios carta, porm fora do Repeating Frame. Esses campos devem
ter a propriedade Visvel marcada com No.
Dentro do Repeating Frame, criaremos um Boilerplate de Texto com o texto da carta. Na posio correspondente
aos campos, indicaremos com &<nome do campo> para que esse texto seja substitudo pelo contedo do campo
correspondente. Veja a Figura-resposta 8.23B.
No texto inclumos tambm a data do dia da execuo. Essa incluso pode ser feita de duas formas: como referncia direta,
como adotamos no exemplo, ou seja, colocamos o smbolo & na frente do nome da coluna <current_date> (estas colunas
aparecem na lista de colunas possveis de serem associadas a um determinado Field). Outra forma de incluso a criao
de um Field e a associao com esta mesma coluna (esta forma tem como vantagem sobre a anterior a possibilidade de
formatarmos o texto da forma mais conveniente). O formato default adotado o da linguagem (NLS_Territory) em uso.
Os campos de soma tm como funo Soma (Sum). A definio de reincio (Reset At) depende dos nveis Report
para geral, G_gerente para gerente e G_depto para depto. Os campos de total tm como funo Contagem (Count).
A definio de reincio (Reset At) similar ao anterior.
Nossa prxima etapa a construo do layout.
Uma vez que definimos trs grupos no Modelo de Dados, desenvolveremos trs Repeating Frames no Layout, um
associado a cada grupo. A seguir, incluiremos os campos correspondentes a cada uma das colunas definidas no
Modelo de Dados. Os campos devem ser criados subordinados ao Repeating Frame que corresponda ao grupo no
qual a coluna que ele faz referncia esteja includa.
No se esquea de estabelecer elasticidade vertical para os quadros de repetio que contenham outros quadros de repetio.
Para que o resultado visual ficasse mais claro, definimos linhas para cada um dos quadros e definimos como limite
uma pgina por gerente (no Repeating Frame de Gerente, limitamos a um registro por pgina). Estabelecemos,
ainda, a distncia vertical de 0.1 entre duas impresses dos Repeating Frames do grupo de funcionrio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1125
No prximo grupo de relatrios estaremos testando a funcionalidade do editor de Layout. As alteraes no layout
sero manuais.
8.25) Baseado no relatrio REP22, crie um relatrio de nome REP25 e acrescente a seguinte funcionalidade:
Campos numricos formatados e alinhados direita.
Campos de data formatados e alinhados esquerda.
Letra arial, tamanho 9 para todos os campos e tamanho 8 e negrito para os cabealhos.
Incluir cabealho de coluna.
Alinhamento horizontal e vertical de todos os campos e cabealhos.
Limitar a apresentao a um departamento por pgina.
Neste relatrio trabalharemos apenas no layout para estabelecer as formataes solicitadas.
O alinhamento dos campos realizado atravs do menu Formatar (Format), submenu Justificar (Justify). As mscaras
so estabelecidas dentro das propriedades de cada campo.
A letra tambm formatada atravs da opo Fonte no menu Format.
Os cabealhos de coluna so includos com a ajuda da barra de ferramentas vertical (boto Texto), ou seja, incluindose um boilerplate de texto.
O alinhamento horizontal e vertical, alm do dimensionamento dos campos, obtido com a ajuda das opes
Alinhar Objetos e Dimensionar Objetos do menu Organizar.
Finalmente, para limitarmos a quantidade de registros de departamento a um por pgina, devemos alterar a
propriedade correspondente do Repeating Frame.
Para que o alinhamento e ajuste dos campos seja mais perfeito, desmarque a opo de alinhamento pela grade
presente no menu Exibir.
8.26) Baseado no relatrio REP25, crie um relatrio de nome REP26 e acrescente a seguinte funcionalidade:
Crie uma Capa que apresente o nome do relatrio e a lista de departamentos com seus respectivos nomes (use
gabarito NCA Grey para a capa).
Crie uma Contracapa que indique o trmino do relatrio e o usurio solicitante.
Determine cor azul para todos os itens e cor vermelha para os cabealhos.
Inclua um ttulo que seja apresentado em todas as pginas.
Neste exerccio estaremos focando o editor de Layout.
A fim de criarmos a capa do relatrio, automaticamente, devemos navegar para a rea do layout chamada Cabealho
(Header). Com esta rea selecionada devemos acionar o Assistente de Relatrio e selecionar apenas os campos e
grupos pertencentes segunda query. Observe a Figura-resposta 8.26B.
Em seguida escolha o gabarito adequado e encerre o Assistente. Navegue para o Editor de Layout (Layout Model)
e verifique que na rea de Cabealho existe um layout (corpo e margem) totalmente diferente daquele presente na
seo Principal.
Na Header, inclumos o texto Incio do Relatrio do Usurio &F_usuario
Na contracapa, ou seja, na seo de Trailer inclumos o texto Trmino do Relatrio do Usurio &F_Usurio e o
campo F_usurio. O campo F_usurio est com a propriedade visvel preenchida com No. Este campo corresponde
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1127
8.27) Baseado no relatrio REP24, crie um relatrio de nome REP27 e acrescente a seguinte funcionalidade:
Campos numricos formatados e alinhados direita.
Campos de data formatados e alinhados esquerda.
Letra arial tamanho 9 para todos os campos.
Alinhamento horizontal e vertical de todos os campos e cabealhos.
Crie uma marca dgua que seja apresentada como fundo de pgina (texto inclinado).
Crie uma linha horizontal que separe o Gerente de seu Departamento.
Os campos de nome do gerente e nome do departamento devem ter a possibilidade de crescimento horizontal.
Inclua um nmero de pgina que seja reiniciado a cada novo gerente (no rodap).
Inclua um ttulo que seja apresentado em todas as pginas.
Inclua a data de emisso do relatrio em todas as pginas.
Neste relatrio desenvolveremos o layout apenas na Seo Principal.
Para a organizao deste relatrio, a primeira etapa a ser cumprida a colocao de cabealho para todos os
campos. Inclua-os sem se preocupar com posicionamento.
A marca dgua deve ser definida na Margem para que o desenvolvimento do corpo seja feito sobre o desenho que
viermos a criar.
Para teste, crie o texto Confidencial (boilerplate de texto) com letra Arial e tamanho 48. Em seguida, utilizando a
ferramenta de rotao, incline o texto conforme apresentado na Figura-resposta 8.27A. D cor de letra cinza-claro.
Observe ainda nesta mesma figura-resposta que o nome do gerente foi diminudo de tamanho, tornado expansvel
na horizontal e colocado dentro de um frame expansvel na horizontal. Realize tambm estas operaes (no esquea
de colocar o frame atrs destes campos e na frente do Repeating Frame de gerente).
Abaixo do nome do gerente, inclua uma linha que se estenda at o frame. Essa linha deve ter a propriedade
Extenso da Linha com Quadro (Line Stretch With Frame) preenchida com o nome do frame recm-criado. Isto
far com que a linha aumente ou diminua quando o Frame aumentar ou diminuir horizontalmente.
As prximas solicitaes devem ser construdas na Margem. Neste exemplo, preferimos criar um campo para
pgina (que faz referncia quantidade de pginas fsicas) e um campo para data de emisso (que faz referncia
data atual) e determinar que a propriedade visvel de ambos os campos fosse preenchida com No. Desta forma,
pudemos utiliz-los dentro dos boilerplates de texto e estabelecer mscaras de formatao simultaneamente.
8.28) Baseado no relatrio REP27, crie um relatrio de nome REP28 e acrescente a seguinte funcionalidade:
Apresente a foto do funcionrio.
Inclua no cabealho o smbolo da empresa (utilize Link File).
Limite a quantidade de funcionrios a trs por pgina.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1129
Listagem-resposta 8.29A
FUNCTION FDATA(DATA IN DATE) RETURN VARCHAR2 IS
BEGIN
RETURN TO_CHAR(DATA, 'DD/MM/YYYY HH24:MI:SS');
END;
Listagem-resposta 8.29B
FUNCTION FTEXTO(TXT1 IN VARCHAR2, TXT2 IN VARCHAR2)
RETURN VARCHAR2 IS
BEGIN
RETURN INITCAP(LTRIM(RTRIM(TXT1))||' '||LTRIM(RTRIM(TXT2)));
END;
Na Listagem-resposta 8.29C, observamos que a coluna Fdt_adm recebe o resultado da funo (Return) pois se trata
da coluna de frmula. As demais colunas (PlaceHolders) recebem a atribuio diretamente da coluna de frmula.
No layout definido, o Repeating Frame recebeu direo de impresso horizontal; observe a direo da seta na linha
do Repeating Frame quando essa opo for marcada.
Como resultado temos duas impresses por pgina. No use gabarito para melhor visualizao do resultado.
8.30) Crie um relatrio de nome REP30 baseado no relatrio REP29 e acrescente a seguinte funcionalidade:
Retire a utilizao das rotinas do Modelo de Dados.
A modificao dos valores deve ser feita dinamicamente, no momento da montagem da linha.
O desenvolvimento do relatrio deve ser horizontal/vertical.
Como primeiro passo deste exerccio, devemos retirar a frmula associada coluna Fdt_adm. Recriamos esta
coluna como um PlaceHolder (sem frmula).
No layout, para cada um dos trs campos associados s colunas de espao reservado (PlaceHolders), criamos um gatilho
de formato (Format Trigger) que atribua ao campo o valor desejado a tempo de formatao.
Listagem-resposta 8.30A
function F_Fdt_admFormatTrigger return boolean is
begin
srw.set_field_char(0, fdata(:dt_adm));
return (TRUE);
end;
A Listagem-resposta 8.30A mostra este gatilho para a coluna F_dt_adm. A rotina Set_Field_Char substitui o valor do
campo na hora da impresso. A seguir, a Listagem-resposta 8.30B com o trigger de formatao para o campo F_Nome.
Listagem-resposta 8.30B
function F_NomeFormatTrigger return boolean is
begin
srw.set_field_char(0, ftexto(:nm_func, :nm_sobrenome));
return (TRUE);
end;
Como passo seguinte, alteramos a direo de impresso para Horizontal/Vertical, aumentamos verticalmente o tamanho
do Repeating Frame e colocamos sua cor de linha vermelha para que possamos mais facilmente entender o resultado.
Observe que os valores apresentados em cada campo so similares ao resultado do exerccio anterior. O que mudou
foi o momento da formatao do dado.
8.31) Crie um relatrio de nome REP31 baseado no relatrio REP30, e acrescente a seguinte funcionalidade:
Obtenha a quantidade de registros da tabela Func a ser apresentada na capa do relatrio.
Que receba como parmetro uma indicao da formatao ou no das fotos do funcionrio. Caso a foto no seja
formatada, apresente um boilerplate retangular na posio correspondente.
Utilizando o Report Builder, crie um trigger (de banco de dados) que impea que o cargo seja aumentado sem
aumento de salrio e que impea que o cargo e o salrio sejam diminudos.
Neste relatrio, nosso primeiro passo criar uma coluna do tipo espao reservado (PlaceHolder) para receber a
quantidade de registros da tabela Func. Poderamos ter criado uma frmula fora da Query para atender a esta
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1131
Listagem-resposta 8.31A
function
begin
SELECT
FROM
return
end;
Em seguida, criamos uma capa para o relatrio para apresentao deste valor, incluindo um campo Fqtd_regs e um
texto (boilerplate de texto) com Quantidade de Registros em Funcionrio &Fqtd_regs.
Para a apresentao da foto do funcionrio, alteramos a Query (no Modelo de Dados) para que selecionasse tambm
esta coluna.
Listagem-resposta 8.31B
SELECT CD_MAT, DT_NASC, DT_ADM, NM_FUNC, NM_SOBRENOME, NM_FOTO
FROM FUNC
O layout foi alterado tambm para a incluso da coluna de foto. Para que fosse apresentado alternativamente a
foto ou um boilerplate retangular, desenhamos um sobre o outro e inclumos um trigger de formatao para cada
um. Quando o parmetro for S, ser formatada a foto, e quando for N, ser formatado o retngulo.
Listagem-resposta 8.31C
function B_2FormatTrigger return boolean is
begin
IF :P_FOTO = 'N' THEN
return (TRUE);
ELSE
RETURN FALSE;
END IF;
end;
Listagem-resposta 8.31D
function F_NM_FOTOFormatTrigger return boolean is
begin
IF :P_FOTO = 'S' THEN
return (TRUE);
ELSE
RETURN FALSE;
END IF;
end;
Listagem-resposta 8.32A
function AfterPForm return boolean is
begin
:TABELA := :pdep||user;
:col5 := 'nm_gerente';
:col6 := 'nm_depto';
srw.do_sql ('create table '||:pdep||user||
'(cd_mat number(5), nm_func varchar2(12), vl_sal number(9,2), '||
'dt_nasc date, nm_gerente varchar2(12), nm_depto varchar2(40))');
srw.do_sql ('insert into '||:pdep||user||
' select f.cd_mat, f.nm_func, f.vl_sal, f.dt_nasc, '||
'
g.nm_func, d.nm_depto from func f, func g, depto d'||
' where f.cd_depto = d.cd_depto and'||
'
g.cd_mat
= d.cd_gerente and' ||
'
d.cd_depto = '''||:pdep||'''');
srw.do_sql('commit');
COMMIT;
return (TRUE);
end;
Verifique o cdigo da Listagem-resposta 8.32A. Como primeiro passo, executamos a rotina Do_Sql para criar a
tabela cujo nome uma combinao do parmetro Pdep com a funo User (de PL/SQL). A seguir inclumos nessa
tabela as linhas da tabela Func que pertencem ao departamento informado como parmetro. Utilizamos, neste
caso, tambm a rotina Do_Sql, porque o nome da tabela varivel e no existe a tempo de compilao (s execuo).
Como ltima etapa fizemos um Commit (no precisava ser com a Do_Sql) para garantir que o comando Insert seja
gerado no banco de dados.
A seguir, precisamos direcionar a query para a leitura desta tabela. Temos um problema, porm: a query tem de ser
compilada no momento do desenvolvimento. Como a tabela no existe, teremos de direcionar a compilao para
uma tabela que exista e trocar seu nome a tempo de execuo.
Listagem-resposta 8.32B
SELECT &COL1, &COL2, &COL3, &COL4, &COL5 NM_GERENTE,
&COL6 NM_DEPARTAMENTO FROM &TABELA
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1133
Listagem-resposta 8.32C
LPAD(' ', 40)
Na Listagem-resposta 8.32C observamos que o valor inicial do parmetro Col6 uma expresso cujo resultado um
varchar2(40), que era o nosso objetivo. Se voc retornar query apresentada na Listagem-resposta 8.32B, observar
que esta coluna foi apelidada de nm_departamento. Para o parmetro Col5 utilizamos esta mesma estratgia.
Quando concluirmos estas definies, podemos aceitar o dilogo da query para que o Report Builder efetue a compilao.
Na Figura-resposta 8.32A observamos o resultado no Modelo de Dados. Para verificao do resultado gerado pelo
Report Builder, obtenha as propriedades da coluna Nm_Departamento que ele criou. Veja que prevaleceram os 40
bytes que desejvamos.
Verifique, voc mesmo, o que aconteceu com as propriedades das demais colunas.
Com esta etapa vencida, podemos gerar o layout com o auxlio do Assistente usando at mesmo um gabarito.
Retorne agora Listagem-resposta 8.32A e verifique que no momento de execuo do trigger After Parameter Form
trocamos o nome dos parmetros Tabela, Col5 e Col6 para os nomes correspondentes na tabela temporria. Isto
necessrio pois desejamos que a leitura seja feita para a tabela temporria.
A ltima etapa deste relatrio a remoo da tabela ao trmino da execuo. Escolhemos realizar esta tarefa no
trigger After Report.
Listagem-resposta 8.32D
function AfterReport return boolean is
begin
SRW.DO_SQL('DROP TABLE '||:PDEP||USER);
return (TRUE);
end;
Neste caso, a ancoragem ainda ocorrer, porm as duas figuras sero ancoradas no frame, fazendo com que ambas
sejam apresentadas juntas somente no fim da impresso do frame, o que acontecer apenas quando ambos os
Repeating Frame acabarem.
Para que o resultado seja satisfatrio, no esquea de estabelecer elasticidade vertical para o frame.
8.34) Crie um relatrio que contenha a lista de departamentos da empresa. Quando o usurio pressionar o boto
adequado, devemos acionar o relatrio REP31. Para os departamentos A00, B01 e C01 no apresentar fotos, para os
demais departamentos, apresentar.
Neste relatrio, inclumos no Layout um boto de repeating frame, causando o aparecimento do boto a cada
linha impressa no relatrio.
Este boto dever acionar o relatrio REP31 que recebe um parmetro.
No Report Builder, a passagem de parmetro mais simples que no Form Builder. Simplesmente indicaremos o
nome e contedo do parmetro na linha de comando. Veja a Listagem-resposta 8.34A.
Listagem-resposta 8.34A
procedure rep31ButtonAction is
begin
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1135
Na lgica associada ao do boto, acionamos a rotina SRW.Run_Report para executar o relatrio desejado. Quando
no especificamos a extenso (RDF) para o parmetro Module, ser assumido REP. Essa extenso corresponde ao mdulo
gerado por um processo de compilao. Se voc desejar testar, selecione no menu Arquivo (File) o submenu Administrao
(Administration) e a opo Compilar Relatrio (Ctrl+T).
8.35) Crie um relatrio que selecione os seguintes dados da tabela de funcionrios: matrcula, nome, salrio e
cargo. O relatrio dever ter formato tabular, porm o layout dever variar de acordo com o parmetro recebido:
A Apresentar matrcula, nome e salrio.
B Apresentar matrcula, salrio e cargo.
C Apresentar matrcula, nome e cargo.
O espao entre os objetos apresentados na impresso deve ser constante e semelhante entre si.
O objetivo deste relatrio fazermos uma experincia usando ncoras. Para tal, selecionamos apenas as colunas
Matrcula, Nome, Salrio e Cargo da tabela Func.
No Layout, posicionamos estes quatro campos lado a lado.
Observe na Figura-resposta 8.35A que ancoramos um objeto no seu pai imediatamente esquerda, ou seja, a
coluna nm_func (filha) est ancorada na coluna cd_mat (pai), a coluna vl_sal (filha) est ancorada na coluna
nm_func (pai) e assim por diante. Com os cabealhos acontece o mesmo.
Em seguida, preenchemos a propriedade Fechar Horizontalmente (Collapse Horizontally) de todas as ncoras
indicando que, se o objeto-pai no for formatado, a distncia especificada dever ser removida.
Listagem-resposta 8.35A
function F_nm_funcFormatTrigger return boolean is
begin
IF :PLAYOUT IN ('A','C') THEN
return (TRUE);
ELSE
RETURN FALSE;
END IF;
end;
Para que o objeto fosse formatado somente quando desejssemos, criamos um gatilho de formatao para cada um
destes elementos, indicando quando a formatao deveria ou no ocorrer.
Nas Listagens-resposta 8.35A e 8.35B encontramos dois destes triggers de formatao. Eles foram associados a um
parmetro (Playout) do tipo Char com tamanho 1 e valor inicial A. A formatao ocorrer de acordo com a
solicitao do relatrio.
Execute, agora, o relatrio e verifique a diferena de resultados.
8.36) Crie um relatrio de nome REP36 que receba como parmetro a pgina inicial a ser impressa e a quantidade
limite de registros. Devem ser mostrados na capa do relatrio os parmetros recebidos. Utilize a query Q20 para
montagem deste relatrio.
Uma vez que a query Q20.sql j existe em disco, no precisaremos defini-la novamente. Em vez de importarmos a
query, preencheremos seu nome na propriedade Arquivo de Origem de Consulta Externa (External Query Source
File). Desta forma, o arquivo ser importado, porm ficaremos sem acesso ao texto da query para efetuar modificaes.
Veja a Figura-resposta 8.36A.
Este programa recebe dois parmetros: Pmax, que determina o nmero mximo de linhas a serem lidas na query;
e o parmetro Ppag, que determina a pgina inicial do relatrio.
Listagem-resposta 8.36A
function BeforeReport return boolean is
begin
SRW.SET_MAXROW('Q_1', :PMAX);
PGLOBAL.PAG := :PPAG;
return (TRUE);
end;
Na Listagem-resposta 8.36A, encontramos o trigger de Before Report que limitar a quantidade de linhas lidas pela
query. A rotina Set_Maxrow deve ser utilizada neste trigger (antes do incio da leitura).
Simultaneamente, estamos atribuindo a uma varivel de pacote (Pglobal.Pag), criada no relatrio, o valor recebido
no parmetro Ppag.
Para que o nmero da pgina possa ser apresentado, devemos criar uma varivel de trabalho (Varivel de Espao
Reservado PlaceHolder) que possa ser mencionada por um objeto de layout.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1137
Listagem-resposta 8.36B
function BetweenPage return boolean is
begin
PGLOBAL.PAG := PGLOBAL.PAG + 1;
return (TRUE);
end;
Listagem-resposta 8.36C
function F_PAGFormatTrigger return boolean is
begin
SRW.SET_FIELD_NUM(0, PGLOBAL.PAG);
return (TRUE);
end;
Listagem-resposta 8.37A
SELECT NM_FUNC, NR_CARGO, VL_SAL, NM_DEPTO, D.CD_DEPTO
FROM FUNC F, DEPTO D
WHERE F.CD_DEPTO = D.CD_DEPTO
Aps sua especificao, foi a vez da criao das variveis de sumrio para montagem das solicitaes de totais.
No layout criamos, na parte superior, um campo baseado na varivel Tot_Atual que apresentar o valor acumulado
na pgina anterior. Dentro dos Repeating Frames, criamos as variveis de sumrio relativas ao grupo de Quebra.
Aps o desenvolvimento do Repeating Frame do grupo de quebra (no fim da pgina), criamos os dois campos que
apresentaro os totais por pgina. Do lado direito criamos o campo F_Tot_Pag, baseado na coluna Tot_Pgina, que
apresentar o total de salrios da pgina. Do lado esquerdo, criamos o campo F_Acum_Pag, baseado na coluna
Tot_Pgina que apresentar o valor acumulado dos salrios (portanto, ser substitudo a tempo de execuo).
Alm destes campos, criamos um pacote de nome Pglobal que contm duas variveis que sero as responsveis por
acumular os salrios de cada funcionrio (TOT_ANT e TOT_ATU). Essas variveis devem ser inicializadas no trigger
de Before Report uma vez que uma varivel de pacote fica ativa enquanto a sesso no for fechada (em uma segunda
execuo, o valor inicial seria o valor acumulado na sesso anterior).
Nosso prximo passo acumular os valores de salrio e atribuir esses valores acumulados aos campos correspondentes.
Listagem-resposta 8.37B
function F_VL_SALFormatTrigger return boolean is
begin
PGLOBAL.TOT_ATU := PGLOBAL.TOT_ATU + NVL(:VL_SAL, 0);
return (TRUE);
end;
Na Listagem-resposta 8.37B mostramos o trigger de formatao associado ao campo F_vl_sal. Desta forma, a cada
salrio formatado para impresso, acumulamos seu valor na varivel Tot_Atu do pacote Pglobal. Quando ocorre a
mudana de pgina, atribumos o valor desta varivel varivel Tot_Ant do pacote Pglobal.
Com estas duas rotinas fechamos a parte de clculo. Resta a parte de atribuio.
Listagem-resposta 8.37C
function F_acum_pagFormatTrigger return boolean is
begin
SRW.SET_FIELD_NUM(0, PGLOBAL.TOT_ATU);
return (TRUE);
end;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1139
Listagem-resposta 8.37D
function F_TOT_ANTFormatTrigger return boolean is
begin
SRW.SET_FIELD_NUM(0, PGLOBAL.TOT_ANT);
return (TRUE);
end;
No trigger de formatao do campo F_tot_Ant (definido na parte superior da pgina) alteramos o valor do campo
para o valor da varivel de pacote Tot_Ant. Veja a Listagem-resposta 8.37D.
Com esta montagem, no incio da pgina temos o total da pgina anterior, e no fim desta o total acumulado e o
valor apenas somado na pgina (atravs de sumrio).
Teste este exerccio voc mesmo. Como teste adicional, mude a referncia do campo F_Acum_Pag de Tot_Pagina
para Tot_Atual. Verifique o que acontece e analise por qu.
8.38) Crie um relatrio de nome REP38 baseado na query Q20 e que contenha a seguinte funcionalidade:
Devem ser apresentados em vermelho todos os salrios maiores que R$ 4.000,00.
Devem ser apresentados em verde todos os salrios menores que R$ 2.000,00.
Este relatrio s tem como particularidade a troca de cores a tempo de impresso. Passaremos direto, portanto,
para esta fase.
A modificao das cores deve ser feita no trigger de formatao do objeto que desejamos alterar.
Listagem-resposta 8.38A
function F_vl_salFormatTrigger return boolean is
begin
Criado Automaticamente a partir do Report Builder.
if (:vl_sal > '4000')
then
srw.set_text_color('red');
end if;
Criado Automaticamente a partir do Report Builder.
if (:vl_sal < '2000')
then
srw.set_text_color('green');
end if;
return (TRUE);
end;
Para realizarmos esta modificao sem esforo utilizaremos a propriedade Formatao Condicional presente no
grupo Layout Geral do campo F_vl_sal (no layout). Criaremos duas condies (uma vez que desejamos atribuir
valores diferentes a cada situao). A terceira condio, isto , para salrio entre 2000 e 4000 no precisou ser
includa uma vez que a cor default Black. O gatilho de formatao criado, automaticamente, pelo Report Builder
mostrado na Listagem-resposta 8.38A.
8.39) Crie um relatrio de nome REP39 baseado na query Q20 e que contenha a seguinte funcionalidade:
s segundas, as letras do relatrio devem ser azuis.
s teras, as letras do relatrio devem ser verdes.
Nos outros dias as letras devem ser pretas.
Crie um grupo de quebra e garanta que todos os elementos sejam impressos na mesma pgina.
Para a confeco deste relatrio, adicionamos o nome do arquivo que contm a query na propriedade Arquivo de
Origem de Consulta Externa (External Query Source File).
Listagem-resposta 8.39A
function BeforeReport return boolean is
DIA
NUMBER := TO_CHAR(SYSDATE, 'D');
begin
IF DIA = 4 THEN
PACOTE.COR := 'BLUE';
ELSIF DIA = 5 THEN
PACOTE.COR := 'GREEN';
ELSE
PACOTE.COR := 'BLACK';
END IF;
return (TRUE);
end;
Desta vez no usaremos o auxlio do Report Builder, criaremos, manualmente, os triggers para formatao de cor.
Para diminuirmos a quantidade de cdigo repetitivo, usamos o trigger Before Report para a preparao da varivel
com a cor correspondente ao dia da semana escolhido.
Listagem-resposta 8.39B
function F_cd_deptoFormatTrigger return boolean is
begin
SRW.SET_TEXT_COLOR(PACOTE.COR);
return (TRUE);
end;
Para cada objeto de layout que for mudar de cor, devemos atribuir a varivel criada da mesma forma que fizemos
na Listagem-resposta 8.39B.
8.40) Crie um relatrio que formate uma borda para os campos numricos. A espessura da borda e cor sero
recebidas como parmetro:
Espessura variando de 0 a 200.
Cor de letra.
Cor de preenchimento.
Baseie o relatrio na Q20. Crie um grupo de quebra com desenvolvimento horizontal e um grupo detalhe com
desenvolvimento vertical. Teste a propriedade Column Mode.
Iniciamos o relatrio montando uma query baseada no texto do arquivo Q20.sql. Em seguida, dividimos as colunas
em dois grupos (quebra e detalhe).Veja a Figura-resposta 8.40A.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1141
Listagem-resposta 8.40A
function Fcd_matFormatTrigger return boolean is
begin
srw.set_text_color (:p_letra);
srw.set_foreground_border_color(:p_borda);
srw.set_border_pattern('solid');
srw.set_border_width(:p_espessura);
srw.set_foreground_fill_color(:p_preenchimento);
srw.set_fill_pattern('solid');
return (TRUE);
end;
O layout deste relatrio foi construdo especialmente para testarmos o resultado de uma execuo com a propriedade
Column Mode ativada e desativada.
O grupo externo deve ter direo de impresso horizontal; o interno, vertical. Veja a Figura-resposta 8.40B.
Para causarmos a situao de uso do modo de coluna devemos fazer com que um determinado departamento
comece a imprimir os detalhes em uma pgina e conclua em outra, ou seja, devemos forar uma quebra no meio
do desenvolvimento do grupo de quebra.
Execute o relatrio e observe a pgina do departamento D11. Iniciamos a impresso na coluna da direita do
departamento D11, que possui mais registros do que os apresentados.
Observe que, na pgina de continuao, o restante das linhas do departamento D11 foi formatada na coluna da
esquerda. Isto ocorre porque no estamos trabalhando com o modo de coluna.
Se voc no conseguiu reproduzir esta situao, diminua o tamanho da pgina da seguinte forma: navegue para a
margem e diminua verticalmente o tamanho da rea de desenvolvimento do corpo. Teste novamente o relatrio
at que ocorra uma mudana de pgina no meio da impresso de um determinado departamento.
Aps entendermos este resultado, devemos estabelecer o modo de coluna para o Repeating Frame do grupo de
quebra e executar o relatrio novamente. Observe agora que o grupo D11 continua sendo impresso na coluna da
direita, isto , a coluna preservada.
Listagem-resposta 8.41A
function CF_1Formula return Number is
begin
srw.do_sql('alter session set sql_trace = true');
return 0;
end;
A definio de estatsticas pode ser feita de duas formas: ou criamos uma frmula fora dos grupos existentes ou
usamos um trigger de relatrio (Before Parameter Form ou After Parameter Form) para incluir o comando apresentado
na Listagem-resposta 8.41A. A partir do ponto em que executamos esta ao, nossa sesso passa a ser monitorada.
A referncia leitura de arquivos do sistema operacional e obteno de mdulos do tipo relatrio (extenso RDF)
tambm indicada nas preferncias, na pasta Acessar.
Para que o relatrio seja impresso em modo caracter, devemos colocar como valor inicial para o parmetro de
sistema Mode o valor Character.
Os parmetros relativos ao modo caracter so especificados em nvel de mdulo; portanto abra a tela de propriedades
do mdulo Rep41 que voc est desenvolvendo agora.
Neste grupo de propriedades devemos determinar a largura e altura da pgina. Estas informaes so utilizadas
pelo Report Builder para estimar o tamanho do caracter a ser usado na impresso, isto , o tamanho da pgina
fsica (largura, por exemplo) dividido pelo nmero de caracteres que cabem na pgina (informado na propriedade
Largura do Relatrio do grupo Caractere das propriedades do mdulo). Veja a formatao de grade feita no layout
(Figura-resposta 8.41A).
Se desejarmos que os objetos do tipo BitMap tenham sua posio marcada a tempo de execuo, devemos marcar
a opo Incluir Objetos de BitMap.
Execute este relatrio usando o Previsualizador de Runtime. O Previsualizador de Runtime apresenta a imagem que
ser gerada para a impresso final, levando em considerao a caracterstica de modo caracter.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1143
Voc encontrar o arquivo de trace no diretrio definido pela varivel de ambiente user_dump_dest no arquivo
init.ora. O arquivo tem a forma ORA<nmero>.TRC. Se o seu banco de dados Personal e voc manteve a instalao
padro, o arquivo deve estar no diretrio c:\oracle\admin\<nome do banco de dados>\udump. O <nome do
banco de dados> voc forneceu durante o processo de instalao.
8.42) Crie um relatrio baseado na Q20 que contenha a seguinte funcionalidade:
Criar duas novas cores em sua paleta de cores.
Exporte a paleta de cores com o nome de pteste.pal.
Garanta que sejam lidos aproximadamente 20 registros a cada acesso ao banco de dados.
Quando o relatrio concluir com sucesso, deve ser enviado, automaticamente, um commit para o banco de
dados. Caso contrrio, deve ser acionado um Rollback.
No layout do relatrio devem ser utilizadas as novas cores criadas.
O relatrio deve alterar o ramal de todos os funcionrios para que sejam formados com quatro nmeros comeando
com 9. Se no houver nenhum nmero a ser alterado, deve ser dado um erro.
Como primeira tarefa para montagem do relatrio, criamos duas novas cores na paleta de cores. Devemos inclulas no canto inferior esquerdo onde existem oito clulas em branco.
Em seguida, exportamos esta paleta usando a opo Exportar do menu Arquivo.
As opes de Commit/Rollback e leitura de 20 KB a cada acesso ao banco de dados (tamanho do array) uma
caracterstica do usurio estabelecido em nvel de preferncia, pasta Definies de Runtime.
Utilizamos as novas cores no layout para os campos F_nome, F_nr_cargo, Fcd_mat e F_vl_sal.
Criamos, tambm, um boto que realizasse o clculo quando o usurio desejasse.
Listagem-resposta 8.42A
procedure U_1ButtonAction is
erro
exception;
begin
update func
set nr_ramal = to_number(lpad(nr_ramal,4,'9'))
where length(nr_ramal) < 4;
srw.message (1, sql%rowcount);
if sql%rowcount = 0 then
srw.message(1, 'ramais inexistentes');
raise erro;
end if;
end;
Listagem-resposta 8.43A
SELECT
FROM
WHERE
GROUP
O layout tambm no complexo. Para a criao do grupo matricial no layout, selecione simultaneamente os dois
quadros de repetio e utilize, no menu Inserir, a opo Matriz de Layout. O quadro com desenvolvimento vertical
deve ser o quadro de fundo (mais atrs).
8.44) Crie um relatrio de nome REP44 que apresente uma matriz com as seguintes caractersticas:
Departamento contra sexo (nome do departamento e sexo por extenso).
Quantidade de funcionrios por sexo e por departamento.
Usar mais de uma query.
Tornar visvel a clula da matriz.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1145
Listagem-resposta 8.44A
SELECT 'FEMININO' SEXO FROM DUAL
UNION
SELECT 'MASCULINO' FROM DUAL
Simulamos a query de sexo com um Union da tabela Dual (veja a Listagem-resposta 8.44A). A query de departamento
obtm as informaes da tabela Depto e a query de recheio similar ao exerccio anterior.
Observe a montagem do Modelo de Dados na Figura-resposta 8.44A.
Para que pudssemos verificar com mais clareza o resultado, colocamos a clula do sumrio acumulado destacada
em verde. Do lado direito da matriz aparece o total da linha (ou seja, do grupo Departamento). Na parte inferior da
matriz est contabilizado o total por coluna (ou seja, do grupo Sexo) e no canto direito inferior est contabilizado
o total geral (confira no Layout 8.45A).
8.46) Crie um relatrio de nome REP46 que apresente uma matriz com as seguintes caractersticas:
Usar uma query.
Sumrio de salrio por grau de instruo, departamento e sexo.
Sumrio de salrio por grau de instruo e departamento.
Sumrio de salrio por grau de instruo e sexo.
Sumrio de salrio por grau de instruo.
Neste exerccio foi solicitada a utilizao de uma nica query. Desta forma, a Listagem-resposta 8.46A apresenta o
comando Select necessrio montagem da matriz.
Listagem-resposta 8.46A
SELECT ROUND(SUM(VL_SAL)) SAL, NR_GIT, CD_DEPTO,
DECODE(IN_SEXO, 'F', 'FEMININO', 'MASCULINO') IN_SEXO
FROM FUNC
GROUP BY NR_GIT, CD_DEPTO, DECODE(IN_SEXO, 'F', 'FEMININO', 'MASCULINO')
Em seguida, separamos os trs grupos de quebra: um para departamento, outro para grau de instruo e outro para sexo.
Nossa ltima tarefa no Modelo de Dados definir os sumrios de acordo com a solicitao. A Figura-resposta 8.46A
indica que o posicionamento de todos eles est subordinado ao grupo Matriz uma vez que cada um deles est
associado a pelo menos uma das colunas de dimensionamento da matriz.
Todos os sumrios usam a funo Soma relativamente coluna Sal (que na verdade sum(vl_sal)). A diferena entre eles
ocorre em nvel de Ordem do Produto e momento de zerar. Estabelecemos a seguinte lista:
Sumrio de salrio por grau de instruo, departamento e sexo O produto segue a ordem Git-Depto-Sexo. O
valor ser zerado quando houver mudana de Git.
Sumrio de salrio por grau de instruo e departamento O produto segue a ordem Git-Depto. O valor ser
zerado quando houver mudana de Depto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1147
Sumrio de salrio por grau de instruo e sexo O produto segue a ordem Git-Sexo. O valor ser zerado quando
houver mudana de Sexo.
Sumrio de salrio por grau de instruo O produto segue a ordem Git. O valor ser zerado quando houver
mudana de Git.
Nosso objetivo, neste momento, testar o resultado da propriedade Ordem do Produto.
Passaremos agora ao layout deste relatrio.
No primeiro passo do layout, fizemos a criao dos trs quadros de repetio para o desenvolvimento do relatrio.
Escolhemos definir como grupo horizontal mais externo Git (em funo dos sumrios solicitados); como segundo
grupo horizontal (interno) escolhemos Sexo e, como grupo vertical, Depto. Para a criao do grupo matricial voc
deve selecionar os trs quadros e escolher a opo Matriz de Layout do menu Inserir.
Inclua, agora, os fields relativos s colunas da matriz obedecendo seguinte regra: se um objeto est dentro do
grupo A, no layout ele deve ser includo dentro do Repeating Frame que est relacionado ao grupo A. Se um
sumrio tem como Ordem do Produto A e B, no layout esse sumrio deve ser localizado no ponto em que os dois
Repeating Frames esto sobrepostos. Veja a Figura-resposta 8.46B.
Observe na Figura-resposta 8.46B que o sumrio Sum_Git_Dep_Sexo foi includo dentro do Repeating Frame relativo ao
grupo Recheio. Isto no obrigatrio. Ele pode ser includo no grupo matricial (que corresponde ao cruzamento dos
trs quadros) mas ficar fora do Repeating Frame Recheio. A diferena a quantidade de vezes que ele ser formatado. Se
ficar no grupo matricial, ele ser formatado tantas vezes quantas o grupo matricial o for. Se ficar no grupo Recheio, ele
ser formatado somente quando houver valor a ser mostrado. Aps a execuo deste relatrio, altere o posicionamento
desse grupo e faa um teste.
Para facilitar o entendimento e o clculo do resultado esperado altere as cores de cada um dos sumrios e verifique
o resultado.
Antes de dar como encerrado este exerccio, retorne ao Modelo de Dados e mude a freqncia com que este ltimo
sumrio reinicializado e verifique os resultados.
8.47) Criar uma biblioteca de PL/SQL de nome BPL47 que contenha as seguintes rotinas:
Rotina (Dv_Matr) para calcular o DV da matrcula do funcionrio (noves fora).
Rotina (Intervalo) para determinar o intervalo de anos entre duas datas recebidas como parmetro.
Rotina (Abono) para calcular o abono salarial (trimestral) de acordo com o nmero de anos de casa. A rotina
deve receber como parmetro o tempo de servio e o salrio.
Menos de 1 ano de casa No recebe abono.
De 1 a menos de 3 anos de casa Recebe 3% de abono.
De 3 a menos de 6 anos de casa Recebe 10% de abono.
Mais de 6 anos de casa Recebe 15% de abono.
Neste exerccio, nosso primeiro passo a criao de um objeto no n Bibliotecas de PL/SQL (PL/SQL Libraries) com
o nome de BPL47.
No n Unidades de Programa (Program Units), devemos criar as trs funes solicitadas.
Listagem-resposta 8.47A
FUNCTION DV(MAT IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN MOD(MAT,9);
END;
Listagem-resposta 8.47B
FUNCTION INTERVALO(DINI IN DATE, DFIM IN DATE) RETURN NUMBER IS
BEGIN
RETURN TRUNC(ABS((DFIM - DINI))/365.25);
END;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1149
Listagem-resposta 8.47C
FUNCTION ABONO(TEMPO IN NUMBER, SAL IN NUMBER) RETURN NUMBER IS
BEGIN
IF TEMPO < 1 THEN
RETURN 0;
ELSIF TEMPO BETWEEN 1 AND 2.99 THEN
RETURN ROUND((SAL*3)/100);
ELSIF TEMPO BETWEEN 3 AND 5.99 THEN
RETURN ROUND((SAL*10)/100);
ELSE
RETURN ROUND((SAL*15)/100);
END IF;
END;
Listagem-resposta 8.48A
function ABONO_FUNCFormula return Number is
TEMPO
NUMBER;
begin
:DV_MAT := DV(:CD_MAT);
TEMPO := INTERVALO(SYSDATE, :DT_ADM);
RETURN ABONO(TEMPO, :VL_SAL);
end;
Para os cabealhos, alteramos o tipo de letra para Arial e tamanho 9 e a cor de letra para vermelho. Observe que, quando
alteramos alguma propriedade, ela perde o smbolo indicativo de herana. Os valores-padro foram herdados da Seo
Default. Poderamos supor que este gabarito viesse a ser utilizado por todos os tipos de relatrio e que somente no caso
de Tabular estaramos criando caractersticas especficas.
Para os itens, isto , Campos, devemos alterar a cor de letra para verde e a letra para Arial com tamanho 8.
Finalmente, os sumrios sero pintados de azul (mantivemos a letra Arial com tamanho 8).
8.50) Crie um relatrio de nome REP50 que seja baseado na query Q20. No crie grupos de quebra e utilize o gabarito
especificado no Exerccio 8.49. Crie Totais para salrio (soma e % do total) e matrcula (count).
A criao de um gabarito qualquer ser sempre realizada em conjunto com a criao de um relatrio-exemplo para
que possamos verificar o resultado das especificaes.
Vejamos, agora, o que resultar do Exerccio 8.49.
Utilizaremos o Assistente para a criao deste relatrio Tabular. Quando voc chegar no dilogo que solicita o
gabarito, selecione do disco o arquivo GT49.TDF.
Observe que o resultado (apesar de colorido demais) indica que podemos estabelecer padres que diminuam o
esforo de programao de um relatrio. Faamos o prximo exemplo.
8.51) Crie um gabarito de nome CQ51 para os relatrios que contenham pelo menos um grupo de quebra.
Caractersticas para o grupo de quebra 1:
a) Cabealho: cor de fundo darkblue, letra Arial, tamanho 10, cor de letra branca.
b) Corpo: cor de fundo branca, letra Arial, tamanho 9, cor de letra darkblue.
Caractersticas para o grupo de quebra 2:
a) Cabealho: cor de fundo darkgreen, letra Comic Sans Ms, tamanho 9, itlico, cor de letra cinza.
b) Corpo: cor de fundo branca, letra Comic Sans Ms, Bold, tamanho 9, cor de letra darkgreen.
Poderamos especificar estas caractersticas dentro do arquivo GT49 uma vez que se tratam de especificaes para
relatrios diferentes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1151
Nas propriedades relativas a corpo devemos alterar a fonte e cor de texto para as etiquetas e as colunas.
Voc ver o resultado no prximo exerccio.
8.52) Crie um relatrio de nome REP52 que seja baseado na query Q20. Crie 2 grupos de quebra e utilize o gabarito
especificado no Exerccio 8.51.
A criao deste relatrio ser efetuada totalmente com a ajuda do Assistente. Quando voc atingir o dilogo relativo
ao gabarito, selecione o arquivo GQ51.TDF.
Para observar melhor os detalhes, crie um sumrio para que este herde as caractersticas da seo default.
8.53) Gere um relatrio baseado na tabela Func com as seguintes caractersticas:
Formato: Agrupar Acima e Agrupar Esquerda.
Colunas: nome completo do funcionrio, matrcula do funcionrio, salrio do funcionrio, cdigo do departamento,
cargo, grau de instruo, data de nascimento. Determine quebra por departamento.
Escolha dois gabaritos diferentes.
O formato Agrupar Acima deve ser gerado em formato HTML.
O formato Agrupar esquerda deve ser gerado em formato RTF para ser visualizado no Word.
Nosso primeiro passo estabelecer uma query que seja comum aos dois formatos, como apresentado na listagem
resposta 8.53A.
Listagem-resposta 8.53A
SELECT NM_FUNC||' '||NM_SOBRENOME NOME, CD_MAT, VL_SAL,
CD_DEPTO, NR_GIT, DT_NASC
FROM FUNC
Estabelecemos a coluna cd_depto como quebra (ficou isolada no grupo de quebra no Data Model).
Em seguida, com o auxlio do Assistente de Relatrios criamos na Seo Principal o layout Agrupar Esquerda
(escolhemos o gabarito Confidential Heading). Aps a criao, navegamos para o Editor de Layout (Layout Model)
Listagem-resposta 8.54A
SELECT CD_MAT, NM_FUNC, NR_CARGO, VL_SAL, DT_NASC, DT_ADM
FROM FUNC
Para que todas as informaes solicitadas sejam apresentadas, h necessidade de se estabelecer um Join na query
de departamento, como veremos a seguir.
Listagem-resposta 8.54B
SELECT
FROM
WHERE
AND
AND
GROUP
A montagem do layout pode ser feita com a ajuda do Assistente. No devemos colocar label para os campos. Definir
os tamanhos adequados para nome do departamento, datas, nome do funcionrio, etc.
Com o layout gerado, devemos estabelecer as mscaras de formato para vl_sal(LNNGNN0D00), dt_nasc (DD/MM/
YYYY), dt_adm(DD/MM/YYYY) e total de salrios(LNNNGNN0D00).
Execute este relatrio para teste e verifique se os valores ficaram corretos.
A prxima etapa estabelecer valores iniciais para os parmetros de sistema, da seguinte forma: Desname=Rel54.txt,
Desformat=Delimited, Destype=File, Mode=Character, Printjob=No.
Quando executarmos o relatrio, agora, ser gerado o arquivo em disco, sendo que os valores de separao dos campos
obedecero ao default. Para estabelecermos os separadores desejados podemos usar a opo Criar Para Arquivo (Texto) do
menu Arquivo, para que seja apresentado o dilogo adequado ou podemos criar um executvel e na linha de comandos
do Windows, definir o texto apresentado na Listagem-resposta 8.54C.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1153
Observe que, imediatamente aps a marcao do ponto de interrupo, o n Aes de Depurao fica preenchido
indicando este ponto. Observe que este n externo ao relatrio, e portanto, quando o abrirmos de novo no mais
estar presente (no armazenado com o fonte do relatrio).
Podemos, agora, fechar a janela do interpretador e executar o programa.
Quando atingimos o ponto de execuo da funo Abono, o interpretador acionado e abre a janela para acompanhamento.
Observe que o n Stack contm as variveis locais da funo Abono, isto , o valor a ser retornado e a varivel
Tempo. Se acionarmos o boto Entrar (Step Into), no veremos a funo DV (pois externa ao relatrio, existente
na biblioteca BPL47), porm acompanharemos o preenchimento de suas variveis.
Quando olhamos para o n Stack, verificamos que, agora, ele contm as variveis da funo DV e da funo Abono.
Para a rotina Intervalo acionaremos o boto Transpor (Step Over) e observaremos que o n Stack no ser preenchido
com as variveis da rotina Intervalo. Sua execuo ser similar execuo de uma linha simples, como se contivesse
um nico comando.
Para que o resultado deste texto seja gerado como uma Tag de HTML, devemos marcar a propriedade Contm Tags
HTML do grupo Layout Geral do boilerplate de texto.
Ainda na margem do relatrio, criamos um objeto Link File. Quando indicamos que o tipo do arquivo uma Imagem
URL, automaticamente o formato do texto correspondente ao nome do arquivo adquire a sintaxe de uma URL.
Listagem-resposta 8.56A
FILE://C:/Teste\Begin.gif
Observe no resultado que o tamanho do objeto definido no Layout (relativo imagem URL) determina o tamanho
da imagem HTML. As propriedades de elasticidade que associarmos ao objeto sero ignoradas.
As possveis sintaxes de imagens URL (Uniform Resource Locator) so as seguintes:
HTTP://www.reportbuilder.com.br/logo1.gif Nesta sintaxe, o browser pesquisar o site da empresa ReportBuilder
a fim de obter a imagem logo1.git para incorpor-la pgina do relatrio gerado.
HTTP://&<servidor>/&<arq> Nesta sintaxe, servidor e arq so parmetros do relatrio (tipo texto). A tempo de
execuo do Report Builder faz a modificao pelo valor do parmetro.
FILE://c:/teste\begin.gif Nesta sintaxe indicamos a localizao do arquivo em algum ponto da rede local do usurio.
Em nosso exemplo, utilizamos esta ltima sintaxe. Resta-nos, agora, verificar o resultado gerado.
Este resultado pode ser visto atravs do boto Previsualizador de Web, quando usamos o Previsualizador Ativo. Este
boto, enquanto estiver pressionado, acionar o browser default do usurio cada vez que modificarmos alguma
caracterstica do relatrio. Quando tivermos concludo a gerao podemos desabilit-lo.
O Report Builder tambm conta com a possibilidade de incorporarmos trechos de HTML antes e depois do relatrio,
pgina ou form (parmetro). Isto pode ser especialmente til se desejarmos incorporar nosso relatrio a um padro
de pgina da empresa.
Incluiremos um texto simples apenas para avaliao de resultado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1155
Listagem-resposta 8.57A
DECLARE
PLIST
PARAMLIST;
BEGIN
PLIST := CREATE_PARAMETER_LIST('REP17');
ADD_PARAMETER (PLIST, 'PDEPTO', TEXT_PARAMETER, :FUNC.CD_DEPTO);
RUN_PRODUCT(REPORTS, 'REP17.RDF', SYNCHRONOUS,
RUNTIME, FILESYSTEM, PLIST, NULL);
DESTROY_PARAMETER_LIST (PLIST);
END;
Execute a aplicao e observe que a tela de parmetros do relatrio foi apresentada, uma vez que no solicitamos
sua omisso.
Todos os parmetros de sistema ou do usurio que desejarmos modificar a tempo de execuo devem ser passados
pela aplicao de tela (Form). Sendo assim, modificamos novamente o texto do trigger do boto para que a tela de
parmetros no seja exibida.
Desta vez, a execuo do relatrio iniciada imediatamente sem a presena da tela de parmetros.
8.58) Gere um relatrio baseado na tabela TB_Func com as seguintes caractersticas:
Formato carta.
Colunas: nome completo do funcionrio, nome do gerente, nome do departamento, matrcula do funcionrio,
salrio do funcionrio.
Gabarito Corporate 1.
Cada carta deve ser gerada em um arquivo HTML em separado.
Deve ser possvel a navegao seqencial entre pginas (use um cone de navegao).
Garanta que para os funcionrios gerentes o salrio no seja mostrado.
Iniciaremos definindo uma query com o texto apresentado na Listagem-resposta 8.58A a seguir.
Listagem-resposta 8.58A
SELECT NM_FUNC||' '||NM_SOBRENOME NOME_FUNC, F.CD_DEPTO.CD_GERENTE.NM_FUNC
NOME_GERENTE, F.CD_DEPTO.NM_DEPTO NM_DEPTO, CD_MAT, VL_SAL,
DECODE (CD_MAT, F.CD_DEPTO.CD_GERENTE.CD_MAT, 1, 0) IND_GERENTE
FROM TB_FUNC F
Nesta query, alm de obtermos os dados requisitados pelo exerccio, inclumos mais uma coluna que identificasse
se o funcionrio lido ou no gerente de departamento (Ind-Gerente).
Aps a definio da query estabelecemos o layout da carta (bem simples), conforme apresentado pela Figura 8.58A.
Quando o Assistente concluir a definio do layout e navegar para sua visualizao, observar que seu layout
diferente deste apresentado na Figura-resposta 8.58A. Algumas mudanas foram implementadas manualmente
para atender ao exerccio.
Como primeira diferena observe que criamos um item F_vl_sal baseado na coluna Vl_Sal (do Data Model). O
objetivo da criao desta coluna a possibilidade de estabelecermos uma formatao condicional para o salrio
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1157
Listagem-resposta 8.58B
FUNCTION F_VL_SALFORMATTRIGGER RETURN BOOLEAN IS
BEGIN
CRIADO AUTOMATICAMENTE A PARTIR DO REPORT BUILDER.
IF (:IND_GERENTE = '1')
THEN
RETURN (FALSE);
END IF;
RETURN (TRUE);
END;
Nosso prximo passo estabelecer navegao entre as pginas geradas pelo relatrio. Como definimos que cada carta deve
ser apresentada em pginas diferentes, escolhemos paginar usando dois arquivos Bmps contendo uma seta para cima e
outra para baixo (a referncia aos arquivos aparece na Figura-resposta 8.58A).
Para que cada carta tivesse um nome diferente (e seqencial), de tal forma que pudssemos navegar para a frente
e para trs, criamos, no Data Model, duas variveis de sumrio (uma dentro do grupo, pois s incrementada
quando ocorre a montagem do grupo) e outra fora do grupo. Ambas as variveis contam(Count) matrculas, sendo
zeradas apenas no fim do relatrio.
Preenchemos, ento, a propriedade Destino de Hiperligao do boilerplate de texto (a prpria carta) com o valor
apresentado na Listagem-resposta 8.58C, onde cs_cd_mat corresponde ao nome do sumrio que ficou dentro do grupo.
Listagem-resposta 8.58C
DESTINO&<CS_CD_MAT>
Desta forma cada boilerplate que for montado ter nomes seqenciais: Destino1, Destino2, etc.
Na propriedade Gatilho de Formato do Boilerplate com Seta para Cima, preenchemos o texto apresentado pela
Listagem-resposta 8.58D.
Listagem-resposta 8.58D
FUNCTION ANTFORMATTRIGGER RETURN BOOLEAN IS
BEGIN
IF :CS_CD_MAT > 1 THEN
SRW.SET_HYPERLINK('#'||'DESTINO'||TO_CHAR((:CS_CD_MAT - 1), 'FM999'));
ELSE
SRW.SET_HYPERLINK('#'||'DESTINO'||TO_CHAR(:CS_CD_MAT, 'FM999'));
END IF;
RETURN (TRUE);
END;
Desta forma, a propriedade Hiperligao (HyperLink) deste objeto apontar para endereos dentro do prprio
resultado. Como controle adicional, impedimos que a primeira instncia deste objeto apontasse para um objeto
endereo inexistente.
Agimos da mesma forma na propriedade Gatilho de Formato do boilerplate com desenho Seta para Baixo, incluindo
o texto apresentado pela Listagem-resposta 8.58E.
Listagem-resposta 8.58E
FUNCTION PROXFORMATTRIGGER RETURN BOOLEAN IS
BEGIN
IF :CS_CD_MAT < :TOTAL_PAG THEN
SRW.SET_HYPERLINK('#'||'DESTINO'||TO_CHAR((:CS_CD_MAT + 1), 'FM999'));
A varivel Total_Pag corresponde ao sumrio criado no Data Model (fora do grupo), que indicar a ltima carta (ou
total de cartas).
Estabelecemos a mesma crtica do exemplo anterior para que na ltima instncia do objeto no houvesse
endereamento invlido.
Com estas informaes montadas j podemos testar a execuo deste relatrio (para um nico HTML).
Para tal devemos preencher o valor inicial dos parmetros de sistema da seguinte forma: Desname=rel58.htm,
Destype=File, Desformat=Html, Printjob=No.
Como passo final, acionar o relatrio na linha de comando do Windows com o texto criado na Listagem-resposta
8.58F. Isto necessrio pois o parmetro PageStream somente pode ser usado na linha de comando.
Listagem-resposta 8.58F
C:\ORAWIN95\BIN\RWRUN60.EXE USERID=DESENV/DESENV@DESENV MODULE=REL58.REP PAGESTREAM=YES
Quando voc executar o relatrio observar que a navegao continua funcionando, mesmo sendo em arquivos
diferentes, pois o Report completa o endereo do destino com o nome do arquivo correspondente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1159
Captulo 9
O FORMS NA WEB
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1161
METODOLOGIA
Apresentao do ambiente de trs camadas comparativamente com o ambiente cliente-servidor.
TCNICA
Utilizao de textos e imagens para compreenso do conceito.
Cliente
Neste esquema os equipamentos dos clientes devem ter capacidade de processamento e memria compatveis com
a tarefa de execuo das aplicaes localmente. O nico servidor com capacidade de processamento significativa
o servidor de banco de dados.
Cliente
Servidor de Aplicao
Em um ambiente Web, os servios de Runtime do Forms e toda a lgica das aplicaes so instalados no servidor
de aplicao e no mais nas mquinas-cliente. Os triggers (do Forms) so processados no servidor de aplicao,
enquanto que o processamento da interface com o cliente ocorre no ambiente cliente.
Neste esquema os equipamentos dos clientes no necessitam de uma grande capacidade de processamento. Esta
necessidade ser transferida para o servidor de aplicao (que no precisa ser constitudo de uma nica mquina,
pode ser um pool), que dever ser capaz de atender aos requisitos dos clientes.
METODOLOGIA
Apresentao dos componentes do Forms no ambiente de trs camadas.
TCNICA
Utilizao de textos e imagens para compreenso do conceito.
OS COMPONENTES
Para atender a esta arquitetura de trs camadas, a Oracle disponibilizou um conjunto de programas ou servios
chamados conjuntamente de Forms Services. Com estes produtos poderemos utilizar nossa aplicao desenvolvida
para ambiente de duas camadas em ambiente de trs camadas (inclusive na Internet).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1163
METODOLOGIA
Descrio dos parmetros de configurao.
TCNICA
Desenvolvimento de exemplos de teste.
CONSIDERAES INICIAIS
Antes de analisarmos os parmetros especficos relativos aos Form Services, comentaremos, superficialmente, as
opes de configurao e seus significados.
QUANTO CONEXO
O Form Services pode usar trs mtodos de conexo:
Sockets Uma conexo Sockets utiliza uma interface padro TCP/IP. Nesta forma de comunicao um cliente
envia uma requisio a uma URL que possua um nmero de porta especfico, por exemplo, http://
www.xxx.com.br:90. Isto significa que o browser do cliente tentar estabelecer conexo ao socket nmero 90 e
que existir no servidor um ouvidor (listener) associado a esta porta (90).
Este mtodo simples, porm as mquinas cliente e servidora devem estar aptas a se comunicarem uma com a
outra diretamente na rede. No possvel o uso de um proxy no servidor neste modo.
O proxy uma caracterstica de segurana (invisvel para o cliente), que tem a finalidade de impedir acessos no
autorizados ao servidor. Se o servidor e o cliente estiverem separados por uma rede no segura, como o caso da
Internet, o uso deste mtodo pode acarretar riscos no que se refere segurana.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1165
CUSTOMIZANDO O PRODUTO
CONFIGURANDO O SERVIDOR WEB
Para que possamos executar nosso aplicativo desenvolvido em Forms, precisaremos de um servidor Web. Voc
poder usar o servidor pessoal que quiser. Para efeito de teste, utilizaremos o IIS da Microsoft.
A tempo de instalao do servidor Web (Oracle9i IAS) so criados alguns caminhos virtuais para a instalao dos
arquivos de software do Forms.
No nosso caso instalamos apenas o Forms Server (e no o IAS), de forma que os diretrios relativos aos softwares
esto subordinados ao <Oracle_Home> que escolhemos durante a etapa de instalao (C:\ORAFORMS). Os diretrios
fsicos apresentados, portanto, se referem a esta escolha. Posteriormente faremos a configurao do servidor Web
(no exemplo deste tpico) e precisaremos do quadro abaixo.
O quadro abaixo apresenta estes caminhos virtuais com seus caminhos fsicos correspondentes (default).
Caminho Virtual
Diretrio Fsico
Contedo
/forms60java/
C:\oraforms\forms60\java
/dev60html/
C:\oraforms\tools\web60\html\
/servlet/
C:\oraforms\forms60\java\oracle\forms\servlet
Servlets (executveis)
/dev60cgi/
C:\oraforms\tools\web60\cgi\
CGIs (executveis)
/jinitiator/
C:\oraforms\jinit\
/dev60temp/
C:\oraforms\tools\web60\temp\
No caso do Oracle9i IAS os diretrios virtuais so especificados em um arquivo chamado 6iserver.conf localizado
no diretrio <oracle_home>/6iserver.
Forms60_Timeout Este parmetro especifica a quantidade de tempo (em minutos) em que o processo Forms
Services terminado quando no ocorrerem solicitaes dos clientes. Esta varivel no est criada. Se desejarmos
modificar seu valor default, que 15, devemos inclu-la. O intervalo de valores vlidos de 1 a 1440 (1 dia).
Forms60_Mapping Nesta varivel indicamos o diretrio virtual relativo ao diretrio fsico especificado na
varivel Forms60_Output. O valor preenchido na nossa instalao foi: /dev60temp.
Forms60_Repformat Nesta varivel especificamos o formato que o relatrio gerado atravs de uma chamada
rotina RUN_PRODUCT (no Forms) ter. Os valores vlidos so HTML e PDF. O valor preenchido na nossa
instalao foi: HTML.
Forms60_Message_Encryption Esta varivel no est criada. Por default as mensagens so criptografadas (usando
criptografia de 40 bits RC4 40-bit). No temos necessidade de incluir esta varivel.
Forms60_Wallet Esta varivel utilizada para implementao do modo de comunicao HTTPS. Nesta varivel
indicaremos o diretrio fsico contendo o wallet que suporta o certificado usado para a comunicao segura
com o servidor. Ao tempo de instalao a varivel j foi preenchida com o valor C:\ORAFORMS\FORMS60\
WALLET. Uma vez que no faremos a configurao de um ambiente servidor, inclusive nossa comunicao via
Socket, no usaremos esta varivel.
Forms60_Https_Negotiate_Down Esta varivel no criada, por default, ao tempo de instalao e no teremos
necessidade de cri-la. Esta somente ser usada em comunicaes seguras (HTTPS) para indicar ao servidor se
deve ou no aceitar chaves de criptografia oriundas do ambiente cliente com chave de criptografia inferior a
128-bits. Esta varivel somente precisa ser preenchida se no ambiente servidor estivermos usando chave de
criptografia de 128-bits e pretendermos estabelecer comunicao com clientes que usem criptografia de 40-bits.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1167
Na Figura 9.03 observamos que na parte inferior da tela encontramos um campo no qual podemos preencher
modificaes para os parmetros do servio, como por exemplo port=9002 mode=http pool=5 log=c:\logs\fserv.log.
No nosso caso, podemos preencher apenas o nome do arquivo de log e deixar os demais parmetros como default.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1169
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1171
CONSIDERAES GERAIS
A lista a seguir se refere ao desenho de qualquer tipo de aplicao para a Web e no apenas a aplicaes Forms:
Uma das primeiras atitudes que devemos tomar avaliar os fatores que venham a afetar a performance da
aplicao, tais como freqentes idas ao banco de dados para obteno de informaes (aplicao database) ou
apresentao de grande quantidade de informao ao usurio (cliente aplicao).
Outra preocupao grande deve ser com as imagens apresentadas. Cada vez que uma imagem apresentada (seja
em um Forms ou Report), ela deve ser download do servidor de aplicao (ou extrada do banco de dados).
Se num ambiente cliente-servidor a otimizao das consultas importante, num ambiente web esta preocupao
deve ser ainda maior.
Java Font
Windows Font
X Windows Font
Macintosh Font
Courier
Courier New
adobe-courier
Courier
Dialog
MS Sans Serif
b&h-lucida
Geneva
DialogInput
MS Sans Serif
b&h-lucidatypewriter
Geneva
Helvetica
Arial
adobe-helvetica
Helvetica
Symbol
WingDings
itc-zapfdingbats
Symbol
TimesRoman
adobe-times
Times Roman
Se no houver impacto na utilizao dos objetos, uma recomendao da Oracle que coloquemos objetos
similares (botes com botes, text itens com text itens, etc.) juntos no Object Navigator. A ordenao de objetos
similares faz com que as propriedades enviadas para o cliente para apresentao da aplicao possam utilizar
um algoritmo (message diff-ing) de compresso de dados de forma eficiente diminuindo a quantidade de
informao trafegada e, conseqentemente, melhorando a performance. Da mesma forma, se viermos a modificar
propriedades de diversos itens dinamicamente, devemos ordenar estas modificaes pela propriedade e no
pelo item. Isto significa que, se vamos modificar a propriedade Label dos itens IA, IB e IC e a propriedade
Font_Weight do item IA, devemos, primeiramente, alterar a propriedade Label dos 3 itens e posteriormente a
propriedade Font Weight. Ainda em relao s propriedades temos que, quanto mais similares forem as
propriedades dos itens, mais eficiente se torna o algoritmo message diff-ing. Desta forma sugere-se:
Usarmos os valores padres das propriedades e modificarmos somente aqueles atributos indispensveis ao objeto.
Usarmos Smart Classes para descrevermos grupos de objetos.
Determinarmos a aparncia ideal de apresentao em um determinado nmero de atributos visuais (quanto
menor este nmero, melhor).
Preencher, sempre que possvel a propriedade Prompt em vez de usar um boilerplate de texto.
Reduzir o uso de boilerplates dos tipos arco, crculos e polgonos. Todos os boilerplates so carregados na fase de
inicializao da aplicao (aumentando o seu tempo). Estes, especificamente, tomam mais tempo da carga
inicial sejam eles usados ou no. Os boilerplates comuns (retngulos e linhas) so otimizados, no precisando
de maiores preocupaes.
Realizar a menor quantidade possvel de navegaes. Um Event Bundle enviado ao servidor cada vez que
um evento de navegao termina. Se conseguirmos dimiuir a navegao preenchendo o contedo dos campos com valores defaults, estaremos obtendo um ganho de performance. Outra observao se faz no sentido
de a aplicao encorajar o usurio a, rapidamente, encerrar a aplicao (quando acabar a tarefa desejada), o
que far com que todos os demais eventos associados navegao sejam disparados em conjunto, enviando
um nico Event Bundle.
Devemos tentar reduzir o tempo necessrio para a construo da tela inicial. Para que seja possvel a apresentao
desta tela, todos os objetos tm de ser carregados e inicializados antes de a apresentao ser feita. Desta forma a
recomendao que nesta primeira tela faamos a reduo da quantidade de objetos para o mnimo indispensvel
(por exemplo ttulo, logo, username e password).
A propriedade RAISE ON ENTRY = YES (para Canvas) junto com VISIBLE = NO, pode ser usada para que os objetos
que no forem visveis de imediato no sejam carregados. Isso pode ser especialmente til para canvas do tipo
TAB, onde todos os elementos de todas as pastas so carregados quando esta se torna visvel, independentemente
da pasta que ficar visvel. Se houver uma grande necessidade de diminuio do tempo de carga, uma alternativa
dividir a canvas TAB em diversas canvas Stacked, que so independentes umas das outras.
A utilizao de triggers do tipo When-Validate-Item, se possvel, tambm deve ser reduzida uma vez que ele
processado pelo Form Services. Devemos avaliar o custo x benefcio de substituirmos a funcionalidade default
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1173
No exemplo acima consideramos que os cones estaro em um subdiretrio icones, subordinado ao diretrio onde
se acha o HTML, ou seja, usamos endereamento relativo. Na Listagem 9.06 indicamos, ainda, que os cones tero
a extenso GIF.
Para usarmos endereamento absoluto, devemos preencher o parmetro iconpath com /<nome do diretrio> ou
<URL>/<nome do diretrio>.
O arquivo Registry.dat pode ser modificado diretamente ou podemos criar um novo arquivo (com um outro
nome), especfico por sistema. Para tal, devemos indicar no HTML base qual o nome do arquivo e sua localizao.
O parmetro que indica o nome e localizao do arquivo correspondente o parmetro serverApp.
Se voc tiver muitos arquivos imagem ou cones ou se em todas as telas forem apresentados diversos cones,
podemos reduzir o trfego se agruparmos os arquivos envolvidos em um arquivo .JAR. Desta forma, somente o
download do arquivo .JAR ser necessrio.
Para a criao deste arquivo .JAR, devemos executar o utilitrio jar.exe presente no diretrio c:\oraforms\jdk\bin
no prompt do DOS, preferencialmente no diretrio onde se acham os arquivos que desejamos agrupar. Por exemplo
jar cvf teste.jar splash.git bgnd.gif frame.gif paste.gif criar o arquivo teste.jar contendo todos os arquivos .GIF
mencionados na seqncia.
Posteriormente, deveremos indicar no HTM base que estamos utilizando um arquivo .JAR. Isto deve ser feito com
o uso do parmetro archive cujo valor identificar o arquivo .JAR e o parmetro imageBase cujo valor indicar se
o arquivo .JAR deve ser procurado no DocumentBase directory ou no CodeBase directory. Neste caso a Oracle
determina que utilizemos CodeBase como valor do segundo parmetro, pois, caso no seja informado, o default
DocumentBase ser usado e o arquivo .JAR no ser transferido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1175
EXERCCIOS
9.01) Crie uma aplicao Forms para cadastramento de departamentos. Todos os campos da tabela Depto devem
ser utilizados. O formato da aplicao dever ser Tabular com 5 registros na tela. Inclua barra de rolagem. Esta
aplicao tambm deve acionar um relatrio que apresente todos os departamentos cadastrados. Inclua um boto
que acione o relatrio. Ainda neste item construa o relatrio.
9.02) Acione a aplicao default fornecida pelo Oracle. No realize modificaes no arquivo de configurao.
9.03) Acione a aplicao construda por voc utilizando o Form Services. Realize diferentes testes com relao
aparncia da tela, tamanho de janela, parmetros para a aplicao, etc. Utilize o boto apropriado no Forms
Developer ou siga o passo-a-passo apresentado na resposta deste exerccio.
9.04) Construa um HTML base com um novo layout para apresentao das aplicaes de um sistema.
METODOLOGIA
Apresentao dos componentes do Reports no ambiente de trs camadas.
TCNICA
Utilizao de textos e imagens para compreenso do conceito.
CONSIDERAES INICIAIS
J estudamos anteriormente a execuo de um relatrio atravs do Forms. Esta a forma clssica de uso de relatrios
num ambiente cliente servidor. Num ambiente de trs camadas, no entanto, a Oracle disponibilizou uma forma de
acionarmos um relatrio diretamente de um browser usando uma sintaxe URL. Esta forma de utilizao totalmente
independente do Forms e poderia causar a execuo de um relatrio atravs de uma pgina de HTML.
Os relatrios gerados podem usar formato HTMLCSS (HTML com Cascading Style Sheets) ou PDF (Adobe Portable
Document Format). Uma vantagem adicional desta forma de trabalho que no h necessidade da instalao de
diversos produtos no ambiente cliente.
QUANTO ARQUITETURA
O Oracle Reports Services pode ser configurado de formas diferentes de acordo com a arquitetura que estivermos usando.
Em uma arquitetura Web trabalhamos com 4 componentes ou ambientes: o ambiente cliente, o ambiente servidor
Web, o ambiente do Oracle Reports Services e o ambiente do banco de dados. A quantidade de equipamentos
envolvidos nesta configurao totalmente varivel. Poderemos utilizar todos os componentes em um nico
equipamento (que ser o nosso caso para efeito de teste) ou poderemos distribu-los em mquinas diferentes.
Em uma arquitetura no Web o nmero de componentes diminuiria para 3 pois no teramos a participao do
servidor Web. A diferena bsica entre as duas arquiteturas que nesta no h a participao do browser (no ambiente
cliente), e a solicitao do usurio feita atravs do Oracle Reports Launcher ou da linha de comando do RWCLI60.
Considerando-se os aspectos de configurao, as principais diferenas entre a utilizao de uma arquitetura Web e
uma arquitetura no Web so:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1177
METODOLOGIA
Descrio dos parmetros de configurao.
CUSTOMIZANDO O PRODUTO
Seguiremos, basicamente, os mesmos passos que fizemos anteriormente na configurao do Forms Services. Antes
de iniciarmos as configuraes, propriamente ditas, verificaremos se o servio do Oracle Reports Server est ativo.
Para este arquivo, devemos verificar se no arquivo TNSNAMES.ORA encontraremos o trecho mostrado pela Listagem
9.08 a seguir.
Observe que o nome REPSERVER foi dado por ns no momento da instalao (verifique na Figura 6.10), da mesma
forma que o nmero da porta 1949. O nmero do HOST 127.0.0.1 indica que nossa prpria mquina que
faremos conexo. Se tivssemos utilizado o parmetro NAMES.DEFAULT_DOMAIN no arquivo SQLNET.ORA,
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1179
Diretrio Fsico
Contedo
/cgi-bin
C:\orarep\bin
Como instalamos apenas o Reports Server (e no o IAS), os diretrios relativos aos softwares esto subordinados ao
<Oracle_Home> que escolhemos durante a etapa de instalao (C:\ORAREP). Os diretrios fsicos apresentados,
portanto, se referem a esta escolha. Se estivssemos configurando o Oracle9i IAS usaramos como diretrio fsico o
valor C:\Program Files\Apache Group\Apache\cgi-bin.
Os valores dos parmetros alfanumricos devem ser includos, sempre, entre aspas duplas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1181
ACIONANDO UM RELATRIO
Existem diferentes formas de acionarmos um relatrio utilizando o Reports Services.
A primeira delas utilizando a linha de comandos do RWCLI60. A Figura 9.05 nos mostra como realizar esta
operao. Esta forma de acionamento no utiliza a arquitetura Web, o que significa que a comunicao entre o
usurio final e servidor onde o RepServer est executando deve ser via Net8.
Outra forma de acionamento o uso do Oracle WebDB. O Oracle WebDB component permite a adio de um link
que estabeleceria nossa comunicao com o site Oracle WebDB. Este link estaria associado a uma rotina de um
pacote que conteria informaes sobre a requisio de relatrio. Os usurios autorizados, que fizessem acesso ao
site WebDB, simplesmente fariam um click no link para executar o relatrio. Esta forma de acionamento no ser
estudada neste material pois exigiria um detalhamento do uso do Oracle WebDB.
Outras duas formas de utilizao seriam a execuo da rotina SRW.RUN_REPORT (j nossa conhecida), na qual
poderamos acrescentar o parmetro SERVER para indicar a qual servio desejaramos associar o relatrio, ou o uso
de um ActiveX control (esta forma tambm j foi comentada no uso de ActiveX no Forms), na qual poderamos
no s acionar um relatrio imediatamente como tambm poderamos determinar quando o relatrio deveria ser
acionado. Esta forma de uso ser revista no tpico sobre o Queue Manager mais adiante.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1183
Esta forma de requisio pode ser feita diretamente na linha de comandos do browser, como vemos na Figura 9.06.
Neste exemplo disponibilizamos para o usurio apenas o nome do relatrio (na verdade, como s temos um
relatrio REP901, o mesmo acionado em todos os casos), o tipo de destino e o formato de sada. Poderamos
sofisticar o HTML como desejssemos incluindo diversas outras opes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1185
Aps a conexo, no exemplo feito ao servio RepServer, a tela mostrada na Figura 9.08 nos apresentada. Na barra
de ferramentas encontramos a possibilidade de estabelecer conexo a outro servio (primeira caixa de opes), de
visualizar a lista de tarefas concludas (em destaque) ou a lista de tarefas em execuo (boto seguinte) ou a lista de
tarefas agendadas. Em seguida podemos optar por visualizar apenas as tarefas do usurio atual ou todas as tarefas.
O prximo boto, quando acionado, rel a fila de requisies e refresca as informaes apresentadas.
Podemos modificar algumas das caractersticas do servio (Reports Services) dinamicamente. Para tal devemos
estabelecer conexo como administrador da fila. No menu Opes encontramos a opo Logon do Administrador.
Se tivermos removido o parmetro identifier do arquivo RepServer.ora ou se esta for a primeira vez que utilizamos
o Queue Manager, este utilitrio aceitar e considerar como administrador de fila qualquer usurio vlido do
banco de dados. Posteriormente, se desejarmos, podemos modificar a senha deste usurio (apenas para o Queue
Manager). Quando indicamos o usurio e senha pela primeira vez, o parmetro identifier gravado no arquivo
RepServer.ora de forma criptografada. Em execues posteriores para estabelecermos login como administrador de
fila devemos informar o usurio e senha gravados neste arquivo.
Aps o login como administrador, podemos escolher a opo Propriedades do menu Fila (Figura 9.08) e modificar
os parmetros que aparecem habilitados no fim da pgina: MinEngine e MaxEngine, MaxIdle e CacheSize (Figura
9.09). Quando um destes parmetros modificado, o arquivo RepServer modificado simultaneamente para que,
quando o servio for desativado e reativado, estes novos valores j sejam considerados.
Atravs do Queue Manager podemos, tambm, agendar a execuo de uma tarefa. Para isto, devemos escolher a
opo Novo do menu Tarefa. O Oracle Reporting ActiveX Control acionado, conforme mostrado na Figura 9.10.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1187
Todas as vezes que no valor de um parmetro aparecer a opo InReport indica que o valor ser obtido da especificao deste parmetro dentro
do relatrio que ser executado.
EXERCCIOS
9.05) Baseado no relatrio construdo no Exerccio 9.1, acrescente uma tela de parmetros para que seja informada
a quantidade de cpias do resultado e o tipo de sada desejada pelo usurio. Acione este relatrio usando uma URL.
9.06) Acione os relatrios criados usando um arquivo de HTML.
9.07) Acione o relatrio REP901.REP usando um arquivo de mapeamento e um aquivo HTML.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1189
Nesta primeira tela encontramos a situao geral do Site: seu Estado, endereo de IP, porta e status. Ao selecionarmos,
no quadro esquerda, o item Site da Web padro, do lado direito, ser apresentada a lista de caminhos virtuais
deste Site. Para incluirmos um novo caminho devemos usar o menu Ao -> Novo -> Pasta virtual. Ser acionado
um assistente que nos ajudar na montagem do relacionamento caminho virtual X caminho real. Devemos incluir
todos os caminhos mostrados no quadro presente no tpico: Configurando o Servidor Web. Em adio lista do
quadro devemos criar um caminho virtual com o nome de Forms associado a um diretrio de trabalho, onde
colocaremos os nossos arquivos FMX (no meu caso foi associado D:\FORMSCAP9).
Aps a criao de todos os caminhos virtuais, podemos expandir o n Site da Web padro e visualizar (do lado
esquerdo) o nome dos diretrios virtuais criados. Quando clicamos sobre um desses ns, no quadro direita
encontraremos os arquivos subordinados ao caminho fsico correspondente. Confira!
Com o diretrio virtual Forms selecionado, obtenha a opo Propriedades, usando o boto direito do mouse para
que a tela apresentada na Figura-resposta 9.02B seja apresentada. Confira as opes marcadas e clique, em seguida,
na aba da pasta Documentos. Nesta tela encontramos um campo chamado Ativar documento padro, o qual
marcaremos, e pressionando o boto adicionar poderemos preencher o nome de nosso aplicativo EX901.fmx
(confira na Figura-resposta 9.02C).
O objetivo desta ativao indicarmos o arquivo padro a ser executado quando, no Browser, usarmos o endereo
http://<servidor>/forms, onde forms o nome do nosso diretrio virtual. No precisaremos indicar o nome do
aplicativo a ser executado. Isto muito til pois poderemos indicar o nome da aplicao de abertura do nosso
sistema, para que o usurio estabelea login, etc. Porm, somente esta configurao no suficiente. Temos de
avisar ao servidor Web que programa deve ser usado para executar um arquivo com extenso .FMX.
Para tal retornaremos aba Pasta virtual e pressionaremos o boto Configurao. O dilogo apresentado na
Figura-resposta 9.02D. Neste dilogo faremos o mapeamento do aplicativo, isto , associaremos a extenso.FMX
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1191
Forms60_Output aqui sero gerados os arquivos temporrios referentes aos relatrios que viermos a executar
atravs do Forms. O diretrio atual c:\oraforms\tools\web60\temp. Se voc desejar, este diretrio pode ser
alterado para uma rea onde haja mais espao em disco, pois um diretrio de output.
Forms60_Repformat nesta varivel indicamos o formato do relatrio gerado. Inicialmente usaremos HTML.
Antes de realizarmos nosso primeiro teste, devemos instalar o Jinitiator na mquina-cliente. Esta tarefa poderia ser
feita automaticamente na primeira chamada, mas j que estamos usando uma nica mquina faremos,
manualmente, esta execuo.
Faa um doubleclick no arquivo jnit.exe, presente no diretrio c:\oraforms\jinit. O instalador far a descompactao
inicial de alguns arquivos e, em seguida, iniciar o processo de instalao. Durante este processo, um dos dilogos
apresentados o que est mostrado na Figura-resposta 9.02E onde escolhemos o local (diretrio) para instalao.
Aps esta tela a instalao realizada e, ao trmino, ser feita uma solicitao de fechamento e abertura do browser,
portanto esta ser nossa prxima tarefa.
Para acompanharmos o startup do Runform, a participao do Listener e checarmos as informaes sobre nossa
instalao do Form Services, faremos a ativao do log no servio. Para isto devemos executar o aplicativo Services
(iniciar -> Configuraes -> Painel de Controle -> Ferramentas Administrativas -> Servios).
Selecionaremos a linha correspondente ao Oracle Forms Server e abriremos a tela de propriedades. Para que possamos
preencher o campo Parmetros de inicializao, o servio deve estar inativo. Clique, portanto, no boto Parar. Em
seguida preenchemos o campo Parmetros de inicializao com o texto log=d:\formscap9\fserv.log (ou outro
diretrio e nome de log desejado) e iniciamos o servio novamente. Aps esta etapa j podemos achar o arquivo de
Abra seu browser e digite o texto http://<nome da sua mquina>/forms. Se tudo ocorrer conforme o planejado, a
Applet deve ser acionada e a aplicao Forms de nome test.fmx ser acionada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1193
Com a parametrizao acima, o resultado apresentado na execuo da aplicao est presente na Figura-resposta
9.03A a seguir.
A cada modificao que fizermos no arquivo formsweb.cfg, precisaremos que um novo HTML (incorporando estas modificaes) seja gerado. Desta
forma, para garantir que esta ao seja efetuada devemos pressionar o boto Atualizar na barra de ferramentas do Browser. Se voc tiver dvidas
quanto ao arquivo em execuo utilize no menu Exibir a opo Cdigo-Fonte e confira se as modificaes foram incorporadas ao HTML base.
Partindo deste arquivo de configurao que salvaremos como formsweb.v01 proporemos algumas modificaes
que afetem o layout para que voc possa estabelecer aquele mais adequado sua instalao. Nas listagens a seguir
incluiremos apenas as linhas modificadas.
Nesta verso testaremos a apresentao de um Splashscreen (basta retirar o valor no do parmetro), que nada mais
que a apresentao de uma imagem inicial enquanto a tela est sendo preparada. Esta imagem no pode ser grande
uma vez que a inteno apresentar uma distrao para o usurio enquanto aguarda a montagem da primeira
pgina do sistema. Inclumos, ainda, a apresentao da janela da aplicao em um frame (janela) em separado.
Os arquivos .GIF contendo as imagens esto presentes no diretrio c:\oraforms\forms60\java\oracle\ forms\icons.
Neste exemplo utilizamos os arquivos defaults fornecidos que so splash.gif (para splash screen) e bgnd.gif (para
background). No entanto podemos escolher outros Gifs, desde que presentes neste diretrio. A modificao do
diretrio se d no arquivo registry.dat, que veremos em outro teste.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1195
Nesta verso atribumos valores tag Body da janela independente aberta para a aplicao (gerada pelo parmetro
separateFrame=true). Determinamos que o tamanho desta nova janela seja 800 pixels por 550 pixels (este tamanho
foi diminudo em funo da rea das duas barras do Windows). Modificamos, tambm, a aparncia (lookandFeel)
para Generic e o esquema de cores (colorScheme para Khaki).
Com estes exemplos voc est apto a fazer diversos outros testes para determinar a aparncia mais adequada sua instalao.
9.04) Construa um HTML base com um novo layout para apresentao das aplicaes de um sistema.
Para realizarmos esta tarefa basta que utilizemos no menu do Explorer a opo Exibir -> Cdigo-Fonte, para que
seja apresentado o fonte da pgina em execuo (esta ao deve ser feita na janela em que executamos http://
<mquina>:<porta>/forms). Este arquivo pode ser salvo no diretrio desejado. Neste exemplo o arquivo foi salvo
no diretrio onde se acham os executveis do Forms, ou seja d:\formsCap9 com o nome de Forms.htm.
A salva neste diretrio tem um efeito prtico. Podemos modificar o arquivo default a ser executado (na configurao
do servidor Web) para este arquivo HTM, de tal forma que nosso usurio acione diretamente o HTM previamente
preparado (apresentado na Listagem-resposta 9.04A).
>
>
>
>
>
>
>
>
>
>
>
>
NAME=serverPort VALUE=9000">
NAME=serverHost VALUE=>
NAME=connectMode VALUE=Socket>
NAME=serverArgs
VALUE=module=EX901.fmx userid=DESENV/DESENV@DESENV >
NAME=separateFrame VALUE=true>
NAME=splashScreen VALUE=>
NAME=background VALUE=no>
NAME=lookAndFeel VALUE=Generic>
NAME=colorScheme VALUE=Khaki>
Observe que neste arquivo no existem mais variveis com %, os valores so atribudos diretamente aos parmetros
da Applet.
Neste exemplo aproveitamos, tambm, para alterar o arquivo Registry.dat. Salvamos este arquivo no diretrio d:\formsCap9
com o nome de Cap9.dat. Voc poder observar na Listagem-resposta 9.04A que o parmetro serverApp na tag PARAM
est preenchido com /forms/Cap9, indicando que o arquivo Cap9.dat est localizado no diretrio virtual /forms.
Dentro deste arquivo indicamos a localizao dos arquivos de cones e imagens. Uma vez que desejamos criar
arquivos de cones e imagens especficos por sistema, criamos um subdiretrio de nome icons subordinado ao
diretrio d:\formsCap9 e copiamos aqueles cones (com extenso .GIF) que desejvamos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1197
No trecho apresentado na Listagem 9.04B, fizemos algumas modificaes no arquivo. Estas modificaes indicam
que a fonte default Helvetica e que qualquer outra fonte encontrada no Forms ser sempre traduzida (em Java)
para Helvetica. Encontramos tambm a indicao da localizao dos cones e imagens, ou seja, /forms/icons,
indicando que abaixo do diretrio virtual /forms foi includo um diretrio icons para armazenamento dos
cones. Poderamos, tambm, ter definido um outro diretrio virtual com caminho fsico totalmente independente
da localizao dos arquivos .FMX. Observe que a extenso escolhida para os cones foi gif. Como teste, o boto que
aciona o relatrio pode ter sua propriedade icnico modificada para Sim e a propriedade nome do arquivo de
cones preenchida com o nome de um arquivo .GIF includo no diretrio criado.
Com este exerccio encerramos os testes relativos ao uso do Forms Server. Voc poder, ainda, realizar diversas
combinaes e modificaes no conjunto de arquivos estudados para chegar melhor equao para sua instalao.
9.05) Baseado no relatrio construdo no Exerccio 9.1, acrescente uma tela de parmetros para que seja informada
a quantidade de cpias do resultado e o tipo de sada desejada pelo usurio. Acione este relatrio usando uma URL.
Como primeira etapa devemos abrir o arquivo REP901.RDF e salv-lo como REP905. Em seguida devemos criar
uma tela de parmetros, usando o assistente, para os parmetros de sistema DESFORMAT e COPIES.
Em seguida, a fim de testarmos a possibilidade de usarmos HTML na tela de parmetros, faremos as seguintes modificaes:
O boilerplate que contm o texto Parmetros do Relatrio ser substitudo pelo texto apresentado na Listagemresposta 9.05A. As propriedades de Formato podem ser modificadas para Estilo da Fonte igual a Normal e tamanho
8 (use a opo Fonte do menu Formatar).
Na tela de propriedades deste boilerplate, modificaremos a propriedade Contm Tags HTML para Sim.
Em seguida, o boilerplate que contm o texto Informe valores para os parmetros ser substitudo pelo texto
apresentado na Listagem-resposta 9.05B. As propriedades de Formato tambm podem ser modificadas para Estilo
da Fonte igual a Normal e tamanho 8 (use a opo Fonte do menu Formatar).
Na tela de propriedades deste boilerplate, modificaremos a propriedade Contm Tags HTML para Sim.
Para os ttulos de campo Formato de Destino e Nmero de Cpias substituiremos, respectivamente, pelos
textos mostrados na Listagem-resposta 9.05C.
Como ltimo passo devemos compilar e gerar o executvel do relatrio, tomando o cuidado de armazen-lo em
nosso diretrio de trabalho dos relatrios (D:\REPCAP9).
Ao requisitarmos a execuo deste relatrio receberemos a tela apresentada na Figura-resposta 9.05A. No se esquea
de indicar o parmetro PARAMFORM=HTML para que a tela de parmetros seja mostrada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1199
Neste arquivo inclumos trs opes para executarmos o relatrio REP901 e duas para executarmos o relatrio
REP905. Observe que usamos o parmetro %D, indicando que devem ser solicitados ao usurio o userid, password
e string de conexo para todas as execues do relatrio REP901. Na chamada do relatrio REP905 usamos o
parmetro P_FORMATO e no o parmetro DESFORMAT na chave N05. Isto foi necessrio pois o relatrio esperava
receber este parmetro. Seu valor , internamente, atribudo ao parmetro DESFORMAT. Teste!
HTML</A><BR>
PDF</A><BR>
HTMLCSS</A><BR>
Parmetros</A><BR>
Parmetros</A><BR>
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1201
Parte III
REFERNCIA
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1203
Captulo 10
GUIA DE REFERNCIA DO SQL
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1205
ALTER SESSION
Este comando possui um amplo espectro de modificaes que pode realizar. Veremos algumas dessas modificaes
e suas conseqncias.
COMMIT IN PROCEDURE
Habilita ou desabilita (Enable ou Disable) a execuo do comando Commit (e Rollback) em stored procedures
ou functions.
Quando um comando Commit ou Rollback executado em uma sesso, isso afeta todos os comandos executados
na sesso. Quando desejamos garantir que as rotinas que executamos na sesso no efetivem a transao, podemos
utilizar esse comando.
SQL_TRACE
Habilita ou desabilita (True ou False) a facilidade de trace para a sesso.
Essa opo aparentemente no muda o comportamento da sesso, porm passa a ser gerado em disco (no ambiente
servidor) um arquivo contendo informaes sobre a execuo de cada um dos comandos de DML ocorridos durante a sesso (ou at que essa opo seja desabilitada). Isto ajuda o DBA a verificar a existncia de comandos com
problemas de performance.
FLAGGER
Indica que os comandos de SQL executados na sesso devero passar pelo crivo de validao sinttica de acordo
com o padro Ansi (Entry, Intermediate, Full ou Off).
NLS_LANGUAGE
A opo Nls_Language mais geral, pois modifica simultaneamente as seguintes caractersticas da sesso:
A linguagem usada para as mensagens do Oracle.
A linguagem usada para nomes de dias, nomes de meses e suas respectivas abreviaes.
Smbolos equivalentes usados na linguagem para A.M., P.M., A.D. e B.C.
Seqncia de ordenao dos caracteres (Group By utiliza Binary, a menos que especifiquemos Order By).
Direo de impresso.
Strings de resposta afirmativa (Yes / Sim) ou negativa (No / No).
A tabela a seguir apresenta a lista de linguagens vlidas para o Oracle9i. As linguagens listadas com (*) indicam
aquelas para as quais as mensagens de erro do Oracle foram traduzidas.
Tabela 10.01 Linguagens
American
Arabic (*)
Assamese
Bangla
Bengali
Bulgarian
Canadian French
Catalan (*)
Croatian
Czech (*)
Danish (*)
Dutch (*)
Egyptian
English
Estonian
Finnish (*)
French (*)
German (*)
German Din
Greek (*)
Gujarati
Hebrew (*)
Hindi
Hungarian (*)
Icelandic
Indonesian
continua
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1207
Japanese (*)
Kannada
Korean (*)
Latvian
Lithuanian
Malay
Malayalam
Marathi
Mexican Spanish
Norwegian (*)
Oriya
Polish (*)
Portuguese (*)
Punjabi
Romanian (*)
Russian (*)
Slovak (*)
Slovenian
Spanish (*)
Swedish (*)
Tamil
Teluger
Thai
Turkish (*)
Ukrainian
Vietnamese
NLS_TERRITORY
O parmetro Nls_Territory tambm afeta um conjunto de caractersticas da sesso:
Formato de data default.
Indicao de decimal e separao de milhar.
Smbolo financeiro ISO.
Smbolo financeiro local.
Smbolo financeiro Dual default (segunda moeda, por exemplo: Euro).
Primeiro dia da semana para o formato D.
Smbolos para crdito e dbito.
O formato L mostra o smbolo financeiro local, o smbolo C mostra o smbolo financeiro ISO e o formato U mostra
o Dual.
A tabela a seguir apresenta a lista de territrios suportados pelo Oracle9i.
Tabela 10.02 Territrios
Algeria
America
Australia
Austria
Bahrain
Bangladesh
Belgium
Brazil
Bulgaria
Canada
Catalonia
Chile
China
Cis
Colombia
Costa Rica
Croatia
Cyprus
Czech Republic
Denmark
Djibouti
Egypt
El Salvador
Estonia
Finland
France
Guatemala
Germany
Greece
Hong Kong
Hungary
Iceland
India
continua
Iraq
Ireland
Israel
Italy
Japan
Jordan
Kazakhstan
Korea
Kuwait
Latvia
Lebanon
Libya
Lithuania
Luxembourg
Macedonia
Malaysia
Mauritania
Mexico
Morocco
New Zealand
Norway
Oman
Panama
Peru
Poland
Portugal
Puerto Rico
Qatar
Romania
Saudi Arabia
Singapore
Slovakia
Slovenia
Somalia
South Africa
Spain
Sudan
Sweden
Switzerland
Syria
Taiwan
Thailand
The Netherlands
Tunisia
Turkey
Ukraine
United Kingdom
Uzbekistan
Venezuela
Vietnam
Yemen
Yugoslavia
NLS_DATE_FORMAT
O parmetro Nls_Date_Format especifica explicitamente um novo formato default para datas, a ser usado nas
funes TO_CHAR e TO_DATE. O valor default para este parmetro determinado pelo Nls_Territory.
NLS_DATE_LANGUAGE
O parmetro Nls_Date_Language determina a linguagem a ser usada para os nomes de dias e meses e suas respectivas
abreviaturas. No h necessidade de arquivo especfico, e portanto podemos efetuar a alterao para qualquer linguagem
vlida (para linguagens que usem caracteres multibyte, h necessidade de o terminal suportar este tipo de cdigo).
NLS_NUMERIC_CHARACTERS
O parmetro Nls_Numeric_Characters explicitamente especifica o caracter a ser usado como separador decimal e o
caracter a ser usado como separador de milhar. Esses caracteres devem ser informados na ordem <d> (decimal) e
<g> (grupo, milhar). Os valores devem ser diferentes, no podem ser numricos nem um dos seguintes caracteres:
+, -, <, >.
NLS_CURRENCY / NLS_ISO_CURRENCY
O parmetro Nls_Currency permite que faamos a modificao do smbolo financeiro local e o parmetro
Nls_Iso_Currency permite que determinemos o territrio de onde o smbolo ISO ser usado. O valor default para
este parmetro obtido dp Nls_Territory.
Observe que s podemos modificar diretamente o smbolo local. O smbolo ISO determinado indiretamente pelo territrio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1209
NLS_DUAL_CURRENCY
Suporte a dupla moeda (segunda moeda do pas, por exemplo: Euro). Para utilizao em uma mscara de formato,
foi implementado o smbolo U.
NLS_SORT
O parmetro Nls_Sort altera a seqncia na qual o Oracle ordena os caracteres.
A tabela a seguir apresenta a lista de linguagens vlidas para o parmetro Nls_Sort.
Tabela 10.03 Linguagens para Nls_Sort
Arabic
Arabic_Abj_Match
Arabic_Abj_Sort
Arabic_Match
Ascii7
Bengali
Big5
Binary
Bulgarian
Canadian French
Catalan
Croatian
Czech
Czech_Punctution
Danish
Dutch
Ebcdic
Eec_Euro
Eec_Europa3
Estonian
Finnish
French
German
German_Din
GBK
Greek
Hebrew
HKSCS
Hungarian
Icelandic
Indonesian
Italian
Japanese
Latin
Latvian
Lithuanian
Malay
Norwegian
Polish
Punctuation
Romanian
Russian
Slovak
Slovenian
Spanish
Swedish
Swiss
Thai_Dictionary
Thai_Telephone
Turkish
Ukrainian
Unicode_Binary
Vietnamese
West_European
Xcatalan
Xcroatian
Xczech
Xczech_Punctuation
Xdanish
Xdutch
Xfrench
Xgerman
Xgerman_Din
Xhungarian
Xpunctuation
Xslovak
Xslovenian
Xspanish
Xswiss
Xturkish
Xwest_European
NLS_COMP
Utilizao de caractersticas da lngua para efeito de comparao. Normalmente, a comparao na clusula Where
binria. Para que a comparao obedecesse s caractersticas especficas da linguagem era necessrio o uso da
funo NLSSORT. Essa nova opo (utilizada em nvel de sesso Alter Session) indica que as comparaes devem
obedecer s caractersticas da sesso do usurio. Desta forma, se na sesso for feita alterao do parmetro NLS_SORT
NLS_CALENDAR
O parmetro Nls_Calendar especifica um novo calendrio para a sesso. Quando modificamos um calendrio, as
seguintes informaes so modificadas: o primeiro dia da semana, regra para a primeira semana do ano (por
exemplo se dia 1 do ano cai numa sexta-feira, a primeira semana a que comea no dia 3 domingo), nmero de
dia do ano, primeiro dia da Era (o que afetar o ano atual).
A tabela a seguir apresenta a lista de calendrios vlidos para o Oracle9i.
Tabela 10.04 Calendrios
Japanese Imperial
ROC Official
Thai Buddha
Persian
Arabic Hijrah
English Hijrah
Gregorian
NLS_LENGTH_SEMANTICS
Permite a criao de colunas CHAR ou VARCHAR2 usando o comprimento da coluna com semntica CHAR ou
BYTE, isto , podemos informar o comprimento em CHAR ou BYTE. As colunas existentes no so afetadas. O
valor default BYTE.
NLS_NCHAR_CONV_EXCP
Indica se a perda de dados durante uma converso explcita ou implcita de tipo de dado deve ou no reportar um erro.
NLS_TIMESTAMP_FORMAT
Determina o format default de Timestamp a ser usado com as funes TO_CHAR e TO_TIMESTAMP.
NLS_TIMESTAMP_TZ_FORMAT
Determina o format default de Timestamp zonado a ser usado com as funes TO_CHAR e TO_TIMESTAMP_TZ.
TIME_ZONE
Determina a forma de apresentao e a zona (meridiano) para a sesso corrente. Este parmetro est associado
sesso (no um parmetro de inicializao).
Ao usarmos o formato +/- hh:mm, indicamos que o valor dever ser fornecido em relao ao meridiano de
Greenwich. Os valores vlidos variam de 12:00 a + 14:00.
Se especificarmos LOCAL, ser usado o valor estabelecido quando a sesso teve incio. Se especificarmos
DBTIMEZONE, desejamos que o valor seja igualado especificao do banco de dados.
Na ltima opo informamos um nome de regio. Para sabermos os nomes de regies existentes devemos consultar a
coluna TZNAME da view V$TIMEZONE_NAMES. Neste caso a funo SESSIONTIMEZONE retornar um nome de regio.
CURRENT_SCHEMA
Possibilidade de alterao do schema corrente sem alterao do usurio corrente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1211
CONSTRAINTS
Este comando tem a finalidade de modificar o momento de verificao das restries de integridade.
Com a opo Immediate, indicamos que as condies especificadas por uma Constraint Deferrable sero verificadas
imediatamente aps cada comando de DML (similar ao Set Constraints All Immediate marcado no incio de cada
transao). A opo Deferred indica que as condies especificadas por uma Constraint Deferrable sero verificadas
quando a transao for Committed (similar ao Set Constraints All Deferred marcado no incio de cada transao).
Finalmente, a opo Default restaura todas as Constraints, no incio de cada transao, ao seu estado inicial
(Deferred ou Immediate).
COMMIT
O Oracle possui dois comandos para que indiquemos ao banco de dados o momento em que conclumos a transao
da aplicao. A indicao de que a transao deve ser efetivada feita com o comando Commit e de que a transao
deve ser desmanchada feita com o comando Rollback.
A clusula Work mantida apenas para compatibilidade com o SQL padro. Commit e Commit Work so
equivalentes. A clusula Comment faz com que um comentrio (de at 255 bytes) seja associado com a transao
corrente. Se a transao ficar pendente este comentrio gravado no dicionrio de dados (view DBA_2PC_PENDING).
A clusula Force se aplica a uma transao distribuda em que foramos que o Commit seja realizado.
At que uma transao seja encerrada e efetivada com o uso do comando Commit, nenhuma das alteraes feitas
por ela sobre a base de dados fica visvel por qualquer outra sesso que estabelea conexo com o banco de dados,
qualquer que seja o usurio conectado.
Isso significa que as linhas modificadas por uma transao ficam bloqueadas, impedidas de uso por qualquer
usurio do banco de dados, at que a transao seja concluda. Este mecanismo de bloqueio chama-se Lock. Esse
mecanismo torna as transaes independentes uma vez que, estando o acesso para atualizao impedido, no
corremos o risco de tomar decises em relao a modificaes ainda pendentes, no efetivadas.
Aps a execuo do Commit e conseqente efetivao da transao, podemos estar seguros de que as modificaes
foram refletidas no banco de dados e no mais podero ser desfeitas.
Uma transao se inicia quando o primeiro comando de SQL DML encontrado no programa ou aps um Commit ou Rollback.
Uma transao termina quando:
Executamos um Commit ou Rollback.
Para transaes terminadas normalmente em um programa Oracle Precompiler, no h efetivao da transao, o compilador no monta um comando de
Commit. Neste caso, o Oracle far um Rollback. Quando trabalhamos com aplicativos ou utilitrios da Oracle e a transao termina normalmente, o
utilitrio ou aplicativo envia um Commit para o banco de dados. No caso de falha, envia um Rollback.
recomendao da Oracle que o usurio explicitamente informe ao banco de dados qual a ao desejada tambm para a ltima transao da
aplicao, antes de encerrar a conexo com o banco de dados.
Como recomendao adicional, temos que um programa que altere o contedo de uma ou mais linhas em uma ou mais tabelas deve periodicamente
fixar essas modificaes (Commit). Isso deve ocorrer, pois cada uma das linhas modificadas fica bloqueada, impedida de ser atualizada por outra
aplicao (Locked). Desta forma, quanto mais linhas Locked uma aplicao mantiver, menor a possibilidade de concorrncia e maior a necessidade
de controle por parte do Oracle e, portanto, maior gasto de CPU.
A palavra Work mantida para compatibilidade com o SQL padro. Os comandos Commit e Commit Work so equivalentes.
CONCLUSES
Uma leitura nunca interrompida por um processo de atualizao, ela sempre prossegue.
Uma leitura no bloqueia os dados. No faz Lock.
Uma leitura enxerga o dado com a imagem que ele tinha antes de a leitura se iniciar. Ela v todos os dados
Commited antes do incio da consulta e v todas as modificaes feitas por sua prpria transao.
Aps um comando Commit, todos os bloqueios (Locks) so liberados.
O comando Commit possui sintaxe especfica para forar ou comentar a execuo de transaes distribudas, que no sero vistas neste material.
<CONDITION>
Uma condio uma combinao de uma ou mais expresses e operadores lgicos (And, Or, Not) que determinam
se uma ao ir ou no ocorrer, dependendo do resultado True ou False.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1213
<CONSTRAINTS>
A clasula <constraint> utilizada nos comandos Create Table e Alter Table para estabelecer restries sobre o
armazenamento de dados no banco de dados. Sua finalidade garantir regras que garantam a integridade lgica do
negcio que o usurio est modelando.
Na sintaxe encontramos as seguintes especificaes:
Onde:
Constraint atribui um nome restrio de integridade (constraint). Caso no seja usada, o Oracle atribui um
nome no formato SYS_Cn.
Unique determina que a coluna ou combinao de colunas no poder ter o mesmo valor em duas linhas da
tabela. No entanto, uma coluna com a restrio Unique pode conter NULL.
Primary Key designa uma coluna ou combinao de colunas de uma tabela como PK. Uma PK composta
formada de uma combinao de colunas. Para que esta definio seja possvel, devemos usar table_constraint.
Foreign Key determina uma coluna ou combinao de colunas como FK em nvel de tabela. Podemos usar esta
sintaxe para criar uma FK composta. A integridade referencial considerada satisfeita se todos os valores da FK forem
compatveis com todos os valores da PK ou UK correspondente ou quando o valor de alguma das colunas da FK null.
References determina a coluna corrente (ou atributo) como FK e identifica a tabela-pai e a coluna ou combinao
de coluna que forma a chave referenciada. Se identificarmos somente a tabela-pai e omitirmos a coluna, a FK,
automaticamente, faz referncia PK da tabela-pai. As colunas correspondentes da FK e da RK (referenced key)
devem combinar em nmero e tipo. Para colunas REF a referncia deve ser a uma Object Table ou View.
On Delete determina como o Oracle, automaticamente, mantm a integridade referencial se tentarmos remover a PK
ou UK referenciada. Se omitirmos esta clusula, o ORACLE no permite que venhamos a remover os valores da RK na
tabela-pai se houver linhas associadas na tabela-filha.
A opo Cascade indica que o Oracle deve remover as FKs dependentes.
A opo Set Null indica que o Oracle deve converter os valores das FKs dependentes em null.
Check especifica uma condio que cada linha na tabela deve satisfazer. Para que a condio seja considerada
satisfeita, a expresso deve retornar true ou unknown (quando o valor null).
Deferrable indica que a validao da restrio pode ser adiada at o fim da transao atravs do uso do
comando Set Constraint.
Not Deferrable indica que esta restrio deve ser verificada ao fim de cada comando DML. Esta a opo default.
Initially Immediate indica que, a princpio, o default verificar esta restrio ao fim de cada comando de
DML. Esta a opo default.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1215
CREATE DIRECTORY
Este comando cria um objeto diretrio no banco de dados e o associa a um diretrio existente no sistema operacional.
Esse objeto ser usado para indicao do diretrio de armazenamento de arquivos associados s colunas do tipo Bfile.
CREATE SEQUENCE
Seqncias so objetos atualizados pelo Oracle Server com o objetivo de fornecer um nmero seqencial. Esse
nmero pode ser usado para a gerao de primary keys em tabelas. Quando no especificamos nenhum parmetro,
o valor inicial 1, incrementado de 1 e sem limite superior.
Start With Especifica o primeiro nmero de seqncia a ser gerado.
Increment By Especifica o intervalo entre os nmeros gerados. Pode ser negativo, mas no pode ser zero.
MaxValue / NoMaxvalue Determina o maior valor gerado para nmeros seqenciais crescentes ou valor inicial
default para nmeros seqenciais decrescentes.
MinValue / NoMinvalue Determina o menor valor gerado para nmeros seqenciais decrescentes ou valor
inicial default para nmeros seqenciais crescentes.
Cycle / NoCycle Indica que a gerao de nmeros continuar aps a seqncia ter atingido seu valor mximo
(ou mnimo, para seqncias decrescentes). O prximo nmero a ser gerado ser o valor mnimo para seqncias
crescentes e o valor mximo para seqncias decrescentes.
Cache / NoCache Especifica uma quantidade de nmeros que o Oracle pr-aloca e mantm em memria para
acesso mais rpido.
Order / NoOrder Garante que a numerao de seqncia fornecida em ordem de requisio. Esta clusula pode ser
til se estivermos utilizando o nmero de seqncia para determinar a ordem de ocorrncia dos elementos gravados.
De um modo geral, a utilizao mais comum para gerao de PK e a ordem de requisio no importante. A
utilizao desta clusula somente causa diferena em ambientes com mais de uma instncia em paralelo.
Existe um risco potencial de perda de numerao seqencial em caso de falha no sistema, em que a memria
perdida, e quando ocorre uma falha de programa e desmanchamos a transao sem, efetivamente, utilizar os
nmeros seqenciais solicitados. O sequence no volta a disponibilizar os nmeros perdidos, pois no tem controle
sobre o uso dado seqncia. Esta situao agravada com o uso de Cache.
CREATE TYPE
O comando Create Type cria um tipo Object, Varray ou Nested Table que pode ser usado na declarao de outros
tipos ou de uma tabela.
As seguintes clusulas se acham presentes na Sintaxe 10.07:
As Object Cria um tipo objeto. As variveis que formam a estrutura so chamadas de atributos. Os subprogramas
que definem as aes so chamados de mtodos.
As Table Cria um tipo Nested Table referente ao tipo de dado especificado.
As Varray (<limite>) Cria um tipo Varray de elementos ordenados, todos do mesmo tipo de dado. A especificao
do <limite> obrigatria. O tipo de dado de um Varray pode ser um escalar, um Ref, um tipo objeto (inclusive
contendo um atributo Varray). O tipo de dado de um Varray no pode ser um tipo objeto com uma Nested
Table, um tipo Varray ou um tipo Table.
Ref <tipo objeto> Associa uma instncia de um objeto-origem a uma instncia de um objeto-destino (no
integridade referencial). Um Ref identifica e localiza (aponta) o objeto especfico.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1217
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1219
CREATE VIEW
Uma view corresponde a um comando Select armazenado no banco de dados associado a um nome.
Uma view relacional visualizada pelo usurio como tabela. Na verdade, no so tabelas capazes de armazenar
dados. Fazem referncia a uma ou mais tabelas, outras views ou uma combinao de tabelas e views. Correspondem
a um comando Select armazenado na base de dados, que obtido quando realizamos uma operao de DML
fazendo referncia view. Adicionalmente, permitem a modificao do nome das colunas das tabelas originrias
para nomes mais amigveis.
As Views Objeto correspondem a tabelas objeto virtuais. Essas views podem ser criadas a partir de tabelas e views
relacionais simulando tabelas objeto. Essa forma de utilizao permite a criao de um ambiente de transio entre
as tabelas relacionais e as tabelas objeto. As aplicaes j escritas continuam vendo o ambiente apenas como
relacional. As novas aplicaes j podem considerar a existncia de objetos utilizando, no entanto, o mesmo
conjunto de tabelas.
As views possuem uma grande utilizao em um banco de dados: Podemos armazenar queries complexas que
sejam muito utilizadas; podemos armazenar queries que contenham restries, alterando o acesso aos dados atravs
apenas das views no lugar das tabelas bsicas, podemos armazenar queries que contenham clculos; colunas
constantes que decodifiquem a forma real como a informao est armazenada e, ainda, simular tabelas objeto.
Quando realizamos uma consulta utilizando na clusula From o nome da view, o Oracle junta as restries existentes
nos dois Selects e realiza a consulta tabela bsica (pois nela que esto armazenados os dados).
Uma view pode ser usada tanto para Select quanto para Insert, Update ou Delete.
Na sintaxe do comando, so apresentadas as seguintes clusulas:
With Check Option Para garantir que a restrio estabelecida para leituras tambm seja verificada nas incluses,
alteraes e excluses.
<DATATYPES>
Cada valor manipulado pelo Oracle tem um Datatype que determina as propriedades do valor (ou elemento). Para
o Oracle9i os datatypes esto subdivididos em quatro categorias: Oracle Built-in Datatypes, Ansi, DB2 e SQL/DS
Datatypes, User-Defined Types e Oracle Suplied Types.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1221
DELETE
O comando Delete o responsvel pela remoo de linhas (ou instncias de objetos) cadastradas no banco de dados.
A clusula Where a responsvel por determinar que linhas podero ser removidas. Caso essa clusula no seja
informada, o comando tentar remover todas as linhas da tabela informada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1223
FUNES ESCALARES
Funes so programas que realizam determinadas aes, podem receber parmetros e retornam pelo menos
um resultado.
As funes de que trataremos neste item so as escalares. Uma funo dita escalar quando se aplica a um valor (e
no a um conjunto, como as funes de grupo). Podem tambm ser chamadas de funes de linha pois so
executadas uma vez para cada linha, retornada da query por exemplo.
Dentre as funes predefinidas pelo SQL do Oracle9i, o maior conjunto se refere s funes escalares. Essas built-ins se
aplicam (s) coluna(s) de uma nica linha, desta forma produzindo um resultado por linha.
Podemos subdividir esse grupo de funes de acordo com o tipo de parmetro e resultado gerado, da seguinte forma:
Numricas So aquelas que recebem parmetros numricos e geram resultados numricos. Podem ser
subdivididas em Trigonomtricas e Numricas Simples.
Alfanumricas Geram resultados alfanumricos. Recebem parmetros alfanumricos e (algumas) numricos.
Alfanumricas que retornam Valores Numricos Recebem parmetros alfanumricos e geram resultados numricos.
Datas Realizam a manipulao de datas.
Converso Realizam converso de tipo.
Outras Caractersticas diversas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1225
NUMRICAS SIMPLES
Recebem parmetros numricos e geram resultados numricos. Foram, para efeito de sintaxe, grupadas de acordo
com a quantidade de parmetros recebidos.
TRIGONOMTRICAS
Recebem parmetros numricos e geram resultados numricos. Esto relacionadas a clculos matemticos de
trigonometria. Levam em considerao que o crculo trigonomtrico tem o tamanho de 1. Os argumentos relativos
a ngulos so fornecidos em radianos.
ALFANUMRICAS
Recebem parmetros alfanumricos e/ou numricos e geram resultados alfanumricos.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parmetros recebidos.
Nesta verso 9i encontramos uma nova funo chamada Treat que permite que modifiquemos o tipo declarado de
uma expresso. Suponhamos, portanto, que a <expresso> seja do tipo X; desta forma, <type> poder ser um
supertipo ou um subtipo de X, porm tem de estar na mesma hierarquia. Caso isso no seja respeitado, o retorno
da funo Null. Da mesma forma, se a <expresso> uma referncia (REF) ao tipo X; o parmetro <type> dever
ser um supertipo ou subtipo de X, caso contrrio o retorno da funo ser Null.
Voc poder observar que Substr ganhou trs novas variaes. A funo Substr original considera o parmetro
<tamanho> fornecido em caracteres, SubstrB em bytes, SubstrC em caracteres Unicode Complete, Substr2 em
UCS2 Codepoints e Substr4 em UCS4 Codepoints.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1227
Neste grupo as funes Length e Instr tambm ganharam variaes para Bytes, Unicode Complete, UCS2 Codepoints
e UCS4 Codepoints.
DATAS
Realizam manipulao de datas.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parmetros recebidos.
CONVERSO
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1229
OUTRAS
Neste grupo, veremos algumas funes que no se enquadram na classificao anterior.
Neste grupo tambm foram includas novas funes na verso 9i, dentre elas encontramos funes para tratamento de
Null tais como Coalesce, Nullif e NVL2, rotinas para detalhamento do caminho de uma querie hierrquica
(Sys_Connect_By_Path), rotinas para manipulao de documentos XML e gerao de URL.
FUNES DE GRUPO
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1231
FUNES ANALTICAS
As funes analticas calculam um valor agregado baseado em um grupo de linhas. Elas diferem das funes de
agregao vistas anteriormente pelo fato de poderem retornar diversas linhas para cada grupo. O grupo de linhas
chamado de Window e definido por uma clusula analtica.
As funes de grupo que possuem uma variao analtica no foram repetidas na sintaxe acima, excetuando-se os
casos em que ocorre diferena sinttica.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1233
GRANT
O propsito do comando Grant ceder privilgios. Temos dois tipos de privilgios: sobre os objetos (que deve ser
cedido pelos usurios donos dos objetos) e de sistema (cedido pelo DBA), que autorizam determinadas aes dos
usurios no banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1235
INSERT
O comando Insert tem a finalidade de incluir linhas (ou instncias de objetos) em tabelas do banco de dados.
MERGE
O comando tem a funo de obter linhas de uma determinada tabela para atualizar ou incluir linhas em
outra tabela.
Como restrio temos que no podemos atualizar mltiplas vezes a mesma linha da tabela destino em um mesmo
comando Merge.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1237
<RETURNING>
Em algumas situaes, pode ser interessante obter informaes da linha ou linhas alteradas, includas ou excludas,
tais como dados das colunas, Rowid ou Refs. A clusula Returning se aplica aos comandos Insert, Update e Delete.
Quando o retorno se refere a uma nica linha, os valores podem ser armazenados em variveis. Quando so
retornadas informaes de diversas linhas, o resultado deve ser armazenado em um Bind Array.
Tanto os valores quanto as variveis so separados por vrgulas.
BULK COLLECT
A opo Bulk Collect indica SQL Engine para preparar toda a coleo de sada (Bulk Bind) antes de retorn-la para
a PL/SQL Engine.
REVOKE
O comando Revoke retira um privilgio previamente fornecido.
Da mesma forma que o Grant, o comando Revoke se refere a privilgios de sistema e privilgios para os objetos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1239
ROLLBACK
O comando Rollback tem a finalidade de concluir uma transao desmanchando todas as modificaes efetuadas
desde o ltimo Savepoint ou Commit.
A clusula Work tem finalidade de estabelecer compatibilidade com o padro Ansi e no traz qualquer modificao
ao comando. J a clusula To Savepoint indica que nem todos os comandos da transao sero desmanchados e
sim aqueles ocorridos aps o Savepoint. Esse comando no efetiva os comandos anteriores ao Savepoint. Estes
continuam pendentes at que ocorra um Commit.
A clusula Force tem a finalidade de indicar (<texto>) a transao distribuda pendente a ser desmanchada.
Nesta sintaxe, somente a transao distribuda afetada. O <texto> deve conter o ID local ou global da transao
distribuda. Para obtermos este valor devemos consultar a view DBA_2PC_PENDING.
SAVEPOINT
Savepoints so utilizados junto com o comando Rollback. Tm a finalidade de marcar um ponto intermedirio
na transao.
Savepoints podem ser teis quando temos uma transao que executa diversos programas. Antes de cada programa,
podemos marcar um Savepoint e, caso ocorra um erro no programa, podemos realizar um Rollback somente at o
ponto marcado, desfazendo todas as modificaes realizadas pelo programa e, ento, execut-lo novamente com
as correes necessrias.
Quando ocorre um Rollback para Savepoint, todas as modificaes ocorridas aps o Savepoint so desmanchadas e
todos os locks adquiridos aps este ponto tambm so liberados. A transao, porm, no efetivada. Todas as modificaes
ocorridas antes do Savepoint continuam locked sem efetivao aguardando que o usurio realize um Commit.
SELECT
O objetivo do comando Select recuperar dados de uma ou mais tabelas, tabelas objeto, views, views objeto ou
views materializadas.
A Sintaxe 10.31 apresenta os seguintes parmetros:
<subquery> Verifique a Figura 10.35 para saber as opes sintticas vlidas.
SET CONSTRAINT
Este comando tem a finalidade de modificar o momento de verificao das restries de integridade.
Normalmente, to logo enviemos um comando de atualizao para a base de dados, as regras de integridade so
verificadas (esta a situao mais comum e o que era disponvel at a release 7.3).
A partir da release 8 do Oracle, podemos determinar que uma restrio de integridade seja verificada apenas no
momento em que a transao for encerrada com Commit.
Estabelecemos o modo como a restrio ir trabalhar no momento da criao da regra de integridade. Esta condio
poder ser fixa ou varivel. Caso especifiquemos que uma constraint Deferrable, ela poder ter sua condio de
verificao alterada a tempo de transao.
SET ROLE
O comando Set Role adquire para a sesso, dinamicamente, os privilgios das roles informadas.
Na sintaxe observamos que o comando pode adquirir todas as roles que o usurio tem autorizao de usar, com a
clusula All.
Se for nomeada uma role, todas as demais roles no nomeadas e que no estejam previamente habilitadas so
desabilitadas para a sesso.
A clusula None desabilita todas as roles para a sesso corrente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1241
SET TRANSACTION
O mecanismo de consistncia do Oracle garante que o resultado de um comando seja consistente. Pode ser necessrio,
porm, que ampliemos esta consistncia a diversos comandos. Por exemplo, desejamos executar vrias leituras na
mesma tabela ou em tabelas diferentes, todas relativas ao mesmo momento de tempo.
O comando Set Transaction Read Only garante que a consistncia seja considerada em relao ao momento da
execuo do comando Set Transaction e no de cada comando individualmente.
O uso do comando Set Transaction determina algumas regras:
Deve ser o primeiro comando da transao (caso contrrio, ocorrer um erro).
Somente consultas so permitidas na transao.
Um Commit, Rollback ou qualquer outro comando de DDL (possuem Commits implcitos) encerram o efeito
do comando Set Transaction.
Durante a transao (Read Only), todas as consultas se referem ao momento da execuo do SET. Desta forma,
todas as modificaes feitas na base de dados aps a execuo do comando SET no sero vistas por essa transao.
Somente as transaes concludas (Commited) antes de seu incio sero visveis.
Esse processo no impede a atualizao do banco de dados pelas outras transaes.
Devemos, no entanto, avaliar com cuidado a necessidade de utilizar este comando, pois transaes Read Only
muito longas podem receber erro (Snapshot Is Too Old), indicando que a base de dados j sofreu muitas modificaes
desde que o comando foi executado. Quando isso ocorre, podemos encerrar a transao e reexecutar o comando
Set Transaction, se necessrio.
O nvel de isolamento da transao (Isolation Level) identifica como transaes que possuam modificaes para o
banco de dados sero manipuladas.
A opo Read Committed a forma padro de trabalhar do Oracle, ou seja, se uma transao precisa adquirir linhas
bloqueadas por outra transao (locked), esta transao aguarda a liberao destas linhas.
Com a opo Serializable, indicamos que a transao em estado de serializao somente atualiza transaes que
tenham sido commited antes do incio da transao serializada, ou seja, supondo-se que uma transao A tenha
entrado em estado de serializao, aps este momento uma transao B realiza uma modificao na matrcula 1 da
<SUBQUERY>
Uma subquery um comando Select que aparece em outros comandos de DML.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1243
UPDATE
O comando Update tem a finalidade de alterar informaes j gravadas na base de dados. Diferentemente do
comando Insert, o comando Update possui uma clusula Where, a qual determinar que linhas sero modificadas.
Para determinar essas linhas, o Oracle faz um Select implcito no banco de dados, uma pesquisa para determinar
que linhas atendem clusula Where presente no comando. Caso no seja informada nenhuma clusula Where,
todas as linhas sero modificadas.
Na sintaxe so apresentadas algumas clusulas que veremos a seguir:
<Hint> Corresponde a um comentrio que passa instrues para o otimizador a respeito da forma como a
instruo deve ser executada.
Partition Identifica uma partio da tabela especfica. A atualizao ser realizada nesta partio se as restries
estabelecidas para a partio forem respeitadas. Se no mencionarmos a partio, todas as parties sero consultadas
para verificao da condio de seleo. Quando mencionamos a partio, a restrio presente na clusula Where
somente ser verificada para essa partio.
Subpartition Especifica uma subpartio da tabela. No h necessidade de especificarmos nem partio nem
subpartio, mas em determinadas situaes pode ser mais eficiente (que a utilizao de clusulas Where
complexas, por exemplo).
Table Indica ao Oracle que a coluna retornada pela subquery ser uma Nested Table e no um valor escalar. A
sintaxe THE (utilizada na verso 8) est sendo desaconselhada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1245
Only Somente aplicvel a views. Indica que, se a view mencionada pertence a uma hierarquia, no desejamos
que as linhas das subviews sejam atualizadas.
<coleo> uma <subquery> que seleciona uma coluna de uma tabela ou view.
<dblink> Identifica um database link que permitir a conexo com outro banco de dados.
Returning Obtm alguma informao das linhas afetadas pelo comando Delete. A informao obtida deve ser
um escalar, Lob, Rowid ou Ref. Essa clusula no pode ser usada com Parallel DML ou com objetos remotos.
Set Indica as colunas que sero modificadas.
<subquery> Indica uma query a ser usada para obteno dos valores a serem atribudos s colunas. Esse
comando Select deve retornar exatamente uma linha.
Captulo 11
GUIA DE REFERNCIA DO SQL*PLUS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1247
SOBRE O SQL*PLUS
ABRINDO UMA SESSO
O SQL*Plus uma ferramenta que nos possibilita a interao com o banco de dados Oracle. Funciona como um
intermedirio entre o usurio e o banco de dados.
Ao acionarmos a execuo da ferramenta (boto Iniciar, pasta Programas, pasta Oracle OraHome9i, pasta Application Development), ser apresentado um dilogo de login a fim de que possamos fornecer o nome do usurio e
senha para estabelecer conexo com o banco de dados. Nosso usurio-padro para testes ser DESENV (criado no
item Criando um Usurio Padro do Captulo 1).
A terceira informao deste dilogo corresponde string de conexo (String do Host), ou seja, um parmetro que
indica a que mquina e a que banco de dados desejamos estabelecer conexo. Se voc estiver estabelecendo conexo
com um banco de dados instalado na mesma mquina (local), este valor no precisa ser preenchido; caso isto no
acontea, consulte seu DBA para obter o nome adequado para preenchimento. Em todo este livro estaremos
usando o Personal Oracle9i (verso 9.0.1.1.1) para realizao dos testes. A instalao deste produto se encontra
descrita no Captulo 1 (Instalando o Personal Oracle9i no Windows 2000).
Quando a conexo estabelecida, obtemos permisso do banco de dados para enviar comandos e receber respostas.
O intervalo de tempo entre o momento em que uma conexo estabelecida at o momento em que ela encerrada
chamado de Sesso.
O SQL BUFFER
No SQL*Plus, a tela apresentada mostra uma linha com o texto SQL> esquerda do vdeo, indicando que poderemos
digitar o comando que desejamos executar.
Ao digitarmos um comando na linha de prompt (SQL>), a ferramenta identifica este comando e verifica se se trata de
um comando de SQL. Em caso afirmativo, o coloca numa rea de memria chamada SQL Buffer (ver Figura 11.03).
Quando terminamos a digitao, esta rea de memria, que s pode conter 1(um) comando de SQL (ou um bloco
de PL/SQL), transmitida para o banco de dados. Quando o banco de dados retorna o resultado, o SQL*Plus recebe
a informao, a formata e apresenta.
OS COMANDOS DO SQL*PLUS
No esquema da Figura 11.03, observamos que nem todos os comandos digitados so colocados na rea de Buffer
para transmisso ao banco de dados. Isto ocorre porque o SQL*Plus tambm possui comandos prprios com a
finalidade de:
Editar o comando SQL armazenado no Buffer.
Formatar os resultados retornados pelo banco de dados.
Armazenar os comandos de SQL para disco e recuper-los para execuo.
Modificar o modo de trabalhar do SQL*Plus.
Enviar mensagens e receber respostas de outros usurios.
Listar a definio de qualquer tabela.
Fazer acesso e copiar dados entre banco de dados.
DIGITANDO NO SQL*PLUS
A digitao na linha de prompt pode ser contnua (uma nica linha) ou pode ocupar mais de uma linha, bastando
que teclemos Enter para que seja mostrada uma numerao seqencial no lado esquerdo do vdeo, indicando que
o SQL*Plus considerou continuao do estado de digitao.
Para encerrarmos a digitao de um comando, temos quatro opes, cada uma delas indicando aes diferentes.
A primeira opo digitar um ponto-e-vrgula (;) seguido de Enter, indicando fim de digitao e ao mesmo tempo
solicitao de execuo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1249
Havendo um comando de SQL armazenado no SQL Buffer, poderemos alter-lo, list-lo ou substitu-lo com alguns
comandos bsicos, prprios do SQL*Plus.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1251
COMANDOS
@ E @@
Veja o comando Start / @ / @@ mais adiante.
/
Quando digitamos uma barra na linha de prompt e em seguida teclamos Enter, o SQL*Plus envia o contedo do
SQL Buffer para execuo pelo banco de dados, porm no apresenta o texto enviado, isto , no lista o SQL Buffer.
Esta a diferena entre o comando Run e a barra.
ACCEPT
Este comando cria uma varivel de substituio e, opcionalmente, formata uma mensagem para o usurio.
Quando criamos a varivel de substituio com este comando, ela pode ser de tipo Number, Char ou Date, havendo
crtica se o valor informado no for compatvel com o tipo definido. Os formatos vlidos para uso so os mesmos
do comando Col e ainda so suportados os formatos SQL de data quando o tipo da varivel for Date. Podemos
informar um valor default (para o caso de o usurio no fornecer nenhum), apresentar uma mensagem ou no
(com as opces Prompt/Noprompt) e esconder o valor digitado pelo usurio (Hide).
APPEND
Com este comando, podemos adicionar um trecho de texto ao fim da linha corrente. Sua sintaxe apresentada em
11.04 a seguir.
O texto adicionado imediatamente aps o texto existente na linha corrente, mesmo havendo um branco entre o
comando e o texto. Aps a execuo do comando, o SQL*Plus apresenta a linha modificada para verificao.
Se desejarmos incluir um branco (ou mais) entre o texto antigo e o novo, devemos digitar o comando append, dois
brancos (ou mais) e o texto a ser adicionado.
Tente usar este comando para incluir um ponto-e-vrgula ao final de alguma linha. Isto no possvel, uma vez
que o ponto-e-vrgula no faz parte da sintaxe do SQL e tem uma conotao especial para o SQL*Plus, pois indica
trmino de digitao e solicitao de execuo. Se, porm, o trecho que estivermos digitando no for de SQL, e sim
de PL/SQL, teremos necessidade de incluir o ponto-e-vrgula no texto. Para que isto seja possvel, devemos repetir
a ao realizada com o branco, ou seja, para a incluso de um ponto-e-vrgula ao fim do texto, devemos digitar dois
ponto-e-vrgulas seguidos.
ARCHIVE LOG
Este comando tem a finalidade de manusear com arquivos online redo log do banco de dados. um comando de
uso exclusivo de DBAs e no ser estudado neste material.
ATTRIBUTE
Este comando especifica atributos de apresentao (display) para um determinado atributo de uma coluna Object Type.
Os formatos vlidos so os mesmos do comando Column.
BREAK
O comando Break define quais so os elementos de quebra e que ao deve ser tomada quando ocorrer a mudana
de valor (quebra) em cada um deles. Este comando no ordena os dados recebidos do banco de dados. Para que o
resultado seja adequado, no comando Select devemos incluir a clusula Order By com as mesmas colunas nas
quais desejamos que o SQL*Plus avalie quebra.
S podemos ter ativo um comando Break em cada sesso. Um segundo comando desabilita o primeiro; desta forma, o
ltimo comando Break que executarmos passa a determinar as quebras vlidas. No cumulativo.
O comando Break executado sem parmetros apresenta a situao de quebra em vigor.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1253
BTITLE
Veja TTitle.
CHANGE
Este comando de edio tem o objetivo de substituir parte do texto (ou todo) por outro. O separador (<sepchar>)
pode ser qualquer caracter especial (no alfanumrico) que no esteja presente no texto <old> nem no texto <new>.
Observe que os separadores apresentados so iguais. Podemos utilizar qualquer caracter especial no presente nos
textos, porm dentro de um comando s podemos usar um deles.
Este comando efetua apenas uma substituio por linha, isto , a linha analisada da esquerda para a direita e
quando for encontrado um trecho de texto igual ao texto <old> feita a substituio pelo texto <new> e o comando
encerrado. Se desejarmos repetir a substituio para outro trecho da linha, devemos digitar o comando novamente.
Para que no precisemos digitar repetidamente o mesmo comando, podemos pint-lo com o boto esquerdo do mouse (pressionar o mouse sobre
o primeiro caracter que desejamos copiar, mant-lo pressionado e arrast-lo at o ltimo caracter desejado) e sem soltar o boto esquerdo clicar o
boto direito do mouse. Esta ao far com que o trecho pintado seja copiado para a linha de prompt. Experimente.
CLEAR
O comando Clear tem por finalidade limpar o valor atual da opo especificada.
COLUMN
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1255
COMPUTE
O comando Compute efetua um clculo em relao a um elemento de quebra. Se desejarmos efetuar um clculo
quando houver quebra da coluna cd_depto, esta coluna deve estar referenciada no comando Break. Se desejarmos
Podemos especificar um ou mais clculos por elemento e, ainda, especificar um label que identifique o tipo de
clculo efetuado.
Os parmetros para determinao de clculos so:
Avg Calcula a mdia de valores no incluindo Nulls.
Count Calcula a quantidade de valores no incluindo Nulls.
Max Calcula o maior valor no incluindo Nulls.
Min Calcula o menor valor no incluindo Nulls.
Num Calcula a quantidade de valores (total).
Std Calcula o desvio-padro no incluindo Nulls.
Sum Calcula o somatrio de valores no incluindo Nulls.
Var Calcula a varincia no incluindo Nulls.
OF Indica a coluna em relao qual ser feito o clculo.
Label Indica o label referente ao clculo.
On Indica em que momento o clculo deve ser realizado (quebra).
Se criarmos mais de um comando Compute para a mesma indicao de quebra, somente a ltima considerada.
As demais so ignoradas.
CONNECT/DISCONNECT
Permite a troca de sesso do SQL*Plus com o banco de dados ou encerra uma sesso com o banco de dados. A
opo As Sysdba/Sysoper somente aplicvel a DBAs. Esta opo permitir o uso dos comandos administrativos
do banco de dados (Startup, Shutdown, Recover, etc.).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1257
COPY
Copia os dados de uma query para uma tabela em um banco de dados local ou remoto.
DEFINE
Este comando especifica uma varivel de substituio e associa um valor alfanumrico a ela. Quando este comando
executado sem parmetros, o nome e valor de todas as variveis de substituio so apresentados. Quando
informamos o nome de uma varivel, apenas seu valor apresentado.
O valor desta varivel permanece no sistema at que modifiquemos seu valor atravs de outro comando Define,
um comando Accept ou Col com New_Value/Old_Value ou, ainda, faamos a destruio da varivel com o comando
Undefine ou encerremos o SQL*Plus.
DEL
Exclui uma determinada linha da rea do SQL Buffer. Caso no sejam informados parmetros que indiquem a
linha a ser removida, ser excluda a linha corrente.
DESCRIBE
Esse comando tem a finalidade de apresentar a definio de um objeto criado na base de dados Oracle. O objeto
pode ser uma table, view, synonym, function, procedure ou package.
Por default, o banco de dados procura o objeto no prprio schema do usurio conectado.
DISCONNECT
Veja Connect/Disconnect anteriormente.
EDIT
Este comando aciona um editor registrado no Windows e passa como parmetro o nome de um arquivo ou o texto
presente no SQL Buffer, de acordo com o comando executado.
Quando omitimos o nome do arquivo a ser editado, o SQL*Plus aciona o editor do sistema passando como parmetro
o texto do SQL Buffer.
Quando desejamos editar um determinado arquivo, seu nome pode ser informado com ou sem a extenso. A
extenso default SQL.
O editor em uso pode ser obtido atravs da varivel de sistema chamada _EDITOR. Para sabermos seu valor podemos
digitar na linha de prompt DEFINE _EDITOR ou apenas DEFINE. No primeiro caso, o SQL*Plus nos mostrar o valor
apenas da varivel solicitada. No segundo caso, sero apresentadas todas as variveis de sistema existentes at o momento.
O editor-padro no Windows o bloco de notas (Notepad). Antes de substituirmos o editor-padro por outro de
nossa escolha, devemos nos lembrar que o editor escolhido deve aceitar um parmetro correspondente ao arquivo
a ser editado.
O diretrio do Windows onde sero gravados (ou lidos) os arquivos de trabalho pode ser controlado por ns
(default C:\<Oracle Home>\BIN). Se criarmos um atalho para o SQL*Plus (o executvel se encontra na pasta
C:\<Oracle Home>\Bin e se chama SqlPlusw.exe) basta que modifiquemos o diretrio Iniciar em da pasta Atalho
(ver Figura 11.06), obtida ao pressionarmos o boto direito do mouse sobre o cone do SQL*Plus e escolhermos a
opo Propriedades.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1259
Podemos, tambm, modificar o diretrio de trabalho default do atalho presente na pasta Oracle para Windows da
seguinte forma: clicar o boto Iniciar (do Windows), opo Configuraes, opo Barra de Tarefas, pasta Programas do
menu Iniciar, clicar no boto Avanado, expandir o n Programas, expandir o n Oracle OraHome9i e fazer um duplo
clique no cone da pasta Application Development, pressionar o boto direito do mouse sobre o cone do SQL*Plus e
escolher a opo Propriedades. Novamente, ser mostrada a tela de propriedades e, na pasta Atalho, poderemos alterar
o diretrio Iniciar em (ver Figura 11.06). Para que a modificao tenha efeito, o SQL*Plus deve ser reiniciado.
Com esta modificao, qualquer arquivo a ser lido ou gravado pelo SQL*Plus o ser no novo diretrio default.
Se desejarmos efetuar a leitura ou gravao de arquivos em outros diretrios, podemos incluir o caminho onde se
encontra o arquivo ao usarmos o comando EDIT.
EXECUTE
Veja o tpico Password, Execute, Host e Remark mais adiante.
EXIT/QUIT
Os comandos Exit e Quit so equivalentes e tm a finalidade de encerrar a sesso do SQL*Plus. Isto significa que a
conexo com o banco de dados e simultaneamente o prprio programa sero encerrados.
De acordo com a Sintaxe 11.17, observamos que podemos determinar como deve ser considerado o trmino do
programa, isto , com sucesso ou no e com efetivao ou no das modificaes realizadas no banco de dados.
A execuo de um comando Commit indica ao banco de dados que todos os comandos que modificaram informaes do banco de dados devem
ser considerados vlidos e as alteraes devem ser efetivadas. J um comando Rollback indica que as modificaes devem ser desconsideradas.
GET
A recuperao de um texto para o SQL Buffer feita por meio do comando Get. Todo o contedo do arquivo
copiado para o SQL Buffer; portanto, este arquivo deve conter apenas um comando.
A extenso s precisa ser mencionada se for diferente do padro (SQL). O padro pode ser mudado com o uso da
varivel de sistema Suffix.
Todo o contedo do arquivo carregado para o SQL Buffer; desta forma, se o arquivo contiver mais de um comando,
ocorre um erro na execuo, porque o SQL*Plus envia todo o buffer para o banco de dados como se fosse um nico
comando e, portanto, no reconhecido pelo banco de dados.
Caso o nome do arquivo seja composto das palavras List ou File, seu nome deve ser mencionado entre aspas.
Por default, o contedo do arquivo listado aps ser carregado para o SQL Buffer. Se esta ao no for desejada,
devemos usar a opo Nolist.
HELP
Este comando aciona o mecanismo de Help do SQL*Plus mostrando a sintaxe desejada. Podemos usar HELP INDEX (ou HELP TOPICS) para que seja mostrada a lista de tpicos disponveis. A apresentao da sintaxe depende
de o DBA haver instalado e preenchido a tabela Help no banco de dados.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1261
HOST
Veja os tpicos Password, Execute, Host e Remark mais adiante.
INPUT
Este comando adiciona uma ou mais linhas aps a linha corrente (no SQL Buffer). Este comando difere do comando
Append uma vez que pode voltar ao estado de digitao, abrindo uma nova linha para digitao imediatamente
aps linha corrente.
Quando digitamos o comando juntamente com um texto, criada uma nova linha imediatamente aps a linha
corrente, sendo seu contedo o texto informado. Quando digitamos apenas o comando, o SQL*Plus volta ao
estado de digitao, apresentando uma linha vazia com a numerao esquerda seqencial da linha corrente,
anexada da letra i.
Para concluirmos a digitao desta(s) linha(s), devemos deixar uma linha vazia (teclando <Enter> duas vezes) ou
devemos incluir um ponto como primeiro e nico caracter da ltima linha.
LIST
Este comando tem a finalidade de listar uma ou mais linhas do SQL Buffer. A ltima linha listada pelo comando se
tornar a linha corrente.
A Sintaxe 11.21 indica como podemos listar parte do SQL Buffer e transformar em linha corrente quaisquer das
linhas digitadas.
PAUSE
Este comando envia uma linha em branco ou uma linha com texto para a tela do usurio e aguarda que este tecle
Enter para que o script tenha prosseguimento.
PRINT
Este comando apresenta o valor de uma varivel Bind ou de todas as variveis deste tipo declaradas (se for executado
sem argumentos).
PROMPT
Envia uma mensagem ou uma linha em branco para a tela do usurio. Pode ser til para scripts longos, a fim de
informar o passo executado.
QUIT
Veja o tpico Exit/Quit anteriormente.
RECOVER
Este comando tem a finalidade de iniciar uma recuperao fsica do banco de dados, tablespaces ou datafiles. um
comando de uso exclusivo de DBAs e no ser estudado neste material.
REMARK
Veja o tpico Password, Execute, Host e Remark anteriormente.
REPHEADER/REPFOOTER
Os comandos RepHeader e RepFooter tm a finalidade de formatar um ttulo geral para o incio ou fim do relatrio.
Somente sero apresentados na primeira pgina (RepHeader) ou na ltima pgina do relatrio (RepFooter).
A utilizao de um dos comandos sem parmetros faz com que o SQL*Plus liste o header ou footer em vigor.
As opes presentes na sintaxe afetam o elemento formatado da seguinte forma:
Page Muda de pgina aps o header ou antes do footer. Para que este comando gere uma marcao de pgina
fsica, devemos ter executado anteriormente o comando Set Newpage 0.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1263
Col Estabelece posicionamento na coluna <nmero> da linha de impresso atual (avana ou recua).
Skip Pula para o incio da prxima linha <nmero> vezes. Se o parmetro <nmero> for omitido, 1 vez
assumido. Se o parmetro <nmero> possuir o valor 0, far com que haja o posicionamento na linha atual.
Tab Pula <nmero> de colunas para a frente ou para trs (se o valor for negativo).
Left/Center/Right Estabelece o posicionamento dos textos que o seguem esquerda, centralizados ou direita,
respectivamente. Os textos so tratados como um nico elemento.
Bold Realiza impresso em negrito. No vdeo a linha ser repetida trs vezes.
Format Utiliza os mesmos formatos vlidos para o comando Column. A palavra Format no pode ser abreviada.
<texto> Corresponde a uma nica palavra ou a um conjunto de palavras (se entre aspas).
<varivel> Corresponde a uma varivel de sistema criada pelo usurio.
Sql.Pno Corresponde a uma varivel de sistema que indica a pgina corrente.
Sql.Lno Corresponde a uma varivel de sistema que indica a linha corrente.
Sql.Release Corresponde a uma varivel de sistema que indica a release do Oracle.
Sql.Sqlcode Corresponde a uma varivel de sistema que indica o ltimo cdigo de erro ocorrido.
Sql.User Corresponde a uma varivel de sistema que indica o usurio da sesso.
On/Off Torna o header (ou footer) habilitado ou desabilitado sem afetar sua definio.
O comando RepHeader (assim como os demais comandos do SQL*Plus) pode ocupar diversas linhas. Ser considerado
um nico comando se incluirmos o smbolo (hfen) ao fim de cada linha para indicar continuao de comando
(para o SQL*Plus).
RUN
Este comando envia o contedo do SQL Buffer para o banco de dados e ao mesmo tempo apresenta no vdeo as
linhas enviadas (lista o SQL Buffer).
SAVE
Este comando salva o contedo do SQL Buffer em um arquivo do sistema operacional.
A sintaxe acima permite que o contedo do SQL buffer seja salvo em um arquivo novo (default), substitua um
arquivo existente ou seja adicionado a um arquivo existente.
A extenso do arquivo fornecida por .<ext> . Caso seja omitida ser usado SQL como extenso padro. O padro
pode ser mudado com o uso da varivel de sistema Suffix.
Se desejarmos efetuar a salva recobrindo o que est em disco, complementamos o comando com a opo Replace,
indicando que desejamos a substituio do arquivo.
SET
Este comando, que pode ser includo em um script, modifica o valor de uma das variveis de sistema.
A Tabela 11.01 a seguir apresenta a lista e significados das variveis de sistema do SQL*Plus.
Tabela 11.01 Variveis de sistema do SQL*Plus
Varivel
Descrio
APPI[NFO]{ON|OFF|text}
Indica que os comandos executados com @, @@ e Start devem ser registrados pelo pacote
DBMS_APPLICATION_INFO a fim de terem sua execuo monitorada pelo DBA. O valor default para texto
SQL*Plus.
ARRAY[SIZE] {15|n}
Determina o nmero de linhas que o SQL*Plus deve obter do banco de dados a cada leitura (Fetch).
Indica se o ORACLE efetiva as modificaes pendentes para o database. A opo ON faz com que seja
executado um COMMIT aps cada comando SQL ou bloco PL/SQL. A opo IMM funciona de forma
semelhante a ON. A opo n indica que o comando COMMIT deve ser executado aps n comandos de
atualizao bem-sucedidos.
AUTOP[RINT] {OFF|ON}
Esta opo pode ser utilizada pelo DBA durante um processo de recuperao do banco de dados.
AUTOT[RACE] {OFF|ON|TRACE[ONLY]}
[EXP[LAIN]] [STAT[ISTICS]]
Apresenta um relatrio sobre a execuo dos comandos de SQL DML (Select, Insert, Update ou Delete) bemsucedidos. O relatrio pode incluir a apresentao de estatsticas e o caminho de execuo (Explain). A opo
TraceOnly apresenta o relatrio sem apresentar os dados da Query. Se Statistics for solicitado a execuo do
comando realizada, porm sem a apresentao dos resultados. Para que a opo Explain possa ser
executada deve ser criada a tabela Plan_Table para a gerao do caminho de acesso.
BLO[CKTERMINATOR] { . |c}
Determina um caracter no-alfanumrico a ser usado para indicar fim de blocos PL/SQL.
CMDS[EP] {;|c|OFF|ON}
Determina um caracter no alfanumrico usado para separar mltiplos comandos de SQL*Plus digitados na
mesma linha. Se usarmos a opo ON, o caracter default ser ponto-e-vrgula ( ; ).
COLSEP {_|text}
Determina o texto a ser impresso entre colunas selecionadas (Select). Se o valor tiver brancos ou caracteres
de pontuao, deve ser informado entre aspas simples. O valor default um nico espao em branco.
COM[PATIBILITY] {V7|V8|NATIVE}
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1265
Varivel
Descrio
CON[CAT] { . |c|OFF|ON}
Determina o caracter para terminar uma varivel de substituio se desejarmos seguir imediatamente a
varivel com um caracter que o SQL*Plus deva interpretar como valor, e no como parte do nome da
varivel de substituio.
COPYC[OMMIT] {0|n}
Controla o nmero de linhas aps as quais o comando COPY deve efetivar (Commit) as linhas para o banco
de dados. Se optarmos por 0 (zero), o commit s ser executado ao final da cpia.
COPYTYPECHECK {OFF|ON}
Determina que a verificao de compatibilidade de tipos de dados deve ser suprimida durante uma incluso
ou adicionamento de linhas para tabelas usando-se o comando COPY. Esta uma facilidade para DB2, que
necessita que um CHAR seja copiado para um DB2 DATE.
DEF[INE] {&|c|OFF|ON}
Determina o caracter a ser usado para prefixar variveis de substituio. ON ou OFF controla se o SQL*Plus
ir ou no pesquisar no texto a procura de variveis de substituio para substitu-las por valores. Ao
usarmos ON, o valor atribudo &. Esta opo tem precedncia sobre SCAN.
DESCRIBE [DEPTH{1|n|ALL}]
[LINENUM {ON|OFF}] [INDENT{ON|OFF}]
Determina o nvel de profundidade para o qual desejamos recursivamente descrever um objeto. Os valores
vlidos variam de 1 a 50. Aplicvel a partir do SQL*Plus 8.1.5.
ECHO {OFF|ON}
Controla quando o comando Start lista cada comando presente no arquivo de comandos quando realiza a
sua execuo.
EDITF[ILE] file_name[.ext]
Determina o nome default para o comando Edit (no Windows, o nome default Afiedt.buf). Podemos incluir
caminho e/ou extenso para o arquivo.
EMB[EDDED] {OFF|ON}
Controla onde cada nova pgina do relatrio comea. OFF fora cada relatrio a comear no topo de uma
nova pgina. ON permite que um relatrio inicie em qualquer parte da pgina.
ESC[APE] { \ |c|OFF|ON}
Define qual o caracter a ser usado como escape. ON altera o valor <c> para o default \. Este caracter
utilizado antes do caracter indicado para variveis de substituio para indicar que o texto a seguir deve ser
considerado normal e no uma substituio.
FEED[BACK] { 6 | n }
Mostra o nmero de registros retornados por uma query se forem selecionados mais de n registros (default 6).
FEED[BACK] { ON | OFF }
FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL}
Verifica sintaticamente o comando SQL informado com o padro ANSI/ISO SQL92. Este comando pode ser
executado mesmo que no estejamos conectados ao banco de dados. Ficar acionado atravs de todas as
conexes que estabelecermos, at que seja desabilitado ou que encerremos (EXIT) o SQL*Plus.
Indica se as respostas (outputs) e prompts dos comandos devem ou no ser mostrados no vdeo. Usado para
execuo em batch.
HEADSEP {| | ON | OFF}
Determina qual o caracter indicador de quebra de linha para o texto dos cabealhos de coluna.
Permite a modificao da instncia para a sesso. Somente podemos definir uma nova instncia se no
estivermos conectados a uma determinada instncia no momento. Podemos utilizar qualquer identificador
do Oracle Net como instance_path.
LIN[ESIZE] {80 | n}
LOBOF[FSET] { n | 1}
Determina a posio inicial para apresentao de informaes para colunas Clob e Nclob.
LOGSOURCE [pathname]
Especifica a localizao dos arquivos de log arquivados. Este comando pode ser utilizado por DBAs durante
um processo de recuperao.
LONG {80|n}
Determina a largura mxima em bytes para apresentao de valores LONG, CLOB e NCLOB e para cpia de
valores LONG. O valor mximo de 2GB.
LONGC[HUNKSIZE] {80|n}
Determina o tamanho (em bytes) dos incrementos nos quais o SQL*Plus recupera um valor LONG, CLOB ou
NCLOB. Quando obtemos valores CLOB ou NCLOB podemos desejar obter os valores em pedaos em vez do
tamanho total em funo de restries de memria.
continua
Varivel
Descrio
Indica que o relatrio a ser gerado a partir deste momento o ser em formato HTML. Veja o tpico
Acionando o SQL*Plus em batch para verificar o detalhamento desta sintaxe.
NEWPAGE { 1 | n | none}
Determina o nmero de linhas em branco a serem impressas entre o incio da pgina e o primeiro ttulo.
Zero (0) coloca formfeed no topo.
NULL { | <texto>}
Indica qual o texto a ser apresentado na coluna quando seu contedo, em uma determinada linha, for
indeterminado (Null).
NUMFORMAT { | <formato>}
NUM[WIDTH] {10 | n}
PAU[ SE ] <mensagem>
PAU[ SE ] ON | OFF
Indica se o mecanismo de pausa aps o preenchimento de uma pgina deve ser acionado (default OFF).
RECSEP {WR[APPED]|EA[CH]|OFF}
Mostra ou imprime separadores de registros. A varivel RECSEPCHAR define o caracter a ser apresentado
para separao de registros. O valor default um branco. Esta varivel indica quando o SQL*Plus deve
efetuar a separao dos registros. Se escolhermos WRAPPED, o SQL*Plus imprime um separador somente
aps as linhas quebradas. Se escolhermos EACH, a impresso se dar a cada linha.
RECSEPCHAR {_|c}
Controla a apresentao das informaes geradas atravs do pacote DBMS_OUTPUT em stored procedures
ou blocos de PL/SQL. O parmetro Size determina o nmero de bytes que podem ser buferizados dentro
do Oracle Server (o valor deve variar entre 2000 e 1.000.000). O default 2000. Quando WRAPPED
habilitado a quebra de linha ocorre a cada LINESIZE caracteres. Quando WORD_WRAPPED utilizado a
quebra de linhas ocorre a cada LINESIZE caracteres, porm em final de palavra. Quando TRUNCATED
habilitado, cada linha truncada em LINESIZE caracteres.
SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]}
Permite o alinhamento correto para terminais que mostrem caracteres shift junto com os dados (por
exemplo IBM 3270).
SHOW[MODE] {OFF|ON}
Indica se o SQL*Plus mostra o valor antigo e o novo de uma varivel de sistema quando esta modificada
com o comando SET.
SPACE {1 | n}
Indica o nmero de espaos entre as colunas do relatrio. O valor mximo 10 (default 1).
SQLBL[ANKLINES] {ON|OFF}
Converte os textos dos comandos SQL e PL/SQL de acordo com a opo escolhida, inclusive os textos
constantes (entre plics). (default MIXED)
Determina o caracter que o SQL*Plus mostra como prompt se quebrarmos uma linha de comando do
SQL*Plus usando o hfen ( - ).
SQLN[UMBER] {OFF|ON}
Determina o prompt para a segunda (e subseqentes) linha quando estamos efetuando a digitao de
comandos SQL ou PL/SQL. ON indica que o prompt deve ser uma numerao seqencial. OFF indica que o
valor deve ser SQLPROMPT.
SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
Determina a compatibilidade do SQL*Plus com relao ao comando VARIABLE (por enquanto somente este
comando afetado). O parmetro x representa version, o parmetro y representa release e o parmetro z
representa update. Se colocarmos um valor inferior a 9.0.0 (no arquivo Glogin.sql o valor default 8.1.7), o
tamanho das variveis de tipo Nchar e Nvarchar2 estar associado ao National Character Set em uso (que
determinar se o valor expresso em bytes ou caracteres).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1267
Varivel
Descrio
SQLPRE[FIX] { # |c}
Indica um prefixo. Durante a digitao de um comando de SQL podemos, em uma linha separada prefixada
pelo caracter escolhido, digitar um comando de SQL*Plus, que ser executado imediatamente aps o
<enter> da linha. Deve ser um caracter no alfanumrico.
Indica qual caracter o SQL*PLUS reconhecer como fim de linha e execuo. OFF indica que no existe
caracter associado, o fim do comando reconhecido por uma linha inteira em branco. A opo ON retorna
ao valor default de;
TAB {OFF|ON}
Determina como o SQL*Plus formata espaos no resultado. OFF usa brancos para formatar espaos no
resultado. ON usa o caracter TAB. Esta opo aplicvel apenas a terminais. TABs no so colocados em arquivos.
TERM[OUT] {OFF|ON}
Controla a apresentao dos resultados gerados por comandos executados a partir de um arquivo de
comandos. OFF suprime a apresentao do resultado no vdeo, mas o spool do resultado gerado. TERMOUT
OFF no afeta a apresentao de comandos interativos.
TI[ME] {OFF|ON}
TIMI[NG] {OFF|ON}
Controla a apresentao de estatsticas de tempo. ON mostra as estatsticas em cada comando SQL ou bloco
de PL/SQL.
TRIM[OUT] {OFF|ON}
Determina se o SQL*Plus deixa os brancos finais de cada linha ou remove-os. ON remove os brancos ao fim
de cada linha aumentando a performance, especialmente til quando executamos o SQL*Plus de um
equipamento lento. No afeta Spool.
TRIMS[POOL] {ON|OFF}
Determina se o SQL*Plus retira os brancos ao final de cada linha enviada para Spool. ON remove os brancos
finais. No afeta o resultado para o terminal.
UND[ERLINE] { - | c | ON | OFF}
Determina o caracter usado para sublinhar cabealhos de colunas. ON altera o valor para o padro -. <c>
no pode ser um caracter alfanumrico.
Determina se o texto do comando SQL ser apresentado antes e aps o SQL*PLUS ter efetuado a
substituio do parmetro pelo valor real (default ON).
WRA[P] {OFF|ON}
SHOW
Apresenta informaes sobre o elemento especificado.
Dentre os parmetros do comando Show apresentados na sintaxe, temos:
<varivel> Apresenta informaes sobre a varivel de sistema nomeada no comando.
All Apresenta informaes sobre todas as variveis de sistema.
Parameters Apresenta informaes sobre os parmetros de inicializao do banco de dados. uma opo para
uso por DBAs.
SGA Apresenta a alocao de memria feita para o banco de dados. uma opo para uso por DBAs.
Errors Apresenta informaes sobre o ltimo comando de PL/SQL compilado ou sobre uma rotina especfica
nomeada no comando.
SHUTDOWN
Este comando tem a finalidade de encerrar a execuo do banco de dados. um comando de uso exclusivo de
DBAs e no ser estudado neste material.
SPOOL
Este comando armazena o resultado de uma consulta em um arquivo do sistema operacional e, opcionalmente,
envia o arquivo para a impressora default do sistema.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1269
START / @ / @@
Esse comando executa o contedo de um arquivo de comandos existente no sistema operacional ou, com a sintaxe
padro URI (Uniform Resource Identifier), em um servidor Web. Neste caso os protocolos suportados so HTTP,
FTP e Gopher.
Cada comando de SQL ou de SQL*Plus lido e tratado individualmente. Num arquivo executado por Start, podemos
incluir diversos comandos de SQL.
O comando @ sinnimo de Start e o @@ semelhante, com a diferena de que, se esse comando for includo em
um arquivo de comandos, ele pesquisar o arquivo associado no diretrio do arquivo de comandos e no no
diretrio local, como seria o caso do @ e do Start.
A Sintaxe 11.32 do comando Start permite a passagem de parmetros. Esses parmetros so variveis de substituio
que so utilizadas para a substituio de trechos do comando de SQL.
Quando executamos o comando Start passando parmetros na linha de comando, o SQL*Plus define uma varivel
de substituio com o nome de cada um dos parmetros passados, de tal forma que uma segunda execuo do
mesmo comando no precisa da passagem dos parmetros.
As variveis de substituio no precisam ter nomes numricos, podemos dar qualquer nome a elas, porm
neste caso no podem ser utilizadas como parmetro para o comando Start. Ao executarmos um comando de
SQL ou de SQL*Plus contendo uma referncia a variveis de substituio, o SQL*Plus solicita que o valor da
varivel seja informado.
Quando o comando contm a varivel de substituio com nome alfanumrico precedido por um &, o SQL*Plus
no define uma varivel de sistema com este nome. Se for desejada esta ao, devemos preceder a varivel de
substituio com && e teremos o mesmo efeito que no caso do Start com parmetros numricos.
Quando desejamos que o valor da varivel de substituio seja concatenado com outro valor, devemos usar um
ponto (.) para separar seu nome do valor.
STARTUP
Este comando tem a finalidade de inicializar a instncia Oracle e, adicionalmente, o banco de dados. um comando
de uso exclusivo de DBAs e no ser estudado neste material.
STORE
O comando Store gera um arquivo contendo todas as variveis de sistema e seus valores defaults para que possamos
gerar um script com aquelas que desejamos alterar.
Quando o SQL*Plus comea a executar, ele procura por um arquivo de nome Login.Sql e, caso encontre, executa os
comandos existentes neste arquivo.
TIMING
Registra dados de tempo para um determinado intervalo. O parmetro <texto> corresponde ao nome do timer
criado. Se executado sem parmetros, lista a quantidade de timers ativos. A opo Show mostra o valor acumulado
para o timer corrente e a opo Stop interrompe a contagem para o timer ativo.
TTITLE/BTITLE
Os comandos Ttitle e Btitle formatam ttulos a serem apresentados no topo (Ttitle) ou rodap (Btitle) de cada
pgina do relatrio.
A sintaxe desses dois comandos semelhante dos comandos RepHeader e RepFooter, excetuando-se a opo
Page, que no existe para Ttitle e Btitle.
UNDEFINE
Destri a definio de uma determinada varivel de substituio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1271
VARIABLE
Esse comando cria uma varivel Bind, que pode ser usada em programas de PL/SQL.
WHENEVER OSERROR/SQLERROR
Com este comando, podemos determinar que ao tomar quando ocorrer um erro de sistema operacional (Oserror)
ou de SQL (Sqlerror). No caso de escolhermos encerrar o SQL*Plus, podemos ainda fornecer uma informao para
o sistema operacional. Esse tipo de procedimento interessante quando colocamos a execuo do SQL*Plus em
um arquivo de comandos do sistema operacional. O encerramento com um valor permite que o script tome uma
ao associada a cada valor retornado.
Captulo 12
GUIA DE REFERNCIA DE PL/SQL
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1273
SOBRE A PL/SQL
ESTRUTURA
A PL/SQL estruturada em blocos. Cada bloco pode conter outros blocos. Em cada um destes blocos, podemos
declarar variveis que deixam de existir quando o bloco termina.
A Sintaxe 12.01 apresenta a estrutura de um bloco PL/SQL, que composto de trs partes:
Uma parte de tratamento de erros, que permite que tenhamos acesso ao erro ocorrido e determinao de uma
ao de correo. Nesta parte, tambm podemos declarar outros blocos subordinados.
IDENTIFICADORES
Um identificador consiste em uma letra seguida de outras letras, nmeros, $ (dlar), _ (sublinhado) e # (smbolo
numrico). Possui um limite mximo de 30 caracteres.
As letras podem ser maisculas ou minsculas indiscriminadamente, pois a linguagem no sensvel forma.
Opcionalmente os identificadores podem ser declarados (e usados) entre aspas, quando desejamos, por exemplo,
usar no identificador caracteres no includos na lista de smbolos vlidos.
PALAVRAS RESERVADAS
Alguns identificadores possuem um significado especial em PL/SQL e no devem ser utilizados na declarao de variveis.
LITERAIS
Corresponde representao explcita de um nmero, caracter, string ou booleano.
COMENTRIOS
Um comentrio em PL/SQL pode ser informado de duas formas:
FIM DE LINHA
A indicao de fim de linha de comando em PL/SQL feita com um ponto-e-vrgula (;).
TIPOS DE DADOS
Podem ser subdivididos nos seguintes grupos: Escalares, Compostos, Reference e Lob.
ESCALARES
So um conjunto de tipos de dados predefinidos e que no possuem componentes internos (no so subdivididos).
Binary_Integer Tipo de dado numrico para armazenamento de inteiros vlidos no seguinte intervalo de
valores: de -231 + 1 (-2147483647) e 231 - 1 (2147483647). Possui os seguintes subtipos:
Decimal, Dec e Numeric armazenamento em ponto fixo com uma preciso mxima de 38 dgitos decimais.
Double Precision, Float armazenamento em ponto flutuante com uma preciso mxima de 126 dgitos
binrios, o que equivale a 38 dgitos decimais.
Real armazenamento em ponto flutuante com uma preciso mxima de 63 dgitos binrios, o que equivale
a 18 dgitos decimais.
Integer, Int e Smallint armazenamento de inteiros com uma preciso mxima de 38 dgitos.
Pls_Integer Tipo de dado numrico para armazenamento de inteiros vlidos no seguinte intervalo de valores: de
-231 + 1 (-2147483647) e 231 - 1 (2147483647). similar ao tipo Binary_Integer, porm mais rpido para efetuar
clculos que um Binary_Integer ou um Number, pois utiliza machine arithmetic, enquanto os demais usam library
arithmetic. Possui uma outra diferena em relao ao Binary_Integer no que se refere deteco de Overflow.
Quando efetuamos um clculo usando variveis Pls_Integer e o valor ultrapassa a capacidade mxima da varivel,
ocorre um erro de Overflow mesmo que a rea receptora tenha capacidade de armazenamento (seja um Number,
por exemplo). J com Binary_Integer no ocorrer qualquer erro se atribuirmos o resultado a um Number.
Char Tipo de dado alfanumrico de tamanho fixo com comprimento de at 32.767 bytes. Podemos especificar
o tamanho mximo na declarao de uma varivel com este tipo. Caso isto no seja especificado, o comprimento
default de 1. O comprimento pode ser especificado em bytes ou em caracteres. Isto importante quando
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1275
Varchar2 Tipo de dado alfanumrico de tamanho varivel com comprimento de at 32.767 bytes. A especificao
de tamanho obrigatria para uma varivel declarada com este tipo. O comprimento pode ser especificado em
bytes ou em caracteres. Isto importante quando armazenamos valores multibyte. O conjunto de valores vlidos
para armazenamento depende do charset do banco de dados. A definio de uma coluna do tipo Varchar2 no
banco de dados est limitada a 4.000 bytes. Possui dois subtipos Varchar e String, at agora equivalentes a
Varchar2. Quando no informamos a unidade do comprimento (bytes ou caracteres), o default dado pela
varivel Nls_Lenght_Semantics.
Long Tipo de dado alfanumrico de tamanho varivel com comprimento de at 32.760 bytes. Podemos
especificar o tamanho mximo na declarao de uma varivel com este tipo. Uma coluna Long no banco de
dados armazena at 2 GB (2.147.483.647 bytes). Podemos fazer referncia a colunas Long em comandos de
DML Insert, Update e muitos comandos Select, mas no em expresses, chamadas de funes SQL, ou em certas
clusulas tais como Where, Group By e Connect By.
Raw Tipo de dado binrio de tamanho varivel com comprimento de at 32.767. A especificao de tamanho
na declarao de uma varivel com este tipo obrigatria. So semelhantes a colunas Varchar2, porm a PL/SQL
no interpreta seu contedo. O SQL*Net no realiza converso entre charsets quando transmitimos dados Raw
de um sistema para outro. Uma coluna Raw no banco de dados armazena at 2.000 bytes.
Long Raw Tipo de dado binrio de tamanho varivel com comprimento de at 32.760 bytes. A especificao
de tamanho na declarao de uma varivel com este tipo obrigatria. So semelhantes a colunas Long, porm
a PL/SQL no interpreta seu contedo. Uma coluna Long Raw no banco de dados armazena at 2 GB
(2.147.483.647 bytes).
Rowid Para armazenamento de valores Rowid do banco de dados. Cada tabela criada no banco de dados possui
uma pseudocoluna Rowid que armazena valores hexadecimais que correspondem ao endereo de cada linha (row).
Urowid Armazena um Rowid lgico. Usado para captura do Rowid (lgico) de tabelas Index Organized.
Nchar Tipo de dado alfanumrico de tamanho fixo com comprimento de at 32.767 bytes. Podemos especificar
o tamanho mximo na declarao de uma varivel com este tipo. Caso isto no seja especificado, o comprimento
default de 1 byte. O comprimento especificado em caracteres. Isto importante quando armazenamos
valores multibyte. O conjunto de valores vlidos para armazenamento depende do national charset definido
para o banco de dados. As colunas alfanumricas Nchar e Nvarchar2 obedecem ao national charset, e as colunas
Char, Varchar2 e Long ao database charset.
A definio de uma coluna do tipo Nchar no banco de dados est limitada a 2.000 bytes. Podemos intercambiar
valores entre colunas Nchar e Char, porm pode haver perda de informao se o charset da coluna Char no
puder representar todo o contedo da coluna Nchar (aparecero caracteres com ?).
Nvarchar2 Tipo de dado alfanumrico de tamanho varivel com comprimento de at 32.767 bytes. A
especificao de tamanho obrigatria para uma varivel declarada com este tipo. O comprimento especificado
em caracteres. Isto importante quando armazenamos valores multibyte. O conjunto de valores vlidos para
armazenamento depende do national charset definido para o banco de dados. As colunas alfanumricas Nchar
e Nvarchar2 obedecem ao national charset e as colunas Char, Varchar2 e Long ao database charset. A definio
de uma coluna do tipo Nvarchar2 no banco de dados est limitada a 4.000 bytes. Podemos intercambiar valores
entre colunas Nvarchar2 e Varchar2, porm pode haver perda de informao se o charset da coluna Varchar2
no puder representar todo o contedo da coluna Nvarchar2 (aparecero caracteres com ?).
Boolean um tipo de dado para variveis (no podem ser definidas como colunas em uma base de dados). Armazena
valores lgicos True e False e a ausncia de valor Null. No possuem tamanho e nem qualquer tipo de parmetro.
Timestamp Extenso ao tipo Date. Ano, ms e dia assim como hora, minuto, segundo e frao de segundo.
Podemos indicar o nmero de dgitos da parte fracionria do segundo.
Timestamp with time zone Extenso ao tipo Timestamp. Inclui a apresentao da zona de tempo. Onde a zona
de tempo corresponde diferena (em horas e minutos) entre a hora local e UTC (hora de Greenwich).
Timestamp with local time zone Extenso ao tipo Timestamp. A diferena entre esta opo e a anterior que a zona
de tempo no armazenada no banco de dados. O dado, quando armazenado, normalizado para a Dbtimezone e,
quando recuperado, visualizado pelo usurio com a Time Zone da sesso (ocorre uma Segunda converso).
Interval Day to Second Armazena um perodo de tempo em dias, horas, minutos e segundos.
Interval Year to Month Armazena um perodo de tempo em anos e meses.
LOBS
So um conjunto de tipos de dados predefinidos e que armazenam valores chamados locators, os quais especificam
a localizao dos lobs (large objects) armazenados na linha ou fora dela.
Armazenam valores com comprimento de at 4 GB. Permitem o acesso randmico a trechos do dado.
Blob O tipo Blob tem a capacidade de armazenar grandes valores binrios. O tamanho mximo no pode
exceder 4GB. O armazenamento da informao pode ser feito na prpria linha ou em outro espao especfico.
Clob O tipo Clob tem a capacidade de armazenar grandes volumes de dados alfanumricos no charset do
banco de dados. O tamanho mximo no pode exceder 4GB. O armazenamento da informao pode ser feito
na prpria linha ou em outro espao especfico.
Nclob O tipo Nclob tem a capacidade de armazenar grandes volumes de dados alfanumricos no national
charset. O tamanho mximo no pode exceder 4GB. O armazenamento da informao pode ser feito na prpria
linha ou em outro espao especfico.
Bfile O tipo Bfile tem a capacidade de armazenar grandes volumes de dados binrios fora do banco de dados.
O locator de um Bfile inclui um diretrio que especifica o caminho completo do arquivo no servidor.
Bfiles so read-only. No podemos modific-los.
COMPOSTOS
So aqueles tipos que tm componentes internos que podem ser manuseados individualmente.
Neste grupo se encontram os tipos definidos pelo usurio: Table, Record e Varray.
REFERENCE
So aqueles tipos que armazenam valores chamados ponteiros, que apontam para outros itens do programa ou do
banco de dados. Fazem parte deste grupo os tipos Ref Cursor e Ref <object>.
CONVERSO IMPLCITA
Quando atribumos uma varivel de um determinado tipo a uma outra varivel de outro tipo, ocorre uma converso
implcita de tipo de dado.
A converso implcita possvel em PL/SQL, mas no recomendada, porque pode dificultar a performance e,
ainda, sofrer modificaes de uma verso para outra do software.
A tabela a seguir indica o que possvel converter:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1277
B_Integer
Blob
B_Integer
Char
CLOB
Date
Long
Number
P_Integer
Blob
Char
Urowid
Varchar2
S
S
S
Clob
Date
Long
P_Integer
Urowid
S
S
S
S
S
S
Raw
Number
Varchar2
Raw
S
S
Devemos tomar cuidado adicional com as converses implcitas, pois o PL/SQL utiliza as funes de SQL, porm,
com os parmetros de formato defaults. Assim, a execuo de uma rotina em um servidor pode produzir um
resultado, enquanto em outro poder produzir outro em funo de parmetros de ambiente (Nls, por exemplo).
DECLARAES
A parte declarativa do bloco precede a parte executiva e deve conter todas as variveis necessrias execuo do
bloco, uma vez que a PL/SQL no declara implicitamente variveis (como ocorre em outras linguagens).
VARIVEIS E CONSTANTES
Podemos declarar variveis e constantes na parte declarativa de qualquer bloco, subprograma ou pacote.
A Sintaxe 12.02 apresenta a declarao de variveis e constantes. Observe que uma constante, obrigatoriamente,
deve ter um valor inicial; no entanto, seu valor no poder ser alterado ao longo do programa.
O valor inicial poder ser fixo ou uma expresso, inclusive utilizando funes.
As variveis podem receber ou no valor inicial. Caso a declarao da varivel receba a clusula Not Null, a atribuio
de valor inicial se torna obrigatria. Quando no informamos valor inicial para uma varivel, seu valor considerado
desconhecido, ou seja, Null.
ATRIBUIO
A atribuio de valor a uma varivel feita com a notao :=.
%TYPE
O atributo %Type copia o tipo de dado de uma varivel ou coluna do banco de dados.
Podemos, desta forma, declarar outra varivel baseados na definio de uma coluna do banco de dados ou outra varivel.
ESCOPO E VISIBILIDADE
O escopo de uma varivel a regio (bloco, subprograma ou pacote) onde a referncia a ela vlida. Dentro de um
mesmo escopo, todas as variveis devem ter nomes nicos.
Uma varivel declarada em um bloco visvel naquele bloco e em todos os blocos subordinados a este. Se uma
varivel redefinida em um sub-bloco, ambas so acessveis. No sub-bloco, porm, qualquer referncia no
qualificada far acesso varivel de nvel mais interno.
Uma varivel declarada em um bloco deixa de existir quando o bloco termina.
QUALIFICAO
Para controlarmos a visibilidade e termos acesso s variveis dos blocos de nvel superior, devemos qualificar
qualquer referncia s variveis externas nos blocos internos.
RESTRIES
A PL/SQL no admite referncias a variveis no declaradas, mesmo que elas venham a ser declaradas posteriormente.
Para que utilizemos uma varivel (mesmo sendo na declarao de outra), devemos ter efetuado sua declarao primeiro.
COMANDOS
CASE
A clusula Case permite a montagem de uma estrutura similar a IF..THEN ELSE. Ao observarmos a Figura 12.03
veremos que existem duas formas sintticas de utilizarmos o comando.
Na primeira forma usamos uma expresso que ser comparada em cada uma das clusulas When, funcionando
como um seletor indicativo dos comandos a serem executados. Caso no venhamos a definir uma clusula Else
e nenhuma das expresses for compatvel com a expresso seletora, o retorno ser Null.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1279
CURSOR
%ROWTYPE
A fim de facilitar a recepo de informaes das linhas da tabela, a PL/SQL implementa o atributo %Rowtype, que
gera uma rea (registro) capaz de armazenar, exatamente, uma linha com o layout da linha de uma tabela do
banco de dados ou com o layout apenas das colunas (ou expresses) referenciadas no Select associado a um cursor.
ATRIBUTO %FOUND
um atributo de cursor que indica se a ltima operao de Fetch foi bem-sucedida (para cursores explcitos), ou se
alguma linha foi afetada pelo ltimo comando Insert, Update ou Delete, ou, ainda, se o comando Select Into
retornou uma ou mais linhas (para cursores implcitos).
Antes do primeiro Fetch, o valor do atributo Null para cursores explcitos e tambm Null antes de o comando
(Insert, Update, Delete ou Select Into) ser executado, para cursores implcitos.
ATRIBUTO %ISOPEN
Permite que se verifique se um cursor est aberto ou no. Para cursores implcitos, o resultado ser sempre False,
uma vez que o Oracle abre o cursor imediatamente antes de a operao e o fecha imediatamente aps a operao
e antes de a ao retornar ao programa.
ATRIBUTO %NOTFOUND
um atributo de cursor com lgica inversa ao atributo %Found. %Notfound retornar False se o ltimo comando
Fetch retornar uma linha (para cursores explcitos) ou se o ltimo comando Insert, Update ou Delete no afetar
nenhuma linha ou, ainda, se o ltimo comando Select Into no retornar nenhuma linha (para cursores implcitos).
Antes do primeiro Fetch, o valor do atributo Null para cursores explcitos e tambm Null antes de o comando
(Insert, Update, Delete ou Select Into) ser executado, para cursores implcitos.
ATRIBUTO %ROWCOUNT
Indica o nmero de linhas j lidas (Fetched) para os cursores explcitos ou o nmero de linhas afetadas por um
comando Insert, Update ou Delete ou, ainda, o nmero de linhas retornadas por um comando Select Into (para
cursores implcitos).
Quando o cursor aberto, o atributo %Rowcount zerado. Antes do primeiro Fetch, o atributo continua com zero.
O valor s incrementado aps o fetch ter sido efetuado com sucesso.
At que o primeiro comando de DML seja executado, o valor do atributo Null para cursores implcitos.
ATRIBUTO %BULK_ROWCOUNT
Este atributo semelhante ao atributo %Rowcount, porm para utilizao conjunta com o comando ForAll. Sua
utilizao est associada ao uso de colees.
Ele indica o resultado do processamento de cada elemento da coleo.
ATRIBUTO %BULK_EXCEPTIONS
Durante a execuo de um comando For All podemos decidir interromper a execuo do comando quando a primeira
exception for encontrada ou podemos prosseguir e armazenar todas as exceptions ocorridas para posterior tratamento.
Para esta segunda forma devemos incluir a clusula Save Exceptions na execuo do comando For All. A presena
da clusula Save Exceptions far com que a execuo prossiga at o fim e todas as exceptions sejam armazenadas
(em ordem de ocorrncia) em uma coleo.
O acesso a esta coleo feito com o atributo %Bulk_Exceptions. Nesta coleo encontraremos um registro para
cada erro adquirido. O ndice desta coleo navega seqencialmente pela lista de erros encontrados. A propriedade
Count do atributo %Bulk_Exceptions indica a quantidade total de erros; desta forma o primeiro erro obtido com
SQL%Bulk_Exceptions(1) e o ltimo com SQL%Bulk_Exceptions(SQL%Bulk_Exceptions.Count).
Cada registro da coleo possui dois campos:
CLOSE CURSOR
Para fecharmos um cursor, devemos utilizar o verbo Close. Este verbo libera a rea reservada para a montagem do
conjunto de dados selecionados.
CURSOR LOOP
Este comando similar ao comando For Loop, mas especfico para utilizao com cursores.
O registro presente na sintaxe declarado implicitamente pelo Oracle (como um registro tipo <cursor>%rowtype)
e tem vida til at o End ser atingido. Este comando realiza todas as operaes vistas relativas a cursor: quando a
iterao se inicia, o cursor aberto e feito Fetch na primeira linha. Se a operao (de leitura) for bem-sucedida,
executada a seqncia de comandos presente entre o Loop e o End Loop. Este processo se repete at que a ltima
linha seja processada. Aps este processamento, o cursor automaticamente fechado.
O cursor pode ser declarado previamente e utilizado no comando ou pode ser includo o comando Select desejado
no prprio comando.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1281
DECLARAO DE CURSOR
Na declarao de um cursor, j feita a associao com o comando Select capaz de obter as linhas do banco de dados.
O cursor deve ser criado antes de ser usado; por isso necessrio que a declarao esteja presente no bloco em que
usaremos o cursor ou em um bloco mais externo.
O tipo do retorno deve representar um registro correspondendo s colunas trazidas pelo comando Select.
A manipulao de um cursor semelhante quela usada para arquivos convencionais: abrir (Open), ler uma linha
(Fetch into) e fechar (Close).
Precisamos garantir que a linha a ser removida esteja bloqueada contra atualizaes concorrentes antes de efetuarmos
o comando Delete. Desta forma, a clusula For Update deve ser usada no comando Select do cursor.
A clusula For Update adicionada ao comando Select indica que todas as linhas escolhidas atravs da condio
presente na clusula Where devem sofrer bloqueio (Lock) contra atualizaes concorrentes.
FETCH CURSOR
Associa os valores da linha atual s variveis do programa e, posteriormente, posiciona o cursor na prxima linha
do conjunto de linhas resultantes da operao de Select.
As variveis devem ser informadas no Fetch na mesma ordem das expresses correspondentes no comando Select. Para
cada expresso deve haver uma varivel receptora. Os tipos de dado da varivel e da expresso devem ser compatveis.
A clusula Bulk Collect apresentada na sintaxe indica SQL Engine para preparar toda a coleo de sada (Bulk
Bind) antes de retorn-la para a PL/SQL Engine. Esta clusula pode ser usada junto com a clusula Into nos comandos
Select Into, Fetch Into e Returning Into.
OPEN CURSOR
A abertura de um cursor realizada com o comando Open. Os parmetros devem ser fornecidos a tempo de Open
para que seja possvel a execuo do comando Select.
Os parmetros declarados com valor inicial podem, a tempo de Open, no receber nenhum valor e utilizar os
valores iniciais previamente declarados.
Para a passagem dos parmetros, podemos usar a notao posicional ou a notao nomeada.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1283
TRATAMENTO DE ERRO
PRAGMA EXCEPTION_INIT
A lista de exceptions predefinidas limitada e muitas vezes desejamos controlar a ocorrncia de outros erros
conhecidos do ambiente, tais como: deadlock ou constraint error.
Como no temos condies de erro predefinidas para tratamento destas situaes, muito comum encontrarmos
nos programas o uso de testes do cdigo do erro ocorrido para efetuar uma ou outra ao (Sqlcode e When Others).
As pragmas so diretivas de compilao, isto , so instrues fornecidas ao compilador, que modificam a forma de
execuo do programa.
A pragma Exception_Init nos proporciona uma forma mais legvel de realizarmos o controle dos erros previstos,
mas sem condies de erro predefinidas.
A diretiva Pragma definida na parte declarativa do bloco, pois ser usada pelo compilador e no a tempo de execuo.
EXCEPTION
Cada bloco de PL/SQL possui uma rea especfica para tratamento de erro. Toda vez que ocorre um erro no programa, a
seqncia de execuo interrompida e o controle transferido para esta rea especial do bloco onde o erro foi adquirido.
Quando criamos um programa PL/SQL, so incorporadas a ele algumas condies de erro predefinidas, que
conheceremos a seguir:
Tabela 12.02 Exceptions predefinidas.
Exception
Oracle Error
SQLCode
Condio
Access_into_null
ORA-06530
-6530
Case_not_found
ORA-6592
-6592
causada se nenhuma das opes da clusula When for satisfeita e no houver sido declarada
nenhuma clusula Else.
Collection_is_null
ORA-06531
-06531
causada se forem aplicados mtodos (exceto Exists) ou associao de valores a uma Nested
Table ou Varray no-inicializados.
Cursor_already_open
ORA-06511
-6511
Dup_val_on_index
ORA-00001
-1
causada se for tentada a incluso de valores duplicados em uma coluna do banco de dados
que contm uma restrio de unicidade.
Invalid_cursor
ORA-01001
-1001
causada se for tentada uma operao ilegal com um cursor. Como, por exemplo, fechar um
cursor no aberto.
Invalid_number
ORA-01722
-1722
causada se algum comando de SQL tentou uma converso de string para numrico quando a
string no representava um nmero vlido. Em comandos procedurais, a exception adquirida
Value_Error.
Login_denied
ORA-01017
-1017
No_data_found
ORA-01403
+100
causada se num comando Select Into nenhuma linha foi retornada ou foi feita referncia a
um elemento inexistente (deletado) de uma Nested Table ou uma referncia a um elemento
no-inicializado em uma tabela PL/SQL.
Not_logged_on
ORA-01012
-1012
causada se um programa de PL/SQL tenta fazer acesso ao banco de dados sem estabelecer conexo.
continua
Exception
Oracle Error
SQLCode
Condio
Program_error
ORA-06501
-6501
Rowtype_mismatch
ORA-06504
-6504
causada se a host varivel cursor e a PL/SQL varivel cursor usadas em uma associao
tiverem tipos de retorno incompatveis.
Self_is_null
ORA-30625
-30625
Storage_error
ORA-06500
-6500
Subscript_beyond_count ORA-06533
-6533
causada se for feita uma referncia a um elemento de uma Nested Table ou Varray usando
um nmero maior que o nmero de elementos da coleo.
Subscript_outside_limit
ORA-06532
-6532
causada se for feita uma referncia a um elemento de uma nested Table ou Varray usando
um nmero fora do intervalo legal (por exemplo, -1).
Sys_invalid_rowid
ORA-1410
-1410
Timeout_on_resource
ORA-00051
-51
Too_many_rows
ORA-01422
-1422
Value_error
ORA-06502
-6502
Zero_divide
ORA-01476
-1476
RAISE
Este verbo causa a exception no momento em que aplicado. Isto pode ser feito tanto para uma exception definida
pelo usurio quanto para uma exception predefinida.
RAISE_APPLICATION_ERROR
Esta procedure permite que seja feito o fornecimento de mensagens de erro a partir de subprogramas armazenados
no banco de dados ou de database triggers.
Onde:
<erro> Corresponde ao nmero do erro, podendo variar de -20.000 a -20.999. Deve ser um nmero inteiro.
Nesse intervalo de valores no existem erros do Oracle. Esse intervalo foi reservado para erros do usurio.
<mensagem> Corresponde mensagem que desejamos enviar. Pode ser uma string de at 2.048 bytes de
comprimento.
TRUE / FALSE O terceiro parmetro opcional. Se for enviado True, indica que o erro ser colocado na pilha de
erros anteriores. Caso o valor seja False (default), o erro substituir todos os erros anteriores.
WHEN OTHERS
Podemos utilizar a sintaxe When Others se desejarmos capturar, dentro do programa, qualquer outra ocorrncia
no prevista dentro da lista de exceptions (predefinidas ou do usurio).
muito comum a utilizao conjunta da sintaxe When Others e das funes SqlCode e SqlErrm.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1285
ITERAES
EXIT
O comando Exit tem a finalidade de encerrar um Loop (qualquer das formas). Quando o comando Exit executado,
o loop completado incondicionalmente e o controle passa para o prximo comando.
A clausula When oferece uma forma condicional de interrompermos o processamento.
A presena do Label indica que o comando tambm qualificvel com a utilizao de um Label precedente e, desta
forma, o processo repetitivo pode ser nomeado.
FORALL
Este comando indica PL/SQL Engine para preparar toda a coleo de entrada (Bulk Bind) antes de envi-la SQL Engine.
O comando SQL presente na sintaxe pode ser Insert, Update ou Delete, fazendo referncia a elementos da
coleo (a SQL Engine executa um comando Select para cada ndice no intervalo).
As fronteiras (<valor inferior> e <valor superior>) devem especificar um intervalo vlido de ndices numricos
consecutivos (no precisa ser a coleo inteira; pode ser parte da coleo, desde que seja consecutiva).
A clusula Save Exceptions indica que o comando deve continuar a execuo mesmo que sejam adquiridas
exceptions, as quais devem ser armazenadas em uma coleo para tratamento posterior.
FOR LOOP
O comando For Loop determina que a seqncia de comandos seja executada um nmero fixo de vezes. O nmero
de iteraes conhecido (determinado) antes de o Loop ter incio.
GOTO
O comando GoTo efetua um desvio incondicional para um Label. O Label deve ser nico dentro do escopo e deve
preceder um comando ou um bloco PL/SQL. Alm de ser usado para desvios, um Label tambm serve como
qualificador de variveis, como foi comentado no item Qualificao, do tpico Declaraes.
A PL/SQL possui diversas estruturas de iterao, e raramente teremos necessidade de utilizar um comando GoTo.
Existem algumas situaes em que o comando GoTo no pode ser usado:
LOOP
A seqncia de comandos executada um nmero infinito de vezes ou at que seja interrompida por um comando Exit.
WHILE
O comando While corresponde a uma outra forma de Loop, em que estabelecemos uma condio de interrupo
na prpria sintaxe do comando.
DEMAIS COMANDOS
EXECUTE IMMEDIATE
Comandos de SQL dinmico so armazenados em strings e construdos pelo programa a tempo de execuo. Estas
strings devem conter um comando SQL ou um bloco de PL/SQL vlidos. Podem, ainda, conter argumentos (Bind)
a serem supridos durante a execuo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1287
Onde:
<string com comando dinmico> uma expresso que representa um comando SQL qualquer (exceto queries
que retornem mltiplas linhas) sem terminao ou um bloco de PL/SQL com terminao. Esta string pode
conter referncias a argumentos Bind. No podemos, porm, usar argumentos Bind para substituir nomes de
objetos dentro da string.
<argumento Bind> uma expresso cujo valor passado dinamicamente para o comando SQL ou bloco de
PL/SQL (o hint NoCopy no permitido em um Execute Immediate). Se no for especificado o modo do
parmetro, o default IN.
SQL dinmico suporta todos os tipos de dados de SQL (colees, Lobs, Refs, objetos), mas no suporta tipos especficos de PL/SQL (booleanos e
tabelas Index-By). Desta forma, tanto <varivel> quanto <argumento Bind> devem obedecer a esta regra.
FUNES
Em PL/SQL, podemos utilizar quase todas as funes de SQL diretamente nos comandos de atribuio ou em IFs.
A lista a seguir apresenta as funes de SQL vlidas em PL/SQL:
Numricas Simples Abs, Bitand, Ceil, Exp, Floor, Ln, Log, Mod, Power, Round, Sign, Sqrt, Trunc.
Trigonomtricas Acos, Asin, Atan, Atan2, Cos, Cosh, Sin, Sinh, Tan, Tanh.
Alfanumricas Chr, Concat, Initcap, Lower, Lpad, Ltrim, Nls_Initcap, Nls_Lower, Nls_Upper, Replace, Rpad,
Rtrim, Soundex, Substr, Substrb, Translate, Upper, Trim.
Alfanumricas que retornam Valores Numricos Ascii, Instr, Instrb, Length, Lengthb, Nlssort.
Datas Sysdate, Add_Months, Current_Date, Current_Timestamp, DBTimezone, Extract, From_Tz, Last_Day,
LocalTimestamp, Months_Between, New_Time, Next_Day, NumToDsInterval, NumToYmInterval, Round,
SessionTimeZone, Sysdate, SysTimestamp, To_DsInterval, To_Timestamp, To_Timestamp_Ltz, To_Timestamp_Tz,
To_YmInterval, Tz_Offset, Trunc.
Converso CharToRowid, Convert, HexToRaw, RawToHex, RowidToChar, To_Blob, To_Char, To_Clob, To_Date,
To_Multi_Byte, To_Nclob, To_Number, To_Single_Byte, Translate Using.
Sqlcode Retorna o cdigo associado ao ltimo erro ocorrido. Quando ocorre um erro na execuo de um
programa PL/SQL, podemos ter acesso ao cdigo para adotarmos as aes apropriadas. Isto se d atravs da
clusula Exception. A funo SqlCode obtm o cdigo ocorrido, o que permite o acesso mensagem de erro.
SqlErrm Retorna o texto correspondente ao erro ocorrido. Recebe como parmetro o cdigo do erro que
desejamos decodificar. O valor default para o parmeto o ltimo SQLCODE.
IF
O comando IF verifica uma condio e, dependendo do resultado, realiza uma ou outra ao. Permite a execuo
condicional de uma determinada ao.
Sintaxe 12.18 IF
A Sintaxe 12.18 apresenta a forma bsica de um comando IF. Observamos que a presena de um End If para
encerrar o comando necessrio. Mesmo quando utilizamos diversos Elseifs, apenas um End If necessrio.
Devemos considerar que o End If encerra o IF isolado.
A Sintaxe 12.19 complementa o comando IF com a lista de expresses vlidas.
NULL
Esse comando, explicitamente, indica que no h ao a ser feita. Serve para compor certas situaes em que um
comando exigido, mas nenhuma ao , realmente, necessria.
SELECT INTO
Dentro da PL/SQL, o comando Select ganha a clusula Into a fim de obter dados da linha lida para variveis do
programa. Desta forma poderemos manusear os dados obtidos.
A clusula Into segue imediatamente a lista de variveis da clusula Select e precede a clusula From.
Devemos informar uma rea de recepo capaz de comportar todos os dados lidos; caso contrrio receberemos erro
na execuo.
O comando Select Into somente faz leitura de uma row. Caso venhamos a selecionar mais de uma usando este
comando, ocorrer um erro (Too Many Rows) indicando o excesso. A leitura de diversas rows feita com o uso do
cursor ou com o acrscimo da clusula Bulk Collect.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1289
COLEES E REGISTROS
Uma coleo um grupo ordenado de elementos, todos do mesmo tipo. Cada elemento possui um nico subscrito
que determina o posicionamento do elemento na coleo.
A PL/SQL trabalha com trs tipos de colees: Nested Tables, Varrays e Index-by Tables.
NESTED TABLES
Dentro da PL/SQL, as Nested Tables so como arrays. Possuem, porm, duas diferenas significativas:
Arrays possuem fronteiras (limite), j Nested Tables no possuem. Desta forma, o tamanho de uma Nested Table
cresce dinamicamente.
Arrays devem ser densos, isto , ter subscritos consecutivos. No podemos remover elementos de um array.
Nested Tables podem ter elementos removidos, deixando de ser densa.
VARRAYS
Um Varray possui um tamanho mximo, que deve ser especificado a tempo de definio. Seu ndice possui,
implicitamente, a fronteira inferior de 1. A fronteira superior dada pelo limite estabelecido na definio.
O Oracle armazena os dados de um Varray no mesmo tablespace da tabela em que ele est declarado. Os dados
de uma Nested Table so armazenados em uma store table, que possui parmetros especficos de armazenamento.
Os Varrays tambm podem ser armazenados fora da tabela (em Lobs).
Quando armazenados no banco de dados, os Varrays guardam a ordem e subscritos. Nested Tables no.
INDEX-BY TABLES
Index-By Tables so semelhantes a Nested Tables em diversos pontos. So mantidos para compatibilidade com a
verso 2 da PL/SQL. Em aplicaes antigas, devemos continuar usando Index-By Tables para compatibilidade. Em
novas aplicaes, devemos usar sempre Nested Tables para flexibilidade.
A tempo de execuo, Index-By Tables tornam-se non-null automaticamente. Nested Tables tornam-se nonnull apenas quando associamos um valor explicitamente.
Nested Tables podem ficar Null, mas Index-By Tables no podem. A exception Collection_Is_Null aplicvel
apenas a Nested Tables.
Para Nested Tables o subscrito pode variar de 1 a 2147483647. Para Index-By Tables, o intervalo vlido varia de
2147483647 a 2147483647.
Os subscritos para uma Nested Table so validados. Para as Index-By Tables no so. Assim, as exceptions
Subscript_Outside_Limit e Subscript_Beyound_Count so aplicveis apenas a Nested Tables.
Para estender uma Nested Table, devemos usar a procedure Extend. Para estender uma Index-By Table basta que
especifiquemos subscritos maiores.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1291
MANIPULANDO COLEES
As colees possuem mtodos, que so funes predefinidas com aes especficas que agem sobre as colees
facilitando sua manipulao.
Os seguintes mtodos so aplicveis a colees:
Tabela 12.03 Mtodos para Colees
Mtodo
Tipo
Parmetro
Significado
Exists
Function
ndice do elemento
Count
Function
Limit
Function
Retorna a quantidade mxima de elementos da coleo. Para Nested Tables retorna Null.
First e Last
Function
Prior e Next
Function
ndice do elemento
Retorna o ndice vlido anterior (ou posterior) relativo ao ndice recebido como parmetro.
Extend
Procedure
Trim
Procedure
Delete
Procedure
Condio
Collection_is_null
causada se forem aplicados mtodos (exceto Exists) ou associao de valores a uma Nested Table ou Varray no
inicializados.
No_data_found
causada se foi feita referncia a um elemento inexistente (deletado) de uma Nested Table ou uma referncia a um
elemento no inicializado em uma Index-By Table.
Subscript_beyond_count
causada se for feita uma referncia a um elemento de uma coleo usando um ndice maior que o nmero de elementos
da coleo.
Subscript_outside_limit
causada se for feita uma referncia a um elemento de uma Nested Table ou Varray usando um nmero fora do intervalo
legal (por exemplo 1).
Value_error
REGISTROS
Um registro nada mais que uma rea estruturada. Um grupo de itens de dados relacionados e armazenados em
campos contendo seu prprio nome e tipo de dado.
Na declarao de um registro, podemos associar nesta estrutura elementos com os tipos escalares, Varrays, Nested
Tables e objetos.
A declarao de tipo no cria uma rea para recepo dos dados. Apenas cria o layout da rea. indispensvel a
criao da varivel com o tipo definido para que seja possvel a utilizao da rea.
Os campos em um registro so referenciados pelo nome.
A manipulao de um registro similar utilizao do %RowType que corresponde, na verdade, a um registro
(com o layout da tabela ou das colunas selecionadas pelo cursor).
SUBPROGRAMAS E PACOTES
SUBPROGRAMAS
Subprogramas so blocos de PL/SQL que tm nome e, portanto, podem ser chamados de outros blocos. Alm desta
caracterstica, os subprogramas podem receber parmetros formais em vez das variveis de substituio.
A PL/SQL possui dois tipos de subprogramas: Procedures e Functions.
De um modo geral, so bastante semelhantes as caractersticas dos dois tipos de subprogramas da PL/SQL. As
semelhanas e diferenas esto relacionadas a seguir:
Os subprogramas, como todos os blocos de PL/SQL, tambm possuem uma rea para declarao de variveis,
uma rea para desenvolvimento da lgica e uma rea opcional para tratamento de erros.
Os subprogramas podem ser armazenados no banco de dados e acionados por qualquer programa aplicativo
que tenha autorizao de execuo.
Uma Procedure acionada como um comando de PL/SQL, isto , isolada. No faz parte de expresses.
Uma funo, para ser acionada, deve fazer parte de uma expresso PL/SQL (por exemplo, uma atribuio a
uma varivel).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1293
PARMETROS
Os subprogramas recebem informao dos blocos que os acionaram atravs de parmetros. Estes parmetros so
chamados de formais.
Como apresentado na Sintaxe 12.24, um parmetro pode ser definido de trs formas:
IN Indica um parmetro de entrada. Dentro do subprograma, um parmetro do tipo IN funciona como uma
constante, isto , podemos ler seu valor, porm no podemos fazer qualquer tipo de atribuio a eles. Caso o
modo no seja informado, este o modo default.
A transferncia de informaes entre o bloco principal e a procedure pode ser feita de duas formas: com o valor ou
atravs de uma varivel. Estas duas sintaxes so vlidas, porque o parmetro de entrada.
OUT Indica um parmetro de sada. Dentro do subprograma, um parmetro do tipo OUT pode receber
atribuies, porm no pode ter seus valores consultados de nenhuma forma.
Um parmetro OUT s pode ser passado atravs de uma varivel porque o valor que atribuirmos ao parmetro no
subprograma ser atribudo varivel que for passada como parmetro.
Outra caracterstica do modo OUT que, ao iniciar o subprograma, o Oracle associa Null ao parmetro OUT. Desta
forma, se associarmos, dentro do subprograma, um valor ao parmetro, ao encerrarmos a rotina o valor atribudo
ser retornado ao bloco chamador, porm, se esta ao no for feita, ser retornado Null.
IN OUT Indica um parmetro que ser usado simultaneamente como entrada e como sada. Dentro do
subprograma, poderemos ler seu valor e atribuir um novo valor a ele.
Para passarmos valor do bloco principal para o subprograma, obrigatoriamente, devemos passar o parmetro
atravs de uma varivel, porque o valor, apesar de ser lido, tambm receber uma atribuio. E para que o resultado
seja transferido para o bloco principal h necessidade de se informar uma varivel.
Quando definimos um parmetro com o modo IN, podemos atribuir um valor default para o caso de o parmetro
no ser informado.
Hint NOCOPY O Hint NOCOPY indica ao Oracle que a passagem dos parmetros de sada (OUT ou IN OUT)
deve ser feita por referncia.
Posicional A passagem se dar exatamente na ordem da declarao dos parmetros, no podendo haver falhas,
exceto para os parmetros finais, se forem de entrada e tiverem um valor default definido.
Nomeada A passagem se dar em uma ordem aleatria de acordo com o nome do parmetro que ser informado
na passagem.
Esta sintaxe permite, adicionalmente, que informemos os parmetros na ordem que desejarmos.
DECLARAES FORWARD
A PL/SQL exige que se declare um subprograma antes de podermos utiliz-lo. Se desejssemos criar dois
procedimentos mutuamente recursivos, esta regra impediria essa forma de utilizao.
Como soluo de contorno para este tipo de situao, a PL/SQL fornece uma forma de declarao parcial chamada
de declarao forward que interrompe a declarao da procedure ou funo aps a definio dos parmetros (para
as procedures) ou do tipo de retorno (para as funes), permitindo que o compilador realize a validao da chamada
do subprograma mesmo sem ter informaes sobre o corpo (ou lgica) deste.
Posteriormente, repete-se a definio do subprograma, agora contendo a chamada e a lgica.
CLUSULA AUTHID
A clusula AuthId tem a finalidade de indicar ao Oracle de que usurio devem ser obtidos os privilgios e resolvidas
as referncias externas a tempo de execuo. Quando especificamos AuthId Definer (default), os privilgios e as
referncias externas so resolvidos no schema do dono da rotina. Quando especificamos a clusula AuthId
Current_User, os privilgios do executor da rotina so verificados a tempo de execuo e as referncias externas so
resolvidas no schema deste executor, presentes em:
CLUSULA AS LANGUAGE
Esta clusula indica ao Oracle que a rotina, na verdade, no est escrita em PL/SQL e sim na linguagem especificada (C
ou Java). Na verso 8, tnhamos a clusula As External; no entanto, a Oracle recomenda que seu uso seja descontinuado.
CLUSULA DETERMINISTIC
Indica ao Oracle que a rotina produzir sempre um mesmo resultado para cada valor de parmetro, ou seja, se
repetirmos os mesmos parmetros para a funo ela produzir o mesmo resultado. Esta clusula indispensvel
para a criao de um ndice baseado na funo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1295
TABLE FUNCTIONS
So funes que produzem uma coleo de linhas (Nested Table ou Varray) como resultado (clusula Return) e que
podem ser consultadas como se fossem uma tabela, isto , usando-se a clusula From do Comando Select.
CLUSULA PIPELINED
Indica que o resultado da Table Function pode ser obtido medida que este for produzido, ou seja, as linhas so
retornadas iterativamente em vez de ocorrerem somente ao trmino da execuo.
A opo Using <implementation type> indica que deve ser feita interface com uma ODCITable.
CLUSULA PARALLEL
um hint de otimizao que indica que a funo pode ser executada a partir de um servidor paralelo em uma operao
paralela. Funes deste tipo no podem fazer uso de estados da sesso tais como variveis de pacote e variveis que no
possam ser compartilhadas atravs de servidores paralelos. Paralelismo no faz parte do estudo deste material.
CLUSULA AGREGATE
Identifica esta funo como uma funo de agregao. Na clusula Using devemos especificar o nome do tipo de
implementao da funo associado a ODCIAggregate routines.
OVERLOADING
A PL/SQL permite a definio de dois subprogramas com o mesmo nome desde que seus parmetros formais sejam
diferentes em nmero, ordem ou grupo familiar (por exemplo Integer e Real so tipos diferentes, porm pertencem
ao mesmo grupo familiar). Esta caracterstica chamada de Overloading.
Como restrio, temos que essa tcnica s se aplica a subprogramas locais ou subprogramas definidos em pacotes
(sero vistos em outro tpico). Alm disso, no podemos overload dois subprogramas se seus parmetros diferirem
apenas em relao aos nomes ou aos modos dos parmetros. E, finalmente, no podemos overload duas funes
em que haja diferena apenas no tipo de retorno (mesmo que estejam em grupos familiares diferentes).
STORED SUBPROGRAM
O objetivo de armazenarmos uma procedure ou function no banco de dados permitir que a rotina seja
compartilhada por diversas aplicaes.
A sintaxe para a criao de uma rotina no banco de dados semelhante sintaxe para criao de uma rotina
dentro de um bloco principal. A diferena est na clusula Create, que estabelece o armazenamento da rotina no
banco de dados.
CALL
Executa uma rotina (procedure ou funo isolada, de pacote ou de tipo) de dentro do SQL. A clusula INTO indica
uma varivel para receber o retorno da funo (s aplicvel a funes) e a clusula INDICATOR especifica o valor
ou condio da varivel host.
Esta sintaxe pode ser usada em Triggers.
PACKAGES
Um package uma rea para armazenamento de subprogramas, tipos, constantes, cursores e variveis de PL/SQL.
Um package definido em duas partes: uma parte de especificao e uma parte de corpo.
ESPECIFICAO
A especificao a interface com as aplicaes. nela que declaramos os tipos, variveis, constantes, excees,
cursores e subprogramas que desejamos que sejam visveis e compartilhveis pelas aplicaes. Tudo que for definido
na parte de especificao pode ser compartilhado.
A definio dos subprogramas e cursores no completa; fazemos apenas uma definio do tipo Forward, uma vez
que as aplicaes s necessitam saber quais os parmetros a serem passados para a rotina (ou cursor) e quais os
retornos fornecidos. No h necessidade de se saber como a rotina efetua a operao.
Na Sintaxe 12.26 est definida a parte de especificao de um pacote. Apesar de a sintaxe do pacote lembrar a
sintaxe de definio de rotinas, os pacotes diferem das rotinas nos seguintes aspectos: no podem ser chamados,
no podem ser parametrizados e no podem ser definidos dentro de outros pacotes.
O objetivo de empacotar primeiramente organizacional. O pacote oferece a possibilidade de juntarmos itens e
subprogramas que realizam aes associadas.
Observe que as informaes declaradas no pacote determinam quais os nomes das rotinas e itens, os parmetros
recebidos e o retorno esperado. No definimos detalhes de implementao. Isto ser feito no corpo.
Na parte de corpo do pacote, definimos por completo todas as rotinas. No s aquelas declaradas na parte de
especificao, como tambm todas aquelas rotinas que sero chamadas pelas outras, mas que no desejamos
disponibilizar diretamente para as aplicaes.
Definimos tambm, agora, os cursores por completo, alm de todas as variveis que venham a ser usadas pelas
rotinas e que no desejamos disponibilizar para as demais aplicaes.
Observe a presena da clusula AuthId na parte de especificao. Ela indica que para todas as rotinas do pacote
sero utilizados os privilgios e resolvidas referncias externas a tempo de execuo no schema do autor do pacote
ou no schema do executor, de acordo com o que tiver sido definido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1297
CORPO DO PACOTE
O corpo implementa detalhes e declaraes privadas que so invisveis pelas aplicaes.
Na Sintaxe 12.27, observamos que, sintaticamente, a definio da especificao e do corpo do pacote so similares.
A diferena que na parte de especificao as definies so do tipo Forward, enquanto na parte de corpo as
definies so completas.
No corpo, aparece ainda a possibilidade de definirmos uma rea de lgica (<inicializao>) que ser executada na
primeira vez que o pacote for utilizado em uma sesso do usurio. Nessa rea, podemos estabelecer aes para
inicializao de variveis, cursores, etc.
Uma vez que apenas a parte de especificao utilizada para compilao dos programas que faam uso dos pacotes,
podemos alterar o corpo do pacote sem haver necessidade de recompilar os programas que o usam.
Como restries definio e acesso a pacotes, temos:
Um pacote no pode ser chamado diretamente. Faremos referncia aos objetos declarados dentro do pacote.
Um pacote no pode receber parmetro. Somente as rotinas declaradas no pacote podem receber parmetro.
Um pacote no pode ser aninhado. No podemos declarar um pacote dentro de outro pacote.
No podemos fazer referncia remota a variveis definidas em pacotes (direta ou indiretamente). Se utilizarmos
remotamente uma rotina que faa referncia a uma varivel de pacote, receberemos erro.
No podemos fazer referncia a variveis Bind dentro de pacotes. Variveis Bind so aquelas variveis definidas
no ambiente do aplicativo (por exemplo, :msg no SQL*Plus).
O PACOTE DBMS_FLASHBACK
Este pacote tem a finalidade de habilitar ou desabilitar um ponto especfico do tempo para acesso a informaes j
modificadas no banco de dados.
Podemos obter informaes de uma verso (ou momento) do banco de dados anterior ao momento atual. Quando
habilitamos este pacote, a sesso do usurio utiliza uma verso Flashback do banco de dados
Este pacote pode ser usado para recuperarmos dados removidos (Delete) incorretamente, verso original de dados
que foram modificados, etc.
Para realizarmos estas aes com sucesso, o DBA deve ser informado, para que tenhamos autorizao de uso do
pacote e para habilitar a reteno das informaes pelo perodo de tempo de que viermos a necessitar.
Tipo
Descrio
Enable_At_Time
Procedure
Habilita a sesso para o modo de Flashback. O controle do tempo feito em relao ao SCN mais
prximo da data e hora informados como parmetro.
Enable_At_System_Change
Procedure
Habilita a sesso para o modo de Flashback. Passamos como parmetro, diretamente, o SCN desejado.
Get_System_Change_Number
Function
Disable
Procedure
Quando uma transao que modifica o banco de dados encerrada com sucesso, ela recebe um nmero de controle
chamado SCN (System Change Number). Este nmero gravado no arquivo de Log e era usado, at esta verso,
apenas para o controle do processo de recuperao.
Na verso 9i, podemos usar o SCN, tambm, para identificar um ponto dentro do arquivo de Log onde desejamos
estabelecer uma imagem do banco de dados para obteno de informaes do passado. Este pacote se utiliza desta
informao para determinao deste ponto no tempo.
O PACOTE DBMS_LOB
Large Objects ou Lobs so tipos de dados que podem armazenar informaes de at 4GB de dados binrios (imagens,
sons, vdeos, etc.) ou caracteres.
Internos So aqueles armazenados em tablespaces, dentro do banco de dados (Blob, Clob ou Nclob).
Externos So armazenados fora do banco de dados (Bfiles). Na coluna com este tipo, existe uma referncia ao
arquivo existente no sistema operacional (Bfile).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1299
Tipo
Aplicvel a
Descrio
Call
Constante
Lobs Temporrios
File_readonly
Constante
Bfiles
Determina se o arquivo deve ser usado somente para leitura. O valor atual 0, indicando que
somente leituras so permitidas.
Lobmaxsize
Constante
Todos
Read_Only
Constante
Todos
Read_Write
Constante
Todos
Session
Constante
Lobs Temporrios
Access_Error
Exception
Todos
Invalid_argval
Exception
Todos
Indica que o parmetro informado invlido, fora do intervalo possvel ou Null (-21560).
Invalid_directory
Exception
Todos
Invalid_operation
Exception
Todos
No_Data_Found
Exception
Todos
Noexist_Directory
Exception
Todos
Nopriv_Directory
Exception
Todos
Open_TooMany
Exception
Todos
Unopened_file
Exception
Todos
Compare
Function
Componente
Tipo
Aplicvel a
Descrio
Fileexists
Function
Bfiles
Fileisopen
Function
Bfiles
GetChunkSize
Function
Blobs e Clobs
Retorna a quantidade de espao usado em um Lob Chunk para armazenamento do valor do Lob.
Getlength
Function
Todos
Instr
Function
Todos
IsOpen
Function
Todos
Esta funo indica se o Lob j est aberto. Esta rotina aplicvel a Lobs internos e externos.
IsTemporary
Function
Lobs Temporrios
Substr
Function
Todos
Append
Procedure
Close
Procedure
Todos
Fecha um Lob (interno ou externo) aberto previamente. Nenhum erro retornado se o Bfile
existir, mas no estiver aberto. Ocorrer um erro se o Lob no estiver aberto.
Copy
Procedure
CreateTemporary
Procedure
Blobs e Clobs
Cria um Blob ou Clob temporrio e seu correspondente ndice no tablespace temporrio default
do usurio.
Erase
Procedure
Fileclose
Procedure
Bfiles
Filecloseall
Procedure
Bfiles
Filegetname
Procedure
Bfiles
Fileopen
Procedure
Bfiles
FreeTemporary
Procedure
Lobs Temporrios
Libera o Lob temporrio (Blob ou Clob) do tablespace temporrio default do usurio. Aps a
execuo desta rotina, o locator liberado marcado como invlido.
Loadfromfile
Procedure
Open
Procedure
Todos
Read
Procedure
Todos
Trim
Procedure
Write
Procedure
Blobs e Clobs
WriteAppend
Procedure
Blobs e Clobs
As funes do pacote Dbms_Lob retornam NULL se quaisquer dos valores dos parmetros para estas rotinas forem NULL ou invlidos. J as
procedures causam exceptions.
O Oracle9i suporta a criao, liberao, acesso e atualizao de Lobs temporrios. Seu tempo de vida padro uma
sesso, porm podem ser liberados a qualquer momento pela aplicao. So ideais como reas de trabalho temporrias
para manipulao de dados. Como no so logados nem so armazenadas informaes para redo, eles possuem
uma performance melhor que Lobs persistentes.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1301
O PACOTE DBMS_OUTPUT
Este pacote tem a finalidade de enviar mensagens a partir de procedures, packages ou triggers. Ele se utiliza de um
buffer em memria para transferncia das mensagens.
Quando um programa envia mensagens atravs do pacote Dbms_Output, essas mensagens so armazenadas na
rea de buffer e somente apresentadas ao trmino do programa.
Caso estejamos executando o programa no SQL*Plus ou Server*Manager, basta que executemos o comando Set
Serveroutput On para que todas as mensagens enfileiradas pelo programa sejam apresentadas.
Se estivermos executando rotinas encadeadas ou blocos annimos, podemos obter as linhas geradas pelo programa
anterior usando a rotina Get_Line do prprio pacote.
No quadro abaixo, apresentamos os componentes do pacote.
Tabela 12.07 Componentes do Package Dbms_Output
Componente
Tipo
Descrio
Enable
Procedure
Disable
Procedure
Put
Procedure
New_Line
Procedure
Put_Line
Procedure Inclui uma informao na rea de buffer e adiciona, simultaneamente, o caracter para quebra de linha.
continua
Componente
Tipo
Descrio
Get_line
Procedure
Get_lines
Procedure
Chararr
Type
Tipo tabela de varchar2(255). Pode ser usado para obteno de diversas linhas da rea de buffer.
A Sintaxe 12.31 mostra as rotinas que compem o pacote com seus respectivos parmetros.
O PACOTE DBMS_PIPE
O pacote DBMS_PIPE permite que duas ou mais sesses na mesma instncia se comuniquem. As informaes so
enviadas atravs de uma rea de memria chamada Pipe. Estas reas so armazenadas na SGA.
De acordo com os requisitos de segurana de nossa instalao, podemos usar pipes pblicos ou privados.
Podemos criar um Pipe Pblico explicita ou implicitamente.
A criao implcita ocorre quando fizermos a primeira referncia ao Pipe e desaparecer quando no mais contiver dados.
A criao explcita ocorre quando utilizamos a funo Create_Pipe e informamos o parmetro Private com o valor
False. Sua destruio tambm dever ser explcita com a rotina Remove_Pipe.
O domnio do Pipe Pblico o schema no qual ele foi criado, implicita ou explicitamente.
Cada Pipe Pblico trabalha assincronamente. Qualquer nmero de usurios (schemas) poder gravar para um Pipe
Pblico (se tiver permisso de Execute no pacote Dbms_Pipe e conhecer seu nome).
Qualquer usurio com os privilgios e conhecimentos apropriados poder ler informaes de um Pipe Pblico.
Porm, uma vez que a informao lida, o Pipe esvaziado e a informao no fica mais disponvel para outros
leitores do mesmo Pipe.
O pacote Dbms_Pipe fornece as rotinas necessrias aos procedimentos de criao, leitura e gravao de informaes
em um Pipe (seja ele pblico ou privativo).
A criao de um Pipe Privativo explcita atravs da chamada da funo Create_Pipe. Uma vez criado, o Pipe
Privativo permanece na memria compartilhada (SGA) at que seja explicitamente removido (Remove_Pipe ou
que a instncia seja shutdown).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1303
Sesses que estiverem executando sob o mesmo userid que o criador do Pipe.
Stored subprograms executando no mesmo privilgio de domnio do userid criador do Pipe.
Os usurios que estabeleceram conexo como SYSDBA ou INTERNAL.
Este pacote funciona com uma rea de buffer local, da mesma forma que os pacotes estudados at agora. As
mensagens a serem enviadas para um determinado Pipe devem ser armazenadas localmente e posteriormente
enviadas, como um pacote, para o Pipe desejado.
Inicialmente, usamos a procedure Pack_Message, que armazena a mensagem para a rea de buffer local da sesso.
Aps termos juntado todas as mensagens desejadas no buffer, podemos envi-las com a procedure Send_Message.
Esta rotina envia todas as mensagens armazenadas no buffer local.
A leitura se processa de forma inversa, devemos obter a informao do Pipe, usando a procedure Receive_Message
e armazen-la no buffer local da sesso, e em seguida desmembr-la com a procedure Unpack_Message.
O quadro a seguir apresenta os diversos componentes deste pacote.
Tabela 12.08 Componentes do Package Dbms_Pipe
Componente
Tipo
Descrio
Create_Pipe
Function
Pack_Message
Procedure
Send_Message
Function
Esta funo envia uma mensagem para o Pipe. No caso de o Pipe no existir, feita a criao implcita
como pblico.
Receive_Message
Function
Esta funo recebe uma mensagem do Pipe e a coloca no buffer local da sesso.
Next_Item_Type
Function
Unpack_Message
Procedure
Remove_Pipe
Function
Purge
Procedure
Reset_Buffer
Procedure
Unique_Session_Name Function
Esta funo retorna um nome que nico para todas as sesses que estiverem atualmente com conexo
estabelecida ao banco de dados.
O PACOTE DBMS_RANDOM
Este pacote tem a finalidade de gerar nmeros randmicos. Este gerador produz nmeros inteiros de 8 dgitos.
Para que a gerao tenha sucesso, devemos, como primeira etapa, inicializar a gerao fornecendo um nmero de
mais de 5 dgitos.
Ao trmino da etapa de obteno dos nmeros randmicos devemos encerrar a execuo do pacote com o uso da
rotina Terminate.
Tipo
Descrio
Initialize
Procedure
Inicializa o gerador. Deve-se fornecer como parmetro um nmero com mais de 5 dgitos.
Seed
Procedure
Random
Function
Terminate
Procedure
Normal (*)
Function
Seed (*)
Procedure
String (*)
Function
Obtm a string randmica. Deve receber dois parmetros. O primeiro corresponde a um caracter numrico ou
alfanumrico e o segundo a um nmero que indica o tamanho do resultado.
Value (*)
Function
Obtm o nmero randmico. Podem ser informados dois parmetros indicativos do intervalo desejado para
gerao do nmero randmico. O resultado Number.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1305
O PACOTE DBMS_ROWID
Cada linha no banco de dados tem um endereo. Este endereo fornecido pela pseudocoluna Rowid.
Ao consultarmos o valor de Rowid para uma determinada linha, obtemos uma informao que representa seu endereo.
O Rowid das verses anteriores 8 era composto de:
<bloco> Nmero do bloco, em relao ao arquivo, onde se encontra a linha que est sendo endereada.
<linha> Nmero da linha dentro do bloco (iniciando em zero).
<arquivo> Nmero do arquivo onde se acha a linha.
A partir da verso 8, o formato da verso 7 (e anteriores) ganhou o nome de Rowid restrito, uma vez que seu
formato foi estendido para incorporar um data object number, que corresponde a um nmero associado a cada
segmento do banco de dados. As views do dicionrio de dados User_Objects, Dba_Objects e All_Objects fornecem
o valor desse nmero para cada segmento criado no banco de dados.
Esse nmero foi incorporado para suporte a tabelas e ndices particionados.
Esse pacote tem a finalidade de desmembrar essa pseudocoluna chamada Rowid. Podemos obter informaes
sobre cada uma das partes que compem essa pseudocoluna ou, ainda, convert-lo do formato restrito (verso 7 e
anteriores) para o formato estendido desta verso (ou vice-versa).
O quadro a seguir apresenta um resumo de todos os componentes deste pacote e sua finalidade.
Tabela 12.10 Componentes do Package Dbms_Rowid
Componente
Tipo
Descrio
Rowid_Create
Function
Rowid_Info
Procedure
Rowid_Type
Function
Retorna o tipo do Rowid. Ser zero (0) se o Rowid for restrito e 1 (um) se estendido.
Rowid_Object
Function
Rowid_Relative_Fno
Function
Rowid_Block_Number
Function
Rowid_Row_Number
Function
Rowid_To_Absolute_Fno
Function
Rowid_To_Extended
Function
Rowid_To_Restricted
Function
Rowid_Verify
Function
Rowid_Invalid
Exception
Ser adquirida se o SqlCode retornado da execuo de uma das rotinas for 1410.
A maioria das rotinas deste pacote composta de funes. Essas funes podem ser usadas tanto em PL/SQL quanto em comandos de SQL.
O PACOTE UTL_FILE
O pacote Utl_File possui um conjunto de rotinas que tm a finalidade de permitir o acesso ou gerao de arquivos
externos ao banco de dados. As rotinas so similares aos processos de manipulao de arquivos convencionais.
Para utilizao deste package, o DBA deve acrescentar o parmetro UTL_FILE_DIR ao arquivo de inicializao INIT.ORA a fim de determinar
quais diretrios esto disponveis para acesso.
Sabemos que a PL/SQL executa no ambiente Server; assim, os arquivos lidos ou gravados com o uso deste pacote sero lidos ou gerados no
ambiente servidor (no ambiente em que se acha o banco de dados).
Este pacote no declara apenas procedures e funes, so declaradas excees e tipos tambm.
O quadro abaixo apresenta um resumo dos diversos objetos presentes no pacote.
Tabela 12.11 Componentes do Package UTL_FILE
Componente
Tipo
Descrio
Invalid_Path
Exception
Invalid_Mode
Exception
Invalid_Filehandle
Exception
Invalid_Operation
Exception
Read_Error
Exception
Write_Error
Exception
Internal_Error
Exception
Fopen
Function
Is_Open
Function
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1307
Componente
Tipo
Descrio
Fclose
Procedure
Fclose_All
Procedure
Get_Line
Procedure
Put
Procedure
Put_Line
Procedure
New_Line
Procedure
Putf
Procedure
Fflush
Procedure
File_Type
Tipo
Tipo Record que armazena as informaes referentes ao arquivo aberto. O contedo deste tipo privativo
do pacote Utl_File. Os usurios do pacote no devem fazer referncia ou modificar seus componentes.
A Sintaxe 12.35 a seguir apresenta as rotinas presentes no pacote e seus respectivos parmetros.
Este pacote trabalha de forma semelhante ao pacote Dbms_Output no que se refere area de trabalho. Ele se utiliza
de um buffer em memria para transferncia dos dados a serem armazenados ou lidos do arquivo em disco.
Quando um programa envia linhas para gravao atravs do pacote Utl_File, estas linhas so armazenadas na rea
de buffer e transferidas para disco quando o buffer se enche ou quando acionamos a rotina Fflush, que fora a
gravao do buffer para disco.
PL/SQL WRAPPER
Muitas vezes, necessitamos enviar aplicaes de PL/SQL para instalao em ambientes externos ao de nossa
instalao. O cdigo enviado, de um modo geral, fica exposto e passvel de modificaes indesejveis.
A rotina Wrapper tem a finalidade de criptografar o cdigo-fonte de tal forma que somente o Oracle tenha condies
de ler e compilar o texto gerado.
A rotina Wrapper converte o cdigo-fonte de PL/SQL em uma forma intermediria de cdigo-objeto.
O cdigo-objeto gerado portvel como se fosse o prprio cdigo-fonte. O compilador PL/SQL reconhece e carrega
o cdigo gerado pelo Wrapper automaticamente.
A rotina Wrapper no executada pelo banco de dados; uma rotina externa e deve ser executada no sistema
operacional em uso.
Caso o arquivo de sada no seja especificado, ser gerado com o mesmo nome do arquivo de entrada, com a
diferena apenas da extenso.
No deve haver espao nem antes nem depois dos sinais de igual.
A extenso default para o arquivo de entrada .SQL e para o arquivo de sada, .PLB.
VARIVEIS CURSOR
Uma varivel cursor (como um cursor) aponta para a linha corrente da tabela resultante gerada por uma query
que retorne um nmero indefinido de linhas.
Uma varivel cursor, porm, possui uma diferena marcante em relao a um cursor: no est associada a uma
query especfica. Pode ser associada a diversas queries ao longo de sua existncia. Elas podem, ainda, ser definidas
como parmetros de procedimentos.
A criao de uma varivel cursor similar declarao de outros tipos (Nested Table, Varray, Record); inicialmente
devemos definir o tipo e posteriormente as variveis com aquele tipo.
Na Sintaxe 12.37, temos a definio de um tipo Cursor. O <tipo retorno> que aparece na sintaxe representa o
layout da rea de retorno, podendo ser definido como um record ou uma row em uma tabela do banco de dados.
Observe que a clusula Return opcional, indicando que o tipo pode determinar ou no o layout do retorno.
A tempo de Open da varivel cursor que determinamos a query a ser associada varivel.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1309
Na Sintaxe 12.38, vemos os trs comandos para manipulao de variveis do tipo Cursor. Para variveis cursor no
temos o comando Cursor Loop.
Em um pacote podemos definir o tipo cursor, no a varivel global. O que criamos na definio de uma varivel
cursor um ponteiro e no um item; desta forma no possui um estado persistente, no podendo, assim, ser
definida em pacotes.
Quando declaramos uma varivel cursor como parmetro formal de um subprograma que obtm linhas desta varivel, devemos especificar o
parmetro no modo IN (ou IN OUT). Se o subprograma tambm abrir a varivel cursor, devemos especificar o modo IN OUT.
OPEN-FOR DINMICO
Para efetuarmos o processamento de uma consulta, que retorne diversas linhas, de forma dinmica, deveremos
utilizar trs comandos: Open uma varivel cursor For uma consulta de mltiplas linhas, ento, Fetch as linhas para
variveis locais da aplicao e, finalmente, quando todas as linhas tiverem sido processadas, Close a varivel cursor.
Na Sintaxe 12.39, apresentamos o comando Open For capaz de realizar uma consulta dinmica.
Onde:
<string dinmica> uma string que contm um comando SQL Select que retorna diversas linhas.
<Bind> uma expresso cujo valor passado dinamicamente para o comando SQL.
Qualquer argumento Bind na consulta avaliado somente quando o cursor aberto. Desta forma, para obtermos dados do cursor usando
diferentes valores de argumento, devemos reabrir a varivel cursor com os argumentos Bind contendo os novos valores desejados.
Os comandos Fetch e Close para uso com Open-For possuem a mesma sintaxe vista anteriormente. No foram repetidos.
TRIGGERS
Triggers so cdigos de PL/SQL armazenados no banco de dados, associados a uma tabela especfica e executados
implicitamente pelo Oracle na ocorrncia de um determinado evento.
A Oracle recomenda que limitemos o tamanho do cdigo de PL/SQL do trigger para algo em torno de 60 linhas.
Caso tenhamos necessidade de definir um trigger mais complexo, devemos criar stored procedures com aes
especficas e acionar estas rotinas dentro do trigger.
A Sintaxe 12.40 apresenta a criao de um Database Trigger. Esta sintaxe subdividida em trs partes:
Evento O evento corresponde ao momento em que o database trigger deve ser acionado pelo Oracle.
Tipo Um trigger pode ser de dois tipos: Comando ou Linha.
Um trigger de comando acionado de acordo com o evento, mas associado ao comando como um todo. Ou seja,
ser acionado antes ou depois de um determinado comando, independente de o comando atualizar uma ou mais
linhas. Este tipo de trigger no tem acesso s linhas atualizadas.
Um trigger do tipo Row acionado de acordo com o evento, mas uma vez para cada linha afetada pelo comando
disparado pelo usurio.
Sintaticamente, para indicao deste tipo de trigger, basta que especifiquemos a clusula For Each Row.
Inserting Retorna True se o trigger foi disparado por causa de um comando Insert.
Updating Retorna True se o trigger foi disparado por causa de um comando Update.
Deleting Retorna True se o trigger foi disparado por causa de um comando Delete.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1311
Create (o trigger disparado quando um comando Create adiciona um novo objeto ao dicionrio de dados).
Alter (o trigger disparado quando um objeto do dicionrio de dados modificado).
Drop (o trigger disparado quando um objeto do dicionrio de dados removido).
Analyze (o trigger disparado quando o Oracle colecionar ou deletar estatsticas ou validar a estrutura de um
objeto do dicionrio de dados).
Associate Statistics (o trigger disparado quando houver associao de estatsticas de determinado tipo a um
objeto do dicionrio de dados).
Audit (o trigger disparado quando ocorrer a auditoria sobre um objeto do dicionrio de dados).
Comment (o trigger disparado quando forem adicionados comentrios a um objeto do dicionrio de dados).
Disassociate Statistics (o trigger disparado quando houver desassociao de estatsticas de um objeto do dicionrio
de dados).
Grant (o trigger disparado quando um usurio der autorizao a outro usurio ou role).
Noaudit (o trigger disparado quando houver interrupo do processo de auditoria sobre um objeto do dicionrio
de dados).
Captulo 13
PROPRIEDADES DO FORMS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1313
ALERTA (ALERT)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
TTULO (TITLE)
Especifica o ttulo a ser apresentado para o objeto.
MENSAGEM (MESSAGE)
Determina a mensagem que ser apresentada pelo alerta.
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1315
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
INTERNACIONAL (INTERNATIONAL)
DIREO (DIRECTION)
Esta propriedade til apenas para aplicaes bidirecionais (National Language Support).
Especifica a direo de desenvolvimento do objeto. Trs valores so vlidos para esta propriedade: Default, Da
Direita para a Esquerda (para linguagens mostradas da direita para a esquerda) e Da Esquerda para a Direita (para
linguagens mostradas da esquerda para a direita).
Para a maioria dos objetos, excetuando-se itens de texto e itens de display (os itens da lista List items possuem
tambm a propriedade Estado Inicial do Teclado), esta a nica propriedade bidirecional.
A propriedade Direction do Form herdada das variveis NLS definidas no ambiente se seu valor no Form for Default.
Todos os objetos da aplicao (exceto os itens) herdam essa propriedade diretamente do mdulo Form se receberem o
valor default. Os itens herdam essa propriedade da canvas (que herda do mdulo Form).
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1317
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
NAVEGAO (NAVIGATION)
ESTILO DE NAVEGAO (NAVIGATION STYLE)
Esta propriedade determina o que ocorre quando o foco est sobre o ltimo item (relativamente seqncia de
navegao) de um bloco e o usurio aciona a ao de Prximo Item (Next Item), ou, inversamente, quando o foco
est posicionado sobre o primeiro item (relativamente seqncia de navegao) de um bloco e o usurio aciona
a ao de Item Anterior (Previous Item).
Existem trs opes de valor vlidas:
Mesmo Registro (Same Record) Corresponde opo default. Uma operao de Prximo Item (Next Item) movimenta
o foco para o primeiro item navegvel deste mesmo bloco sem mudar de registro.
Alterar Registro (Change Record) Uma operao de Prximo Item (Next Item) movimenta o foco para o
primeiro item navegvel deste mesmo bloco, porm, no prximo registro.
Alterar Bloco de Dados (Change Block) Uma operao de Prximo Item (Next Item) movimenta o foco para o
primeiro item navegvel do prximo bloco. Caso o foco esteja posicionado no primeiro item navegvel de um
bloco e for realizada uma operao de Item Anterior (Previous Item), o foco ser movido para o ltimo item
navegvel do bloco anterior.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1319
REGISTROS (RECORDS)
GRUPO DE ATRIBUTOS VISUAIS DO REGISTRO ATUAL (CURRENT RECORD VISUAL ATTRIBUTE GROUP)
Esta propriedade determina o nome de um grupo de atributos visuais que ser utilizado quando o item for parte do
registro corrente.
Essa propriedade pode ser definida em nvel de mdulo, bloco ou item. O nvel mais especfico se sobrepe ao
nvel mais genrico.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1321
APELIDO (ALIAS)
Estabelece um alias para a tabela qual o bloco de dados est associado. Por default, o Form Builder associa a
primeira letra correspondente ao nome da tabela. Essa propriedade de preenchimento obrigatrio para blocos de
dados que contenham colunas do tipo Ref.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1323
O banco de dados no permitir a atualizao da coluna se o usurio no tiver privilgio para tal, independente da opo definida no Forms.
INSERIR COLUNAS DE CONJUNTOS DE RESULTADOS DE PROCEDIMENTO (INSERT PROCEDURE RESULT SET COLUMNS)
Especifica o nome, tipo, tamanho e indicao de obrigatoriedade do conjunto de colunas associadas com o resultado
do procedimento para incluso de dados oriundos do Bloco de Dados. Esta propriedade s vlida se o tipo de
destino procedimento (Procedure).
ATUALIZAR COLUNAS DE CONJUNTOS DE RESULTADOS DE PROCEDIMENTO (UPDATE PROCEDURE RESULT SET COLUMNS)
Especifica o nome, tipo, tamanho e indicao de obrigatoriedade do conjunto de colunas associadas com o resultado
do procedimento para atualizao de dados oriundos do Bloco de Dados. Esta propriedade s vlida se o tipo de
destino procedimento (Procedure).
DELETAR COLUNAS DE CONJUNTOS DE RESULTADOS DE PROCEDIMENTO (DELETE PROCEDURE RESULT SET COLUMNS)
Especifica o nome, tipo, tamanho e indicao de obrigatoriedade do conjunto de colunas associadas com o resultado
do procedimento para excluso de dados oriundos do Bloco de Dados. Esta propriedade s vlida se o tipo de
destino procedimento (Procedure).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1325
BLOQUEAR COLUNAS DE CONJUNTOS DE RESULTADOS DE PROCEDIMENTO (LOCK PROCEDURE RESULT SET COLUMNS)
Especifica o nome, tipo, tamanho e indicao de obrigatoriedade do conjunto de colunas associadas com o resultado
do procedimento para bloqueio de dados oriundos do Bloco de Dados. Esta propriedade s vlida se o tipo de
destino procedimento (Procedure).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1327
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
INTERNACIONAL (INTERNATIONAL)
DIREO (DIRECTION)
Esta propriedade til apenas para aplicaes bidirecionais (National Language Support).
Especifica a direo de desenvolvimento do objeto. Trs valores so vlidos para esta propriedade: Default, Da
Direita para a Esquerda (para linguagens mostradas da direita para a esquerda) e Da Esquerda para a Direita (para
linguagens mostradas da esquerda para a direita).
Para a maioria dos objetos, excetuando-se itens de texto e itens de display (os itens da lista List items possuem
tambm a propriedade Estado Inicial do Teclado), esta a nica propriedade bidirecional.
A propriedade Direction do Form herdada das variveis NLS definidas no ambiente se seu valor no Form for
Default. Todos os objetos da aplicao (exceto os itens) herdam essa propriedade diretamente do mdulo Form se
receberem o valor default. Os itens herdam esta propriedade da canvas (que herda do mdulo Form).
Os itens de texto e de display, a tempo de desenvolvimento (no Form Builder), no possuem a propriedade Direction e sim as propriedades Justificao, Ordem de Leitura e Estado Inicial do Teclado, porm, na programao,
podemos definir Direction para todos os objetos, inclusive itens.
Para cada tipo de objeto esta propriedade pode ter uma forma especfica de afetar a apresentao. Por exemplo,
para um item do tipo Caixa de Verificao (Check Box), essa propriedade afeta a posio da caixa em relao ao
texto, a ordem de leitura da etiqueta (label) do objeto e o estado inicial do teclado quando o objeto recebe o foco.
Para detalhes especficos de cada elemento acione a opo Tpicos de Ajuda do Form Builder no menu Ajuda e
pesquise pelo tpico Language Direction.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1329
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
ATIVADO (ENABLED)
Esta propriedade indica se o objeto poder receber foco, seja atravs da navegao-padro (tecla Tab) ou atravs de
rotinas predefinidas (Next_Item, Go_Item, etc.).
O quadro a seguir mostra a relao entre a propriedade Ativado (Enabled) e a propriedade Navegvel com Teclado
(Keyboard Navigable).
KeyBoard Navigable
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
ETIQUETA (LABEL)
Esta propriedade armazena o texto que ser apresentado na etiqueta para um boto, caixa de checagem (Check
Box), boto de rdio (Radio Button), pgina Tab (usurio poder clicar no label para que a pgina de Tab
correspondente seja apresentada), item de menu ou que ser apresentado ao usurio para o preenchimento do
parmetro de substituio (do menu).
REGISTROS (RECORDS)
DISTNCIA ENTRE REGISTROS (DISTANCE BETWEEN RECORDS)
Esta propriedade determina a distncia entre as instncias dos itens em um bloco multi-record.
FSICO (PHYSICAL)
VISVEL (VISIBLE)
Esta propriedade determina se o objeto em questo ficar visvel quando a aplicao for inicialmente executada.
Essa propriedade pode ser modificada posteriormente por programao.
POSIO X (X POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade da esquerda para a direita, ou seja, o valor 0 corresponde exatamente
posio da linha esquerda da tela ou da canvas. A partir deste ponto e em direo ao lado direito da tela ou canvas,
esse valor crescente.
POSIO Y (Y POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade de cima para baixo, ou seja, o valor 0 corresponde exatamente posio da linha
superior da tela ou da canvas. A partir deste ponto e em direo parte inferior da tela ou canvas, esse valor crescente.
LARGURA (WIDTH)
Especifica a largura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
ALTURA (HEIGHT)
Especifica a altura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1331
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
PROMPT (PROMPT)
PROMPT (PROMPT)
Especifica o texto que ser mostrado para o item.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1333
CANVAS (CANVAS)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
AUMENTAR NA ENTRADA (RAISE ON ENTRY)
Esta propriedade especifica como o Forms deve mostrar a canvas quando o usurio navega para um item em outra
canvas apresentada na mesma janela.
Se essa propriedade receber o valor No, o Forms coloca a canvas na frente de todas as outras canvas presentes na
janela somente se o item para o qual o usurio navegou estiver escondido por trs da outra canvas.
Se esta propriedade receber o valor Sim, basta que o usurio navegue para qualquer item de outra canvas (mesmo
que seja um item visvel atualmente) para que esta canvas seja colocada na frente de todas as outras.
VISUALIZADOR (VIEWPORT)
POSIO X DO VISOR (VIEWPORT X POSITION)
Especifica a coordenada X para o canto esquerdo superior de uma canvas do tipo Stacked em relao ao canto
esquerdo superior da canvas Content que preenche a janela.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1335
FSICO (PHYSICAL)
VISVEL (VISIBLE)
Esta propriedade determina se o objeto em questo ficar visvel quando a aplicao for inicialmente executada.
Esta propriedade pode ser modificada posteriormente por programao.
Como restrio temos que no podemos esconder uma canvas que contenha o item corrente, da mesma forma que
no podemos esconder uma janela que contenha o item corrente.
JANELA (WINDOW)
Especifica a janela na qual a canvas ser mostrada a tempo de execuo. Esta propriedade, caso no seja especificada,
mostra a canvas na janela principal(Root_Window), se existir; caso contrrio, na primeira janela do n Janelas (Windows).
LARGURA (WIDTH)
Especifica a largura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
ALTURA (HEIGHT)
Especifica a altura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
BEVEL (BEVEL)
Especifica a aparncia da borda do objeto. Os valores vlidos para esta propriedade so: Diminudo (Lowered),
Aumentado (Raised), Nenhum (None), Inset ou Outset.
Esta propriedade aplicvel a itens do tipo Chart, Custom, Text e canvas do tipo Stack, mas apenas em ambientes
Microsoft Windows.
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1337
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
INTERNACIONAL (INTERNATIONAL)
DIREO (DIRECTION)
Esta propriedade til apenas para aplicaes bidirecionais (National Language Support).
Especifica a direo de desenvolvimento do objeto. Trs valores so vlidos para esta propriedade: Default, Da
Direita para a Esquerda (para linguagens mostradas da direita para a esquerda) e Da Esquerda para a Direita (para
linguagens mostradas da esquerda para a direita).
Para a maioria dos objetos, excetuando-se itens de texto e itens de display (os itens da lista List items possuem
tambm a propriedade Estado Inicial do Teclado), esta a nica propriedade bidirecional.
A propriedade Direction do Form herdada das variveis NLS definidas no ambiente se seu valor no Form for Default.
Todos os objetos da aplicao (exceto os itens) herdam essa propriedade diretamente do mdulo Form se receberem o
valor default. Os itens herdam essa propriedade da canvas (que herda do mdulo Form).
EDITOR (EDITOR)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
TTULO (TITLE)
Especifica o ttulo a ser apresentado para a janela do editor.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1339
FSICO (PHYSICAL)
POSIO X (X POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade da esquerda para a direita, ou seja, o valor 0 corresponde exatamente
posio da linha esquerda da tela ou da canvas. A partir deste ponto e em direo ao lado direito da tela ou canvas,
esse valor crescente.
POSIO Y (Y POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade de cima para baixo, ou seja, o valor 0 corresponde exatamente posio
da linha superior da tela ou da canvas. A partir deste ponto e em direo parte inferior da tela ou canvas, esse
valor crescente.
LARGURA (WIDTH)
Especifica a largura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
ALTURA (HEIGHT)
Especifica a altura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1341
GATILHO (TRIGGER)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
ESTILO DE GATILHO (TRIGGER STYLE)
Indica se um gatilho (Trigger) est escrito em linguagem PL/SQL ou no estilo V2. A Oracle Corporation recomenda
que todos os gatilhos sejam escritos em PL/SQL. O Estilo V2 foi mantido nesta verso apenas para compatibilidade
com verses anteriores. Esta propriedade no mutvel.
AJUDA (HELP)
EXIBIO NA AJUDA DO TECLADO (DISPLAY IN KEYBOARD HELP)
Esta propriedade determina se a descrio do gatilho (somente para gatilhos do tipo Key-*) ser mostrada na janela
de ajuda (Teclas Keys).
Se no desejarmos que seja apresentado um nome ou descrio para esta tecla na janela de ajuda (Teclas), devemos
preencher esta propriedade com o valor No (default).
Se desejarmos que o texto default para esta tecla seja apresentado, devemos preencher esta propriedade com Sim e
deixar a descrio em branco. Caso desejarmos substituir a descrio default por outra, devemos tambm preencher
a propriedade Descrio (a seguir).
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1343
FUNCIONAL (FUNCTIONAL)
TIPO DE GRUPO DE REGISTROS (RECORD GROUP TYPE)
Esta propriedade determina o tipo do Grupo de Registros (Record Group).
Os valores vlidos para esta propriedade so:
Esttico (Static) Especifica que o grupo de registros (Record Group) constitudo de colunas, linhas e valores
construdos a tempo de desenvolvimento, que no podem ser modificados a tempo de execuo.
Consulta (Query) Especifica que o grupo de registros (Record Group) est associado a um comando Select e
que ser preenchido a tempo de execuo.
ITEM (ITEM)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
ETIQUETA (LABEL)
Esta propriedade contm o texto que ser apresentado na etiqueta para um boto, caixa de checagem (Check Box), boto
de rdio (Radio Button), pgina Tab (usurio poder clicar no label para que a pgina de Tab correspondente seja apresentada),
item de menu ou que ser apresentado ao usurio para o preenchimento do parmetro de substituio (do menu).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1345
MAPEAMENTO DE OUTROS VALORES DA CAIXA DE SELEO (CHECK BOX MAPPING OF OTHER VALUES)
Esta propriedade determina como qualquer valor lido ou atribudo a este item deve ser interpretado. Os valores
vlidos para esta propriedade so:
No Permitido (Not Allowed) Qualquer registro que contenha um valor diferente daqueles mapeados nas
propriedades anteriores ser rejeitado, isto , no ser lido do banco de dados. Se for feita uma tentativa de
associao de um valor no mapeado para este item, causa erro.
Assinalado (Checked) Qualquer valor diferente daqueles mapeados nas propriedades anteriores ser mostrado
para o usurio como assinalado.
Seleo Cancelada (Unchecked) Qualquer valor diferente daqueles mapeados nas propriedades anteriores ser
mostrado para o usurio como no assinalado.
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1347
KeyBoard Navigable
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1349
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1351
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
ETIQUETA (LABEL)
Esta propriedade armazena o texto que ser apresentado na etiqueta para um boto, caixa de checagem (Check
Box), boto de rdio (Radio Button), pgina Tab (usurio poder clicar no label para que a pgina de Tab
correspondente seja apresentada), item de menu ou que ser apresentado ao usurio para o preenchimento do
parmetro de substituio (do menu).
ICNICO (ICONIC)
Indica se o boto ser representado por um cone.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1353
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
continua
KeyBoard Navigable
Enabled
Resultado
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
COMPACTAR (COMPRESS)
Especifica se um arquivo de som lido para um item deve ser comprimido quando convertido para o formato
interno do Oracle.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1355
KeyBoard Navigable
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
JUSTIFICAO (JUSTIFICATION)
Esta propriedade especifica a justificao do texto dentro do item. Pode ser preenchida com os seguintes valores:
Esquerda (Left) Faz a justificao pela esquerda, independente do valor da propriedade Ordem de Leitura
(Reading Order).
Centralizado (Center) Faz a justificao pelo centro, independente do valor da propriedade Ordem de Leitura
(Reading Order).
Direita (Right) Faz a justificao pela direita, independente do valor da propriedade Ordem de Leitura (Reading Order).
Inicial (Start) O texto alinhado por uma das laterais, de acordo com o valor da propriedade Ordem de Leitura
(Reading Order). Seu alinhamento ser pela direita se Ordem de Leitura (Reading Order) estiver preenchida com
Direita para Esquerda (Right To Left) e ser pela esquerda se Ordem de Leitura (Reading Order) estiver preenchida
com Esquerda para Direita (Left To Right).
Final (End) O texto alinhado por uma das laterais, de acordo com o valor da propriedade Ordem de Leitura
(Reading Order). Seu alinhamento ser pela esquerda se Ordem de Leitura (Reading Order) estiver preenchida com
Direita para Esquerda (Right To Left) e ser pela direita se Ordem de Leitura (Reading Order) estiver preenchida com
Esquerda para Direita (Left To Right).
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1357
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
ETIQUETA (LABEL)
Esta propriedade contm o texto que ser apresentado na etiqueta para um boto, caixa de checagem (Check Box),
boto de rdio (Radio Button), pgina Tab (usurio poder clicar no label para que a pgina de Tab correspondente
seja apresentada), item de menu ou que ser apresentado ao usurio para o preenchimento do parmetro de
substituio (do menu).
ICNICO (ICONIC)
Indica se o formato do item deve ser um cone.
MULTISSELEO (MULTI-SELECTION)
Indica se o usurio poder ou no selecionar mais de um elemento na rvore.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1359
GRFICO (CHART)
EIXO X DA ORIGEM DE DADOS (DATA SOURCE X AXIS)
Determina o nome do item que ser usado no eixo X para a montagem do grfico.
NAVEGAO (NAVIGATION)
NAVEGVEL COM TECLADO (KEYBOARD NAVIGABLE)
Determina se, a tempo de execuo, o item poder receber foco (ou seja, se o usurio poder posicionar o cursor
sobre este item usando o teclado). Se preenchermos esta propriedade com o valor No (No), o Form pular este
item e navegar para o prximo item na seqncia de navegao (que, por default, determinada pela ordem do
Navegador de Objetos Object Navigator).
DADOS (DATA)
TIPO DE DADOS (DATA TYPE)
Nesta propriedade devemos especificar o tipo de dado a ser armazenado. A Oracle recomenda que a partir do
Form Builder 5.0 passemos a utilizar somente Car (Character), Nmero (Number), Data (Date) ou Extenso (Long).
As demais opes de valores (possveis apenas para itens de texto) foram mantidas para compatibilidade com
verses anteriores.
O tipo de dado de um item deve ser compatvel com o tipo de dado da coluna correspondente no banco de dados.
Para coluna Varchar2 no banco de dados devemos especificar o item como Car (Character).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1361
OBRIGATRIO (REQUIRED)
Esta propriedade indica que o preenchimento do item obrigatrio. Quando esta propriedade est marcada (Sim),
o Form Runtime impede que o usurio navegue para fora desse item sem que um valor seja preenchido, a menos
que a propriedade Defer_Required_Enforcement esteja ativada, o que far com que a validao seja adiada para o
momento de validao do registro, permitindo que o usurio navegue livremente por todos os itens do bloco.
Esta verificao, a princpio, no feita quando fazemos uma leitura do banco de dados, pois presume-se que os
dados gravados no banco so vlidos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1363
CLCULO (CALCULATION)
MODO DE CLCULO (CALCULATION MODE)
Esta propriedade determina o modo de avaliao dos valores a serem calculados para o item atual. As opes vlidas so:
Frmula (Formula) Indica que o clculo ser feito atravs de uma frmula definida pelo usurio.
Sumrio (Summary) Indica que o clculo ser feito atravs de uma funo de grupo sobre um determinado item.
Nenhum (None) Este item no resultado de clculo.
FRMULA (FORMULA)
No caso de a propriedade Modo de Clculo (Calculation Mode) ser preenchida com Frmula (Formula). Devemos
definir, agora, o texto da frmula.
REGISTROS (RECORDS)
GRUPO DE ATRIBUTOS VISUAIS DO REGISTRO ATUAL (CURRENT RECORD VISUAL ATTRIBUTE GROUP)
Esta propriedade determina o nome de um grupo de atributos visuais que ser utilizado quando o item for parte do
registro corrente.
Essa propriedade pode ser definida em nvel de mdulo, bloco ou item. O nvel mais especfico sobrepe o mais genrico.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1365
EDITOR (EDITOR)
EDITOR (EDITOR)
Determina o nome do editor a ser apresentado para este item. Podemos escolher entre nenhum, editor de sistema
(System_Editor) ou um editor especfico criado na aplicao. Quando esta propriedade preenchida, o usurio
poder acionar o editor neste item usando a tecla Editor (Ctrl+E).
FSICO (PHYSICAL)
VISVEL (VISIBLE)
Esta propriedade determina se o objeto em questo ficar visvel quando a aplicao for inicialmente executada.
Essa propriedade pode ser modificada posteriormente por programao.
Como restrio, temos que no podemos esconder uma canvas que contenha o item corrente, da mesma forma
que no podemos esconder uma janela que contenha o item corrente.
CANVAS (CANVAS)
Indica o nome da canvas onde o item ser apresentado. Se esta propriedade no for preenchida, indica que o item
no ficar visvel para o usurio. dito ser um Null Canvas Item.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1367
POSIO X (X POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do
mdulo Form.
O desenvolvimento desta propriedade da esquerda para a direita, ou seja, o valor 0 corresponde exatamente
posio da linha esquerda da tela ou da canvas. A partir deste ponto e em direo ao lado direito da tela ou canvas,
esse valor crescente.
POSIO Y (Y POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do
mdulo Form.
O desenvolvimento desta propriedade de cima para baixo, ou seja, o valor 0 corresponde exatamente posio
da linha superior da tela ou da canvas. A partir deste ponto e em direo parte inferior da tela ou canvas, esse
valor crescente.
LARGURA (WIDTH)
Especifica a largura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
ALTURA (HEIGHT)
Especifica a altura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
BEVEL (BEVEL)
Especifica a aparncia da borda do objeto. Os valores vlidos para esta propriedade so: Diminudo (Lowered),
Aumentado (Raised), Nenhum (None), Inset ou Outset.
Esta propriedade aplicvel a itens dos tipos Chart, Custom, Text e canvas do tipo Stack, mas apenas em ambientes
Microsoft Windows.
FINALIZADO (RENDERED)
Esta propriedade informa ao Form Runtime que, quando este objeto no tiver o foco, os recursos de sistema so
desnecessrios. Apenas quando o item receber o foco que os recursos de sistema sero ativados para ele. Se a
tempo de execuo esta propriedade for marcada com No, isto permitir que este item se sobreponha a outro, o
que, de um modo geral, no possvel.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1369
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
PROMPT (PROMPT)
PROMPT (PROMPT)
Especifica o texto que ser mostrado para o item.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1371
AJUDA (HELP)
DICA (HINT)
Nesta propriedade, especificamos um texto informativo para o usurio. Esse texto ser apresentado na linha de
mensagem quando este item receber o foco.
INTERNACIONAL (INTERNATIONAL)
ESTADO INICIAL DO TECLADO (INITIAL KEYBOARD STATE)
Esta propriedade determina o estado do teclado quando o item recebe o foco. Os valores vlidos para essa propriedade so:
Default O estado baseado no valor da propriedade Reading Order.
Local Indica o valor direita para a esquerda.
Roman Indica o valor esquerda para a direita.
DIREO (DIRECTION)
Esta propriedade til apenas para aplicaes bidirecionais (National Language Support).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1373
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
ATIVADO (ENABLED)
Especifica se o item de menu deve ser apresentado normalmente (habilitado) ou desabilitado (cinza).
ETIQUETA (LABEL)
Esta propriedade contm o texto que ser apresentado na etiqueta para um boto, caixa de checagem (Check Box),
boto de rdio (Radio Button), pgina Tab (usurio poder clicar no label para que a pgina de Tab correspondente
seja apresentada), item de menu ou que ser apresentado ao usurio para o preenchimento do parmetro de
substituio (do menu).
Comando
Funcionalidade Default
Nenhum
Quit
Nenhum
Por default, este comando encerra a aplicao aps perguntar ao operador se deseja salvar as
modificaes efetuadas.
Window
NULL ou MENU
Este comando ir mostrar um submenu default que lista todas as janelas abertas. O operador poder ativar uma
outra janela selecionando-a do submenu. Se definirmos um submenu (em vez de NULL), o Form Runtime far
uma combinao entre os itens do submenu com a lista de janelas abertas para criar um submenu nico. A
ordem dos itens no menu resultante indefinida.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1375
FSICO (PHYSICAL)
VISVEL (VISIBLE)
Esta propriedade determina se o objeto em questo ficar visvel quando a aplicao for inicialmente executada.
Pode ser modificada posteriormente por programao.
Como restrio, temos que no podemos esconder uma canvas que contenha o item corrente, da mesma forma
que no podemos esconder uma janela que contenha o item corrente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1377
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
AJUDA (HELP)
DICA (HINT)
Esta propriedade aplicvel a menus que sejam apresentados no formato Tela Cheia (Full Screen).
O texto do item apresentado como um descritor do item.
Se essa propriedade no for preenchida, o nome do item de menu apresentado como descritor do item.
LOV (LOV)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
TTULO (TITLE)
Especifica o ttulo a ser apresentado para a janela da lista de valores.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1379
FSICO (PHYSICAL)
POSIO X (X POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade da esquerda para a direita, ou seja, o valor 0 corresponde exatamente
posio da linha esquerda da tela ou da canvas. A partir deste ponto e em direo ao lado direito da tela ou canvas,
esse valor crescente.
POSIO Y (Y POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade de cima para baixo, ou seja, o valor 0 corresponde exatamente posio
da linha superior da tela ou da canvas. A partir deste ponto e em direo parte inferior da tela ou canvas, este
valor crescente.
LARGURA (WIDTH)
Especifica a largura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
ALTURA (HEIGHT)
Especifica a altura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1381
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
INTERNACIONAL (INTERNATIONAL)
DIREO (DIRECTION)
Esta propriedade til apenas para aplicaes bidirecionais (National Language Support).
Especifica a direo de desenvolvimento do objeto. Trs valores so vlidos para esta propriedade: Default, Da
Direita para a Esquerda (para linguagens mostradas da direita para a esquerda) e da Esquerda para a Direita (para
linguagens mostradas da esquerda para a direita).
Para a maioria dos objetos, excetuando-se itens de texto e itens de display (os itens da lista List items possuem
tambm a propriedade Estado Inicial do Teclado), esta a nica propriedade bidirecional.
A propriedade Direction do Form herdada das variveis NLS definidas no ambiente se seu valor no Form for
Default. Todos os objetos da aplicao (exceto os itens) herdam esta propriedade diretamente do mdulo Form se
receberem o valor Default. Os itens herdam esta propriedade da Canvas (que herda do mdulo Form).
Os itens de texto e de display, a tempo de desenvolvimento (no Form Builder), no possuem a propriedade Direction e sim as propriedades Justificao, Ordem de Leitura e Estado Inicial do Teclado, porm, na programao,
podemos definir Direction para todos os objetos, inclusive itens.
Para cada tipo de objeto, essa propriedade pode ter uma forma especfica de afetar a apresentao. Por exemplo,
para um item do tipo Caixa de Verificao (Check Box), essa propriedade afeta a posio da caixa em relao ao
texto, a ordem de leitura da etiqueta (label) do objeto e o estado inicial do teclado quando o objeto recebe o foco.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
MENU TIRAR (TEAR-OFF MENU)
um submenu que os operadores podem retirar da barra de menu e reposicionar em qualquer lugar da tela. Podese habilitar a funcionalidade Tear-Off para qualquer submenu, porm somente no estilo pull-down e quando o
gerenciador de janelas suportar esta caracterstica.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1383
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
MENU TIRAR (TEAR-OFF MENU)
um menu que os operadores podem reposicionar em qualquer lugar da tela. Pode-se habilitar a funcionalidade
Tear-Off para qualquer menu Pop-up, porm somente quando o gerenciador de janelas suportar esta caracterstica.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
TTULO (TITLE)
Especifica o ttulo a ser apresentado para o objeto.
NAVEGAO (NAVIGATION)
LIMITE DE NAVEGAO DO MOUSE (MOUSE NAVIGATION LIMIT)
Esta propriedade indica qual ao de navegao o usurio poder fazer com o mouse. Os valores vlidos so:
Form (permite ao operador navegar para qualquer item no Form corrente, mudando de bloco, de registro, etc.,
com o mouse).
Bloco de Dados Data Block (permite ao operador navegar para qualquer item dentro de um mesmo bloco; no
possvel a troca de bloco com o mouse).
Registro Record (neste caso, o usurio poder navegar apenas entre itens de um mesmo registro; no possvel
a troca de registros com o mouse).
Item (esta opo impede que o usurio navegue para fora do item com o mouse, ou seja, impede o uso do mouse).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1385
REGISTROS (RECORDS)
GRUPO DE ATRIBUTOS VISUAIS DO REGISTRO ATUAL (CURRENT RECORD VISUAL ATTRIBUTE GROUP)
Esta propriedade determina o nome de um grupo de atributos visuais que ser utilizado quando o item for parte do
registro corrente.
Essa propriedade pode ser definida em nvel de mdulo, bloco ou item. O nvel mais especfico sobrepe o nvel
mais genrico.
FSICO (PHYSICAL)
SISTEMA COORDENADO (COORDINATE SYSTEM)
Indica a unidade de trabalho no Form, que pode ser Caracter ou Real (ponto, pxel, centmetro, etc.).
Quando acionamos esta propriedade, apresentado um dilogo para que determinemos a unidade em que so
fornecidos os valores de coordenadas (tamanhos, posicionamento, etc.) dos objetos.
Quando escolhemos na propriedade Sistema de Coordenadas o valor Real, a propriedade Unidade Real (Real Unit) pode
ser escolhida e a propriedade Clula de Caracter fica habilitada para que venhamos a determinar o tamanho de um
caracter na fonte-padro. Esse tamanho ser utilizado pelo Form Builder quando tiver de dimensionar o espao de
apresentao de um objeto (por exemplo, na construo do layout de um bloco) cujo tamanho seja fornecido em caracteres
(uma coluna do banco de dados, por exemplo).
Quando escolhemos na propriedade Sistema de Coordenadas o valor Caracter, a propriedade Escalonamento de
Fonte Default (Default Font Scaling) fica habilitada. Essa propriedade indica que, a tempo de execuo, a fonte
indicada para uso na aplicao deve ser escalada para o tamanho de caracter correspondente no vdeo em uso.
INTERNACIONAL (INTERNATIONAL)
DIREO (DIRECTION)
Esta propriedade til apenas para aplicaes bidirecionais (National Language Support).
Especifica a direo de desenvolvimento do objeto. Trs valores so vlidos para esta propriedade: Default, Da
Direita para a Esquerda (para linguagens mostradas da direita para a esquerda) e Da Esquerda para a Direita (para
linguagens mostradas da esquerda para a direita).
Para a maioria dos objetos, excetuando-se itens de texto e itens de display (os itens da lista List items possuem
tambm a propriedade Estado Inicial do Teclado), esta a nica propriedade bidirecional.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1387
COMPATIBILIDADE (COMPATIBILITY)
MODO DE COMPATIBILIDADE EM RUNTIME (RUNTIME COMPATIBILITY MODE)
Determina se o modo de trabalhar o Form Runtime deve ser compatvel com as verses 4.5 ou 5.0.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
MENU PRINCIPAL (MAIN MENU)
Nesta propriedade determinamos o nome de um menu (definido dentro deste mdulo) que ser o principal ou
inicial a tempo de execuo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1389
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
ATIVADO (ENABLED)
Esta propriedade indica se o objeto poder receber foco, seja atravs da navegao-padro (tecla Tab) ou atravs de
rotinas predefinidas (Next_Item, Go_Item, etc.).
O quadro a seguir mostra a relao entre a propriedade Ativado (Enabled) e a propriedade Navegvel com Teclado
(Keyboard Navigable).
KeyBoard Navigable
Enabled
Resultado
ON
ON
O item navegvel e o Forms pode mover o foco para o item durante o processo de navegao-padro
(default). O item apresentado normalmente.
OFF
ON
O item no navegvel. Durante a navegao-padro (default) o Forms pula o item para o prximo navegvel
da seqncia. O item mostrado normalmente e o operador pode navegar para ele e manipul-lo com o mouse.
OFF
OFF
O item no navegvel e apresentado com contraste reduzido para indicar que ele no est disponvel para
entrada de dados ou manipulao com o mouse.
ETIQUETA (LABEL)
Esta propriedade contm o texto que ser apresentado na etiqueta para um boto, caixa de checagem (Check Box), boto
de rdio (Radio Button), pgina Tab (usurio poder clicar no label para que a pgina de Tab correspondente seja apresentada),
item de menu ou que ser apresentado ao usurio para o preenchimento do parmetro de substituio (do menu).
FSICO (PHYSICAL)
VISVEL (VISIBLE)
Esta propriedade determina se o objeto em questo ficar visvel quando a aplicao for inicialmente executada.
Pode ser modificada posteriormente por programao.
Como restrio, temos que no podemos esconder uma canvas que contenha o item corrente, da mesma forma
que no podemos esconder uma janela que contenha o item corrente.
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
INTERNACIONAL (INTERNATIONAL)
DIREO (DIRECTION)
Esta propriedade til apenas para aplicaes bidirecionais (National Language Support).
Especifica a direo de desenvolvimento do objeto. Trs valores so vlidos para esta propriedade: Default, Da
Esquerda para a Direita (para linguagens mostradas da direita para a esquerda) e Da Direita para a Esquerda (para
linguagens mostradas da esquerda para a direita).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1391
PARMETRO (PARAMETER)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
DADOS (DATA)
TIPOS DE DADOS DE PARMETRO (PARAMETER DATA TYPE)
Nesta propriedade, definimos o tipo de dados a ser armazenado no parmetro. Os valores vlidos para essa
propriedade so: Caracter (Character), Nmero (Number) ou Data (Date).
QUADRO (FRAME)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1393
SHRINKWRAP (SHRINKWRAP)
Esta propriedade permite que o Form Builder aproxime o Frame dos objetos internos. Quando aumentamos o
tamanho do Frame e essa propriedade est preenchida com Sim, o Form Builder diminui o Frame para que este
fique prximo aos objetos.
REGISTROS (RECORDS)
NMERO DE REGISTROS EXIBIDOS (NUMBER OF RECORDS DISPLAYED)
Esta propriedade determina o nmero de registros exibidos simultaneamente. O valor default 1.
Esse valor herdado por todos os itens deste bloco por default. A exibio dos itens ser mltipla.
Se esta propriedade receber um valor maior que 1, diremos que o bloco multi-record.
Quando modificamos essa propriedade no Frame, automaticamente esse valor alterado dentro das propriedades
do bloco correspondente (definido pela propriedade Bloco de Dados de Layout). O inverso no verdadeiro.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1395
FSICO (PHYSICAL)
POSIO X (X POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade da esquerda para a direita, ou seja, o valor 0 corresponde exatamente posio da
linha esquerda da tela ou da canvas. A partir deste ponto e em direo ao lado direito da tela ou canvas, esse valor crescente.
POSIO Y (Y POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade de cima para baixo, ou seja, o valor 0 corresponde exatamente posio da linha
superior da tela ou da canvas. A partir deste ponto e em direo parte inferior da tela ou canvas, esse valor crescente.
LARGURA (WIDTH)
Especifica a largura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
ALTURA (HEIGHT)
Especifica a altura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
BEVEL (BEVEL)
Especifica a aparncia da borda do objeto. Os valores vlidos para esta propriedade so: Diminudo (Lowered),
Aumentado (Raised), Nenhum (None), Inset ou Outset.
Essa propriedade aplicvel a itens dos tipos Chart, Custom, Text e canvas do tipo Stack, mas apenas em ambientes
Microsoft Windows.
GRUPO DE ATRIBUTOS VISUAIS DO TTULO DO QUADRO (FRAME TITLE VISUAL ATTRIBUTE GROUP)
Esta propriedade determina como os atributos visuais (Nome da Fonte, Cor de Fundo, etc.) de um determinado
objeto sero derivados. Esta propriedade pode receber dois tipos de valores:
A palavra-chave Default Indica que os atributos individuais definidos para o objeto em questo refletem sua
situao atual.
Nome de um Atributo Visual existente Indica que os atributos definidos para este objeto so derivados do
Atributo Visual nomeado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1397
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
COR DE FUNDO DO LIMITE (EDGE FOREGROUND COLOR) / COR DE FUNDO DO LIMITE (EDGE BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1399
RELAO (RELATION)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
BLOCO DE DADOS DETALHADO (DETAIL DATA BLOCK)
Nesta propriedade, especificamos o nome do bloco detalhe em uma relao Master-Detail.
O objeto Relation criado em um n subordinado ao bloco Master.
Esta definio deve ser repetida quantas vezes forem necessrias para que todos os itens que representem colunas
relacionadas sejam explicitamente associados.
Triggers
Non-Isolated (default)
On-Check-Delete-Master
Cascading
Pre-Delete
Isolated
Nenhum
COORDENAO (COORDINATION)
Como restrio s propriedades deste grupo, temos que no surte efeito modific-las a tempo de execuo uma vez que
os textos dos triggers e unidades de programa includos na aplicao no podem ser modificados a tempo de execuo.
Quando preenchemos as propriedades desse grupo, o Form Builder monta os trigger On-Clear-Details, On-PopulateDetails e as unidades de programa Check_Package_Failure, Clear_All_Master_Details e Query_Master_Details com os
textos adequados para a execuo das aes definidas pelas propriedades. Isto no modificado a tempo de execuo.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1401
DIFERIDO (DEFERRED)
Indica se a consulta no bloco-detalhe deve ou no ser adiada aps a identificao do registro no bloco-mestre.
Quando esta propriedade recebe o valor No, to logo seja feita uma consulta ou navegao para o prximo
registro no bloco principal, ocorrer a consulta no bloco-detalhe. Neste caso, a propriedade Consulta Automtica
(Automatic Query) ignorada.
Quando indicamos que desejamos o adiamento (Sim), a propriedade Consulta Automtica (Automatic Query)
mostrar como ser feita a consulta no detalhe.
JANELA (WINDOW)
GERAL (GENERAL)
NOME (NAME)
Identifica o nome interno do objeto. Deve respeitar a conveno de nomes do Oracle.
COMENTRIOS (COMMENTS)
Esta propriedade de preenchimento livre do usurio. Pode ser usada para registrarmos informaes relevantes relativas
ao objeto em questo, tais como: quem criou o objeto e por qu, data da alterao, etc.
FUNCIONAL (FUNCTIONAL)
TTULO (TITLE)
Especifica o ttulo a ser apresentado para a janela.
Se no especificarmos um ttulo para a janela da aplicao (exceto para a Root Window), o Forms utiliza a propriedade
Nome (Name) como ttulo.
Se no especificarmos um ttulo para a Root Window e o menu atual for o menu default, a mesma regra anterior
vlida. Se, porm, o menu em uso foi construdo pelo usurio e estiver sendo apresentado no estilo Pull-down ou Bar,
o Forms utiliza a propriedade Menu Principal (Main Menu) do mdulo de menu.
MODAL (MODAL)
Esta propriedade indica se a janela atual Modal (Sim) ou Modeless (No).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1403
FSICO (PHYSICAL)
POSIO X (X POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade da esquerda para a direita, ou seja, o valor 0 corresponde exatamente
posio da linha esquerda da tela ou da canvas. A partir deste ponto e em direo ao lado direito da tela ou canvas,
esse valor crescente.
POSIO Y (Y POSITION)
Especifica onde o objeto aparece na tela. Para um item, especifica a posio do canto esquerdo superior deste em
relao ao canto esquerdo superior da canvas.
A unidade em que esta informao fornecida especificada pela propriedade Sistema Coordenado do mdulo Form.
O desenvolvimento desta propriedade de cima para baixo, ou seja, o valor 0 corresponde exatamente posio
da linha superior da tela ou da canvas. A partir deste ponto e em direo parte inferior da tela ou canvas, esse
valor crescente.
LARGURA (WIDTH)
Especifica a largura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
ALTURA (HEIGHT)
Especifica a altura do objeto. A unidade em que esta informao fornecida especificada pela propriedade
Sistema Coordenado do mdulo Form.
BEVEL (BEVEL)
Especifica a aparncia da borda do objeto. Os valores vlidos para esta propriedade so: Diminudo (Lowered),
Aumentado (Raised), Nenhum (None), Inset ou Outset.
Essa propriedade aplicvel a itens do tipo Chart, Custom, Text e canvas do tipo Stack, mas apenas em ambientes
Microsoft Windows.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1405
COR (COLOR)
COR DE FUNDO (FOREGROUND COLOR) / COR DE FUNDO (BACKGROUND COLOR)
As cores so dadas em duas camadas: a primeira camada (Foreground Color) e a camada de fundo (Background
Color). Aliado a estas duas camadas, existe o padro de preenchimento que afeta o resultado apresentado (veja
especificao de padro de preenchimento).
FONTE (FONT)
NOME DA FONTE (FONT NAME)
Esta propriedade determina o nome da fonte a ser usada para textos no objeto.
INTERNACIONAL (INTERNATIONAL)
DIREO (DIRECTION)
Esta propriedade til apenas para aplicaes bidirecionais (National Language Support).
Especifica a direo de desenvolvimento do objeto. Trs valores so vlidos para esta propriedade: Default, Da
Direita para a Esquerda (para linguagens mostradas da direita para a esquerda) e Da Esquerda para a Direita (para
linguagens mostradas da esquerda para a direita).
Para a maioria dos objetos, excetuando-se itens de texto e itens de display (os itens da lista List items possuem
tambm a propriedade Estado Inicial do Teclado), esta a nica propriedade bidirecional.
A propriedade Direction do Form herdada das variveis NLS definidas no ambiente se seu valor no Form for
Default. Todos os objetos da aplicao (exceto os itens) herdam esta propriedade diretamente do mdulo Form se
receberem o valor Default. Os itens herdam esta propriedade da Canvas (que herda do mdulo Form).
Os itens de texto e de display, a tempo de desenvolvimento (no Form Builder), no possuem a propriedade Direction e sim as propriedades Justificao, Ordem de Leitura e Estado Inicial do Teclado, porm, na programao,
podemos definir Direction para todos os objetos, inclusive itens.
Para cada tipo de objeto, essa propriedade pode ter uma forma especfica de afetar a apresentao. Por exemplo,
para um item do tipo Caixa de Verificao (Check Box), essa propriedade afeta a posio da caixa em relao ao
texto, a ordem de leitura da etiqueta (label) do objeto e o estado inicial do teclado quando o objeto recebe o foco.
Para detalhes especficos de cada elemento, acione a opo Tpicos de Ajuda do Form Builder no menu Ajuda e
pesquise pelo tpico Language Direction.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1407
Captulo 14
VARIVEIS DE SISTEMA DO
FORMS E VARIVEIS DE AMBIENTE
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1409
VARIVEIS DE SISTEMA
SYSTEM.BLOCK_STATUS
Indica o estado do bloco em que o cursor est localizado ou o bloco corrente durante o processamento de um
gatilho (trigger). Pode assumir um dos seguintes valores:
CHANGED Indica que o bloco contm pelo menos um registro alterado.
NEW Indica que o bloco contm apenas registros novos.
QUERY Indica que o bloco contm somente registros vlidos recuperados do banco de dados.
O contedo da varivel fornecido em letras maisculas.
SYSTEM.COORDINATION_OPERATION
Essa varivel utilizada pelo trigger On-Clear-Details juntamente com a varivel System.Master_Block para
determinar que tipo de ao causou a execuo do trigger e em que bloco Master de que relao Master-Detail.
SYSTEM.CURRENT_BLOCK
Essa varivel foi includa para compatibilidade com verses anteriores. A Oracle Corporation recomenda a utilizao
das variveis System. Cursor_Block e System.Trigger_Block no lugar desta.
SYSTEM.CURRENT_DATETIME
Essa varivel contm a data e hora do sistema operacional. O valor uma string no formato: DD-MON-YYYY
HH24:MI:SS.
SYSTEM.CURRENT_FORM
Contm o nome do Form que est sendo executado. O valor sempre fornecido como uma string.
Uma outra forma de obtermos esta informao a utilizao da rotina Get_Application_Property.
SYSTEM.CURRENT_ITEM
Essa varivel foi includa para compatibilidade com verses anteriores. A Oracle Corporation recomenda a utilizao
das variveis System.Cursor_Item e System.Trigger_Item no lugar desta.
SYSTEM.CURRENT_VALUE
Essa varivel foi includa para compatibilidade com verses anteriores. A Oracle Corporation recomenda a utilizao
da varivel System. Cursor_Value no lugar desta.
SYSTEM.CURSOR_BLOCK
O valor dessa varivel depende da unidade de navegao corrente.
Se a unidade de navegao bloco, registro ou item, como por exemplo nos triggers Pre- e Post- para Item, Registro
e Bloco, esta varivel conter o nome do bloco onde o cursor (foco) est posicionado.
Se a unidade de navegao Form, como nos triggers Pre-Form e Post-Form, ela receber Null.
SYSTEM.CURSOR_ITEM
Contm o nome do item onde o cursor (foco) est posicionado. O formato <bloco>.<item>.
Se durante a execuo de um trigger houver navegao de um item para outro, o valor desta varivel ser alterado,
acompanhando o cursor (foco).
SYSTEM.CURSOR_RECORD
Esta varivel contm o nmero do registro onde o cursor est localizado. Esse nmero representa o registro corrente
na ordem fsica da lista de registros do bloco. O valor uma string.
SYSTEM.CURSOR_VALUE
Contm o valor do item onde o cursor est localizado.
SYSTEM.CUSTOM_ITEM_EVENT
Armazena o nome do evento disparado por um controle VBX (ambiente Microsoft Windows 16-bits) ou ActiveX
(ambiente Microsoft Windows 32-bits).
SYSTEM.CUSTOM_ITEM_EVENT_PARAMETERS
Armazena argumentos suplementares de um evento disparado por um controle VBX (ambiente Microsoft Windows 16-bits) ou ActiveX (ambiente Microsoft Windows 32-bits).
SYSTEM.DATE_THRESHOLD ( * )
Determina a freqncia com que o Form Runtime sincroniza as datas das variveis locais relacionadas com o
Banco de Dados (Rdbms). Essa varivel trabalha junto com as variveis $$DBDATE$$, $$DBDATETIME$$ e
$$DBTIME$$. Seu valor tem o formato MI:SS.
O valor default para essa varivel 01:00 (1 minuto). Este valor no significa que seja feita uma leitura do banco de
dados a cada minuto. Indica que se houver necessidade (e s neste caso) de fornecer informaes para as variveis
de sistema (por exemplo $$Dbdate$$), o Form Runtime verificar se tem mais de um minuto que essa informao
foi obtida. Nesse caso, feita uma nova leitura do banco de dados; caso contrrio as variveis de sistema so
atualizadas em funo do tempo decorrido localmente.
Caso no tenha necessidade de fornecer o valor para estas variveis, no feito qualquer acesso ao banco de dados
com este fim.
Essa varivel pode ser alterada, ou seja, podemos informar a freqncia que desejarmos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1411
SYSTEM.EFFECTIVE_DATE ( * )
Representa a ltima data e hora efetiva do banco de dados. Possui o formato DD-MON-YYYY HH24:MI:SS.
Essa varivel pode ser alterada.
SYSTEM.EVENT_CANVAS
Informa o nome da canvas quando o trigger When-Tab-Page-Changed for acionado.
SYSTEM.EVENT_WINDOW
Representa o nome da ltima janela que foi afetada pela ao que causou o acionamento de um dos triggers de
janela. Se um dos triggers When-Window-Activated, When-Window-Closed, When-Window-Deactivated ou WhenWindow-Resized for usado, a varivel modificada.
SYSTEM.FORM_STATUS
Representa o estado da aplicao em que o cursor est localizado. Pode assumir um dos seguintes valores:
CHANGED Indica que o Form contm pelo menos um bloco com registro alterado.
NEW Indica que o Form contm apenas registros novos.
QUERY Indica que existe uma consulta em andamento, ou seja, o Form contm pelo menos um bloco em
QUERY e nenhum bloco em CHANGED.
O contedo da varivel fornecido em letras maisculas.
SYSTEM.LAST_FORM
Essa varivel contm o identificador (Form Document ID) do Form anterior (em aplicaes Multi-Form) quando
mltiplos Forms so acionados usando-se OPEN_FORM. O valor pode conter uma das seguintes strings: o
identificador do Form ou NULL. Esta varivel no vlida quando acionamos um Forms via CALL_FORM.
SYSTEM.LAST_QUERY
Contm o ltimo comando Select que o Form utilizou para preencher um bloco.
SYSTEM.LAST_RECORD
Contm o valor True se o registro que detm o foco atualmente o ltimo registro do bloco. Contm o valor False
para os demais registros. O valor fornecido como uma string com as letras em maisculas.
SYSTEM.MASTER_BLOCK
Essa varivel utilizada pelo trigger On-Clear-Details juntamente com a varivel System.Coordination_Operation
para determinar que tipo de ao causou a execuo do trigger e em que bloco Master de que relao Master-Detail.
SYSTEM.MESSAGE_LEVEL ( * )
Representa um nvel de severidade para as mensagens. Durante a execuo do Form Runtime, todas as mensagens
que tiverem nvel de severidade igual ou inferior ao valor definido para essa varivel no so apresentadas.
Os valores vlidos so: 0, 5, 10, 15, 20, ou 25.
SYSTEM.MODE
Indica como se encontra o processamento do Form Runtime. Os valores podem ser:
a) NORMAL Indica que a aplicao est no estado de digitao, entrada de dados, alterao.
b) ENTER_QUERY Indica que a aplicao est aguardando que o usurio informe restries para a consulta a ser realizada.
c) QUERY Indica que a aplicao est lendo dados do banco de dados. Esse estado ser perceptvel nos triggers de
Post-Query, por exemplo.
SYSTEM.MOUSE_BUTTON_MODIFIERS
Indica as teclas (Shift, Alt ou Control) que estavam pressionadas durante o Click. O valor corresponde a uma
string. Por exemplo, Shift+Control+.
Essa varivel deve ser usada no lugar da varivel System.Mouse_Button_Shift_State.
Os valores possveis so: Shift+, Caps Lock+, Control+, Alt+, Command+, Super+, e Hyper+.
SYSTEM.MOUSE_BUTTON_PRESSED
Indica o nmero do boto que foi pressionado (1, 2 ou 3) em um mouse de trs botes.
SYSTEM.MOUSE_BUTTON_SHIFT_STATE
Essa varivel indica a tecla que estava pressionada quando ocorreu o clique do mouse, tais como Shift, Alt ou
Control. O valor uma string. Seu contedo depende do sistema operacional.
O uso desta varivel deve ser substitudo por System.Mouse_Button_Modifiers.
SYSTEM.MOUSE_ITEM
Indica o nome do item que est sob o mouse. O formato <bloco>.<item>.
SYSTEM.MOUSE_CANVAS
Essa varivel contm o nome de uma canvas. Se o mouse estiver sobre a canvas, conter o nome desta canvas. Se
estiver sobre um item, conter o nome da canvas onde este item est pendurado.
Se o mouse no estiver sobre uma canvas ou item, o valor da varivel Null.
SYSTEM.MOUSE_FORM
Essa varivel contm o nome do documento Form sobre o qual o mouse est. Corresponde a uma string.
Se a plataforma no for GUI, essa varivel contm Null.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1413
SYSTEM.MOUSE_X_POS
Essa varivel representa a coordenada do mouse na unidade em uso no Form. Se o mouse estiver posicionado sobre
um item, o valor relativo ao canto superior esquerdo do item. Se o mouse estiver sobre uma canvas, o valor
relativo ao canto esquerdo superior da canvas.
SYSTEM.MOUSE_Y_POS
Essa varivel representa a coordenada do mouse na unidade em uso no Form. Se o mouse estiver posicionado sobre
um item, o valor relativo ao canto superior esquerdo do item. Se o mouse estiver sobre uma canvas, o valor
relativo ao canto esquerdo superior da canvas.
SYSTEM.MOUSE_RECORD
O nmero absoluto do registro onde o mouse est posicionado. Se ele no estiver sobre um registro o valor retornado
0 (zero).
SYSTEM.MOUSE_RECORD_OFFSET
Corresponde ao nmero relativo do registro onde o mouse est posicionado. O registro nmero 1 o primeiro
registro visvel na canvas.
SYSTEM.RECORD_STATUS
Indica o estado do registro em que o cursor est localizado. Pode assumir um dos seguintes valores:
a) CHANGED Indica que o registro foi alterado e deve ser enviado para o banco de dados.
b) INSERT Indica que um registro New foi modificado e deve ser includo no banco de dados.
b) NEW Indica que o registro foi criado no buffer, mas ainda no foi modificado.
c) QUERY Indica que o registro vlido e foi recuperado do banco de dados.
SYSTEM.SUPPRESS_WORKING ( * )
Indica se a mensagem Working ... deve ser suprimida (True) ou no (False). O valor fornecido como string com
as letras em maisculas.
SYSTEM.TAB_NEW_PAGE
Especifica o nome da Tab Page para a qual a navegao ocorreu. Deve ser usada dentro do trigger When-Tab-Page-Changed.
SYSTEM.TAB_PREVIOUS_PAGE
Especifica o nome da Tab Page de onde a navegao ocorreu. Deve ser usada dentro do trigger When-Tab-Page-Changed.
SYSTEM.TRIGGER_BLOCK
Essa varivel contm o nome do bloco onde o cursor estava localizado quando o trigger atual foi disparado. O valor
ser Null se o trigger corrente um Pre-Form ou Post-Form. O valor sempre uma string.
SYSTEM.TRIGGER_ITEM
Indica o item, no formato <bloco>.<item>, no escopo do qual o trigger corrente foi acionado. Se o trigger do tipo
Key, indica o item em que estava o cursor quando o trigger foi acionado. Seu valor permanece o mesmo durante
toda a execuo do gatilho, independente de haver ou no navegao.
SYSTEM.TRIGGER_NODE
Indica o n da rvore hierrquica onde o mouse estava posicionado quando o usurio efetuou um click. Retorna
um valor do tipo N.
SYSTEM.TRIGGER_RECORD
Representa o nmero do registro que est sendo processado. Esse nmero corresponde ordem do registro em
relao lista de registros do bloco.
VARIVEIS DE AMBIENTE
Quando realizamos a instalao de um produto Oracle em um ambiente Windows, o Oracle Installer adiciona
algumas variveis, chamadas de variveis de ambiente ao registrador do Windows. Estas variveis so utilizadas
pelos produtos da Oracle (por exemplo Forms, Reports, SQL*Plus, etc.) como informaes sobre o ambiente onde
o produto est instalado e orientaes defaults sobre o comportamento a ser adotado pelo produto.
Muitas destas variveis somente devem ser modificadas pelo DBA ou atravs do processo de instalao. Outras podem
ser modificadas por ns a fim de influirmos, a nosso gosto, no comportamento da aplicao.
Para obtermos acesso ao local onde se acham as variveis, devemos executar o editor de registro do Windows.
Desta forma, pressione o boto Iniciar (Start) do Windows e escolha a opo Executar (Run). No dilogo apresentado
escreva REGEDIT e pressione o boto OK.
A Figura 14.01 a seguir nos apresenta o registrador j com os ns expandidos. Para obter este mesmo resultado,
expanda o n HKEY-LOCAL-MACHINE, em seguida expanda o n SOFTWARE e expanda, tambm, o n Oracle.
Voc encontrar tantos Homes quantos Oracle-Homes voc tiver criado na instalao (verifique o passo-a-passo
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1415
CA_GPREFS
Esta varivel de ambiente indica a localizao do arquivo de preferncias global (CAGPREFS.ORA). Este arquivo
utilizado como default pelos produtos do pacote Developer. Ele contm as preferncias da ferramenta. Este arquivo
pode ser compartilhado pelos diversos usurios desenvolvedores, ou seja, pode ser instalado na rede.
Obs: A ferramenta pesquisa no diretrio local a existncia deste arquivo alm do local especificado na varivel de ambiente.
CA_UPREFS
medida que modificamos as informaes presentes no menu Ferramentas (Tools), item Preferncias (Preferences), as modificaes especficas de cada usurio so armazenadas no arquivo CAUPREFS.ORA. Neste arquivo
esto armazenadas preferncias tanto do Form Builder quanto do Report Builder (ou das demais ferramentas do
pacote Developer, medida que as criamos).
A varivel de ambiente CA_UPREFS indica a localizao deste arquivo.
Obs: A ferramenta pesquisa no diretrio local a existncia deste arquivo alm do local especificado na varivel de ambiente.
FORMS60_DEFAULTFONT
Esta varivel especifica a fonte default a ser usada para boilerplates no editor de layout do Form Builder. Como
exemplo poderamos ter: FORMS60_DEFAULTFONT=Arial.8"
FORMS60_EDITOR
Esta varivel determina o editor a ser acionado pelo Form Builder para itens multi-line, tanto ao tempo de
desenvolvimento quanto produo. Caso esta informao no seja fornecida, somente o editor interno do Forms
ser utilizado. Como exemplo, teramos: FORMS60_EDITOR=C:\windows\notepad.exe.
FORMS60_ERROR_DATE_FORMAT
Nesta varivel informaremos o formato de data a ser utilizado pelo Forms para mostrar mensagens de erro quando
o usurio informar uma data com layout invlido. Como exemplo teramos: FORMS60_ERROR_DATE_FORMAT
DD/MM/YYYY
FORMS60_ERROR_DATETIME_FORMAT
Nesta varivel informaremos o formato de data e hora a ser utilizado pelo Forms para mostrar mensagens de erro
quando o usurio informar uma data com layout invlido. Como exemplo teramos:
FORMS60_ERROR_DATETIME_FORMAT DD/MM/YYYY HH24:MI
FORMS60_JAVADIR
Este parmetro determina a localizao dos arquivos de execuo Oracle Java necessrios para uso de Java Beans e
para a visualizao de Forms a serem usados na Web. O valor default <oracle_home>\forms60\java
FORMS60_MAPPING
Para processar imagens na Web, o Forms Server transmite arquivos JPEG. Se viermos a usar imagens ou cones nas
aplicaes Forms na Web, devemos criar um diretrio temporrio e um diretrio virtual que o Forms Server usar
para imagens e outros arquivos de trabalho.
A varivel de ambiente Forms60_Mapping indica o nome do diretrio virtual, por exemplo
FORMS60_MAPPING=http://myhost.com/webtemp. Esta varivel deve ser criada na mquina onde o Forms Server
estiver executando.
FORMS60_OUTPUT
Para processar imagens na Web, o Forms Server transmite arquivos JPEG. Se viermos a usar imagens ou cones nas
aplicaes Forms na Web, devemos criar um diretrio temporrio e um diretrio virtual que o Forms Server usar
para imagens e outros arquivos de trabalho.
A varivel de ambiente Forms60_Output indica o nome do diretrio real, por exemplo FORMS60_OUTPUT=
C:\ORANT\WEBTEMP\.
FORMS60_OUTPUT_DATE_FORMAT
Esta varivel de ambiente estabelece um formato de data e hora a ser usado pelo Forms para apresentao de itens do
tipo date que no possuam suas mscaras especficas. Como exemplo temos: FORMS60_OUTPUT_DATE_FORMAT
DD/MM/YYYY.
FORMS60_OUTPUT_DATETIME_FORMAT
Esta varivel de ambiente estabelece um formato de data e hora a ser usado pelo Forms para apresentao de itens do tipo
datetime que no possuam suas mscaras especficas. Como exemplo temos: FORMS60_OUTPUT_DATETIME_FORMAT
DD/MM/YYYY HH24:MI:SS.
FORMS60_PATH
Esta varivel especifica os diretrios onde se encontram os mdulos executveis gerados pelo Form Builder: Forms
(.fmx), Menus (.mmx), Bibliotecas de PL/SQL(.pll) e outros objetos que a aplicao tente carregar de um arquivo ao
tempo de execuo.
Nesta varivel podemos especificar vrios diretrios separados por ponto-e-vrgula (;). O Forms far a pesquisa da
esquerda para a direita na lista de caminhos. Como exemplo, temos: FORMS60_PATH=C:\curso\forms;C:\teste
FORMS60_REPFORMAT
Esta varivel especifica o formato de um relatrio executado atravs da rotina RUN_PRODUCT, quando estivermos
usando um browser para esta execuo. Como exemplo, temos: FORMS60_REPFORMAT=HTML
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1417
FORMS60_TIMEOUT
Esta varivel determina o tempo (em minutos) que o Forms Server aguarda antes de encerrar se no houve
comunicaes de um cliente.
FORMS60_USER_DATE_FORMAT
Esta varivel de ambiente estabelece o formato de mscara que o Forms usar para obter valores de itens do tipo
date quando estes itens no tiverem mscaras prprias. Como exemplo, temos: FORMS60_USER_DATE_FORMAT
FXFMDD-MM-RRRR.
FORMS60_USER_DATETIME_FORMAT
Esta varivel de ambiente estabelece o formato de mscara que o Forms usar para obter valores de itens do tipo datetime
quando estes itens no tiverem mscaras prprias. Como exemplo, temos: FORMS60_USER_DATETIME_FORMAT FXFMDDMM-RRRR HH24:MI:SS.
FORMS60_USEREXITS
Esta varivel especifica uma lista de DLLs (diretrio e nome do arquivo completos) que contenham Foreign Functions que possam ser acionadas em um Forms (pacote ORA_FFI). Como exemplo, temos: FORMS60_USEREXITS =
C:\mathlib\add.dll;C:\mathlib\mult.dll. Observe que mais de uma DLL pode ser indicada quando separamos as
informaes com ponto-e-vrgula (;).
OLECREATEOBJPOOLINMEMORY
Este parmetro indica ao Report Builder se deve construir o pool de objetos OLE2 em memria (1) ou em arquivos
temporrios (0). A utilizao de memria incrementa a performance, uma vez que no h necessidade de operaes
de I/O a disco. Para determinarmos a melhor opo devemos estar cientes de que um boilerplate OLE2 presente em
um Repeating Frame usar apenas um objeto OLE2 (contabilizando apenas uma vez seu tamanho em memria);
no entanto, um Field contabilizar um objeto para cada instncia do Field.
OLEDONOTUPDATELINKS
Para o Report Builder, este parmetro habilita (0) ou desabilita(1) a atualizao de links (Linked OLE2) quando
abrimos o editor de Layout ou executamos o relatrio.
Os objetos OLE2 linkados possuem uma representao armazenada (cached) dos seus objetos originais. Esta
representao atualizada pelo servidor OLE2 correspondente. Estas atualizaes podem ser desabilitadas (a fim
de aumentar a performance) se no desejarmos a ativao do servidor OLE2 (quando, por exemplo, no precisarmos
de uma atualizao do objeto OLE2 correspondente).
OLEUPDATELINKSPROMPT
Para o Report Builder, este parmetro indica se o usurio deve (0) ou no (1) ser questionado quando o objeto
linked no for encontrado.
REPORTS60_CGIDIAGBODYTAGS
Para o Reports Web CGI, especifica as tags HTML a serem includas como <BODY > na sada de diagnstico /
depurao do RWCGI60.
REPORTS60_CGIDIAGHEADTAGS
Para o Reports Web CGI, especifica as tags HTML a serem includas entre o <HEAD > e o </HEAD> na sada de
diagnstico / depurao do RWCGI60.
REPORTS60_CGIHLP
Para o Reports Web CGI, especifica a URL/URI do arquivo de ajuda RWCGI60 que ser apresentado quando o
RWCGI60 for acionado com uma requisio vazia.
REPORTS60_CGIMAP
Para o Reports Web CGI, especifica o arquivo map (diretrio e arquivo) se um arquivo de configurao for usado.
REPORTS60_CGINODIAG
Para o Reports Web CGI, determina que todas as sadas de depurao/diagnstico devem ser desabilitadas.
REPORTS60_COOKIE_EXPIRE
Esta varivel determina o tempo sem uso de um cookie. Os cookies armazenam os usurios e senhas (criptografados)
dos usurios na mquina-cliente. Quando solicitamos a execuo de um relatrio, o cookie enviado para efeito de
autenticao. O CGI (no ambiente servidor) compara a data do cookie com a data do sistema. Se o tempo houver se
esgotado retornada uma tela de autenticao para que o usurio, novamente, estabelea conexo com o sistema.
REPORTS60_DB_AUTH
Esta varivel especifica um template (de autenticao do banco de dados) a ser usado para conexo ao banco.
recomendado que no modifiquemos este parmetro.
REPORTS60_ENCRYPTION_KEY
Especifica uma chave de criptografia para usurios e senhas.
REPORTS60_PATH
Nesta varivel podemos informar diversos diretrios separados por ponto-e-vrgula (;), os quais determinam as
localizaes dos relatrios (.rep ou .rdf) e dos objetos externos (bibliotecas de PL/SQL, queries externas, boilerplates
externos, etc.) a serem usados no relatrio. Podemos adicionar a estes diretrios a palavra-chave DB indicando que
o banco de dados tambm deve ser pesquisado. O tamanho limite deste parmetro de 256 caracteres.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1419
REPORTS60_REPORTS_SERVER
Este parmetro determina o nome do Report Server. Quando este parmetro informado podemos omitir o
argumento SERVER na linha de comando em uma solicitao de relatrio Web.
REPORTS60_SYS_AUTH
Especifica o template de autenticao usado para validao de username e password quando os usurios executam os
relatrios em um Report Server restrito. recomendado que no modifiquemos esta informao.
REPORTS60_TMP
Esta varivel estabelece o diretrio no qual sero armazenados os arquivos temporrios criados durante a execuo
dos relatrios. Devemos informar apenas um diretrio neste parmetro. Se este parmetro no for informado, ser
usado o diretrio de trabalho corrente.
REPORTS60_USEREXIT
Esta varivel especifica uma lista de DLLs (diretrio e nome do arquivo completos) que possam ser acionadas pelo Report
Builder ou Runtime. Mais de uma DLL pode ser indicada quando separamos as informaes com ponto-e-vrgula (;).
UI_ICON
Esta varivel determina o diretrio no qual se encontram os cones utilizados nas aplicaes Forms e Reports.
Somente um diretrio pode ser informado aqui. Como exemplo, temos: UI_ICON=C:\icones
Captulo 15
BUILT-INS DO FORMS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1421
ALERTA (ALERT)
Procedure Change_Alert_Message (Alert_Id ou Alert_Name, Message) Permite a alterao da mensagem de um alerta.
Funo Find_Alert (Alert_Name) Retorna o ID do alerta passado como parmetro.
Funo Id_Null(Alert_Id) Retorna um booleano indicando se o ID do alerta passado como parmetro vlido.
Procedure Set_Alert_Button_Property (Alert_Name ou Alert_Id, Button, Property, Value) Permite a alterao
de propriedades do boto de alerta.
Procedure Set_Alert_Property (Alert_Name ou Alert_Id, Property, Message) Permite a alterao do ttulo ou da
mensagem de um alerta.
Funo Show_Alert (Alert_Name ou Alert_Id) Apresenta a janela do alerta e retorna um numrico indicando
qual boto foi pressionado pelo operador.
APLICAO
Procedure Do_Key(Key) Executa o trigger do tipo Key que corresponda built-in que se refere ao-padro.
Funo Get_Application_Property(Property) Retorna um varchar2 referente propriedade solicitada como parmetro.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1423
BLOCO
Procedure Block_Menu Apresenta a lista de blocos disponveis para navegao da aplicao.
Procedure Clear_Block(Kwd) Limpa a rea de buffer associada ao bloco corrente.
Funo Find_Block(Block_Name) Retorna o ID do bloco passado como parmetro.
Funo Get_Block_Property(Block_Name ou Block_Id, Property) Retorna o valor da propriedade solicitada.
Procedure Go_Block(Blk) Desvia para o primeiro item navegvel no bloco informado.
Funo Id_Null(Block_Id) Retorna um booleano indicando se o ID do bloco passado como parmetro vlido.
Procedure Next_Block Desvia para o primeiro item navegvel no prximo bloco dentro da seqncia de navegao.
Previous_Block Desvia para o primeiro item navegvel no bloco anterior dentro da seqncia de navegao.
Procedure Set_Block_Property(Block_Name ou Block_Id, Property, Value) Permite a alterao do valor da
propriedade informada.
Procedure Table_From_Block (Block_Data, Block_Name, Start_Rec, End_Rec, Item_Data) Preenche uma tabela
PL/SQL a partir de um bloco.
CANVAS-VIEW
CANVAS (CONTENT)
Funo Find_Canvas (Canvas_Name) Retorna o ID do objeto passado como parmetro.
Funo Get_Canvas_Property (canvas_name ou canvas_id, property) Retorna o valor da propriedade solicitada.
Funo Id_Null (Canvas_Id) Retorna um booleano indicando se o ID da canvas passada como parmetro vlido.
Procedure Print Imprime a janela corrente para um arquivo ou impressora.
Procedure Replace_Content_View (Window_Id ou Window_Name, View_Name ou View_Id) Substitui a canvas content associada window passada como parmetro.
Procedure Set_Canvas_Property (Canvas_Id ou Canvas_name, Property, Value) Permite a alterao do valor da
propriedade informada.
Procedure Set_Canvas_Property (Canvas_Name ou Canvas_Id, Property, X, Y) Permite a alterao do valor da
propriedade informada.
VIEW (STACKED)
Funo Find_View (View_Name) Retorna o ID do objeto passado como parmetro.
Funo Get_View_Property (View_Name ou View_Id, Property) Retorna o valor da propriedade solicitada.
Procedure Hide_View (View_Name ou View_Id) Esconde a canvas (stack) mencionada.
Funo Id_Null (View_Id) Retorna um booleano indicando se o ID da canvas passada como parmetro vlido.
TAB
Funo Find_Tab_Page(Page_Name) Retorna o ID do objeto passado como parmetro.
Funo Get_Tab_Page_Property(Page_Name ou Page_Id, Property) Retorna o valor da propriedade solicitada.
Procedure Set_Tab_Page_Property(Page_Name ou Page_Id, Property, Value) Permite a alterao do valor da
propriedade informada.
FORM
Procedure Bell Aciona o alarme sonoro quando ocorrer o sincronismo entre o estado do terminal e a tela.
Procedure Break Interrompe a execuo e apresenta o Debugger quando a aplicao estiver executando no
modo de depurao.
Procedure Call_Form (Formmodule_Name, Display, Switch_Menu, Query_Mode, Paramlist_Name ou
Paramlist_Id) Inicia a execuo da aplicao indicada.
Procedure Call_Form (Formmodule_Name, Display, Switch_Menu, Query_Mode, Data_Mode, Paramlist_Id ou
Paramlist_Name) Inicia a execuo da aplicao indicada.
Procedure Call_Form (Formmodule_Name, Display, Switch_Menu, Query_Mode, Data_Mode) Inicia a execuo
da aplicao indicada.
Procedure Clear_Form (Kwd1, Kwd2) Limpa todos os blocos presentes na aplicao corrente.
Procedure Close_Form (Formmodule_Name ou Formmodule_Id) Fecha a aplicao mencionada (caso seja a
corrente, realiza a mesma ao de Exit_Form).
Procedure Commit_Form Dispara a execuo da etapa transacional da aplicao aplicando as pendncias para
o banco de dados e enviando em seguida um Commit.
Procedure Debug_Mode Alterna o estado de debug entre on e off.
Procedure Enter Valida o dado na unidade de validao corrente.
Procedure Erase (Globvar) Destri a varivel global informada.
Procedure Execute_Trigger (T) Executa o trigger mencionado.
Procedure Exit_Form (Kwd1, Kwd2) Encerra a aplicao corrente.
Funo Find_Form (Formmodule_Name) Retorna o ID do objeto passado como parmetro.
Funo Form_Failure Retorna um booleano se a ltima rotina predefinida encerrou com erro.
Funo Form_Fatal Retorna um booleano se a ltima rotina predefinida encerrou com erro fatal.
Funo Form_Success Retorna um booleano se a ltima rotina predefinida encerrou com sucesso.
Funo Get_Form_Property (Formmodule_Name ou Formmodule_Id, Property) Retorna o valor da
propriedade solicitada.
Procedure Go_Form (Formmodule_Name ou Formmodule_Id) Desvia para o Form indicado em um ambiente
com mltiplos Forms abertos simultaneamente.
Procedure Help Mostra a mensagem de Hint para o item corrente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1425
ITEM
GERAL
Procedure Clear_Eol Limpa o trecho de texto do item corrente a partir da posio atual do cursor para o fim da linha.
Procedure Clear_Item Limpa o texto do item corrente (atribui Null).
Procedure Convert_Other_Value (Item_Name ou Item_Id) Converte o valor corrente de um item do tipo
check box, radio group ou list item para o valor associado com o estado atual do check box (checado / no
checado) ou com o boto corrente do radio grupo ou com o elemento corrente da lista.
CHART
Procedure Update_chart (Chart_Name ou Chart_Id, Param_List_id ou Param_List_Name) Faz com que um
item do tipo chart seja considerado alterado mesmo que o bloco de dados no qual ele est baseado no seja
alterado. O segundo parmetro opcional.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1427
CHECKBOX
Funo Checkbox_Checked (Item_Name ou Item_Id) Retorna um booleano indicando o estado atual do item
(checado ou no).
EDITOR
Procedure Edit_Textitem (X, Y, Width, Height) Aciona o editor associado ao item corrente (caso no exista, usa
o editor default do Form).
Procedure Edit_Textitem (X, Y) Aciona o editor associado ao item corrente (caso no exista, usa o editor
default do Form).
Procedure Edit_Textitem Aciona o editor associado ao item corrente (caso no exista, usa o editor default do Form).
OLE
Procedure Activate_Server (Item_Id ou Item_Name) Ativa o servidor OLE associado com o container (item).
Procedure Close_Server (Item_Id ou Item_Name) Desativa o servidor OLE associado com o container (item).
Procedure Exec_Verb (Item_Name ou Item_Id, Verb_Name ou Verb_Index) Solicita a execuo do verbo
identificado pelo nome ou ndice.
Funo Find_Ole_Verb (Item_Id ou Item_Name, Verb_Name) Retorna o ndice correspondente ao nome do
verbo indicado.
Funo Get_Interface_Pointer (Item_Id ou Item_Name) Retorna um handle para um objeto OLE2 automation.
Funo Get_Verb_Count (Item_Id ou Item_Name) Retorna a quantidade de verbos que o servidor OLE reconhece.
Funo Get_Verb_Name (Item_Id ou Item_Name, Verb_Index) Retorna o nome do verbo correspondente ao
ndice informado.
Procedure Initialize_Container (Item_Id ou Item_Name, File_name) Insere um objeto OLE de um arquivo de
tipo compatvel com o servidor OLE no container (item).
Funo Server_Active (Item_Id ou Item_Name) Retorna um booleano indicando se o servidor est ou no
ativo (ou associado).
RADIO
Funo Get_Radio_Button_Property (Item_Name ou Item_Id, Button_Name, Property) Retorna o valor da
propriedade solicitada do boto de radio.
Procedure Set_Radio_Button_Property (Item_Id ou Item_Name, Button_Name, Property, X, Y) Permite a alterao
do valor da propriedade informada para o boto de radio.
Procedure Set_Radio_Button_Property (Item_Id ou Item_Name, Button_Name, Property, Value) Permite a
alterao do valor da propriedade informada para o boto de radio.
IMAGE
Procedure Image_Scroll (Item_Name ou Item_Id, X, Y) Rola o item imagem para o offset especificado, se
possvel. Esta rotina til quando a imagem maior que o item na canvas.
Procedure Image_Zoom (Item_Name ou Item_Id, Zoom_Type, Zoom_Factor) Aumenta ou diminui o tamanho
da imagem usando o efeito especificado pelo parmetro Zoom_Type e pela quantidade especificada por Zoom_Factor.
Procedure Read_Image_File (File_Name, File_Type, Item_Name ou Item_Id) L um arquivo imagem do disco e
o associa ao item image.
LIST
Procedure Add_List_Element (Item_Name ou Item_Id, Item_Index, Label_Str, Value_Str) Adiciona um elemento
a um List Item.
Procedure Clear_List (Item_Name ou Item_Id) Remove todos os elementos de um List Item. Aps a execuo
dessa rotina, apenas um elemento fica residente na lista (Null, mesmo que o item seja obrigatrio).
Procedure Delete_List_Element (Item_Name ou Item_Id, Item_Index) Remove um elemento da lista.
Funo Get_List_Element_Count (Item_Id ou Item_Name) Retorna a quantidade de elementos da lista inclusive o elemento Null.
Funo Get_List_Element_Label (Item_Name ou Item_Id, Item_Index) Retorna o label (texto visualizado pelo
usurio) do elemento indicado.
Funo Get_List_Element_Value (Item_Name ou Item_Id, Item_Index) Retorna o valor associado ao elemento indicado.
Procedure Populate_List (Item_Name ou Item_Id, Rg_Name ou Recgrp_Id) Remove o contedo atual da lista e a
preenche novamente a partir dos valores presentes no record group. O record group deve ter sido criado a tempo
de execuo e a estrutura deste deve conter, na primeira coluna, o label da lista e, na segunda, o valor da lista.
Procedure Retrieve_List (Item_Id ou Item_Name, Rg_Name ou Recgrp_Id) Copia o contedo de um List Item
para o record group referenciado. A estrutura do record group deve conter na primeira coluna o label da lista e
na segunda, o valor da lista.
SOUND
Procedure Play_Sound (Item_Name ou Item_Id) Toca o som associado ao item especificado.
Procedure Read_Sound_File (File_Name, File_Type, Item_Name ou Item_Id) L o arquivo contendo o som e o
armazena no item especificado.
Procedure Write_Sound_File (File_Name, File_Type, Item_Name ou Item_Id, Compression, Sound_Quality,
Channels) Grava o som armazenado no item no arquivo especificado.
MENU
Procedure Application_Parameter Mostra todos os parmetros associados com o menu corrente e seus valores
correntes na caixa de dilogo Enter Parameter Values.
Procedure Background_Menu {1|2|3|4|5|6|7|8|9|10} Executa o item de menu especificado do background menu.
Funo Find_Menu_Item (Menuitem_Name) Retorna o ID do objeto passado como parmetro.
Funo Get_Menu_Item_Property (Menuitem_Name Menuitem_Id, Property) Retorna o valor da propriedade solicitada.
Procedure Hide_Menu Em plataformas Character Mode, faz o menu corrente desaparecer se estiver visvel
atualmente, descobrindo qualquer parte do Form que o menu tenha coberto. O menu ser reapresentado se a
rotina Show_Menu for acionada ou o operador pressionar Menu.
Funo Id_Null (Menuitem_Id) Retorna um booleano indicando se o ID do item de menu passado como
parmetro vlido.
Funo Item_Enabled (Mnunam, Itmnam) Retorna um booleano indicando se o item de menu est ou no habilitado.
Procedure Main_Menu Navega para o menu principal da aplicao corrente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1429
MENSAGEM
Procedure Clear_Message Remove a mensagem corrente da rea de mensagens da tela.
Funo Dbms_Error_Code Retorna o cdigo do ltimo erro de banco de dados ocorrido.
Funo Dbms_Error_Text Retorna a mensagem relativa ao ltimo erro de banco de dados ocorrido.
Procedure Display_Error Mostra o dilogo Display Error se um erro houver acontecido.
Funo Error_Code Retorna o nmero do erro do ltimo Form Builder Error.
Funo Error_Text Retorna o texto do erro relativo ao ltimo Form Builder Error.
Funo Error_Type Retorna o tipo do erro relativo ao ltimo Form Builder Error.
Funo Get_Message Retorna a mensagem corrente, independente do tipo.
Procedure Message (Message, User_Response) Mostra o texto especificado na linha de mensagem.
Funo Message_Code Retorna o nmero da ltima mensagem gerada pelo Form durante a execuo.
Funo Message_Text Retorna o texto relativo ltima mensagem gerada pelo Form durante a execuo.
Funo Message_Type Retorna o tipo da ltima mensagem gerada pelo Form durante a execuo.
CONTROLE DE TEMPO
Funo Create_Timer (Timer_Name, Milliseconds, Iterate) Cria um Timer que ser expirado no prazo de tempo
especificado.
Procedure Delete_Timer (Timer_Name ou Timer_Id) Remove o Timer especificado.
Funo Find_Timer (Timer_Name) Retorna o ID do objeto passado como parmetro.
Funo Id_Null (Timer_Id) Retorna um booleano indicando se o ID do timer passado como parmetro vlido.
Procedure Set_Timer (Timer_Name ou Timer_Id, Milliseconds, Iterate) Altera as caractersticas de um Timer
existente. Pode-se alterar o tempo de expirao e/ou a condio de repetio.
EDITOR
Procedure Edit_TextItem Aciona o editor associado ao item e coloca o Form no modo de edio.
Funo Find_Editor (Editor_Name) Retorna o ID do objeto passado como parmetro.
Funo Id_Null (Editor_Id) Retorna um booleano indicando se o ID do editor passado como parmetro vlido.
Procedure Show_Editor (Editor_Id ou Editor_Name, Message_In, [X, Y,] Message_Out, Result) Aciona o editor
nas coordenadas especificadas (opcional) e envia um texto a ser apresentado no editor, recuperando, em seguida,
o texto modificado pelo usurio e sua aceitao ou no do dilogo de edio.
LOV
Funo Find_Lov (Lov_Name) Retorna o ID do objeto passado como parmetro.
Funo Id_Null (Lov_Id) Retorna um booleano indicando se o ID da lov passada como parmetro vlido.
Funo Get_Lov_Property (Lov_Name ou Lov_Id, Property) Retorna o valor da propriedade solicitada.
Procedure Set_Lov_Column_Property (Lov_Id ou Lov_Name, Colnum, Property, Value) Permite a alterao do
valor da propriedade informada para uma determinada coluna da lov.
Procedure Set_Lov_Property (Lov_Name ou Lov_Id, Property, X, Y) Permite a alterao do valor da propriedade
informada para a lov.
Funo Show_Lov (Lov_Name ou Lov_Id [,X,Y] ) Apresenta a janela da lov nas coordenadas especificadas e
retorna um booleano indicando se o operador selecionou um valor da lista (True) ou se o operador cancelou ou
fechou a lista.
VALIDAO
Procedure Validate (Validation_Scope, Block_Or_Item, Record_Number) Fora o Form a executar o processo
de validao para o escopo definido.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1431
QUERY
Procedure Abort_Query Fecha uma query que esteja aberta no bloco corrente.
Procedure Count_Query Aciona o processo do Form para identificar o nmero de linhas que a query retornar para
o bloco corrente. Somente vlida em triggers que admitam procedures restritas.
Enter_Query[(Kwd1[, Kwd2[, Kwd3]])] Coloca o Form no modo de Enter Query para que o usurio possa
fornecer informaes que restrinjam a query a ser realizada.
Procedure Execute_Query[(Kwd1[, Kwd2[, Kwd3]])] Executa a query de acordo com as restries previamente
estabelecidas.
RECORD
Procedure Check_Record_Uniqueness Inicia o processo-padro de verificao da unicidade da PK.
Procedure Clear_Record Remove o registro corrente do bloco (buffer) sem efetuar validao.
Procedure Create_Queried_Record Quando chamada a partir do trigger on-fetch, cria um registro na lista de
espera do bloco. Essa lista uma rea de registros intermediria (temporria), que contm registros que tenham
sido lidos do banco de dados (fetched), mas ainda no foram colocados na lista de registros ativos. Aps a
incluso nessa lista, o registro deve receber dados para que seja disponibilizado para a aplicao.
Procedure Create_Record Cria um novo registro no bloco corrente aps o registro corrente.
Procedure Delete_Record Quando utilizada fora da trigger on-delete, retira o registro corrente do buffer e o
adiciona lista dos registros a serem excludos durante o prximo processo de Post e Commit. Se utilizada
dentro do trigger on-delete, gera o comando, padro para remoo de um registro do banco de dados.
Procedure Down Navega para o item corrente no prximo registro. Caso o registro corrente seja o ltimo
e o Form Builder venha a criar um novo registro, a navegao ocorrer para o primeiro item navegvel no
novo registro.
Procedure Duplicate_Record Copia o valor de cada item no registro anterior para o registro corrente.
Procedure First_Record Navega para o primeiro registro na lista de registros do bloco.
Procedure Generate_Sequence_Number Inicia o processo-padro para gerao de um nmero seqencial. Para
tal, um item no bloco deve ter a propriedade Valor Inicial preenchida com :sequence.<sequencia>.nextval. Essa
rotina deve ser acionada na trigger on-sequence-number.
Funo Get_Record_Property (Record_Number, Block_Name, Property) Retorna o valor da propriedade solicitada.
Procedure Go_Record (Rn) Navega para o nmero de registro informado.
RECORD GROUP
Funo Add_Group_Column (Recordgroup_Id ou Recordgroup_Name, Groupcolumn_Name, Column_Type [,
Column_Width ] ) Adiciona uma coluna do tipo especificado ao record group mencionado.
Procedure Add_Group_Row (Recordgroup_Name ou Recordgroup_Id, Row_Number) Adiciona uma nova row
ao record group mencionado.
Funo Create_Group (Recordgroup_Name, Scope, Array_Size) Cria um record group do tipo non-query. Esse
novo grupo no possui linhas ou colunas, at que sejam explicitamente adicionadas pelas rotinas
Add_Group_Column e Add_Group_Row.
Funo Create_Group_From_Query (Recordgroup_Name, Query, Scope, Array_Size) Cria um record group
com um determinado nome, o qual contm colunas derivadas das colunas presentes na Select-List da query.
Procedure Delete_Group (Recordgroup_Name ou Recordgroup_Id) Remove o record group nomeado (criado
por programao).
Procedure Delete_Group_Row (Recordgroup_Name ou Recordgroup_Id, Row_Number) Remove uma linha
(ou todas) de um record group.
Funo Find_Column (Groupcolumn_Name) Retorna o ID do objeto passado como parmetro.
Funo Find_Group (Recordgroup_Name) Retorna o ID do objeto passado como parmetro.
Funo Get_Group_Char_Cell (Groupcolumn_Name ou Groupcolumn_Id, Row_Number) Retorna o contedo
(varchar2) de uma determinada clula de um record group identificada pelo nmero da linha e pela coluna.
Funo Get_Group_Date_Cell (Groupcolumn_Name ou Groupcolumn_Id, Row_Number) Retorna o contedo
(date) de uma determinada clula de um record group identificada pelo nmero da linha e pela coluna.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1433
RELATION
Funo Find_Relation (Relation_Name) Retorna o ID do objeto passado como parmetro.
Funo Get_Relation_Property (Relation_Id ou Relation_Name, Property) Retorna o valor da propriedade solicitada.
Funo Id_Null (Relation_Id) Retorna um booleano indicando se o ID do relation passado como parmetro vlido.
Procedure Set_Relation_Property (Relation_Name ou Relation_Id, Property, Value) Permite a alterao do valor
da propriedade informada.
REPORT
Procedure Cancel_Report_Object (Job_Handle) Cancela a execuo de um relatrio assncrono. O identificador
obtido na execuo da rotina Run_Report_Object.
TRANSACTION
Procedure Check_Record_Uniqueness Inicia o processo-padro de verificao da unicidade da PK.
Procedure Commit_Form Faz com que o Form Builder execute as rotinas necessrias para atualizar os dados do
banco de dados para que fiquem compatveis com o Form. Inicialmente, o Form Builder realiza a validao do
Form; em seguida, para cada bloco no Form, realiza a fase de Post e finalmente executa um database Commit.
Procedure Delete_Record Quando utilizada fora da trigger on-delete, retira o registro corrente do buffer e o
adiciona lista dos registros a serem excludos durante o prximo processo de Post e Commit. Se utilizada
dentro do trigger on-delete, gera o comando, padro para remoo de um registro do banco de dados.
Procedure Enforce_Column_Security Executa o processo-padro para verificar a segurana de uma coluna no
banco de dados, garantindo que o operador atual tenha privilgios de atualizao para cada coluna quando o
bloco possuir a propriedade Impor Segurana de Coluna (Enforce Column Security) como Sim.
Procedure Fetch_Records Quando chamada de dentro do trigger on-fetch, inicia o processo-padro para obteno
(fetch) de registros que tenham sido identificados pelo Select.
Funo Forms_Ddl (Statement) Permite o envio de comandos de SQL dinmicos.
Procedure Generate_Sequence_Number Inicia o processo-padro para gerao de um nmero seqencial. Para
tal, um item no bloco deve ter a propriedade Valor Inicial preenchida com :sequence.<sequencia>.nextval. Essa
rotina deve ser acionada na trigger on-sequence-number.
Procedure Insert_Record Gera o comando-padro de incluso de registros no banco de dados. Deve ser acionada
dentro da trigger on-insert.
Procedure Issue_Rollback (Spname) Quando acionada de um trigger on-rollback, inicia o processo-padro de
desmanchar as aes realizadas desde o savepoint indicado.
Procedure Issue_Savepoint (Spname) Quando chamada de um trigger on-savepoint, inicia o processo-padro
de criar um ponto de controle (savepoint).
Procedure Logon (Username, Password, Logon_Screen_On_Error) Executa o logon-padro do Form Builder
com o username e password indicados. Essa rotina deve ser acionada a partir da trigger on-logon.
Procedure Logon_Screen Mostra a tela de logon-padro e requisita um username e password vlidos.
Procedure Logout Desconecta a aplicao do banco de dados Oracle.
Procedure Select_Records Quando chamada de dentro do trigger on-select, inicia o processo default de Select
do Form Builder.
Procedure Update_Record Quando chamada de dentro da trigger on-update, inicia o processo default de
atualizao de registros no banco de dados durante o Post e Commit.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1435
WINDOW
Funo Find_Window (Window_Name) Retorna o ID do objeto passado como parmetro.
Funo Get_Window_Property (Window_Name ou Window_Id, Property) Retorna o valor da propriedade solicitada.
Procedure Hide_Window (Window_Name ou Window_Id) Esconde a janela especificada.
Funo Id_Null (Window_Id) Retorna um booleano indicando se o ID da window passada como parmetro vlida.
Funo Move_Window (Window_Name ou Window_Id, X, Y) Movimenta a janela para as coordenadas especificadas.
Procedure Resize_Window (Window_Name ou Window_Id, Width, Height) Dimensiona a janela especificada
para o tamanho de largura e altura informado.
Procedure Set_Window_Property (Window_Name ou Window_Id, Property, Value) Permite a alterao do
valor da propriedade informada.
Procedure Set_Window_Property (Window_Name ou Window_Id, Property, X, Y) Permite a alterao do valor
da propriedade informada.
Show_Window (Window_Id ou Window_Name[, X, Y]) Mostra a janela especificada nas coordenadas correntes
ou naquelas informadas pela rotina.
VBX
DESCRIO DO PACOTE
Este pacote contm um conjunto de rotinas relacionadas interface com controles VBX, que podem ser anexadas
a uma aplicao de 16-bits.
ROTINAS DO PACOTE
Procedure Vbx.Fire_Event (Item_Name ou Item_Id, Event_Name, Paramlist_Id ou Paramlist_Name) Causa um
evento de um controle VBX.
Function Vbx.Get_Property (Item_Name ou Item_Id, Property) Obtm o valor de uma propriedade de um
controle VBX.
Funo Vbx.Get_Value_Property(Item_Name ou Item_Id) Obtm a propriedade de valor do controle VBX.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1437
TEXTO_IO
DESCRIO DO PACOTE
Este pacote permitir que venhamos a ler ou gravar informaes para um arquivo do ambiente. equivalente ao
pacote Utl_File da PL/SQL, com a diferena de que o arquivo lido ou gravado se encontra no ambiente cliente.
ROTINAS DO PACOTE
Procedure Text_Io.Fclose(File) Fecha o arquivo.
Funo Text_Io.Fopen(Spec, Filemode) Abre o arquivo no modo especificado e retorna o file handle do arquivo.
Procedure Text_Io.Get_Line(File, Item) Recupera a prxima linha de um arquivo previamente aberto.
Funo Text_Io.Is_Open(File) Retorna um booleano indicando se o arquivo est aberto.
Procedure Text_Io.New_Line([File,] N) Concatena o nmero especificado de carriage return linha corrente de um
arquivo previamente aberto. Caso o nome do arquivo no seja especificado, envia os caracteres para o Interpreter.
Text_Io.Put([File,] Item) Concatena o dado informado para a linha corrente de um arquivo previamente aberto. Caso
o nome do arquivo no seja especificado, envia o dado para o Interpreter.
Procedure Text_Io.Putf([File,] Format[, Arg1[, Arg2[, Arg3[, Arg4[, Arg5]]]]]) Formata e concatena um texto
para a linha corrente de um arquivo previamente aberto. Caso o nome do arquivo no seja especificado, envia
o texto para o Interpreter.
Procedure Text_Io.Put_Line([File,] Item) Concatena o dado informado para a linha corrente de um arquivo
previamente aberto. Caso o nome do arquivo no seja especificado, envia o dado para o Interpreter. Ao fim do
dado, concatenado, automaticamente, um carriage return.
OLE2
DESCRIO DO PACOTE
Conjunto de rotinas PL/SQL APIs para criao, manipulao e acesso a atributos de objetos OLE2 Automation.
Os objetos OLE2 Automation encapsulam um conjunto de atributos e mtodos que pode ser manipulado ou
invocado de um OLE2 Automation Client. O pacote OLE2 permite que faamos acesso aos objetos OLE2 Automation Servers diretamente do PL/SQL.
ROTINAS DO PACOTE
Procedure Ole2.Add_Arg(List, Value) Adiciona um argumento ao fim de uma lista de argumentos previamente criada.
Procedure Ole2.Add_Arg_Obj(List, Value) Adiciona um argumento do tipo objeto ao fim de uma lista de
argumentos previamente criada.
Funo Ole2.Create_Arglist Cria uma lista de argumentos que pode ser passada como parmetro para um
OLE2 Automation Server.
Funo Ole2.Create_Obj(Object) Cria um OLE2 Automation Object.
Procedure Ole2.Destroy_Arglist(List) Destri uma lista de argumentos previamente criada.
Funo Ole2.Get_Bool_Property(Object, Property, Arglist) Obtm o valor de uma propriedade boleana.
Funo Ole2.Get_Char_Property(Object, Property, Arglist) Obtm o valor de uma propriedade caracter.
Funo Ole2.Get_Num_Property(Object, Property, Arglist) Obtm o valor de uma propriedade numrica.
Funo Ole2.Get_Obj_Property(Object, Property, Arglist) Obtm o valor de uma propriedade do tipo objeto.
Procedure Ole2.Invoke(Object, Method, Arglist) Aciona um mtodo do OLE2.
Funo Ole2.Invoke_Char(Object, Method, Arglist) Obtm um valor caracter de um objeto OLE2 Automation
ao acionar o mtodo especificado.
Funo Ole2.Invoke_Num(Object, Method, Arglist) Obtm um valor numrico de um objeto OLE2 Automation ao acionar o mtodo especificado.
Funo Ole2.Invoke_Obj(Object, Method, Arglist) Obtm um valor do tipo objeto de um objeto OLE2 Automation ao acionar o mtodo especificado.
Funo Ole2.Issupported Indica se o pacote OLE2 suportado na plataforma corrente.
Funo Ole2.Last_Exception[(Message)] Retorna a ltima condio de erro OLE2 sinalizada por uma exception PL/SQL. A mensagem de erro pode ser retornada no parmetro Message.
Procedure Ole2.Release_Obj(Object) Indica ao objeto OLE2 Automation que o PL/SQL client est encerrando
a comunicao.
Procedure Ole2.Set_Property(Object, Property, Value, Arglist) Atribui valor a uma propriedade de um objeto
OLE2 Automation.
DEBUG
DESCRIO DO PACOTE
O pacote Debug oferece um conjunto de rotinas, funes e condies de erro para realizarmos depurao em
aplicaes Forms.
ROTINAS DO PACOTE
Funo Debug.Getc(Varname) Obtm o valor da varivel local (caracter) informada.
Funo Debug.Getd(Varname) Obtm o valor da varivel local (data) informada.
Funo Debug.Geti(Varname) Obtm o valor da varivel local (pls_integer) informada.
Funo Debug.Getn(Varname) Obtm o valor da varivel local (number) informada.
Procedure Debug.Interpret(Input) Executa o comando de PL/SQL ou o comando do Interpreter informado no parmetro.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1439
PECS
DESCRIO DO PACOTE
Este pacote fornece ao desenvolvedor ou ao administrador dos sistemas meios de anlise da performance tanto do
Form Builder quanto das aplicaes geradas.
ROTINAS DO PACOTE
Funo Pecs.Add_Class(Class_Name ou Class_Type) Cria uma classe ou grupo de eventos no Pecs e retorna o
ID da classe criada.
Funo Pecs.Add_Event(Class_Id, Description ou Event_Type) Adiciona um evento a uma classe especificada.
Retorna o ID do evento criado.
Procedure Pecs.Collect(Collector_Status) Habilita ou desabilita o Pecs. Essa rotina s pode ser acionada uma
vez por sesso.
Procedure Pecs.Disable_Class(Class_Id[, Event_Id ou Event_Type]) Desabilita um ou todos os eventos de uma classe.
Procedure Pecs.Enable_Class(Class_Id[, Event_Id ou Event_Type]) Habilita um ou todos os eventos de uma classe.
Procedure Pecs.End_Event(Event_Id, Handle) Determina o fim de um evento Pecs.
Procedure Pecs.Point_Event(Event_Id, Comment) Determina se um evento foi ocorrido durante a execuo do cdigo.
Funo Pecs.Start_Event([Event_Id,] Comment) Marca o incio de um evento Pecs. Retorna um identificador nico
para esta ocorrncia do evento, que necessrio para o encerramento do evento.
WEB
DESCRIO DO PACOTE
Este pacote, composto por uma nica rotina, tem a finalidade de definir a URL do documento a ser carregado em
aplicaes Web.
ROTINAS DO PACOTE
Procedure Web.Show_Document(Url, Target) Especifica a URL e janela de destino de uma aplicao Web.
ORA_FFI
DESCRIO DO PACOTE
Este pacote prov uma interface de uso de funes C (terceira gerao) diretamente dentro do PL/SQL.
No ambiente Windows, as funes externas devem ser DLLs que, depois de registradas via funes ORA_FFI,
podem ser usadas em uma aplicao Forms.
Para utilizao de uma DLL em uma aplicao Forms, devemos:
Usar a funo Load_Library para obter um handle da DLL, ou seja, uma identificao fsica (nome de diretrio,
nome do arquivo, etc.).
Usar a funo Register_Function para obter um handle da funo, ou seja, uma identificao no ambiente da
funo (C) a ser usada. Devem-se especificar o nome da funo e sua localizao (o handle da DLL).
Usar a funo Register_Parameter para registrar cada parmetro e estabelecer a paridade com os tipos de parmetro
da PL/SQL.
Usar a funo Register_Return para registrar o tipo de retorno da funo C e estabelecer a paridade com o
equivalente PL/SQL.
ROTINAS DO PACOTE
Funo Ora_Ffi.Find_Function(Libname, Funcname) Localiza e retorna o function handle para a funo
especificada. A funo deve ter sido previamente registrada.
Funo Ora_Ffi.Find_Library(Libname) Localiza e retorna o handle para a library especificada. A library deve
ter sido registrada previamente.
Procedure Ora_Ffi.Generate_Foreign(Handle[, Pkgname]) Gera um pacote de cdigo de PL/SQL para todas as
funes definidas na biblioteca especificada. Deve-se inicialmente carregar a biblioteca, registrar todas as funes
que desejarmos acionar e registrar seus parmetros e retornos.
Funo Ora_Ffi.Is_Null_Ptr(Handle) Determina se uma biblioteca, funo ou pointer (ponteiro do C) Null.
Funo Ora_Ffi.Load_Library(Dirname, Libname) Carrega a DLL especificada para que suas funes possam
ser registradas.
Funo Ora_Ffi.Register_Function(Libhandle, Funcname[, Callstd]) Registra a funo especificada.
Funo Ora_Ffi.Register_Library(Dirname, Libname) Registra a biblioteca especificada.
Procedure Ora_Ffi.Register_Parameter(Funchandle, Cargtype[, Plsargtype]) Registra o tipo do argumento corrente
da funo especificada.
Procedure Ora_Ffi.Register_Return(Funchandle, Creturntype[, Plsreturntype]) Registra o tipo de retorno da
funo especificada.
Procedure Ora_Ffi.Unload_Library(Libhandle) Descarrega da memria a DLL especificada. As funes dessa
DLL no estaro mais acessveis at que a biblioteca seja carregada novamente.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1441
ORA_PROF
DESCRIO DO PACOTE
Este pacote contm procedimentos, funes e condies de erro que nos permitiro verificar o tempo de execuo
de uma determinada unidade de programa.
ROTINAS DO PACOTE
Procedure Ora_Prof.Create_Timer(Timer) Aloca um contador de tempo com o nome especificado.
Procedure Ora_Prof.Destroy_Timer(Timer) Destri o contador de tempo especificado.
Funo Ora_Prof.Elapsed_Time(Timer) Retorna a quantidade de tempo acumulada desde a ltima chamada
procedure Ora_Prof.Reset_Timer.
Procedure Ora_Prof.Reset_Timer(Timer) Zera o contador de tempo especificado.
Procedure Ora_Prof.Start_Timer(Timer) Determina o incio da contagem de tempo.
Procedure Ora_Prof.Stop_Timer(Timer) Determina a interrupo da contagem de tempo sem zerar o contador.
ORA_NLS
DESCRIO DO PACOTE
Este pacote permite que obtenhamos informaes sobre o ambiente corrente.
ROTINAS DO PACOTE
Funo Ora_Nls.American Retorna um booleano indicando se o charset corrente American.
Funo Ora_Nls.American_Date Retorna um booleano indicando se o formato de data corrente American.
Funo Ora_Nls.Get_Lang_Scalar(Attribute) Retorna a informao requisitada sobre a linguagem corrente.
Funo Ora_Nls.Get_Lang_Str(Attribute) Retorna a informao requisitada sobre a linguagem corrente.
Funo Ora_Nls.Linguistic_Collate Retorna um booleano se os caracteres no charset corrente necessitam ser
organizados de acordo com informaes especiais da linguagem.
Funo Ora_Nls.Linguistic_Specials Retorna um booleano indicando se existem caractersticas lingsticas em uso.
Funo Ora_Nls.Modified_Date_Fmt Retorna um booleano que indica se o formato de data foi modificado.
Funo Ora_Nls.Right_To_Left Retorna um booleano que indica se a direo de impresso da linguagem
corrente right-to-left.
Funo Ora_Nls.Simple_Cs Retorna um booleano indicando se o charset corrente simples, ou seja, singlebyte, sem caracteres especiais, etc.
Funo Ora_Nls.Single_Byte Retorna um booleano que indica se todos os caracteres no charset corrente podem
ser representados em um byte.
TOOL_RES
DESCRIO DO PACOTE
Este pacote fornece um mecanismo para extrairmos informaes de um arquivo de recursos. Os arquivos de recursos
so providos pelas ferramentas (Form Builder, Report Builder, etc.) e contm informaes diversas utilizadas pelos
software. Podemos gerar nossos prprios arquivos de recursos com o utilitrio ResPa21 a partir de um texto com
extenso PRN. Esse utilitrio fornecido juntamente com o Oracle*Terminal.
ROTINAS DO PACOTE
Procedure Tool_Res.Rfclose(Filehandle) Fecha o arquivo de recursos especificado.
Funo Tool_Res.Rfopen(Spec) Abre o arquivo especificado como um arquivo de recursos.
Funo Tool_Res.Rfread([File,] Resid, Restype) L o recurso especificado. Se o arquivo for fornecido, a pesquisa
realizada apenas neste arquivo. Se o arquivo for omitido, a pesquisa feita em todos os arquivos de recursos especificados.
TOOL_ENV
DESCRIO DO PACOTE
Permite que obtenhamos informaes das variveis de ambiente do Oracle.
ROTINAS DO PACOTE
Procedure Tool_Env.Getvar(Varname, Varvalue) Obtm o valor de uma varivel de ambiente.
TOOL_ERR
DESCRIO DO PACOTE
O pacote Tool_err fornece um conjunto de informaes a respeito do erro acontecido em uma rea chamada Error
Stack. Essa rea contm cdigos e mensagens de erro organizadas em uma rea indexada de 0 a n-1 (onde n o
nmero de erros). Esse pacote permitir a manipulao dessa rea de stack.
ROTINAS DO PACOTE
Procedure Tool_Err.Clear Descarta todos os erros presentes no error stack.
Funo Tool_Err.Code(n) Retorna o cdigo do erro para o n-simo erro no error stack.
Funo Tool_Err.Encode(Prefix, Offset) Constri um cdigo de erro a partir de um prefixo e um offset.
Funo Tool_Err.Message(n) Retorna a mensagem formatada associada com o n-simo erro do error stack.
Function Tool_Err.Nerrors Retorna o nmero de erros presentes no error stack.
Procedure Tool_Err.Pop Descarta o erro do topo da lista de erros no error stack.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1443
DDE
DESCRIO DO PACOTE
Este pacote permite o suporte a Dynamic Data Exchange (DDE) dentro dos componentes do Developer.
DDE um mecanismo pelo qual aplicaes podem se comunicar e trocar dados em um ambiente Windows.
As funes DDE habilitadas para as aplicaes Oracle (Client) se comunicarem com outras aplicaes do ambiente
Windows compatveis com DDE (Server) compreendem trs aes:
Importao de dados.
Exportao de dados.
Execuo de comandos para o servidor DDE (a outra aplicao).
ROTINAS DO PACOTE
Funo Dde.App_Begin(Appname, Appmode) Inicia um programa e retorna um identificador.
Procedure Dde.App_End(Appid) Encerra um programa previamente iniciado.
Procedure Dde.App_Focus(Appid) Ativa um programa previamente iniciado.
Procedure Dde.Execute(Convid, Cmdstr, Timeout) Executa uma string de comando que aceitvel para o
programa iniciado anteriormente.
Funo Dde.Getformatnum(Dataformatname) Converte ou registra um nome de formato de dado e retorna a
representao numrica da string do formato do dado.
Funo Dde.Getformatstr(Dataformatnum) Converte um formato de dado numrico no nome do formato
correspondente.
Funo Dde.Initiate(Service, Topic) Abre uma conversao DDE com uma aplicao servidora.
Funo Dde.Issupported Retorna um booleano indicando se o pacote DDE suportado na plataforma corrente.
Procedure Dde.Poke(Convid, Item, Data, Dataformat, Timeout) Envia o dado para a aplicao servidora.
Procedure Dde.Request(Convid, Item, Buffer, Dataformat, Timeout) Requisita dados de uma aplicao servidora.
Dde.Terminate(Convid) Encerra a conversao com a aplicao servidora especificada.
ORA_JAVA
DESCRIO DO PACOTE
Este pacote, juntamente com o pacote JNI, foi includo na verso 6i, porm a documentao das rotinas no foi
disponibilizada. Por este motivo, apenas listaremos as rotinas pertencentes ao pacote, sem definio das mesmas.
ROTINAS DO PACOTE
Procedure Ora_Java.clear_exception;
Procedure Ora_Java.clear_error;
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1445
JNI
DESCRIO DO PACOTE
Este pacote juntamente com o pacote ORA_JAVA, foi includo na verso 6i, porm a documentao das rotinas no
foi disponibilizada. Por este motivo, apenas listaremos as rotinas pertencentes ao pacote, sem definio das mesmas.
ROTINAS DO PACOTE
Procedure Jni.add_boolean_arg (args in jni.arglist, value in boolean);
Procedure Jni.add_byte_arg (args in jni.arglist, value in pls_integer);
Procedure Jni.add_char_arg (args in jni.arglist, value in pls_integer);
Procedure Jni.add_double_arg (args in jni.arglist, value in number);
Procedure Jni.add_float_arg (args in jni.arglist, value in number);
Procedure Jni.add_int_arg (args in jni.arglist, value in number);
Procedure Jni.add_long_arg (args in jni.arglist, value in number);
Procedure Jni.add_object_arg (args in jni.arglist, value in ora_java.jobject, cls in ora_java.jclass);
Procedure Jni.add_short_arg (args in jni.arglist, value in pls_integer);
Procedure Jni.add_short_arg (args in jni.arglist, value in pls_integer);
Procedure Jni.add_string_arg (args in jni.arglist, value in varchar2);
Function Jni.call_boolean_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return boolean;
Function Jni.call_boolean_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return boolean;
Function Jni.call_byte_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return
pls_integer;
Function Jni.call_char_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return
pls_integer;
Function Jni.call_double_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return
number;
Function Jni.call_float_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return number;
Function Jni.call_int_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return number;
Function Jni.call_long_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return number;
Function Jni.call_object_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return
ora_java.jobject;
Function Jni.call_short_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist) return
pls_integer;
Procedure Jni.call_void_method (obj in ora_java.jobject, mid in ora_java.jmethod, args in jni.arglist);
Function Jni.create_arg_list (num in pls_integer) return jni.arglist;
Procedure Jni.destroy_arg_list (args in jni.arglist);
Function Jni.get_boolean_field (obj in ora_java.jobject, fid in ora_java.jfield) return boolean;
Function Jni.get_byte_field (obj in ora_java.jobject, fid in ora_java.jfield) return pls_integer;
FTREE
DESCRIO DO PACOTE
Possui um conjunto de rotinas capazes de permitir a manipulao de itens do tipo rvore hierrquica.
ROTINAS DO PACOTE
Procedure Ftree.Add_Tree_Data (item_id ou item_name, node , offset_type, offset, data_source, data) Adiciona
um conjunto de dados associados a um determinado n de uma rvore hierrquica existente. Os dados podem ser
obtidos atravs de uma string(Select) ou de um Record Group (o texto da string ou o nome do Record Group
devem ser preenchidos no parmetro Data), de acordo com o que tiver sido preenchido no parmetro data_source
(Ftree.Record_Group ou Ftree.Query_Text). De acordo com o parmetro offset_type, os dados sero inseridos sob
o n atual (offset_type = Ftree.Parent_Offset) ou no mesmo nvel do n atual (offset_type = Ftree.Sibling_Offset).
O parmetro offset determina o posicionamento dos dados no n e pode receber os valores Ftree.Next_Node e
Ftree.Previous_Node (quando offset_type igual a Sibling) ou um valor numrico (de 1 a N) e, ainda, Ftree.Last_Child
(quando offset_type igual a Parent).
Function Ftree.Add_Tree_Node (Item_Name ou Item_Id, Node , Offset_Type, Offset, State, Label, Icon, Value)
Adiciona um novo n arvore hierrquica. O posicionamento do n dado em funo de um outro n existente
na rvore. De acordo com o parmetro offset_type, o novo n ser inserido sob o n atual (offset_type =
Ftree.Parent_Offset) ou no mesmo nvel do n atual (offset_type = Ftree.Sibling_Offset). O parmetro offset determina
o posicionamento do novo n em relao ao n atual e pode receber os valores Ftree.Next_Node e
Ftree.Previous_Node (quando offset_type igual a Sibling) ou um valor numrico (de 1 a N) e, ainda, Ftree.Last_Child
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1447
EXEC_SQL
DESCRIO DO PACOTE
Este pacote, alm de permitir o acesso a vrios servidores Oracle em diferentes conexes, simultaneamente, contm
rotinas que nos permitiro a construo de SQL dinmico em PL/SQL (similar ao pacote DBMS_SQL do banco de
dados, porm com algumas restries).
Para maiores detalhes na utilizao deste pacote, utilize-se da Ajuda do Form Builder.
ROTINAS DO PACOTE
Procedure Exec_sql.bind_variable ([connid, ] curs_id, name, value [, out_value_size]) Associa um valor a uma
varivel Bind (referenciada com :) nomeada no comando SQL. O ltimo parmetro (out_value_size) deve ser
informado se o tipo da varivel for Varchar2 (determina o tamanho mximo esperado).
Procedure Exec_sql.close_connection [(connid )] Libera qualquer recurso usado pela conexo e o invalida.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1449
Captulo 16
TRIGGERS DO FORMS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1451
CLASSIFICAO FUNCIONAL
ACTIVEX (ACTIVEX)
Os triggers deste grupo esto associados a objetos do tipo ActiveX.
ON-DISPATCH-EVENT
Este trigger chamado quando o evento de um controle ActiveX ocorre. Podemos acionar a rotina Dispatch_Event
de dentro deste trigger.
WHEN-CLEAR-BLOCK
Este gatilho ser acionado quando o Form Runtime limpa o bloco corrente e esvazia a rea de buffer.
WHEN-CREATE-RECORD
Este gatilho ser acionado quando o Form Runtime cria um novo registro em um bloco.
WHEN-DATABASE-RECORD
Este gatilho ser acionado quando o Forms modifica o estado de um determinado registro, passando de New para
Insert ou de Query para Update. Com esta modificao, esse registro passa a ser considerado como pendente de
atualizao, ou seja, deve ser enviado para o banco de dados.
WHEN-REMOVE-RECORD
Este gatilho ser acionado quando um determinado registro limpo ou removido.
WHEN-BUTTON-PRESSED
Inicia uma ao quando um operador seleciona (pressiona) um boto, seja com o mouse ou com o teclado. Esse
evento no causado por programao.
WHEN-CHECKBOX-CHANGED
Inicia uma ao quando o operador troca o estado de um item do tipo caixa de verificao (Check Box). Esse
evento pode ser causado por mouse, teclado ou programao.
WHEN-CUSTOM-ITEM-EVENT
Inicia uma ao quando houver sido causado qualquer evento associado a um controle VBX, ActiveX ou JavaBean.
WHEN-FORM-NAVIGATE
Disparado quando a navegao entre Forms ocorrer. Por exemplo, quando o usurio muda o foco para uma janela
de outro Form carregado.
WHEN-IMAGE-ACTIVATED
Inicia uma ao quando o operador realiza um clique duplo em um item do tipo imagem.
WHEN-IMAGE-PRESSED
Inicia uma ao quando o operador realiza um clique simples em um item do tipo imagem.
WHEN-LIST-ACTIVATED
Inicia uma ao quando um operador efetua um clique duplo em uma lista do tipo T-List.
WHEN-LIST-CHANGED
Inicia uma ao quando um operador modifica o valor do item, selecionando outro elemento da lista. Quando a lista
do tipo Combo, esse evento tambm causado quando o operador esvazia ou digita um novo valor para o item.
WHEN-MOUSE-CLICK
Este gatilho acionado quando o operador faz um clique em qualquer item do mdulo ou em qualquer canvas se
o gatilho estiver em nvel de mdulo. Se o gatilho estiver em nvel de bloco ou de item, somente se o clique for
dado no item especfico ou em um dos itens do bloco especfico. Quando um usurio faz um clique com o mouse,
os seguintes eventos so causados: Mouse Down, Mouse Up e Mouse Click, nesta ordem. Quaisquer triggers
associados com estes eventos sero disparados antes do trigger When-Mouse-Click disparar.
WHEN-MOUSE-DOUBLECLICK
Este gatilho acionado quando o operador faz um clique duplo em qualquer item do mdulo ou em qualquer
canvas se o gatilho estiver em nvel de mdulo. Se o gatilho estiver em nvel de bloco ou de item, somente se o
clique duplo for dado no item especfico ou em um dos itens do bloco especfico. Quando um usurio faz um
clique duplo com o mouse, os seguintes eventos so causados: Mouse Down, Mouse Up, Mouse Click, Mouse
Down, Mouse Up e Mouse DoubleClick nesta ordem.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1453
WHEN-MOUSE-DOWN
Este gatilho acionado quando o operador faz um clique em qualquer item do mdulo ou em qualquer canvas se
o gatilho estiver em nvel de mdulo. Se o gatilho estiver em nvel de bloco ou de item, somente se o clique for
dado no item especfico ou em um dos itens do bloco especfico.
WHEN-MOUSE-ENTER
Este gatilho acionado quando o operador move o mouse (sem pression-lo), entrando em qualquer item do
mdulo ou em qualquer canvas se o gatilho estiver em nvel de mdulo. Se o gatilho estiver em nvel de bloco
ou de item, somente se o operador mover o mouse (entrando) em um item especfico ou em um dos itens do
bloco especfico.
WHEN-MOUSE-LEAVE
Este gatilho acionado quando o operador move o mouse (sem pression-lo), saindo de qualquer item do mdulo
ou de qualquer canvas se o gatilho estiver em nvel de mdulo. Se o gatilho estiver em nvel de bloco ou de item,
somente se o operador mover o mouse (saindo) de um item especfico ou de um dos itens do bloco especfico.
WHEN-MOUSE-MOVE
Este gatilho acionado quando o operador move o mouse (sem pression-lo) em qualquer item do mdulo ou em
qualquer canvas se o gatilho estiver em nvel de mdulo. Se o gatilho estiver em nvel de bloco ou de item,
somente se o operador mover o mouse em um item especfico ou em um dos itens do bloco especfico.
WHEN-MOUSE-UP
Este gatilho acionado quando o operador solta o boto do mouse aps um clique em qualquer item do mdulo
ou em qualquer canvas se o gatilho estiver em nvel de mdulo. Se o gatilho estiver em nvel de bloco ou de item,
somente se o operador soltar o boto do mouse no item especfico ou em um dos itens do bloco especfico.
WHEN-RADIO-CHANGED
Inicia uma ao quando o operador altera o boto selecionado em um grupo de rdios (radio group).
WHEN-TAB-PAGE-CHANGED
Inicia uma ao quando o operador modifica a pgina ativa de uma canvas Tab. O evento s causado se a mudana
de pgina for explcita. Uma navegao entre itens em pginas diferentes no causa o evento.
WHEN-TIMER-EXPIRED
Inicia uma ao quando o tempo programado expira. nico para todos os timers criados.
WHEN-TREE-NODE-ACTIVATED
Este trigger acionado quando o operador efetua um clique duplo sobre um n ou pressiona Enter com um n
selecionado.
WHEN-TREE-NODE-EXPANDED
Este trigger disparado quando um n expandido ou contrado.
WHEN-TREE-NODE-SELECTED
Este trigger disparado quando um n selecionado ou liberado.
WHEN-WINDOW-ACTIVATED
Inicia uma ao quando uma janela ativada.
WHEN-WINDOW-CLOSED
Inicia uma ao quando uma janela fechada.
WHEN-WINDOW-DEACTIVATED
Inicia uma ao quando uma janela desativada em funo de outra janela ter se tornado ativa.
WHEN-WINDOW-RESIZED
Inicia uma ao quando uma janela muda de tamanho.
KEY-CLRBLK
Acionado quando o usurio pressionar Limpar Bloco (Clear Block).
Rotina para assegurar a funcionalidade default: Clear_Block.
KEY-CLRFRM
Acionado quando o usurio pressionar Limpar Forms (Clear Form).
Rotina para assegurar a funcionalidade default: Clear_Form.
KEY-CLRREC
Acionado quando o usurio pressionar Limpar Registro (Clear Record).
Rotina para assegurar a funcionalidade default: Clear_Record.
KEY-COMMIT
Acionado quando o usurio pressionar Salvar (Save) ou Aceitar (Accept).
Rotina para assegurar a funcionalidade default: Commit_Form.
KEY-CQUERY
Acionado quando o usurio pressionar Contar Registros Coincidentes (Count Query Hits).
Rotina para assegurar a funcionalidade default: Count_Query.
KEY-CREREC
Acionado quando o usurio pressionar Incluir Registro (Insert Record).
Rotina para assegurar a funcionalidade default: Create_Record.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1455
KEY-DELREC
Acionado quando o usurio pressionar Remover Registro (Delete Record).
Rotina para assegurar a funcionalidade default: Delete_Record.
KEY-DOWN
Acionado quando o usurio pressionar Navegar para Baixo (Down).
Rotina para assegurar a funcionalidade default: Down.
KEY-DUP-ITEM
Acionado quando o usurio pressionar Duplicar Item (Duplicate Item).
Rotina para assegurar a funcionalidade default: Duplicate_Item.
KEY-DUPREC
Acionado quando o usurio pressionar Duplicar Registro (Duplicate Record).
Rotina para assegurar a funcionalidade default: Duplicate_Record.
KEY-EDIT
Acionado quando o usurio pressionar Editar (Edit).
Rotina para assegurar a funcionalidade default: Edit_TextItem.
KEY-ENTQRY
Acionado quando o usurio pressionar Entrar Consulta (Enter Query).
Rotina para assegurar a funcionalidade default: Enter_Query.
KEY-EXEQRY
Acionado quando o usurio pressionar Executar Consulta (Execute Query).
Rotina para assegurar a funcionalidade default: Execute_Query.
KEY-EXIT
Acionado quando o usurio pressionar Sair (Exit).
Rotina para assegurar a funcionalidade default: Exit_Form.
KEY-HELP
Acionado quando o usurio pressionar Ajuda (Help).
Rotina para assegurar a funcionalidade default: Help.
KEY-LISTVAL
Acionado quando o usurio pressionar Lov (List of Values).
Rotina para assegurar a funcionalidade default: List_Values.
KEY-MENU
Acionado quando o usurio pressionar Menu de Blocos (Block Menu).
Rotina para assegurar a funcionalidade default: Block_Menu.
KEY-NXTBLK
Acionado quando o usurio pressionar Prximo Bloco (Next Block).
Rotina para assegurar a funcionalidade default: Next_Block.
KEY-NEXT-ITEM
Acionado quando o usurio pressionar Prximo Item (Next Item).
Rotina para assegurar a funcionalidade default: Next_Item.
KEY-NXTKEY
Acionado quando o usurio pressionar Prxima PK (Next Primary Key).
Rotina para assegurar a funcionalidade default: Next_Key.
KEY-NXTREC
Acionado quando o usurio pressionar Prximo Registro (Next Record).
Rotina para assegurar a funcionalidade default: Next_Record.
KEY-NXTSET
Acionado quando o usurio pressionar Prximo Conjunto de Registros (Next Set of Records).
Rotina para assegurar a funcionalidade default: Next_Set.
KEY-PRINT
Acionado quando o usurio pressionar Imprimir (Print).
Rotina para assegurar a funcionalidade default: Print.
KEY-PRVBLK
Acionado quando o usurio pressionar Bloco Anterior (Previous Block).
Rotina para assegurar a funcionalidade default: Previous_Block.
KEY-PREV-ITEM
Acionado quando o usurio pressionar Item Anterior (Previous Item).
Rotina para assegurar a funcionalidade default: Previous_Item.
KEY-PRVREC
Acionado quando o usurio pressionar Registro Anterior (Previous Record).
Rotina para assegurar a funcionalidade default: Previous_Record.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1457
KEY-SCRDOWN
Acionado quando o usurio pressionar Rolar a Tela Para Baixo (Scroll Down).
Rotina para assegurar a funcionalidade default: Scroll_Down.
KEY-SCRUP
Acionado quando o usurio pressionar Rolar a Tela Para Cima (Scroll Up).
Rotina para assegurar a funcionalidade default: Scroll_Up.
KEY-UP
Acionado quando o usurio pressionar Navegar Para Cima (Up).
Rotina para assegurar a funcionalidade default: Up.
KEY-UPDREC
Acionado quando o usurio pressionar Bloquear Registro (Lock Record).
Rotina para assegurar a funcionalidade default: Lock_Record.
KEY-F0 A F9 E KEY-ENTER
Acionado quando o usurio pressionar as teclas correspondentes, mapeadas pelo Oracle Terminal (no
necessariamente F0 a F9 ou <enter>).
KEY-OTHERS
Acionado quando for teclada qualquer ao no prevista na aplicao.
MESTRE-DETALHE (MASTER-DETAIL)
ON-CHECK-DELETE-MASTER
Este trigger disparado quando for feita uma tentativa de remoo de um registro presente no bloco Master de
uma relao Master-Detail.
O Form Builder gera este gatilho (trigger) automaticamente na aplicao quando criamos um objeto Relao (relation).
ON-CLEAR-DETAILS
Este trigger disparado quando, por algum motivo, ocorrer uma navegao entre registros no bloco Master de uma
relao Master-Detail, causando a necessidade de se efetuar uma limpeza nos registros detalhes.
O Form Builder gera este gatilho (trigger) automaticamente na aplicao quando criamos um objeto Relao (relation).
ON-POPULATE-DETAILS
Este trigger disparado quando, por algum motivo, ocorre a necessidade de se preencher os dados de um bloco que
o detalhe de uma relao Master-Detail.
O Form Builder gera este gatilho (trigger) automaticamente na aplicao quando criamos um objeto Relao (relation).
ON-ERROR
Este evento acionado quando o Forms recebe um erro. Podemos inclu-lo na aplicao se desejarmos substituir a
mensagem de erro padro do Forms por uma mensagem de erro customizada.
Para assegurar a funcionalidade default, devemos usar as rotinas Error_Code, Error_Text e Error_Type.
ON-MESSAGE
Este evento acionado quando o Forms recebe um aviso. Podemos inclu-lo na aplicao se desejarmos substituir
a mensagem de aviso padro do Forms por uma mensagem de erro customizada.
Para assegurar a funcionalidade default, devemos usar as rotinas Message_Code, Message_Text e Message_Type.
NAVEGAO (NAVIGATIONAL)
Os eventos classificados neste grupo esto associados navegao, ou seja, o momento em que o foco muda de um
item para outro. Essa mudana pode ocorrer entre itens de um mesmo registro, de registros diferentes, de blocos
diferentes e, ainda, para fora da aplicao ou na entrada de uma aplicao. De acordo com o tipo de navegao, um
conjunto particular de eventos causado. Quem causa esse tipo de evento pode ser o usurio ao mudar de item ou
a programao ao comandar a mudana.
POST-BLOCK
Inicia uma ao quando o foco se move para fora do bloco corrente.
POST-FORM
Inicia uma ao antes de o Forms navegar para fora do mdulo.
POST-RECORD
Inicia uma ao quando o foco deixa o registro corrente.
POST-TEXT-ITEM
Inicia uma ao quando o foco deixa o item corrente.
PRE-BLOCK
Inicia uma ao quando o foco se move para um bloco.
PRE-FORM
Inicia uma ao imediatamente antes de o Forms navegar para o mdulo vindo de fora do mdulo. Funciona
como um Startup.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1459
PRE-POPUP-MENU
Este trigger acionado quando um usurio faz com que um menu pop-up seja apresentado. As aes definidas
nesse trigger so executadas antes de o menu ser mostrado.
PRE-RECORD
Inicia uma ao quando o Forms navega para outro registro.
PRE-TEXT-ITEM
Inicia uma ao quando o Forms navega para outro item.
WHEN-NEW-BLOCK-INSTANCE
Inicia uma ao aps o foco ser movido de um item em um bloco para outro item em outro bloco.
WHEN-NEW-FORM-INSTANCE
Inicia uma ao na inicializao do mdulo.
WHEN-NEW-ITEM-INSTANCE
Inicia uma ao imediatamente aps o foco se mover para um item diferente. Se o item estiver em um novo
registro, esse gatilho disparado aps When-New-Record-Instance.
WHEN-NEW-RECORD-INSTANCE
Inicia uma ao aps o foco se mover para um novo registro. Se o novo registro estiver tambm em um novo bloco, este
gatilho acionado aps When-New-Block-Instance, mas antes do When-New-Item-Instance.
CONSULTA (QUERY-TIME)
Os eventos classificados neste grupo esto associados ao momento da consulta ao banco de dados, ou seja, quando o
Forms monta a query que efetivamente ser enviada para o banco de dados e quando ele faz a leitura de cada uma das
linhas selecionadas. Nesses dois momentos, poderemos incluir aes em adio quelas j estabelecidas por ele.
POST-QUERY
Este gatilho acionado a cada linha lida do banco de dados. Isto permitir que faamos modificaes no registro
lido, completemos dados, clculos, leitura de informaes, etc.
PRE-QUERY
Este gatilho acionado imediatamente antes de o Forms preparar o comando Select a ser enviado para o banco de
dados. Isso permitir que faamos uma interveno neste processo e modifiquemos por programao as condies
da consulta a ser realizada.
QUERY-PROCEDURE
Este trigger acionado quando uma operao de consulta requisitada.
No deve ser alterado pelo usurio.
INSERT-PROCEDURE
Este trigger acionado quando uma operao de incluso requisitada.
No deve ser alterado pelo usurio.
DELETE-PROCEDURE
Este trigger acionado quando uma operao de excluso requisitada.
No deve ser alterado pelo usurio.
LOCK-PROCEDURE
Este trigger acionado quando uma operao de bloqueio (lock) requisitada.
No deve ser alterado pelo usurio.
UPDATE-PROCEDURE
Este trigger acionado quando uma operao de atualizao requisitada.
No deve ser alterado pelo usurio.
TRANSACIONAL (TRANSACTIONAL)
Este grupo de eventos encontra-se ligado ao momento em que o Forms realiza a comunicao com o banco de
dados, seja para efetivao da transao, leitura de dados (Select), incio e fim de conexo ou bloqueio (lock).
ON-CHECK-UNIQUE
Este trigger disparado durante uma operao de Commit, quando o Form Runtime faz a verificao de unicidade
da(s) coluna(s) Primary Key, antes de montar uma operao de Insert ou Update para o banco de dados. acionado
uma vez para cada registro que venha a ser includo ou alterado.
Rotina para assegurar a funcionalidade-padro: Check_Record_Uniqueness.
ON-CLOSE
Este trigger acionado quando o operador ou a aplicao encerram (fecham) a consulta. Por default, o Form
Runtime somente encerra a consulta quando todos os registros tiverem sido lidos, ou seja, quando o cursor interno
que est controlando a leitura receber um NotFound.
ON-COLUMN-SECURITY
Este trigger disparado quando o Form Runtime faz a verificao do nvel de segurana para as colunas dos blocos
que tenham a propriedade Enforce Column Security marcadas.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1461
ON-COMMIT
Este trigger acionado quando o Form Runtime deseja enviar um Commit ao banco de dados aps ter realizado
um Post para todas as linhas marcadas para incluso, excluso ou alterao.
Rotina para assegurar a funcionalidade-padro: Commit_Form.
ON-COUNT
Este trigger acionado quando o Form Runtime deseja contar o nmero de linhas no banco de dados que atende
ao critrio estabelecido para a consulta (query).
Rotina para assegurar a funcionalidade-padro: Count_Query.
ON-DELETE
Substitui a funcionalidade-padro de remoo de registros. acionado uma vez para cada registro a ser removido
do banco de dados.
Rotina para assegurar a funcionalidade-padro: Delete_Record.
ON-FETCH
Este trigger acionado quando o Form Runtime deseja obter um conjunto de linhas resultantes de uma operao
de consulta. Para recuperao das primeiras linhas, esse trigger acionado aps o trigger On-Select.
Rotina para assegurar a funcionalidade-padro: Fetch_Records.
ON-INSERT
Substitui a funcionalidade-padro de incluso de registros. acionado uma vez para cada registro a ser includo no
banco de dados.
Rotina para assegurar a funcionalidade-padro: Insert_Record.
ON-LOCK
Este trigger acionado quando o Form Runtime deve efetuar o bloqueio da linha corrente no banco de dados. Isso
ocorre em funo de o operador iniciar uma modificao no registro corrente. O trigger acionado entre o momento
em que o operador pressiona a tecla e o aparecimento da informao modificada.
Rotina para assegurar a funcionalidade-padro: Lock_Record.
ON-LOGON
Este trigger acionado quando o Form Runtime tenta efetuar uma conexo com o banco de dados.
Rotina para assegurar a funcionalidade-padro: Logon.
ON-LOGOUT
Este trigger acionado quando o Form Runtime tenta encerrar uma conexo com o banco de dados, e
simultaneamente, a aplicao.
Rotina para assegurar a funcionalidade-padro: Logout.
ON-ROLLBACK
Este trigger acionado quando o Form Runtime deseja desfazer as modificaes ocorridas desde que o ltimo
Savepoint foi marcado.
Rotina para assegurar a funcionalidade-padro: Issue_Rollback.
ON-SAVEPOINT
Este trigger disparado quando o Form Runtime deseja estabelecer um ponto de controle. Por default, esses pontos so
estabelecidos na inicializao do Form, e no incio de cada processo transacional (Post e Commit).
Rotina para assegurar a funcionalidade-padro: Issue_Savepoint.
ON-SELECT
Este trigger acionado quando o Form Runtime deseja executar a operao de Select de uma Consulta. Substitui as
fases de abertura do cursor, parse e execute.
Rotina para assegurar a funcionalidade-padro: Select_Records.
ON-SEQUENCE-NUMBER
Este trigger acionado quando o Form Runtime deseja efetuar uma leitura no banco de dados para obter um
nmero de seqncia definido na propriedade Default Value de um determinado item.
Rotina para assegurar a funcionalidade-padro: Generate_Sequence_Number.
ON-UPDATE
Substitui a funcionalidade-padro de alterao de registros. acionado uma vez para cada registro a ser includo
no banco de dados.
Rotina para assegurar a funcionalidade-padro: Update_Record.
POST-CHANGE
Este trigger foi mantido para compatibilidade com verses anteriores e seu uso no recomendado.
POST-DATABASE-COMMIT
Adiciona uma ao ao processamento-padro aps a ao de Commit para o banco de dados. executado uma
nica vez ao trmino do processo transacional.
POST-DELETE
acionado aps uma determinada linha ter sido removida do banco de dados. Adiciona aes ao processamentopadro aps o evento. executado uma vez para cada linha removida.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1463
POST-FORMS-COMMIT
acionado antes da ao de Commit para o banco de dados e aps a ao de Post (onde todos os comandos Insert, Update
e Delete so executados). executado uma nica vez aps toda a transao ter sido enviada para o banco de dados.
POST-INSERT
acionado aps uma determinada linha ter sido includa no banco de dados. Adiciona aes ao processamentopadro aps o evento. executado uma vez para cada linha includa.
POST-LOGON
Este trigger acionado aps o Form Runtime ter estabelecido a comunicao com o banco de dados ou ter executado
o trigger On-Logon com sucesso.
POST-LOGOUT
Este trigger acionado aps o Form Runtime ter encerrado a comunicao com o banco de dados ou ter executado
o trigger On-Logout com sucesso.
POST-SELECT
Este trigger acionado aps o Form Runtime ter enviado, com sucesso, o comando de Select desejado para o banco
de dados ou aps a execuo bem-sucedida do trigger On-Select.
POST-UPDATE
acionado aps uma determinada linha ter sido alterada no banco de dados. Adiciona aes ao processamentopadro aps o evento. executado uma vez para cada linha alterada.
PRE-COMMIT
acionado antes de o Forms iniciar o processo de Post. executado uma nica vez no incio de todo o processo.
PRE-DELETE
acionado antes de uma determinada linha ser removida do banco de dados. Adiciona aes ao processamentopadro antes do evento. executado uma vez para cada linha a ser removida.
PRE-INSERT
acionado antes de uma determinada linha ser includa no banco de dados. Adiciona aes ao processamentopadro antes do evento. executado uma vez para cada linha a ser includa.
PRE-LOGON
Este trigger disparado imediatamente antes de o Form Runtime iniciar um procedimento de conexo com o
banco de dados.
PRE-LOGOUT
Este trigger disparado imediatamente antes de o Form Runtime iniciar um procedimento de desconexo com o
banco de dados.
PRE-SELECT
Este trigger acionado aps o Form Runtime ter preparado o comando Select a ser enviado para o banco de dados,
porm antes de o envio ocorrer.
O comando Select poder ser lido se for consultada a varivel de sistema System.Last_Query dentro desse trigger.
PRE-UPDATE
acionado antes de uma determinada linha ser alterada no banco de dados. Adiciona aes ao processamentopadro antes do evento. executado uma vez para cada linha a ser alterada.
VALIDAO (VALIDATION)
Os eventos classificados neste grupo esto associados ao momento de validao. O Form Runtime valida
individualmente os itens e os registros. Quando ele tem necessidade de efetuar uma validao, podemos incluir
nossas prprias regras de validao em adio (e aps) quelas estabelecidas por ele.
Existem apenas dois eventos neste grupo:
WHEN-VALIDATE-ITEM
Este evento causado todas as vezes que o Forms percebe que um item sofreu algum tipo de modificao e precisa
ser validado novamente. Aps haver modificado o valor do item, o usurio poder tentar navegar para outro item
ou salvar o registro ou quando a programao executar uma ao de navegao ou de atualizao.
Um gatilho associado a este evento ideal quando desejamos adicionar algum tipo de validao a um determinado
item; neste caso, podemos criar esse gatilho em nvel de item. Ou quando desejamos adicionar algum tipo de
validao comum a qualquer um dos itens do registro; neste caso podemos criar esse gatilho em nvel de bloco.
WHEN-VALIDATE-RECORD
Este evento causado todas as vezes que o Forms percebe que houve alguma mudana no registro e este precisa ser
validado novamente. Essa validao ocorre no momento em que o usurio tenta navegar para outro registro ou
quando ocorre o processamento-padro do Forms (um Commit, por exemplo) e, ainda, quando causamos uma
dessas duas situaes por programao.
ON-<EVENTO>
Indicam um ponto em que substitumos o processamento-padro da ferramenta.
On-Check-Delete-Master
On-Check-Unique
On-Clear-Details
On-Close
On-Column-Security
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1465
POST-<EVENTO>
Indicam um ponto imediatamente aps a ocorrncia de um When-<evento> ou On-<evento>. Com esses tipos de
trigger, adicionamos cdigo ao processamento-padro da ferramenta.
Post-Block
Post-Change
Post-Database-Commit
Post-Delete
Post-Form
Post-Forms-Commit
Post-Insert
Post-Logon
Post-Logout
Post-Query
Post-Record
Post-Select
Post-Text-Item
Post-Update
PRE-<EVENTO>
Indicam um ponto imediatamente antes da ocorrncia de um When-<evento> ou On-<evento>. Com esses tipos
de trigger, adicionamos cdigo ao processamento-padro da ferramenta.
Pre-Block
Pre-Commit
Pre-Delete
Pre-Form
Pre-Insert
Pre-Logon
Pre-Logout
Pre-Query
Pre-Popup-Menu
Pre-Record
Pre-Select
Pre-Text-Item
Pre-Update
WHEN-<EVENTO>
Indica um ponto em que podemos adicionar operaes ou tarefas ao processamento-padro da ferramenta.
When-Button-Pressed
When-Checkbox-Changed
When-Clear-Block
When-Create-Record
When-Custom-Item-Event
When-Form-Navigate
When-Database-Record
When-Form-Navigate
When-Image-Activated
When-Image-Pressed
When-List-Activated
When-List-Changed
When-Mouse-Click
When-Mouse-DoubleClick
When-Mouse-Down
When-Mouse-Enter
When-Mouse-Leave
When-Mouse-Move
When-Mouse-Up
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1467
KEY-*
Possuem uma ligao direta (1 para 1) com a tecla (ou conjunto de teclas) especfica. O trigger acionado quando
o operador pressiona a seqncia de teclas correspondente. Quando adicionados a uma aplicao, determinam a
substituio do processamento-padro da ferramenta.
Key-Clrblk
Key-Clrfrm
Key-Clrrec
Key-Commit
Key-Cquery
Key-Crerec
Key-Delrec
Key-Down
Key-Dup-Item
Key-Duprec
Key-Edit
Key-Enter
Key-Entqry
Key-Exeqry
Key-Exit
Key-Help
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1469
Captulo 17
OS MENUS DO FORMS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1471
NOVO (NEW)
Cria um novo mdulo. O tipo de mdulo depender do n selecionado. Possui 5 opes para criao do mdulo
Form, Formulrio Usando Gabarito (cria um mdulo Form a partir de um arquivo, extenso FMB, preexistente),
Menu, Biblioteca de PL/SQL ou Biblioteca de Objetos.
ABRIR (OPEN)
Abre um mdulo j existente. Poder ser apresentado um dilogo para que o usurio informe o meio de
armazenamento: disco ou banco de dados. A seguir, ser apresentada uma lista dos objetos do tipo correspondente
no meio escolhido. O tipo de mdulo depender do n selecionado.
FECHAR (CLOSE)
Fecha o mdulo corrente, ou seja, aquele que detm o foco.
SALVAR (SAVE)
Salva o mdulo corrente.
REVERTER (REVERT)
Desfaz as modificaes efetuadas no mdulo desde sua ltima salva, ou seja, reverte a cpia para o mesmo estado
daquela que est em disco (se existir).
IMPORTAR (IMPORT)
Permite a importao de imagens e paletas de cores existentes em arquivos do sistema operacional (s habilitado
quando o Editor de Layout tiver o foco).
EXPORTAR (EXPORT)
Permite a exportao de imagens e paletas de cores para arquivos do sistema operacional (s habilitado quando o
Editor de Layout tiver o foco).
CONECTAR (CONNECT)
Apresenta um dilogo que permite ao usurio informar cdigo, senha e string de conexo ao banco de dados para
que seja possvel estabelecer acesso.
DESCONECTAR (DISCONNECT)
Desfaz a conexo previamente estabelecida.
ADMINISTRAO (ADMINISTRATION)
um submenu que possui diversas aes administrativas, principalmente ligadas ao armazenamento da aplicao
no banco de dados:
RENOMEAR (RENAME)
Renomeia um mdulo armazenado no banco de dados.
DELETAR (DELETE)
Remove (deleta) um mdulo armazenado no banco de dados.
CONVERTER (CONVERT)
Converte os mdulos de formato texto (.FMT, .MMT, .PLD) para binrio (.FMB, .MMB, .PLL) e vice-versa.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1473
IMPRIMIR (PRINT)
Imprime a janela corrente para uma impressora.
SAIR (QUIT)
Encerra o Form Builder.
RECORTAR (CUT)
Recorta a rea corrente selecionada transferindo os dados para o Clipboard.
COPIAR (COPY)
Copia a rea corrente selecionada transferindo os dados para o Clipboard.
COLAR (PASTE)
Coloca os dados que estiverem no Clipboard na rea selecionada.
LIMPAR (CLEAR)
Recorta a rea corrente selecionada sem efetuar qualquer transferncia.
DUPLICAR (DUPLICATE)
Duplica o objeto selecionado.
SMARTCLASSES
Apresenta a lista de SmartClasses compatveis com o objeto selecionado presentes em uma Object Library aberta.
RGUAS (RULERS)
Apresenta ou no as rguas vertical e horizontal do layout.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1475
GRADE (GRID)
Apresenta ou no a grade.
RECOLHER (COLLAPSE)
Diminui, fecha o detalhamento do objeto selecionado no navegador.
CRIAR (CREATE)
Cria um novo objeto subordinado ao n corrente.
DELETAR (DELETE)
Remove o objeto selecionado.
JUSTIFICAR (JUSTIFY)
Permite o alinhamento de um texto direita, esquerda, centralizado, incio ou fim dentro do objeto selecionado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1477
BEVEL
Permite a escolha de sombreados que daro noo de perspectiva ao objeto.
TRAO (DASH)
Permite a definio de linhas pontilhadas, linha cheia, trao e ponto para objetos grficos (boilerplates grficos).
SETA (ARROW)
Permite a configurao de diversos tipos de setas no desenho.
BORDA (BORDER)
Permite que determinemos quais as bordas do objeto que ficaro visveis (topo, base, esquerda e direita).
GERAL (GENERAL)
Configuraes aplicveis aos objetos grficos em geral.
TEXTO (TEXT)
Configuraes aplicveis aos boilerplates de texto.
IMAGEM (IMAGE)
Configuraes aplicveis aos boilerplates do tipo imagem.
ARCO (ARC)
Configuraes aplicveis aos boilerplates do tipo arco.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1479
AGRUPAR (GROUP)
Agrupa dois ou mais objetos.
DESAGRUPAR (UNGROUP)
Libera os objetos anteriormente grupados.
CLIENTE/SERVIDOR (CLIENT/SERVER)
Corresponde antiga opo de execuo.
WEB (WEB)
Executa a aplicao com sada para um Browser.
DEPURAR (DEBUG)
Executa a aplicao e, simultaneamente, aciona o depurador para possibilitar a execuo passo a passo.
COMPILAR (COMPILE)
Compila os cdigos de PL/SQL. Pode ser realizada uma compilao Incremental (somente aqueles cdigos ainda no
compilados ou modificados) ou Todas (todos os cdigos de PL/SQL existentes no fonte).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1481
REPORT BUILDER
Aciona o Report Builder.
PREFERNCIAS (PREFERENCES)
Aciona o dilogo de Preferncias contendo as pastas Geral, Acesso, Assistentes e Runtime para que especifiquemos
caractersticas para o ambiente.
MENU (MENU)
CRIAR ABAIXO (CREATE DOWN)
Cria um item de menu abaixo do item atual (dentro do mesmo submenu ou em um novo submenu).
DELETAR (DELETE)
Remove o item de menu (e/ou submenu) selecionado.
EXPANDIR (EXPAND)
Expande o nvel de detalhamento do item selecionado, apresentando os itens subordinados (se houver).
RECOLHER (COLLAPSE)
Fecha o nvel de detalhamento do item selecionado, escondendo os itens subordinados (se houver).
QUICK TOUR
Aciona o Browser para apresentao de um tour pelas diversas ferramentas do pacote Oracle Developer. Mostra a
capacidade de cada produto. Bastante visual!
CUE CARDS
Apresenta um conjunto de dilogos que fornecem exemplos (inclusive animados) a respeito de algumas das tarefas
que podemos realizar com o Form Builder.
Por exemplo: executar uma aplicao, construir uma aplicao simples, modificar uma aplicao, construir uma
aplicao Mestre-Detalhe, etc.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1483
MANUAIS (MANUALS)
Permite o acesso a alguns dos manuais fornecidos pela Oracle no CD-ROM.
Captulo 18
PROPRIEDADES DO REPORTS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1485
NCORA (ANCHOR)
GRUPO NCORA (ANCHOR)
NOME DO OBJETO-FILHO (CHILD OBJECT NAME)
Apresenta o nome do objeto de layout dependente (filho).
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
TIPO (TYPE)
Indica o tipo de Boilerplate (Retngulo, Texto, Retngulo Arredondado, etc.).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1487
MARCADOR (BOOKMARK)
Esta propriedade um link de hipertexto que aparecer no quadro de BookMark de um documento HTML ou na
rea de BookMark de um PDF Viewer. Quando clicarmos no BookMark, o objeto associado ser mostrado no
topo da janela.
HIPERLIGAO (HYPERLINK)
Esta propriedade uma ligao URL que mostra um documento ou destino dentro de um documento quando o
objeto clicado em um browser (Web) ou em um PDF Viewer.
Os valores vlidos para essa propriedade so:
Destino dentro do prprio documento: #dest_local
Destino dentro de um documento local: file:/arquivos/teste.pdf#dest_local
Documento na mquina local: file:/arquivos/teste.pdf ou file:///c:\arquivos\teste.pdf
Documento em uma mquina remota: http://www.remoto.com.br/teste.pdf ou http://www.remoto.com.br/
teste.htm ou ftp://www.remoto.com.br/arqs.zip
Destino dentro de um documento remoto: http://www.remoto.com.br/teste.pdf#dest_remoto
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1489
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
BOTO (BUTTON)
INFORMAES GERAIS (GENERAL INFORMATION)
NOME (NAME)
Nome do objeto.
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
TEXTO (TEXT)
Se o tipo de etiqueta do boto for texto, nesta propriedade devemos informar o texto a ser apresentado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1491
MARCADOR (BOOKMARK)
Esta propriedade um link de hipertexto que aparecer no quadro de BookMark de um documento HTML ou na rea
de BookMark de um PDF Viewer. Quando clicarmos no BookMark, o objeto associado ser mostrado no topo da janela.
HIPERLIGAO (HYPERLINK)
Esta propriedade uma ligao URL que mostra um documento ou destino dentro de um documento quando o
objeto clicado em um browser (Web) ou em um PDF Viewer.
Os valores vlidos para esta propriedade so:
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1493
CAMPO (FIELD)
INFORMAES GERAIS (GENERAL INFORMATION)
NOME (NAME)
Nome do objeto.
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
CAMPO (FIELD)
ORIGEM (SOURCE)
Indica o local de onde o campo obtm seu valor (normalmente uma coluna ou parmetro).
VISVEL (VISIBLE)
Esta propriedade indica se o campo deve ou no ser formatado. Se receber o valor No (No), o campo ficar
escondido (hidden), ou seja, no ser formatado. Isso til quando desejamos apenas referenciar o campo em um
boilerplate de texto, por exemplo, em um relatrio tipo carta. A referncia ao campo no boilerplate de texto feita
com o formato &<nome do campo>.
COLUNA (COLUMN)
Reflete as informaes presentes no Data Model referente coluna origem. Possui as seguintes propriedades:
LARGURA (WIDTH)
Determina o nmero mximo de caracteres que os valores armazenados para esta coluna podem ocupar.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1495
SUMRIO (SUMMARY)
FUNO (FUNCTION)
Determina a funo de sumarizao a ser aplicada coluna. Os valores vlidos so:
Mdia (Average) Calcula a mdia dos valores da coluna.
Contagem (Count) Conta o nmero de registros.
Primeiro (First) Apresenta o primeiro valor obtido para a coluna.
ltimo (Last) Imprime o ltimo valor obtido para a coluna.
Mximo (Maximum) Calcula o maior valor para a coluna.
Mnimo (Minimum) Calcula o menor valor para a coluna.
% do Total (% of Total) Calcula o percentual da coluna em relao ao grupo especificado na propriedade
Calcular em (Compute At).
Desvio Padro (Std. Deviation) Calcula a raiz quadrada positiva da varincia para a coluna.
Soma (Sum) Calcula o somatrio dos valores da coluna.
Variao (Variance) Soma os quadrados das distncias dos valores de cada coluna em relao a um valor
central e divide o total pelo nmero de valores menos 1.
ORIGEM (SOURCE)
Determina a coluna sobre a qual o clculo ser realizado.
MARCADOR (BOOKMARK)
Esta propriedade um link de hipertexto que aparecer no quadro de BookMark de um documento HTML ou na rea
de BookMark de um PDF Viewer. Quando clicarmos no BookMark, o objeto associado ser mostrado no topo da janela.
HIPERLIGAO (HYPERLINK)
Esta propriedade uma ligao URL que mostra um documento ou destino dentro de um documento quando o
objeto clicado em um browser (Web) ou em um PDF Viewer.
Os valores vlidos para essa propriedade so:
Destino dentro do prprio documento: #dest_local
Destino dentro de um documento local: file:/arquivos/teste.pdf#dest_local
Documento na mquina local: file:/arquivos/teste.pdf ou file:///c:\arquivos\teste.pdf
Documento em uma mquina remota: http://www.remoto.com.br/teste.pdf ou http://www.remoto.com.br/
teste.htm ou ftp://www.remoto.com.br/arqs.zip
Destino dentro de um documento remoto: http://www.remoto.com.br/teste.pdf#dest_remoto
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1497
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1499
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
PARMETRO (PARAMETER)
TIPO DE DADOS (DATATYPE)
Esta uma propriedade Read-Only que apresenta o tipo de dado da origem escolhida.
LARGURA (WIDTH)
Esta propriedade determina a quantidade mxima de caracteres do parmetro.
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
COLUNA (COLUMN)
TIPO DE COLUNA (COLUMN TYPE)
Indica a categoria da coluna. Neste caso o valor deve ser Marcador de Posio.
LARGURA (WIDTH)
Determina o nmero mximo de caracteres que os valores armazenados para esta coluna podem ocupar.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1501
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
COLUNA (COLUMN)
TIPO DE COLUNA (COLUMN TYPE)
Indica a categoria da coluna. Neste caso o valor deve ser Frmula.
LARGURA (WIDTH)
Determina o nmero mximo de caracteres que os valores armazenados para esta coluna podem ocupar.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1503
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
COLUNA (COLUMN)
TIPO DE COLUNA (COLUMN TYPE)
Indica a categoria da coluna. Neste caso o valor deve ser Resumo.
LARGURA (WIDTH)
Determina o nmero mximo de caracteres que os valores armazenados para esta coluna podem ocupar.
SUMRIO (SUMMARY)
FUNO (FUNCTION)
Determina a funo de sumarizao a ser aplicada coluna. Os valores vlidos so:
Mdia (Average) Calcula a mdia dos valores da coluna.
Contagem (Count) Conta o nmero de registros.
Primeiro (First) Apresenta o primeiro valor obtido para a coluna.
ltimo (Last) Imprime o ltimo valor obtido para a coluna.
Mximo (Maximum) Calcula o maior valor para a coluna.
Mnimo (Minimum) Calcula o menor valor para a coluna.
% do Total (% of Total) Calcula o percentual da coluna em relao ao grupo especificado na propriedade
Calcular em (Compute At).
Desvio Padro (Std. Deviation) Calcula a raiz quadrada positiva da varincia para a coluna.
Soma (Sum) Calcula o somatrio dos valores da coluna.
Variao (Variance) Soma os quadrados das distncias dos valores de cada coluna em relao a um valor
central e divide o total pelo nmero de valores menos 1.
ORIGEM (SOURCE)
Determina a coluna sobre a qual o clculo ser realizado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1505
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
COLUNA (COLUMN)
TIPO DE COLUNA (COLUMN TYPE)
Indica a categoria da coluna. Alguns dos valores possveis so: Tipo de Dados-Escalar, Tipo de Dados-Ref, Tipo de
Dados-Objeto, Banco de Dados-Desconhecido, Frmula, Marcador de Posio ou Resumo.
LARGURA (WIDTH)
Determina o nmero mximo de caracteres que os valores armazenados para esta coluna podem ocupar. O valor
calculado a partir da coluna do banco de dados ou expresso definida na query.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1507
CONSULTA (QUERY)
INFORMAES GERAIS (GENERAL INFORMATION)
NOME (NAME)
Nome do objeto.
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
CONSULTA (QUERY)
TIPO (TYPE)
uma propriedade Read-Only que descreve o tipo da query.
GRFICO (CHART)
INFORMAES GERAIS (GENERAL INFORMATION)
NOME (NAME)
Nome do objeto.
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
GRFICO (CHART)
NOME DO ARQUIVO DE GRFICO (CHART FILENAME)
Indica o nome do arquivo no qual o grfico (ou display) do Graphics Builder est localizado.
MARCADOR (BOOKMARK)
Esta propriedade um link de hipertexto que aparecer no quadro de BookMark de um documento HTML ou na rea
de BookMark de um PDF Viewer. Quando clicarmos no BookMark, o objeto associado ser mostrado no topo da janela.
HIPERLIGAO (HYPERLINK)
Esta propriedade uma ligao URL que mostra um documento ou destino dentro de um documento quando o
objeto clicado em um browser (Web) ou em um PDF Viewer.
Os valores vlidos para esta propriedade so:
Destino dentro do prprio documento: #dest_local
Destino dentro de um documento local: file:/arquivos/teste.pdf#dest_local
Documento na mquina local: file:/arquivos/teste.pdf ou file:///c:\arquivos\teste.pdf
Documento em uma mquina remota: http://www.remoto.com.br/teste.pdf ou http://www.remoto.com.br/
teste.htm ou ftp://www.remoto.com.br/arqs.zip
Destino dentro de um documento remoto: http://www.remoto.com.br/teste.pdf#dest_remoto
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1509
GRUPO (GROUP)
INFORMAES GERAIS (GENERAL INFORMATION)
NOME (NAME)
Nome do objeto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1511
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
GRUPO (GROUP)
TIPO DE FILTRO (FILTER TYPE)
Indica o tipo de filtro aplicvel ao grupo. Os valores vlidos aceitos pelo relatrio so:
Nenhum (None) No h filtro.
Primeira (First) Os primeiros n registros so aceitos pelo relatrio. A quantidade n definida pela propriedade
Nmero de Registros (Number of Records).
ltima (Last) Os ltimos n registros so aceitos pelo relatrio. A quantidade n definida pela propriedade
Nmero de Registros (Number of Records).
PL/SQL Os registros aceitos ou no so definidos por uma funo de PL/SQL.
CONDIO (CONDITION)
Determina a condio a ser utilizada para montagem da condio de restrio na query-filha. Os valores vlidos
para esta propriedade so: = (igual a), < (menor que), <= (menor ou igual a), <> (diferente de), > (maior que), >=
(maior ou igual a), Like (Como), Not Like (No-Como).
MATRIZ (MATRIX)
INFORMAES GERAIS (GENERAL INFORMATION)
NOME (NAME)
Nome do objeto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1513
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
MATRIZ (MATRIX)
QUADRO DE REPETIO VERTICAL (VERTICAL REPEATING FRAME)
Indica o nome do Repeating Frame Vertical que compe o produto matricial. Esta propriedade read-only.
MARCADOR (BOOKMARK)
Esta propriedade um link de hipertexto que aparecer no quadro de BookMark de um documento HTML ou na rea
de BookMark de um PDF Viewer. Quando clicarmos no BookMark, o objeto associado ser mostrado no topo da janela.
HIPERLIGAO (HYPERLINK)
Esta propriedade uma ligao URL que mostra um documento ou destino dentro de um documento quando o
objeto clicado em um browser (Web) ou em um PDF Viewer.
Os valores vlidos para esta propriedade so:
Destino dentro do prprio documento: #dest_local
Destino dentro de um documento local: file:/arquivos/teste.pdf#dest_local
Documento na mquina local: file:/arquivos/teste.pdf ou file:///c:\arquivos\teste.pdf
Documento em uma mquina remota: http://www.remoto.com.br/teste.pdf ou http://www.remoto.com.br/
teste.htm ou ftp://www.remoto.com.br/arqs.zip
Destino dentro de um documento remoto: http://www.remoto.com.br/teste.pdf#dest_remoto
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
RELATRIO (REPORT)
UNIDADE DE MEDIDA (UNIT OF MEASUREMENT)
Especificao da unidade de medida em que o Report Builder ir trabalhar. As opes so: centmetros, polegadas e pontos.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1515
DIREO (DIRECTION)
Associado ao Panel Print Order, indica a direo (esquerda para direita ou vice-versa).
DISTRIBUIO (DISTRIBUTION)
Esta propriedade aciona um dilogo em que determinamos os diversos formatos de gerao do relatrio. Nesse
dilogo, as seguintes informaes devem ser preenchidas:
ID de Distribuio (Distribution ID) Um identificador nico para a distribuio. Pode ser numrico ou alfanumrico.
NomeDes (Desname) Indica o destino, que pode ser um diretrio com nome de arquivo (o diretrio deve
existir), impressora ou e-mail ID (ou lista de distribuio).
FormatoDes (Desformat) Indica formato do arquivo ou driver da impressora quando o Tipo de Destino (Destype) for
arquivo. Os valores vlidos para este campo so apresentados por uma lista. Podem ser: BitMap(default, especifica o
resultado como mostrado pelo Report Builder), HTML (formato compatvel com browsers que suportem HTML 3.0),
HTMLCSS (formato compatvel com browsers que suportem HTML 3.0 com Cascading Style Sheets), PDF (pode ser lido
por um PDF viewer), ASCII (especifica formato caracter, que pode ser lido por uma aplicao e-mail compatvel com
padro MAPI) ou RTF (formato Rich Text Format, compatvel com editores tais como Microsoft Word).
TipoDes (Destype) Indica o tipo de destino, que pode ser: FILE (indica um arquivo nomeado por NomeDes), MAIL
(especifica um e-mail identificado por NomeDes; o parmetro de sistema Mode deve estar preenchido com Character) ou Printer (cuja impressora identificada por NomeDes).
Cpias (Copies) Determina a quantidade de cpias para esta distribuio.
ALTURA (HEIGHT)
Altura da tela de parmetro apresentado a tempo de execuo do relatrio. expressa na unidade de
dimensionamento definida.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1517
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1519
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
MARCADOR (BOOKMARK)
Esta propriedade um link de hipertexto que aparecer no quadro de BookMark de um documento HTML ou na rea
de BookMark de um PDF Viewer. Quando clicarmos no BookMark, o objeto associado ser mostrado no topo da janela.
HIPERLIGAO (HYPERLINK)
Esta propriedade uma ligao URL que mostra um documento ou destino dentro de um documento quando o
objeto clicado em um browser (Web) ou em um PDF Viewer.
Os valores vlidos para esta propriedade so:
Destino dentro do prprio documento: #dest_local
Destino dentro de um documento local: file:/arquivos/teste.pdf#dest_local
Documento na mquina local: file:/arquivos/teste.pdf ou file:///c:\arquivos\teste.pdf
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1521
PARMETRO (PARAMETER)
INFORMAES GERAIS (GENERAL INFORMATION)
NOME (NAME)
Nome do objeto.
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
PARMETRO (PARAMETER)
TIPO DE DADOS (DATATYPE)
Esta propriedade indica o tipo de dado do parmetro. Os valores vlidos so: Character, Date ou Number.
LARGURA (WIDTH)
Esta propriedade determina a quantidade mxima de caracteres do parmetro.
QUADRO (FRAME)
INFORMAES GERAIS (GENERAL INFORMATION)
NOME (NAME)
Nome do objeto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1523
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
MARCADOR(BOOKMARK)
Esta propriedade um link de hipertexto que aparecer no quadro de BookMark de um documento HTML ou na rea
de BookMark de um PDF Viewer. Quando clicarmos no BookMark, o objeto associado ser mostrado no topo da janela.
HIPERLIGAO (HYPERLINK)
Esta propriedade uma ligao URL que mostra um documento ou destino dentro de um documento quando o
objeto clicado em um browser (Web) ou em um PDF Viewer.
Os valores vlidos para esta propriedade so:
Destino dentro do prprio documento: #dest_local
Destino dentro de um documento local: file:/arquivos/teste.pdf#dest_local
Documento na mquina local: file:/arquivos/teste.pdf ou file:///c:\arquivos\teste.pdf
Documento em uma mquina remota: http://www.remoto.com.br/teste.pdf ou http://www.remoto.com.br/
teste.htm ou ftp://www.remoto.com.br/arqs.zip
Destino dentro de um documento remoto: http://www.remoto.com.br/teste.pdf#dest_remoto
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1525
COMENTRIOS (COMMENTS)
Comentrios sobre o objeto. Campo de texto de livre digitao.
GRUPO (GROUP)
TIPO DE FILTRO (FILTER TYPE)
Indica o tipo de filtro aplicvel ao grupo. Os valores vlidos aceitos pelo relatrio so:
Nenhum (None) No h filtro.
Primeira (First) Os primeiros n registros so aceitos pelo relatrio. A quantidade n definida pela propriedade
Nmero de Registros (Number of Records).
ltima (Last) Os ltimos n registros so aceitos pelo relatrio. A quantidade n definida pela propriedade
Nmero de Registros (Number of Records).
PL/SQL Os registros aceitos ou no so definidos por uma funo de PL/SQL.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1527
MARCADOR (BOOKMARK)
Esta propriedade um link de hipertexto que aparecer no quadro de BookMark de um documento HTML ou na rea
de BookMark de um PDF Viewer. Quando clicarmos no BookMark, o objeto associado ser mostrado no topo da janela.
HIPERLIGAO (HYPERLINK)
Esta propriedade uma ligao URL que mostra um documento ou destino dentro de um documento quando o
objeto clicado em um browser (Web) ou em um PDF Viewer.
Os valores vlidos para essa propriedade so:
Destino dentro do prprio documento: #dest_local
Destino dentro de um documento local: file:/arquivos/teste.pdf#dest_local
Documento na mquina local: file:/arquivos/teste.pdf ou file:///c:\arquivos\teste.pdf
Documento em uma mquina remota: http://www.remoto.com.br/teste.pdf ou http://www.remoto.com.br/
teste.htm ou ftp://www.remoto.com.br/arqs.zip
Destino dentro de um documento remoto: http://www.remoto.com.br/teste.pdf#dest_remoto
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1529
SEO (SECTION)
Este elemento foi includo na verso 6.0 com as seguintes propriedades:
SEO (SECTION)
LARGURA (WIDTH)
Determina a largura da pgina fsica desta seo.
ALTURA (HEIGHT)
Determina a altura da pgina fsica desta seo.
ORIENTAO (ORIENTATION)
Indica se o resultado da seo Landscape ou Portrait.
DISTRIBUIO (DISTRIBUTION)
Esta propriedade aciona um dilogo em que determinamos os diversos formatos de gerao do relatrio. Nesse
dilogo, as seguintes informaes devem ser preenchidas:
ID de Distribuio Um identificador nico para a distribuio. Pode ser numrico ou alfanumrico.
NomeDes (Desname) Indica o destino, que pode ser um diretrio com nome de arquivo (o diretrio deve
existir), impressora ou e-mail ID (ou lista de distribuio).
FormatoDes (Desformat) Indica formato do arquivo ou driver da impressora quando o Tipo de Destino (Destype)
for arquivo. Os valores vlidos para este campo so apresentados por uma lista. Podem ser: BitMap (default,
especifica o resultado como mostrado pelo Report Builder), HTML (formato compatvel com browsers que
suportem HTML 3.0), HTMLCSS (formato compatvel com browsers que suportem HTML 3.0 com Cascading
Style Sheets), PDF (pode ser lido por um PDF viewer), ASCII (especifica formato caracter, que pode ser lido por
uma aplicao e-mail compatvel com padro MAPI), RTF (formato Rich Text Format, compatvel com editores
tais como Microsoft Word) ou XML.
TipoDes (Destype) Indica o tipo de destino, que pode ser: FILE (indica um arquivo nomeado por NomeDes), MAIL
(especifica um e-mail identificado por NomeDes; o parmetro de sistema Mode deve estar preenchido com Character) ou Printer (cuja impressora identificada por NomeDes).
Cpias (Copies) Determina a quantidade de cpias para esta distribuio.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1531
Captulo 19
PARMETROS DE EXECUO
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1533
PARA RELATRIOS
Este grupo de parmetros aplicvel ao Report Builder (RWBLD60), Report Runtime (RWRUN60) e ao Report
Client (RWCLI60). Em separado apresentaremos os parmetros aplicveis ao Report Convert (RWCON60).
ACCESS
Este parmetro determina a localizao do mdulo a ser aberto. Aplicvel ao Report Builder.
Sintaxe: [ACCESS=] { file | database }
ARRAYSIZE
Determina o tamanho (em KB) para utilizao pelo Oracle Array Processing. Esse valor pode variar de 1 a 9.999, indicando
que esta quantidade de KB de memria pode ser utilizada para cada query do relatrio. O valor default 10 KB.
Sintaxe: [Arraysize=]<n>
AUTHID
Indica o username e password utilizados para autenticao dos usurios junto ao report Server. Aplicvel apenas ao
RWCLI60.
Sintaxe: [Authid=] {<username> / <password>}
AUTOCOMMIT
Determina que as alteraes enviadas ao banco de dados devem ser automaticamente Committed. Para alguns
bancos de dados (ex.: SQL Server), essa opo indispensvel.
Sintaxe: [Autocommit=] { Yes | No }
BACKGROUND
Este parmetro indica se o relatrio deve ser executado em background. Os valores vlidos so: Yes ou No (default).
Sintaxe: [Background=] {Yes | No}
BATCH
Quando ativado, suprime toda a interface de entrada ou sada do terminal para que o relatrio seja executado sem
interveno do usurio. Este parmetro no se aplica ao Report Builder.
Sintaxe: [Batch=] {Yes | No}
BLANKPAGES
Este parmetro indica que devem ser suprimidas as pginas em branco quando o relatrio for enviado para a impressora.
Sintaxe: [BLANKPAGES=] { Yes | No }
BUFFERS
Corresponde ao tamanho da rea de memria virtual cache em KB. Os valores vlidos variam de 1 a 9.999. O valor
default 640 KB.
Sintaxe: [Buffers=]<n>
CACHELOB
Este parmetro indica se os Lobs recuperados do banco de dados devem ser arquivados em disco (cache), em um
diretrio temporrio (definido por Reports60_Tmp).
Sintaxe: [CACHELOB=] { Yes | No }
CELLWRAPPER
Este parmetro especifica um caracter a ser colocado antes e depois de cada clula de valor de um relatrio cujo
formato seja Delimited (no parmetro Desformat). O valor default None.
Sintaxe: [CELLWRAPPER=] { <valor> }
O valor poder ser qualquer caracter alfanumrico ou uma string de caracteres alfanumricos. Pode-se tambm
usar uma das seguintes palavras reservadas com significado especial: Tab (tabulao), Space (um espao), Return
(nova linha), None (no haver caracter em torno da clula).
Podem-se usar, tambm, as seqncias de escape para ASCII, tais como: \t (tabulao), \n (nova linha).
CMDFILE
O arquivo de comandos contm os argumentos necessrios execuo do relatrio. Podemos cri-lo para que a
cada execuo do relatrio especifiquemos um nmero menor de parmetros.
Este parmetro determina o nome do arquivo de comandos. Os comandos devem ser armazenados no arquivo
segundo a sintaxe: <nome do parmetro> = <valor>.
Sintaxe: [Cmdfile=]<nome do arquivo>
COPIES
Este parmetro determina o nmero de cpias do relatrio. Ser ignorado se o destino no for impressora.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1535
CURRENCY
Este parmetro determina o caracter a ser usado como smbolo financeiro para formatos numricos.
O valor default para esse parmetro dado pela NLS em uso.
Sintaxe: [Currency=]<smbolo financeiro>
CUSTOMIZE
Este parmetro especifica um arquivo XML ou uma lista de arquivos XML que desejamos aplicar ao relatrio
identificado no parmetro mdulo. Este arquivo (ou arquivos) contm especificaes como fontes, cores, etc., que
visam modificar a definio do relatrio.
Sintaxe: [Customize=]<nome arq>.xml | (<nome arq1>.xml, <nome arq2>.xml, )
DATEFORMATMASK
Este parmetro especifica um formato de data para os relatrios cujo formato seja Delimited (Desformat).
Sintaxe: [DATEFORMATMASK=] { <mscara> }
DECIMAL
Este parmetro determina o smbolo a ser usado como caracter decimal para formatos numricos.
O valor default para esse parmetro dado pela NLS em uso.
Sintaxe: [Decimal=]<caracter decimal>
DELIMITER
Este parmetro especifica um caracter para separar uma clula da outra (separador entre clulas), em um relatrio
cujo formato seja Delimited (no parmetro Desformat). O valor default Tab.
Sintaxe: [DELIMITER=] { <valor> }
O valor poder ser qualquer caracter alfanumrico ou uma string de caracteres alfanumricos. Pode-se tambm
usar uma das seguintes palavras reservadas com significado especial: Tab (tabulao), Space (um espao), Return
(nova linha), None (no haver caracter em torno da clula).
Podem-se usar, tambm, as seqncias de escape para ASCII, tais como: \t (tabulao), \n (nova linha).
DESFORMAT
Em ambientes Bit-mapped, este parmetro especifica o driver de impressora a ser utilizado quando Destype File.
Em ambientes character-mode, determina as caractersticas da impressora nomeada por Desname.
Sintaxe: [Desformat=]<formato destino>
Esse parmetro ignorado se o destino for vdeo.
Alguns dos valores vlidos so: hpl, hplwide, dec, decwide, decland, dec180, deflt, wide, pdf, html, htmlcss.
DESNAME
o nome do arquivo ou da impressora ou do e-mail (ou lista de distribuio) para onde o relatrio ser enviado. O
tamanho deste parmetro no pode exceder a 1 KB. Veja o parmetro Destype a seguir.
Sintaxe: [Desname=]<nome destino>
DESTINATION
Este parmetro determina o nome do arquivo .DST que define a lista de distribuio para o relatrio corrente.
Sintaxe: [DESTINATION=] { <nome do arquivo> }
DESTYPE
Indica o tipo de perifrico que receber o resultado do relatrio.
Sintaxe: [Destype=] { Screen | File | Printer | Preview | Sysout | Mail | Cache | Localfile}.
Os valores vlidos apresentados na sintaxe possuem o significado:
Screen Envia o resultado para o Previewer. Esse valor somente vlido quando Batch=No. No aplicvel ao RWCLI60.
File Salva o resultado em um arquivo. O nome do arquivo definido pelo parmetro Desname.
Printer Envia o resultado para a impressora nomeada pelo parmetro Desname.
Preview Envia o resultado para o Previewer. Faz com que o resultado seja formatado como PostScript. O
Previewer usa o parmetro Desname para determinar que fontes da impressora usar para apresentar a sada. No
aplicvel ao RWCLI60.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1537
DISABLEFILE
Este parmetro indica se pode ou no ser feita gerao do relatrio para arquivo no Runtime Previewer (menu
Arquivo, opo Criar Para Arquivo).
Sintaxe: [DISABLEFILE=] { Yes | No }
DISABLEMAIL
Este parmetro indica se o menu Mail, e o boto equivalente na barra de ferramentas, est ou no habilitado
quando a execuo feita no Runtime Previewer.
Sintaxe: [DISABLEMAIL=] { Yes | No }
DISABLENEW
Este parmetro indica se pode ou no ser aberta uma nova instncia do Previewer no Runtime Previewer.
Sintaxe: [DISABLENEW=] { Yes | No }
DISABLEPRINT
Este parmetro indica se a possibilidade de impresso (Configurao de Pgina e Escolha de Impressora), e o boto
equivalente na barra de ferramentas, est ou no habilitada quando a execuo feita no Runtime Previewer.
Sintaxe: [DISABLEPRINT=] { Yes | No }
DISTRIBUTE
Este parmetro habilita ou desabilita a distribuio do relatrio para mltiplos destinos. Se habilitado, deve haver uma
lista de distribuio definida internamente no relatrio ou por um arquivo do tipo .DST (parmetro Destination).
Sintaxe: [DISTRIBUTE=] { Yes | No }
ERRFILE
Indica o nome de um arquivo para armazenamento de todas as mensagens de erro ocorridas durante a execuo
do relatrio.
Sintaxe: [Errfile=] <nome do arquivo>
EXPRESS_SERVER
Especifica o Servidor Express ao qual desejamos estabelecer conexo.
Sintaxe: [EXPRESS_SERVER=]{server=[server] / domain=[domain] / user=[userid] / password= [passwd]}
JOBNAME
Este parmetro especifica um nome (uma string) a ser mostrada na Reports Queue Manager para o relatrio atual.
Se omitido, o Queue Manager apresentar o nome do relatrio como nome do job. Aplicvel somente ao RWCLI60.
Sintaxe: [Jobname=]<string>
KEYIN
Determina o nome de um arquivo que contm comandos de simulao de teclado e que ser usado a tempo de
execuo do relatrio. O arquivo criado atravs do parmetro KeyOut. S relevante em ambientes character
mode. No aplicvel ao Report Builder.
Sintaxe: [Keyin=] <nome do arquivo>
KEYOUT
Corresponde ao nome de um arquivo que ser gerado pelo Report Builder para registrar todas as teclas acionadas
durante a execuo do relatrio. A utilizao deste arquivo pode ser feita com o uso do parmetro KeyIn. S
relevante em ambientes character mode. No aplicvel ao Report Builder.
Sintaxe: [Keyout=] <nome do arquivo>
LOGFILE
Indica o nome do arquivo para o qual o comando File -> Print Screen enviar o resultado. Se o arquivo j existir em
disco, o resultado ser adicionado a esse arquivo. Esse parmetro s aplicvel a character mode. No aplicvel ao
Report Builder.
Sintaxe: [Logfile=] <nome de arquivo>
LONGCHUNK
Determina o tamanho (em KB) dos incrementos em que o Report Runtime recupera o valor de uma coluna Long. O
valor informado pode variar de 1 a 9.999, porm limitado pelo sistema operacional em uso. O valor default 10K.
Sintaxe: [Longchunk=] <n>
MAXIMIZE
Este parmetro indica se devemos maximizar a janela do Report. Este parmetro s se acha presente na lista de
parmetros do Report Builder, porm a documentao indica que aplicvel apenas ao Report Runtime. O parmetro
deve ser passado para o Builder. Quando o Previsualizador de Runtime for acionado, este ser apresentado maximizado.
Sintaxe: [Maximize=] {Yes | No}
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1539
MODE
Especifica a forma de execuo do relatrio: caracter ou bitmap. Isso til quando desejamos executar um relatrio
caracter em um ambiente bitmap ou vice-versa.
Sintaxe: [Mode=] {Bitmap | Character | Default }
MODULE | REPORT
Este parmetro determina o nome do relatrio a ser executado. A opo Report mantida para compatibilidade
com verses anteriores.
Sintaxe: [Module | Report=]<nome do mdulo>
O nome do mdulo corresponde a um arquivo com a extenso .Rdf ou .Rep. A partir da 6i tambm podemos usar a extenso .XML.
NONBLOCKSQL
Especifica se possvel a outros programas executarem enquanto o Reports Runtime est obtendo (fetch) dados do
banco de dados.
Sintaxe: [Nonblocksql=] {Yes | No }
NUMBERFORMATMASK
Este parmetro especifica um formato numrico para os relatrios cujo formato seja Delimited (Desformat).
Sintaxe: [NUMBERFORMATMASK=] { <mscara> }
PAGESTREAM
Este parmetro habilita ou desabilita a gerao de arquivos diferentes para cada pgina do relatrio quando o
formato de sada HTML ou HTMLCSS.
Sintaxe: [PAGESTREAM=] { Yes | No }
ONFAILURE
Indica a ao a ser executada se ocorrer um erro durante o processamento do relatrio e este terminar sem sucesso.
Sintaxe: [Onfailure=] { Commit | Rollback | Noaction }
ONSUCCESS
Indica a ao a ser executada quando o relatrio concludo com sucesso.
Sintaxe: [Onsuccess=] { Commit | Rollback | Noaction }
ORIENTATION
Controla a direo na qual as pginas do relatrio sero impressas. Default indica que ser utilizada a orientao
determinada pela impressora.
Sintaxe: [Orientation=] { Default | Landscape | Portrait }
PAGESIZE
Determina o tamanho da pgina fsica do relatrio. O tamanho especificado deve ser suficiente para conter o
layout definido; caso contrrio, o relatrio no ser executado. A unidade dessa medida depende da especificao
de Unidade de Dimensionamento (Unit of Measurement).
Sintaxe: [Pagesize=] <largura> X <altura>
PARAMFORM
Especifica se deve ou no ser apresentada a tela de parmetros (Runtime Parameter Form) a tempo de execuo do
relatrio.
Sintaxe: [Paramform=]{Yes|No}
Paramform=Yes incompatvel com Batch=Yes porque no possvel a apresentao da tela de parmetros em uma execuo em batch.
PRINTJOB
Especifica se o dilogo PrintJob deve ou no ser apresentado ao usurio antes da execuo do relatrio.
Sintaxe: [Printjob=] {Yes | No }
PROFILE
Corresponde ao nome do arquivo onde desejamos armazenar informaes estatsticas sobre a execuo do relatrio.
Sintaxe: [Profile=] <nome do arquivo>
As seguintes informaes estatsticas so armazenadas:
Total Elapsed Time Tempo total de execuo, gasto conjuntamente pelo Report Runtime e pelo Oracle (acesso
ao banco).
Time Tempo de execuo somente do Report Runtime.
Oracle Time Tempo gasto com o banco de dados. Subdividido em UPI (tempo para conexo, Parse e Fetch) e
SQL (tempo gasto executando-se a rotina Srw.Do_Sql).
Total CPU Time usado pelo processo Tempo de CPU utilizado na execuo do relatrio.
READONLY
Determina a consistncia de leitura para as diversas queries do relatrio. Corresponde execuo do comando Set
Transacion Read Only ao incio da execuo.
Sintaxe: [Readonly=] {Yes | No}
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1541
ROLE
Especifica a role do banco de dados a ser verificada pelo relatrio a tempo de execuo.
Sintaxe: [Role=] <nome da role> [ / <password da role> ]
RUNDEBUG
Habilita ou no verificaes extraordinrias de situaes que no causam erros, mas que podem vir a produzir
resultados indesejveis. So elas:
a) Frames ou Repeating Frames que cruzam mas no englobam (contm) completamente outro objeto.
b) Objetos de Layout com dependncia de pgina que no tem tamanho fixo. O Report Builder far a marcao
desses objetos com o tamanho fixo independente da propriedade Elasticidade Vertical ou Horizontal.
c) Variveis Bind referenciadas (em PL/SQL) a uma freqncia invlida.
d) O relatrio character mode ou bitmap e o ambiente o oposto.
Sintaxe: [Rundebug=]{Yes|No}
SAVE_RDF
Este parmetro indica um arquivo que receber o relatrio indicado pelo parmetro MODULE adicionado das
modificaes sugeridas pelos arquivos indicados no parmetro CUSTOMIZE.
Sintaxe: [Save_RDF=]<nome arq>.RDF
SCHEDULE
Este parmetro determina a freqncia futura de execuo do relatrio. O default agora. Aplicvel ao RWCLI60.
Sintaxe: [Schedule=]<string>
A string deve ter o formato: [FREQ from] TIME [retry {n} + after LEN], onde:
a) FREQ pode ser: hourly | daily | weekly | monthly | {every LEN | DAYREPEAT} |
{WEEKDAYS | weekday | weekend} before {n} +}
LEN pode ser : {n} + { minute[s] | hour[s] | day[s] | week[s] | month[s]}
DAYREPEAT pode ser: {first | second | third | fourth | fifth} WEEKDAYS of month
WEEKDAYS pode ser: mon | tue | wed | thu | fri | sat | sun
b) TIME pode ser: now | CLOCK [DATE]
CLOCK pode ser: h:m | h:mm | hh:m | hh:mm
DATE pode ser: today | tomorrow | {MONTHS {d | dd} [, year]}
MONTHS pode ser: jan | feb | mar | apr | may | jun | jul | aug | sep | oct | nov | dec
Um exemplo seria:
schedule=last_weekday_before_15_from_15:53_Oct_23,_1999_retry_after_1_hour
ou
schedule=every_first_fri_of_month_from_15:53_Oct_23,_1999_retry_3_after_1_hour
SERVER
Este parmetro informa o nome do endereo TNS do Reports Server. Este parmetro aplicvel apenas ao RWCLI60.
Sintaxe: [Server=]<tnsname>
TERM
Corresponde ao tipo de terminal no qual a execuo ser realizada. Utilizado quando o resultado for apresentado
no vdeo ou houver tela de parmetro a ser mostrada. Esse parmetro somente utilizado em Character Mode. No
aplicvel ao Report Builder.
Sintaxe: [Term=]<tipo do terminal>
THOUSANDS
Este parmetro determina o smbolo a ser usado como separador de milhar para formatos numricos.
O valor default para esse parmetro dado pela NLS em uso.
Sintaxe: [Thousands=]<smbolo separador de milhar>
TOLERANCE
Indica o tempo (em minutos) de tolerncia para deteco de jobs em duplicata. Aplicvel apenas ao RWCLI60.
Sintaxe: [Tolerance=]<nmero>
TRACEFILE
Indica o nome do arquivo no qual o Reports Runtime gravar informaes de trace.
Sintaxe: [Tracefile=] <nome do arquivo>
As informaes de trace somente sero gravadas se executarmos um .Rdf. No podemos especificar a gerao de informaes desse tipo quando
executamos um .Rep.
TRACEMODE
Indica se o Reports Runtime deve adicionar informaes de trace ao arquivo ou substituir todo o contedo do arquivo.
Sintaxe: [Tracemode=] {Trace_Append | Trace_Replace}
TRACEOPTS
Determina quais informaes devem ser geradas para o arquivo. O valor default Trace_All.
[Traceopts=] {Trace_Err | Trace_Prf | Trace_App | Trace_Pls |
Trace_Sql | Trace_Tms | Trace_Dst | Trace_All | (Opt1, Opt2,...) }
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1543
USERID
Indica o usurio e senha do Oracle com indicao opcional da string do SQL*Net ou especificaes para o ODBC
no caso de acesso a um conjunto de dados no-Oracle. As sintaxes disponveis so apresentadas a seguir:
Sintaxe: [Userid=] username [ / password ] [ @database ].
[Userid=] [ user [ /password ] ] @ODBC:datasource[:database].
[Userid=] [ user [ /password ] ] @ODBC:*
CMDFILE
O arquivo de comandos contm os argumentos necessrios execuo do conversor.
Este parmetro determina o nome do arquivo de comandos. Os comandos devem ser armazenados no arquivo
segundo a sintaxe: <nome do parmetro> = <valor>.
Sintaxe: [Cmdfile=]<nome do arquivo>
CUSTOMIZE
Este parmetro especifica um arquivo XML ou uma lista de arquivos XML que desejamos aplicar ao relatrio
identificado no parmetro origem (source). Este arquivo (ou arquivos) contm especificaes como fontes, cores,
etc., que visam modificar a definio do relatrio.
Sintaxe: [Customize=]<nome arq>.xml | (<nome arq1>.xml, <nome arq2>.xml, )
DEST
Indica o nome dos relatrios ou bibliotecas de sada da converso, ou seja, o nome final dos arquivos convertidos.
Vrios nomes podem ser fornecidos simultaneamente para que a converso seja mltipla. Caso este parmetro no
seja informado, o nome do arquivo destino ser igual ao nome do arquivo origem com a extenso adequada,
exceto para REXFILE, cujo nome default expdat.rex.
Sintaxe: [Dest=] { <sname> | ( <sname1>, <sname2>, <sname3> ) }
DTYPE
Indica o formato do arquivo de sada (destination) da converso.
Sintaxe: [Dtype=] {DATABASE | PLLDB | PLDFILE | PLLFILE | RDFFILE | REPFILE | REXFILE | TDFFILE | XML}
Onde:
DATABASE Indica que o arquivo destino deve ser armazenado no banco de dados.
PLLDB Indica que a biblioteca (de PL/SQL) deve ser armazenada no banco de dados.
PLDFILE Indica que a biblioteca (de PL/SQL) deve ser armazenada no sistema operacional em arquivos de
formato ASCII (extenso PLD).
PLLFILE Indica que a biblioteca (de PL/SQL) deve ser armazenada no sistema operacional em arquivos contendo
o fonte e o executvel (extenso PLL).
RDFFILE Indica que o arquivo destino deve ser um relatrio e que ser armazenado no sistema operacional
(extenso RDF).
REPFILE Indica que o arquivo destino deve ser um relatrio e que ser armazenado no sistema operacional
(extenso REP).
REXFILE Indica que o arquivo destino deve ser um relatrio que ser armazenado em arquivos de texto no
sistema operacional (extenso REX).
TDFFILE Indica que o arquivo destino deve ser um gabarito que ser armazenado no sistema operacional
(extenso TDF).
XML Indica que o arquivo destino deve ser armazenado no sistema operacional (extenso XML).
Ao convertermos um relatrio para um gabarito (template), somente os objetos presentes na rea de margem so
usados no template. Os objetos presentes no corpo so ignorados.
DUNIT
Determina a unidade de dimensionamento para a qual o relatrio deve ser convertido. Se este parmetro for
omitido a unidade default igual unidade origem. Caso informado deve possuir valor diferente da unidade de
dimensionamento do arquivo origem.
Sintaxe: [Dunit=] {CENTIMETER | CHARACTER | INCH | POINT}
FORMSIZE
Indica o tamanho da tela de parmetros (Runtime Parameter Form) para o relatrio convertido. O valor ser
considerado de acordo com a unidade de dimensionamento do relatrio de sada.
Sintaxe: [Formsize=] <largura> X <altura>
Para unidade de dimensionamento diferente de CHARACTER podemos usar valores decimais (por exemplo 8.5 x 11).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1545
LOGFILE
Indica o nome do arquivo para o qual as mensagens de erro e aviso sero enviadas durante o processo de converso.
Sintaxe: [Logfile=] <nome de arquivo>
OVERWRITE
Indica se o conversor dever sobrescrever arquivos de destino j presentes no meio de armazenamento escolhido.
Sintaxe: [Overwrite=] {Yes | No | Prompt }
PAGESIZE
Determina o tamanho da pgina fsica do relatrio. O tamanho especificado deve ser suficiente para conter o
layout definido; caso contrrio, o relatrio no ser executado. A unidade dessa medida depende da especificao
de Unidade de Dimensionamento (Unit of Measurement).
Sintaxe: [Pagesize=] <largura> X <altura>
SOURCE
Este parmetro determina o nome do arquivo ou arquivos a serem convertidos. Se os arquivos estiverem armazenados
no banco de dados podemos usar os caracteres especiais % e _ (sublinhado) para indicar o nome dos arquivos.
Sintaxe: [Source=] { <sname> | ( <sname1>, <sname2>, <sname3> ) }
STYPE
Indica o formato do arquivo de entrada (source) a ser convertido.
Sintaxe: [Stype=] {DATABASE | PLLDB | PLDFILE | PLLFILE | RDFFILE | REXFILE | XML}
Onde:
DATABASE Indica que o arquivo origem est armazenado no banco de dados.
PLLDB Indica que a biblioteca (de PL/SQL) est armazenada no banco de dados.
PLDFILE Indica que a biblioteca (de PL/SQL) est armazenada no sistema operacional em arquivos de formato
ASCII (extenso PLD).
PLLFILE Indica que a biblioteca (de PL/SQL) est armazenada no sistema operacional em arquivos contendo o
fonte e o executvel (extenso PLL).
RDFFILE Indica que o arquivo origem um relatrio e que est armazenado no sistema operacional (extenso RDF)
REXFILE Indica que o arquivo origem um relatrio armazenado em arquivos de texto no sistema operacional
(extenso REX).
XML Indica que o arquivo origem est armazenado no sistema operacional (extenso XML).
USERID
Indica o usurio e senha do Oracle com indicao opcional da string do SQL*Net ou especificaes para o ODBC
no caso de acesso a um conjunto de dados no-Oracle. As sintaxes disponveis so apresentadas a seguir:
Sintaxe: [Userid=] username [ / password ] [ @database ].
BLOCK_MENU
Automaticamente apresenta o dilogo Block Menu como primeira tela a tempo de execuo em vez do Form.
Sintaxe: [Block_Menu=] {Yes | No}
BUFFER_RECORDS
Determina que o nmero de registros armazenados (buffered) em memria ser a quantidade de linhas apresentadas
adicionado de trs (para cada bloco). Se um bloco recuperar para qualquer quantidade de registros acima desse
valor, o Form Builder armazenar os registros adicionais em um arquivo em disco.
Se esse parmetro for igual a No, a quantidade de linhas armazenadas em memria ser aquela especificada na
propriedade Buffered de cada bloco.
Sintaxe: [Buffer_Records=] {Yes | No}
DEBUG
Determina a execuo em modo de depurao. Se for encontrada a rotina Break durante a execuo da aplicao,
haver a interrupo do programa para acompanhamento passo a passo.
Sintaxe: [Debug=] {Yes | No}
Para acionarmos o modo de depurao em ambiente no-Windows, devemos executar o depurador passando o parmetro para ele: IFDBG60
module=<modulo> userid=<user>/<senha> debug=YES.
DEBUG_MESSAGES
Apresenta mensagens de acompanhamento sobre a execuo de triggers enquanto o Form est em execuo.
Sintaxe: [Debug_Messages=] {Yes | No}
HELP
Mostra dilogos com a sintaxe destes parmetros.
Sintaxe: [Help=] {Yes | No}
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1547
INTERACTIVE
Boleano (True ou False). Indica se as respostas (telas de sada) devero ou no ser mostradas no vdeo. Pode ser
utilizada juntamente com as opes Keyin e Output_File. Aplicvel apenas a terminais Character Mode.
Sintaxe: [Interactive=] {Yes | No}
KEYIN
Determina o nome de um arquivo de onde sero lidas todas as aes a serem executadas durante a sesso. Esse
arquivo deve conter toda a seqncia de teclas para execuo, salva, navegao, etc. Aplicvel apenas a terminais
Character Mode.
Sintaxe: [KeyIn=] <nome do arquivo>
KEYOUT
Determina o nome de um arquivo onde sero gravadas todas as teclas utilizadas durante a execuo da aplicao.
S aplicvel a terminais Character Mode.
Sintaxe: [KeyOut=] <nome do arquivo>
LOG
Indica o nome do arquivo a ser gerado num processo de Form Runtime Diagnostics. Veja o parmetro Record.
Sintaxe: [LOG=] { <nome do arquivo> }
LOGON_SCREEN
Este parmetro, quando True, fora a presena da tela de Login. Neste caso, o Form Runtime ignora o userid e
password informados.
Sintaxe: [Logon_Screen=] {Yes | No}
OPTIMIZESQL
Especifica que o Form ir otimizar os comados SQL processados no estilo V2 pelo compartilhamento de cursores.
Por default, o Form associa um cursor para cada comando SQL executado em V2. Isso otimiza a performance, uma
vez que o parse s executado uma vez, ou seja, somente a primeira vez em que o comando for executado para a
sesso. Quando OptimizeSQL recebe No, o Form associa um nico cursor para todos os comandos SQL executados
em V2. Isso economiza memria; por outro lado, perde-se em performance uma vez que o parse ser executado
cada vez que o comando for executado. Essa opo no tem efeito para triggers escritos em PL/SQL.
Sintaxe: [OptimizeSQL=] {Yes | No}
OPTIMIZETP
Por default, o Form associa um cursor separado para cada comando SQL que um Form executa implicitamente
num Post ou Query. Quando OptimizeTP recebe No, o Form ir associar um cursor separado apenas para cada
query Select. Todos os outros comandos SQL implcitos compartilharo cursores. Isso significa que todos os Insert,
Update, Delete e Select For Update devem ser parsed cada vez que forem executados.
Sintaxe: [OptimizeTP=] {Yes | No}
OPTIONS_SCREEN
Mostra a janela com esta lista de opes a tempo de execuo. Aplicvel somente a ambientes GUI.
Sintaxe: [Options_Screen=] {Yes | No}
OUTPUT_FILE
Determina o nome de um arquivo onde todas as respostas para o vdeo sero gravadas. Aplicvel apenas a terminais
Character Mode.
Sintaxe: [Output_File=] <nome do arquivo>
PECS
Executa o Form Runtime com Performance Event Collection Services (Pecs), habilitada para coleta de informaes
para anlise de performance.
Sintaxe: [Pecs=] {On | Off | Full}
Pecs uma ferramenta para anlise de performance que possibilita as seguintes informaes:
Utilizao de recursos (tempo de CPU por evento ou transaes processadas por hora).
Localizao de problemas de performance (tempo total por evento).
Anlise de utilizao de objetos (quando um objeto especfico, tais como um trigger, alerta ou janela, visitado
durante a execuo).
Anlise linha a linha (para cdigo de PL/SQL em triggers e procedures).
Para anlise apenas da utilizao dos objetos, escolha a opo On. Para anlise linha a linha, alm da utilizao dos
objetos, escolha a opo Full (a compilao deve ter sido feita com Debug=On).
QUERY_ONLY
Aciona a aplicao em modo de consulta apenas.
Sintaxe: [Query_Only=] {Yes | No}
QUIET
Aciona a aplicao em modo silencioso. Nessa forma de execuo, a aplicao no produz beep audvel.
Sintaxe: [Quiet=] {Yes | No}
RECORD
Determina que seja gerado um arquivo para acompanhamento das aes efetuadas pelo usurio durante a execuo
da aplicao.
A utilizao desse parmetro far com que seja gerado um arquivo no diretrio corrente de trabalho com o nome
Collect_<PID>. Para determinao de um nome especfico, devemos usar simultaneamente o parmetro Log.
Sintaxe: [RECORD=] { Collect }
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1549
STATISTICS
Apresenta uma mensagem ao trmino da sesso que indica o nmero mximo de cursores simultaneamente abertos
durante a execuo.
Este parmetro envia o comando Alter session set Sql_Trace True para o banco de dados. Esse comando cria um arquivo
no ambiente servidor contendo informaes estatsticas relativas aos comandos SQL executados durante a sesso.
Sintaxe: [Statistics=] {Yes | No}
TERM
Este parmetro determina o nome do arquivo de recursos para o Oracle terminal. Se no for especificado, o Form
Runtime utilizar o padro especfico para a plataforma. Por exemplo, FmrUsw para ambientes Windows.
Sintaxe: [Term=] <nome do arquivo de recursos>
USESDI
Indica se o Form Runtime deve utilizar o padro SDI. O default NO, indicando que o padro a ser utilizado o
MDI, onde a janela do Form Runtime visvel. No padro SDI ser mostrada apenas a janela da aplicao.
Sintaxe: [UseSdi=] {Yes | No}
WINDOW_STATE
Determina o estado da janela MDI no incio da aplicao. Podemos informar: Maximize, Minimize ou Normal (default).
Sintaxe: [Window_State=] {Maximize | Minimize | Normal}
BATCH
Suprime as mensagens interativas. til para gerao em batch.
Sintaxe: [Batch=] {Yes | No}
BUILD
Esta opo deve ser utilizada em conjunto com Upgrade. Quando recebe Yes (default) e Upgrade tambm, o Form
Compiler criar dois arquivos como parte do processo de atualizao (upgrade): um fonte (.Fmb ou .Mmb) e outro
executvel (.Fmx ou .Mmx). Se Build receber No, o executvel no criado.
Sintaxe: [Build=] {Yes | No}
COMPILE_ALL
Compila todas as unidades de programa dentro do mdulo especfico.
Sintaxe: [Compile_All=] {Yes | No}
CRT_FILE
Indica o nome do arquivo CRT a ser utilizado na atualizao (upgrade) das verses 2.0 ou 2.3.
Sintaxe: [Crt_File=] <nome do arquivo>
DEBUG
Cria um Form capacitado para depurao. Deve ser utilizado se desejamos executar a aplicao com depurao.
Sintaxe: [Debug=] <nome do arquivo>
DELETE
Remove o mdulo diretamente do banco de dados.
Sintaxe: [Delete=] {Yes | No}
EXTRACT
Extrai o mdulo do banco de dados criando um arquivo com o mesmo nome do mdulo.
Sintaxe: [Extract=] {Yes | No}
HELP
Aciona a tela de ajuda do Form Builder.
Sintaxe: [Help=] {Yes | No}
INSERT
Inclui o mdulo diretamente no banco de dados. Essa opo no age juntamente com a opo upgrade.
Sintaxe: [Insert=] {Yes | No}
LOGON
Especifica se o Form Compiler deve estabelecer conexo com o banco de dados. Se o mdulo contiver qualquer
cdigo de PL/SQL com referncia a tabelas, a conexo ser obrigatria.
Sintaxe: [Logon=] {Yes | No}
MODULE_ACCESS
Determina se desejamos abrir e salvar o mdulo para o sistema operacional ou para o banco de dados.
Sintaxe: [Module_Access=] {File | Database}
MODULE_TYPE
Determina o tipo do mdulo corrente.
Sintaxe: [Module_Type=] {Form | Menu | Library}
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1551
NOFAIL
Indica se o Form Compiler deve adicionar a palavra-chave Nofail quando atualizando (upgrade) a partir do Forms
2.0 (somente para essa verso).
Sintaxe: [Nofail=] {Yes | No}
OPTIONS_SCREEN
Aciona a janela de opes. Aplicvel somente a ambientes Gui.
Sintaxe: [Options_Screen=] {Yes | No}
OUTPUT_FILE
Especifica o nome do arquivo a ser gerado.
Quando utilizado juntamente com Upgrade, esse parmetro especifica o nome do mdulo atualizado (.Fmb ou
.Mmb ou .Pll) e seu correspondente executvel (.Fmx ou .Mmx).
Sintaxe: [Output_File=] <nome do arquivo>
PARSE
Converte o arquivo-texto de um mdulo (.Fmt ou .Mmt ou .Pld) para o formato binrio correspondente (.Fmb ou
.Mmb ou .Pll).
Sintaxe: [Parse=] {Yes | No}
SCRIPT
Converte um arquivo formato binrio de um mdulo (.Fmb ou .Mmb ou .Pll) para o arquivo-texto correspondente
(.Fmt ou .Mmt ou .Pld).
Sintaxe: [Script=] {Yes | No}
STATISTICS
Mostra uma mensagem ao fim da sesso indicando o nmero dos vrios objetos no Form compilado.
Sintaxe: [Statistics=] {Yes | No}
Os objetos so grupados da seguinte forma:
Form Statistics.
Trigger Statistics.
Block Statistics.
Item Statistics.
STRIP_SOURCE
Remove o cdigo-fonte do arquivo Library e gera um arquivo Library somente contendo pcode. Deve-se utilizar
tambm Output_File.
Sintaxe: [Strip_Source=] {Yes | No}
UPGRADE
Atualiza (upgrade) mdulos da verso SQL*Forms 2.0, 2.3 ou 3.0 para a verso Forms 4.5 ou do SQL*Menu 5.0 para
um Forms 4.5 ou do Forms 4.5 ou 5.0 para 6.0 ou 6i.
Para atualizarmos da verso SQL*Forms 3.0, no devemos informar a verso. Para as demais verses, o parmetro
Version deve ser informado.
Sintaxe: [Upgrade=] {Yes | No}
UPGRADE_ROLES
Atualiza (upgrade) a tabela de privilgios do SQL*Menu 5.0 para roles do banco de dados.
Sintaxe: [Upgrade_Roles=] {Yes | No}
VERSION
Indica a verso original para atualizao (upgrade). Deve ser utilizada juntamente com o parmetro Upgrade.
Sintaxe: [Version=] <nmero da verso>
Para atualizao da verso 2.0 e 2.3, esse parmetro deve ser informado. Para atualizao da verso 3.0, omitido.
WIDEN_FIELDS
Quando efetuamos uma atualizao (upgrade) para a verso 4.5, pode ocorrer a perda de at um caracter para cada
campo a fim de que o item seja apresentado em terceira dimenso (bevel). Esse parmetro determina que seja
adicionado, automaticamente, um caracter propriedade Display Width de cada campo.
Essa opo deve ser utilizada juntamente com Upgrade.
Sintaxe: [Widen_Fields=] {Yes | No}
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1553
Captulo 20
OS MENUS DO REPORT BUILDER
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1555
NOVO (NEW)
Cria um novo mdulo. O tipo de mdulo depender do n selecionado. Podemos escolher uma das seguintes opes:
Relatrio Cria um novo mdulo do tipo Report.
Gabarito Cria um novo mdulo do tipo Template.
Consulta externa Cria um novo mdulo do tipo External Query.
Biblioteca PL/SQL Cria um novo mdulo do tipo Library.
ABRIR (OPEN)
Abre um mdulo j existente. Poder ser apresentado um dilogo para que o usurio informe o meio de
armazenamento: disco ou banco de dados. A seguir, ser apresentada uma lista dos objetos do tipo correspondente
no meio escolhido. O tipo de mdulo depender do n selecionado.
FECHAR (CLOSE)
Fecha o mdulo corrente, ou seja, aquele que detm o foco.
SALVAR (SAVE)
Salva o mdulo corrente.
REVERTER (REVERT)
Desfaz as modificaes efetuadas no mdulo desde sua ltima salva, ou seja, reverte a cpia para o mesmo estado
daquela que est em disco (se existir).
IMPORTAR (IMPORT)
Permite a importao de desenhos (formato Oracle ou CGM), imagens (formatos diversos, dentre eles Tiff, Bmp e
Pcx), textos (formato Txt) e paletas de cores (extenso Pal) existentes em arquivos do sistema operacional (s
habilitado quando o Editor de Layout tiver o foco).
EXPORTAR (EXPORT)
Permite a exportao de desenhos, imagens, textos e paletas de cores para arquivos do sistema operacional (s
habilitado quando o Editor de Layout tiver o foco).
CONECTAR (CONNECT)
Apresenta um dilogo que permite ao usurio informar cdigo, senha e string de conexo ao banco de dados para
que seja possvel estabelecer acesso.
DESCONECTAR (DISCONNECT)
Desfaz a conexo previamente estabelecida.
EXPRESS (EXPRESS)
Trata-se de um submenu com duas opes: Conectar (Connect) e Desconectar (Disconnect). A opo Conectar
apresenta um dilogo para que possamos estabelecer o domnio, usurio, password e a conexo ao Express Server.
ADMINISTRAO (ADMINISTRATION)
um submenu que possui diversas aes administrativas, principalmente ligadas ao armazenamento da aplicao
no banco de dados.
RENOMEAR (RENAME)
Permite a modificao do nome de um mdulo armazenado no banco de dados.
DELETAR (DELETE)
Permite a remoo de mdulos armazenados no banco de dados.
CONVERTER (CONVERT)
Cria uma cpia do mdulo (relatrio ou biblioteca de PL/SQL) em um formato diferente e/ou em um meio de
armazenamento diferente (banco de dados ou sistema operacional).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1557
IMPRIMIR (PRINT)
Imprime a janela corrente para uma impressora.
CORREIO (MAIL)
Em plataformas Windows, podemos postar (e-mail) os relatrios atravs do Microsoft Messaging Application Programming Interface (MAPI). Para que essa ao funcione, devemos ter instalado uma aplicao MAPI cliente (por
exemplo, Microsoft Exchange).
DISTRIBUIR (DISTRIBUTE)
Esta opo executa o relatrio a fim de gerar para os destinos especificados nas listas de distribuio. Caso no
sejam encontradas listas, ocorre um erro e o relatrio no executado.
SAIR (EXIT)
Encerra o Report Builder.
RECORTAR (CUT)
Recorta a rea corrente selecionada transferindo os dados para o Clipboard.
COPIAR (COPY)
Copia a rea corrente selecionada, transferindo os dados para o Clipboard.
COLAR (PASTE)
Coloca os dados que estiverem no Clipboard na rea selecionada.
LIMPAR (CLEAR)
Recorta a rea corrente selecionada sem efetuar qualquer transferncia.
DUPLICAR (DUPLICATE)
Duplica o objeto selecionado.
VNCULOS (LINKS)
Mostra uma lista de links para objetos OLE2.
OBJECT (OBJECT)
Mostra um submenu com as aes vlidas para o objeto OLE2 criado (por exemplo: abrir, editar, imprimir, converter).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1559
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1561
RGUAS (RULERS)
Apresenta ou no as rguas vertical e horizontal do layout.
GRADE (GRID)
Apresenta ou no a grade.
JUSTIFICAR (JUSTIFY)
Permite o alinhamento de um texto direita, esquerda, centralizado, incio ou fim dentro do objeto selecionado.
DIREO (DIRECTION)
Determina a direo de desenvolvimento do objeto. Ajustvel Nls_language em uso.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1563
BEVEL (BEVEL)
Permite a escolha de sombreados que daro noo de perspectiva ao objeto.
TRAO (DASH)
Permite a definio de linhas pontilhadas, linha cheia, trao e ponto para objetos grficos (boilerplates grficos).
SETA (ARROW)
Permite a configurao de diversos tipos de setas no desenho.
BORDA (BORDER)
Permite que determinemos quais as bordas do objeto que ficaro visveis (topo, base, esquerda e direita).
MOEDA (CURRENCY)
Inclui o caracter indicativo da moeda, ou seja, do smbolo financeiro local (L) na mscara de edio.
PERCENTUAL (PERCENT)
Inclui o caracter indicativo de percentual (%) na mscara de edio.
VRGULAS (COMMAS)
Inclui o smbolo separador de milhar (G) na mscara de edio.
GERAL (GENERAL)
Configuraes aplicveis aos objetos grficos em geral.
IMAGEM (IMAGE)
Configuraes aplicveis aos boilerplates do tipo imagem.
ARCO (ARC)
Configuraes aplicveis aos boilerplates do tipo arco.
RGUAS (RULERS)
Apresenta um dilogo composto de diversas informaes, a saber:
Unidades (Units) So botes (radio buttons) que especificam a unidade de dimensionamento usada para as
rguas no editor corrente. Podemos optar entre: centmetros, polegadas, pontos ou caracteres.
Tamanho da Clula de Caracteres (Character Cell Size) Especifica o tamanho de uma clula de caracter na
unidade pontos (horizontal e vertical).
Espaamento de Grade (Grid Spacing) Especifica o intervalo entre as linhas de grade que sero apresentadas
usando a unidade da rgua. Por exemplo, se a unidade polegada e o espaamento 0.5 significa que haver
um ponto de grade a cada 0.5 polegadas.
Nmero de Pontos de Ajuste por Espaamento de Grade (Number of Snap Points per Grid Spacing) Determina
o nmero de pontos de alinhamento para cada linha de grade.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1565
AGRUPAR (GROUP)
Agrupa dois ou mais objetos.
DESAGRUPAR (UNGROUP)
Libera os objetos anteriormente grupados.
FECHAR (COLLAPSE)
Diminui, fecha o detalhamento do objeto selecionado no navegador.
CRIAR (CREATE)
Cria um novo objeto sob o n corrente.
DELETAR (DELETE)
Remove o objeto selecionado.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1567
COMPILAR (COMPILE)
Compila os cdigos de PL/SQL ainda no compilados (Incremental) ou todos (All).
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1569
RASTREAR (TRACE)
Cria um arquivo de Trace para acompanhamento da execuo do relatrio. Apresenta um dilogo em que
especificamos quais aes desejamos avaliar. Podemos escolher algumas delas ou todas:
Erros e advertncias (warnings) encontrados.
Informaes de Perfil (Profile).
Pontos de Interrupo (Breakpoints) encontrados.
Objetos do Report processados.
PL/SQLs executados.
SQLs executados.
Timestamp.
Distribuies realizadas.
Todos.
OBJECT NAVIGATOR
Aciona o Navegador de Objetos.
PREFERNCIAS (PREFERENCES)
Aciona o dilogo de Preferncias contendo as pastas Geral, Acessar, Assistentes, Valores de Runtime e Definies de
Runtime para que especifiquemos caractersticas para o ambiente.
QUICK TOUR
Aciona o Browser para apresentao de um tour pelas diversas ferramentas do pacote Developer. Mostra a capacidade
de cada produto. Bastante visual.
CUE CARDS
Apresenta um conjunto de dilogos que fornece exemplos (inclusive animados) a respeito de algumas das tarefas
que podemos realizar com o Report Builder. Por exemplo: executar uma aplicao, construir uma aplicao simples,
modificar uma aplicao, construir uma aplicao Mestre-Detalhe etc. Vale a pena dar uma olhada!
MANUAIS (MANUALS)
Permite o acesso a alguns dos manuais fornecidos pela Oracle no CD-Rom.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1571
Captulo 21
BUILT-INS DO REPORTS
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1573
SRW
Este o pacote-padro do Report Builder, ou seja, aquele pacote que contm as rotinas bsicas para utilizao
dentro de um relatrio. Com ele podemos alterar as propriedades de um objeto (Set_Attr), determinar a quantidade
mxima de linhas de uma query (Set_MaxRow), acionar outro relatrio (Run Report) e muitas outras funcionalidades,
algumas delas j utilizadas ao longo dos exemplos e exerccios do Captulo 8.
Procedure Srw.Add_Definition(Xml) Esta rotina obtm uma definio XML do relatrio armazenada em uma
coluna ou varivel (Informada no parmetro) e adiciona-a ao buffer. Aps esta operao devemos executar a
rotina Apply_Definition para aplicar esta definio.
Procedure Srw.Apply_Definition(Filename) Esta rotina pode ser executada sem parmetro. Neste caso aplicar
as definies encontradas no buffer. Se for informado um nome de arquivo, este deve conter definies XML,
que sero aplicadas diretamente.
Procedure Srw.Break Esta rotina interrompe a execuo do relatrio e apresenta os valores correntes de todas
as colunas e parmetros. Quando a tela contendo estes valores fechada, o relatrio prossegue normalmente.
Procedure Srw.Do_Sql(Sql_Statement_String) Executa o comando SQL especificado. Esse comando pode ser de
DDL ou DML. Os comandos de DML embutidos no PL/SQL do relatrio so mais rpidos do que executados
atravs do Srw.Do_Sql.
Procedure Srw.Get_Report_Name(String) O parmetro passado de sada, onde ser retornado o nome do
relatrio (nome do mdulo).
Funo Srw.Get_Value(Col_Name, Fmt_Msk) Retorna o valor da coluna (cujo nome foi passado como parmetro)
usando a mscara de formatao especificada no segundo parmetro. A coluna se refere a um elemento do
Modelo de Dados.
Procedure Srw.Get_Page_Num(Page_Num) Retorna o nmero da pgina corrente.
Procedure Srw.Geterr_Run Retorna uma mensagem de erro se o Report Builder receber um erro enquanto
estiver executando a procedure Srw.Run_Report.
Procedure Srw.Message(Msg_Number, Msg_Text_String) Mostra uma mensagem com o nmero e texto
especificados. A mensagem apresentada com o formato MSG-<nmero da mensagem>: <texto da mensagem>.
Procedure Srw.Reference(Bind_Variable) Faz com que o Report Builder inclua o objeto referenciado na lista de
dependncias do PL/SQL.
Procedure Srw.Run_Report(Command_Line) Aciona o RWRUN60 com a string que informarmos como
parmetro. O parmetro da procedure corresponde a uma linha de comando do programa RWRUN60.
Procedure Srw.Set_After_Form_Html (Type, String) Inclui qualquer texto, grfico ou HTML que desejarmos no
fim (rodap) da tela de parmetros. O parmetro Type pode ser preenchido com Srw.File_Escape, indicando que
a string contm o nome de um arquivo, ou Srw.Text_Escape, indicando que a string contm o texto.
Procedure Srw.Set_After_Page_Html (Type, String) Inclui qualquer texto, grfico ou HTML que desejarmos no
fim (rodap) de cada pgina do relatrio. O parmetro Type pode ser preenchido com Srw.File_Escape, indicando
que a string contm o nome de um arquivo, ou Srw.Text_Escape, indicando que a string contm o texto.
Procedure Srw.Set_After_Printing_Code (Code) Esta rotina inclui uma seqncia de escape aps cada linha do objeto.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1575
LIST
Este pacote contm procedures, funes e condies de erro que podamos usar para criar e manter listas de textos
(strings). Essa era a forma alternativa de trabalharmos com arrays no Report 2.5, uma vez que a PL/SQL disponvel era
verso 1. No Report Builder, j no temos mais necessidade desta utilizao. Podemos usar o recurso do Type Table.
Procedure List.Appenditem(List, Item) adiciona um item ao fim da lista.
Procedure List.Deleteitem(List, Pos) remove um elemento da posio especificada da lista.
Procedure List.Destroy(List) destri uma lista.
Funo List.Getitem(List, Pos) obtm um item da lista correspondente posio informada.
Procedure List.Insertitem(List, Pos, Item) inclui um item na lista na posio especificada.
Funo List.Make cria uma nova lista vazia. Uma lista deve ser criada antes de ser utilizada.
Funo List.Nitems(List) retorna o nmero de itens na lista.
Procedure List.Prependitem(List, Item) adiciona um item ao incio de uma lista.
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1577
NDICE REMISSIVO
NDICE REMISSIVO
$$date$$, 879
$$dbdate$$, 879
%Bulk_Exceptions, 1281
%Bulk_Rowcount, 485, 1280
%Found, 283, 321, 1280
%Isopen, 284, 1280
%NotFound, 283, 321, 476, 1280
%Rowcount, 284, 321, 1280
%Rowtype, 281, 459, 1280
%Type, 266, 320, 1279
&&, 36
&, 36
/, 32, 1252
@ , 35, 1252, 1270
@@, 35, 1252, 1270
_Editor, 29
||, 40
A
Abrindo uma Sesso, 1248
Abrir (Open), 1472, 1556
Abs, 70
Accept, 1252, 133, 235, 244,
Access, 1534
Access_Into_Null, 294
Acelerador de Teclado (Keyboard Accelerator)
Item de Menu, 1376
Acesso ao Mdulo (Module Access), 1473
Acesso ao Relatrio (Report Access), 1557
Acionando o SQL*Plus em Batch, 1250
Acos, 73
ActiveX (ActiveX), 1452, 1422, 808-09, 813
Add_Months, 82
Add_Triggers, 1550
Adicionar Marcador (Add BookMark), 1567
Adicionar Marcador (Mark), 1477
Adicionar no Grupo (Add to Group), 1480, 1567
Administrao (Administration), 1473, 1557
After, 441, 523, 525, 526
After Parameter Form, 1030
After Reports, 1031
Agregate, 1296
Agrupar (Group), 1480, 1566
Agrupar Operaes (Group Operations), 1480, 1567
Ajuda (Help)
Gatilho, 1343
Item, 1372
Item de Menu, 1378
Ajuda de Controle (Control Help)
Item, 1350
Ajuda, 143
Ajustar Janela (Fit to Window), 1475, 1562
Alerta (Alert), 1314, 1423
Alertas, 913
Alfanumricas, 1227
Alfanumricas que Retornam Valores Numricos, 1227
Alias, 121
Alinhamento da Barra de Rolagem (Scroll Bar Alignment)
Quadro, 1396
Alinhamento de Objetos Simples (Single Object Alignment)
Quadro, 1394
Alinhamento do Prompt (Prompt Alignment)
Boto de Opo, 1333
Item, 1371
Alinhamento do Prompt ao Topo (Top Prompt Alignment)
Quadro, 1395
Alinhamento do Quadro (Frame Alignment)
Quadro, 1394
Alinhamento do Ttulo do Quadro (Frame Title Alignment)
Quadro, 1399
Alinhamento Inicial do Prompt (Start Prompt Alignment)
Quadro, 1394
Alinhar Grade (Grid Snap), 1476, 1562
Alinhar Objetos (Align Objects), 1479, 1566
All, 130, 38, 53
All When, 156, 157
All...Insert into, 156
All_Homes, 10
All_Source, 519
Alter, 204, 214, 216
Alter Session, 1206, 181, 186, 244
Alter Trigger, 450
Alter Type, 539, 540
Alterando/Editando a Paleta de Cores,
Forms Builder, 826, 937
Reports Builder, 1056
Alternar Orientao (Switch Orientation), 1483
Altura (Height)
Boto de Opo, 1331
Canvas, 1336
Editor, 1340
Item, 1368
Janela, 1405
Lov, 1381
Mdulo Relatrio, 1516
Quadro, 1396
Seo, 1530
Altura do Relatrio (Report Height)
Seo, 1531
Altura do Visor (ViewPort Height)
Canvas, 1335
Ampliar (Zoom In), 1475, 1561
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1579
NDICE REMISSIVO
Atributos Visuais (Visual Attribute)
Alerta, 1315
Atributo Visual, 1317
Bloco de Dados, 1328
Boto de Opo, 1331
Canvas, 1337
Editor, 1340
Item de Menu, 1377
Item, 1369
Janela, 1406
Lov, 1381
Pgina Tab, 1391
Quadro, 1397
Atributos XML Externos (Outer XML Attributes)
Grupo, 1513
Attribute, 141, 1253
Atualizao Permitida (Update Allowed)
Bloco de Dados, 1323
Item, 1366
Atualizar Argumentos de Procedimento (Update Procedure
Arguments)
Bloco de Dados, 1325
Atualizar Colunas de Conjuntos de Resultados de
Procedimento (Update Procedure Result Set Columns)
Bloco de Dados, 1325
Atualizar Layout (Update Layout)
Quadro, 1393
Atualizar Layout, 1479
Atualizar na Consulta (Update on Query)
Item, 1360
Atualizar no Commit (Update on Commit)
Item, 1360
Atualizar Nome do Procedimento (Update
Procedure Name)
Bloco de Dados, 1325
Atualizar Somente Colunas Alteradas (Update Changed
Columns Only)
Bloco de Dados, 1324
Atualizar Somente se Null (Update Only if Null)
Item, 1366
Audit, 204
Aumentar na Entrada (Raise on Entry)
Canvas, 1335
Authid, 332, 494, 1295, 1534
Autocommit, 135, 1534
Autonomous_Transaction, 453, 526, 607
Autoprint, 135, 304
Autorecovery, 135
Autotrace, 135, 138, 622
Avg, 55, 64, 110, 111, 127, 225-27, 239, 245
B
B*Tree, 626
Background, 1534
Banco de Dados (Database)
Bloco de Dados, 1321
Item, 1365
Mdulo Form, 1386
Banco de Dados Avanado (Advanced Database)
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1581
C
Ca_Gprefs, 1416
Ca_Uprefs, 1416
Cache, 211
CacheLob, 1535
Clculo (Calculation)
Item, 1364
Call, 1296, 452
Campo (Field), 1494
Campo, 1494
Campo da Tela de Parmetros (Parameter
Form Field), 1500
Campo do Form de Parmetros (Parameter
Form Field)
Campo da Tela de Parmetros, 1500
NDICE REMISSIVO
Clear_Form, 693
Cliente/Servidor (Client/Server), 1480
Clob, 199, 208, 262, 388
Close Cursor, 1281
Close Database Link, 1207
Close, 282, 391, 427, 435
Cluster Index, 620
Cluster Scan, 620
Clustered Join, 623
Cmdfile, 1535, 1544
Cmdsep, 135
Coalesce, 97
Cdigo da Impressora Anterior (Printer Code Before)
Boto, 1494
Campo, 1499
Grfico, 1511
Objeto OLE2, 1522
Quadro, 1526
Quadro de Repetio, 1530
Texto Padronizado, 1490
Cdigo da Impressora Posterior (Printer Code After)
Boto, 1494
Campo, 1499
Grfico, 1511
Objeto OLE2, 1522
Quadro, 1526
Quadro de Repetio, 1530
Texto Padronizado, 1490
Cdigo de Inicializao (Startup Code), Mdulo Menu, 1389
Cdigo do Item de Menu (Menu Item Code), Item de Menu,
1376
Col, 122-23, 234-36
Colar (Paste), 1474, 1559
Colar Argumentos (Paste Arguments), 1477
Colar Nome (Paste Name), 1477
Colees, 1290
Collection_Is_Null, 294, 309
Colsep, 135
Column, 120, 1255
Column_Mode
Reports Builder, 1142
Columns, 129
Coluna (Column)
Campo, 1495
Coluna de Espao Reservado, 1501
Coluna de Frmula, 1502
Coluna de Sumrio, 1504
Coluna do Banco de Dados, 1506
Coluna de Espao Reservado (Placeholder), 1501
Coluna de Frmula (Formula Column), 1502
Coluna de Sumrio (Summary Column), 1504
Coluna do Banco de Dados (Database Column), 1506
Coluna Multimdia (Multimedia Column)
Boto, 1492
Coluna Pai (Parent Column)
Ligao de Dados, 1513
Coluna-Filha (Child Column)
Ligao de Dados, 1513
Colunas de Origem de Dados de Consulta
(Query Data Source Columns)
Bloco de Dados, 1322
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1583
NDICE REMISSIVO
Cor de Fundo do Ttulo do Quadro (Frame Title Foreground
Color)
Quadro, 1399
Cor do Prompt (Prompt Color)
Boto de Opo, 1334
Item, 1372
Cor do Ttulo do Quadro (Frame Title Color)
Quadro, 1399
Corpo do Pacote, 1026, 1298
Corr, 55
Correio (Mail), 1558
Correlao, 150
Cos, 74, 229
Cosh, 74
Cost, 619
Count, 56, 110-11, 127, 225, 239, 306-07, 483
Covar_Pop, 56
Covar_Samp, 56
Create, 203, 206, 451, 504, 516-18, 523-27, 529, 549, 566-67,
602-03, 605-06
Create Directory, 1216
Create Function, 486
Create Index, 335, 336
Create Java Class, 415, 416
Create Library, 415, 416
Create Sequence, 1216
Create Table, 207, 544
Create Trigger, 441, 592
Create Type, 1217, 209, 534, 543, 557, 558
Create Type as Object, 543-44, 547, 552, 557, 575, 579-80, 585
Create Type as Table, 572, 575
Create Type as Varray, 569, 575, 579
Create Type Body, 552, 581
Create User, 12
Create View, 1220, 591
Create_Pipe, 373
CreateTemporary, 394
Crete Database Link, 210
Crete Index, 210
Criador de Form de Parmetros (Parameter Form Builder),
1570
Criando Fila do Reports Server, 1183
Criar (Create), 1477, 1567
Criar Direita (Create Right), 1482
Criar Abaixo (Create Down), 1482
Criar para Arquivo (Generate to File), 1558
Criar para Navegador da Web (Generate to Web Browser), 1560
Cross Join, 119
Crt_File, 1551
Cube, 66, 226-27
Cue Cards, 1483, 1571
Cume_Dist, 57, 111-12, 227, 514
Currency, 1536
Current OF, 285-86
Current Row, 106
Current_Date, 83
Current_Schema , 182, 1211
Current_Timestamp, 84, 245, 472, 514
Cursor Loop, 290-91, 1281
Cursor, 1280
D
Dados (Data)
Item, 1361
Parmetro, 1392
Dangling, 546, 550, 585
Data e Hora (Date and Time), 1563
Data Streaming, 606
Database, 451
Database Files, 204
Datas, 1228
Datatypes, 1221
Date, 208, 260
DateFormatMask , 1536
Dba, 218
Dba_Directories, 396
Dbms_Alert, 351
DBMS_Flashback, 351, 408, 514, 515, 1298
Dbms_Lob, 351, 387-88, 508-11, 512-13, 1299
DBMS_Output, 350, 352, 498, 501, 506, 509, 520, 522, 527,
1302
Dbms_Pipe, 350, 371, 504-06, 1303
Dbms_Random, 351, 406, 514, 1304
Dbms_Rowid, 351, 382, 507, 1306
Dbms_Sql, 351
Dbms_Standard, 349
Dbtimezone, 230
Dbtimezone, 84, 245, 472
DCL, 23
DDE, 1444
DDL, 23, 203, 247
DeadLocks, 179
Debug, 1439, 1547, 1551
Debug_Messages, 1547
Dec, 257
Decimal, 257, 1536
Declarao de Cursor, 1282
Declaraes, 1278
Declaraes Forward, 1295
Declare, 465, 470
Decode, 97, 229, 233
Decompose, 90
Default, 326
Deferred, 548
Define, 29-30, 131, 135, 1258
Definio do System_Editor, 788
Definies XML (XML Definitions)
Coluna de Espao Reservado, 1501
Coluna de Frmula, 1503
Coluna de Sumrio, 1505
Coluna do Banco de Dados, 1507
Grupo, 1512
Mdulo Relatrio, 1518
Del, 28, 1258
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1585
Item, 1371
Deslocamento do Alinhamento do Prompt (Prompt
Alignment Offset)
Boto de Opo, 1333
Item, 1371
Deslocamento do Prompt ao Topo (Top
Prompt Offset)
Quadro, 1395
Deslocamento do Ttulo do Quadro (Frame
Title Offset)
Quadro, 1399
Deslocamento Horizontal de Objeto (Horizontal Object
Offset)
Quadro, 1394
Deslocamento Inicial do Prompt (Start Prompt Offset)
Quadro, 1395
Deslocamento Vertical de Objeto (Vertical
Object Offset)
Quadro, 1394
Desname, 1537
Dest, 1545
Destination, 1537
Destino de Hiperligao (Hyperlink Destination)
Boto, 1492
Campo, 1497
Grfico, 1509
Matriz, 1514
Objeto OLE2, 1520
Quadro, 1524
Quadro de Repetio, 1528
Texto Padronizado, 1487
Destype, 1537
Deterministic, 1295
Dica (Hint)
Item, 1372
Item de Menu, 1378
Dica de ferramenta (Tooltip)
Item, 1373
Dica do Otimizador (Optimizer Hint)
Bloco de Dados, 1323
Diferena, 116
Diferido (Deferred)
Relao, 1402
Diferir Imposio Obrigatria (Defer Required Enforcement)
Mdulo Form, 1385
Digitando no SQL*Plus, 1249
Dimensionar Objetos (Size Objects), 1479, 1566
Direo (Direction), 1563
Alerta, 1316
Bloco de Dados, 1329
Canvas, 1338
Item, 1373
Janela, 1407
Lov, 1382
Mdulo Form, 1387
Mdulo Relatrio, 1516
Pgina Tab, 1391
Direo de Impresso (Print Direction)
Quadro de Repetio, 1527
Repeating Frames, 998
NDICE REMISSIVO
Direo Inversa (Reverse Direction)
Bloco de Dados, 1327
Directory, 201, 213, 245, 520
Diretrio do Menu (Menu Directory)
Mdulo Menu, 1389
Diretrios Virtuais
Forms Server, 1166
Reports Server, 1180
Disable, 354, 410
DisableFile, 1538
DisableMail, 1538
DisableNew, 1538
DisablePrint, 1538
Disconnect, 139, 1257, 1259
Disparar no Modo Entrar Consulta (Fire in
Enter-Query Mode)
Gatilho, 1342
Distncia Entre Registros (Distance Between Records)
Boto de Opo, 1330
Item, 1365
Quadro, 1396
Distinct, 39, 221, 239, 591
Distribuio (Distribution)
Mdulo Relatrio, 1516
Seo, 1531
Distribuir (Distribute), 1558
Distribute, 138
Diviso, 119
DML, 23
Double Precision, 257
Drop, 204, 215
Dtype, 1545
Dual, 597
Dump, 97
Dunit, 1545
Dup_Val_On_Index, 295-96, 301
Duplicar (Duplicate), 1474, 1559
Duplicates, 126
E
Echo, 135
Edit, 29, 30, 1259
Editar, 143
Editfile, 135
Editor (Editor), 1339, 1428, 1431
Item, 1367
Editor de Gabarito (Template Editor), 1570
Editor de Layout (Layout Editor), 1482
Editor de Menu (Menu Editor), 1482
Editor de PL/SQL (PL/SQL Editor), 1481
Reports Builder, 1027-28
Editor de Relatrio (Report Editor), 1570
Editor do Gatilho do Banco de Dados (DataBase Trigger
Editor), 1569
Editor Externo (External Editor), 1481
Editor PL/SQL (PL/SQL Editor), 1569
Editor PL/SQL Armazenado (Stored PL/SQL
Editor), 1569
Eixo X da Origem de Dados (Data Source X Axis)
Item, 1360
Eixo Y da Origem de Dados (Data Source Y Axis)
Item, 1360
Elasticidade Horizontal (Horizontal Elasticity)
Campo, 1498
Grfico, 1510
Objeto OLE2, 1521
Quadro, 1525
Quadro de Repetio, 1529
Texto Padronizado, 1489
Elasticidade Vertical (Vertical Elasticity)
Campo, 1498
Grfico, 1510
Objeto OLE2, 1521
Quadro, 1525
Quadro de Repetio, 1529
Texto Padronizado, 1489
Elasticidade, 1006
Elementos da Lista (Elements in List)
Item, 1349
Embedded, 135
Empty_Blob, 98
Empty_Clob, 98
Enable, 353
Enable_At_SystemChange_Number, 412
Enable_At_Time, 409, 410
End, 250
Enforced, 632
Enter_Query, 693
Entmap, 121
Enviar Para Trs (Send to Back), 1479, 1566
Erase, 394
Errfile, 1538
Errors, 130
Escalares, 1275
Escape, 135, 138, 41
Escapes de Relatrio (Report Escapes)
Mdulo Relatrio, 1517
Escopo, 1279
Espaamento da Fonte (Font Spacing)
Alerta, 1316
Atributo Visual, 1318
Boto de Opo, 1332
Canvas, 1338
Editor, 1341
Item, 1371
Item de Menu, 1378
Janela, 1407
Lov, 1382
Espaamento da Fonte do Prompt (Prompt Font Spacing)
Boto de Opo, 1334
Item, 1372
Espaamento da Fonte do Ttulo do Quadro (Frame Title
Font Spacing)
Quadro, 1399
Espaamento de Texto (Spacing), 1477
Espaamento de Texto (Text Spacing), 1563
Espaamento do Ttulo do Quadro (Frame
Title Spacing)
Quadro, 1399
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1587
NDICE REMISSIVO
Expandir Tudo (Expand All), 1476, 1483
Explain Plan, 620, 621, 643, 644, 645, 646
Exportar (Export), 1473, 1557
Express (Express), 1557
Express_Server, 1539
Expresses, 1224
Extend, 306
Extend, 309, 594, 571
Extenso, 206
Extenso da Linha com Quadro (Line Stretch With Frame)
Texto Padronizado, 1487
Extenses Standard (Standard Extensions), 1422
Extract, 84, 99, 230, 472, 514, 551
F
Fclose, 362
Fclose_All, 363
Fechamento Permitido (Close Allowed)
Janela, 1404
Fechar (Close), 1472, 1556
Fechar (Collapse), 1567
Fechar Horizontalmente (Collapse Horizontally)
ncora, 1486
Fechar Previsualizador (Close Previewer), 1561
Fechar Verticalmente (Collapse Vertically)
ncora, 1486
Feedback, 135, 136
Ferramenta Ligao de Dados, 972
Fetch, 281, 427, 435, 528, 617
Fetch Cursor, 1283
Fflush, 367
FileClose, 395
FileCloseAll, 395
FileExists, 395
FileGetName, 396
FileIsOpen, 397
Filtrar Antes da Exibio (Filter Before Display)
Lov, 1379
Filtro de PL/SQL, 1023, 1110
Filtro PL/SQL (PL/SQL Filter)
Grupo, 1512
Quadro de Repetio, 1528
Filtro PL/SQL
Report Builder, 968
Fim de Linha, 1275
Final da Seo de Layout (End of Layout Section)
Quadro, 1526
Final, 556, 559, 579, 587
Finalizado (Rendered), Item, 1368
First, 57, 111, 112, 227, 307
First e Last, 306
First When, 156, 157
First_Value, 107
Fsico (Physical)
Boto de Opo, 1330
Canvas, 1336
Editor, 1340
Item, 1367
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1589
G
Gabarito, 950
Gatilho (Trigger), 1342
Gatilho de Formato (Format Trigger)
Boto, 1494
Campo, 1499
Grfico, 1511
Objeto OLE2, 1522
Quadro, 1526
Quadro de Repetio, 1530
Texto Padronizado, 1490
Gatilho de Validao (Validation Trigger)
Campo da Tela de Parmetros, 1500
Parmetro, 1523
Gatilho PL/SQL (PL/SQL Trigger)
Boto, 1492
Gatilhos Inteligentes (Smart Triggers), 1481
Geral (General), 1564
Alerta, 1314
Atributo Visual, 1317
Bloco de Dados, 1319
Boto de Opo, 1329
NDICE REMISSIVO
Canvas, 1334
Editor, 1339
Gatilho, 1342
Grupo de Registros, 1343
Item, 1344
Item de Menu, 1374
Janela, 1402
Lov, 1378
Menu e Submenu, 1383
Mdulo Form, 1384
Mdulo Menu, 1388
Pgina Tab, 1389
Parmetro, 1392
Relao, 1400
Geral, 1426, 1478
Geral, Quadro (General), 1393
Gerando um Documento XML, 1085
Gerar Relatrio Sobre Relatrios (Report
on Report), 1557
Get, 34, 1261
Get_Line, 355, 364
Get_Line_Nchar, 365
Get_Lines, 356
Get_System_Change_Number, 411
GetChunkSize, 397
GetLength, 398
Global, 636
Globalization Support, 184
Glogin.sql, 1252
GoTo, 1287,272
Grade (Grid), 1476, 1562
Grfico (Chart), 1508
Grfico, 1508
Item, 1360
Grant <privilgios de sistema>, 1235
Grant Para os Objetos, 1234
Grant, 204, 216, 217, 246, 247, 495, 517, 518, 1234
Graphics, 657
Graphics Builder, 668, 948
Greatest, 99, 100
Group by, 63, 225, 233, 239
Group_Id, 58, 68
Grouping, 58, 67, 227
Grouping_Id, 58, 67
Grupo (Group), 1511
Grupo, 1512
Quadro de Repetio, 1527
Grupo ncora (Anchor)
ncora, 1486
Grupo de Atributos Visuais (Visual Attribute Group)
Alerta, 1315
Bloco de Dados, 1328
Boto de Opo, 1331
Canvas, 1337
Editor, 1340
Item, 1369
Item de Menu, 1377
Janela, 1406
Lov, 1381
Pgina Tab, 1391
Quadro, 1397
Grupo de Atributos Visuais de Dica de ferramenta (Tooltip
Visual Attribute Group)
Item, 1373
Grupo de Atributos Visuais do Prompt (Prompt Visual
Attribute Group)
Boto de Opo, 1331
Item, 1369
Grupo de Atributos Visuais do Registro Atual (Current
Record Visual Attribute Group)
Bloco de Dados, 1320
Item, 1365
Mdulo Form, 1386
Grupo de Atributos Visuais do Ttulo do Quadro (Frame Title
Visual Attribute Group)
Quadro, 1397
Grupo de Opes de Itens de Menu (Menu
Item Radio Group)
Item de Menu, 1376
Grupo de Produto Cruzado (Cross Product Group)
Matriz, 1514
Grupo de Registros (Record Group), 1343
Item, 1359
Lov, 1379
Grupo-Pai (Parent Group)
Ligao de Dados, 1513
Guias de Rgua (Ruler Guides), 1476, 1562
H
Hash Cluster Key, 623
Hash Scan, 620
Hash, 634
Having, 64, 225, 233, 239
Heading, 121, 136
Headsep, 136
Help, 141, 1261, 1547, 1551
Herana, 551, 555, 556, 557, 558
Herdar Menu (Inherit Menu)
Janela, 1405
HexToRaw, 90
Hierarquia de Execuo (Execution Hierarchy)
Gatilho, 1342
High_Value, 241
Hints, 627
Hiperligao (Hyperlink)
Boto, 1492
Campo, 1497
Grfico, 1509
Matriz, 1514
Objeto OLE2, 1520
Quadro, 1524
Quadro de Repetio, 1528
Texto Padronizado, 1488
Hiperligao de Grfico (Chart HyperLink)
Grfico, 1509
Hkey_Local_Machine, 10
Home1, 10
Home2, 10
Home3, 10
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1591
I
cone no Menu (Icon in Menu)
Item de Menu, 1377
Icnico (Iconic)
Item, 1353
Item, 1358
Identificadores, 252, 1274
Identifier, 553, 566
Idioma, 10, 656
IF, 270, 271, 466, 1289
Ifbld60 (Forms Builder), 669
Ifcmp60 (Forms compiler), 669
Ifdbg60 (Forms debuger), 669
Ifrun60 (Forms Runtime), 669
Ifweb60 (Web Previewer), 669
Imagem (Image), 1428, 1478, 1564
Immediate, 548
Imp_Full_Database, 218
Impedir Operaes sem Mestre (Prevent
Masterless Operation)
Relao, 1401
Impor Chave Primria (Enforce Primary Key)
Bloco de Dados, 1321
Impor Segurana da Coluna (Enforce Column Security)
Bloco de Dados, 1324
Importar (Import), 1472, 1556
Importar Classes Java (Import Java Classes), 1481
Importar Interfaces de Biblioteca OLE (OLE Importer), 1481
Impresso de Base Ativada (Base Printing On)
Boto, 1494
Campo, 1499
Grfico, 1511
Objeto OLE2, 1522
Quadro, 1525
Quadro de Repetio, 1530
Texto Padronizado, 1490
Impresso de Objeto Ativada (Print Object On)
Boto, 1493
Campo, 1499
Grfico, 1510
Objeto OLE2, 1522
Quadro, 1525
Quadro de Repetio, 1529
Texto Padronizado, 1489
Imprimir (Print), 1474, 1558
In, 41, 53, 221, 224, 225, 239
Incluindo elementos no item da Lista, 710
Incluindo elementos nos Record Groups, 798
Incluir Bordas (Include Borders)
Mdulo Relatrio, 1519
Incluir Item REF (Include REF Item)
Bloco de Dados, 1322
NDICE REMISSIVO
Item, 1366
Inserir Argumentos de Procedimento (Insert Procedure
Arguments)
Bloco de Dados, 1325
Inserir Colunas de Conjuntos de Resultados de
Procedimento (Insert Procedure Result Set Columns)
Bloco de Dados, 1325
Inserir Nome do Procedimento (Insert
Procedure Name)
Bloco de Dados, 1325
Insert, 44, 156, 200, 201, 217, 221, 222, 223, 535, 592,
1236, 1551
Insert Into Table, 573
Inserting, 446, 524, 593
Insert-Procedure, 1461
Instalao, 4, 656
Instance, 136
Instantiable, 556, 559, 579
Instead Of, 441
Instead, 567, 592
Instr, 81, 399, 470, 489
Instr2, 81
Instr4, 81
Instrb, 81
Instrc, 81
Instruo de Consulta SQL (SQL Query Statement)
Consulta, 1508
Int, 257
Integer, 257
Integrao do Oracle Developer (Oracle
Developer Integration)
Item, 1359
Interactive, 1548
Interface com o Word for Windows, 928-35
Internacional (International)
Alerta, 1316
Bloco de Dados, 1329
Canvas, 1338
Item, 1373
Janela, 1407
Lov, 1382
Mdulo Form, 1387
Pgina Tab, 1391
Internal_Error, 359
Interpretador PL/SQL (PL/SQL Interpreter), 1569
Interseo, 116
Intersect, 116, 233
Interval Day, 208
Interval Day to Second, 261
Interval Year, 208
Interval Year to Month, 261
Into, 155
Invalid_Argval, 403
Invalid_Cursor, 295
Invalid_Directory, 392, 395
Invalid_Filehandle, 359, 363, 364, 368
Invalid_Mode, 359
Invalid_Number, 295
Invalid_Operation, 359, 364
Invalid_Operation, 368, 392, 395
Invalid_Path, 359
Invalidate, 540
Ir Para Marcador (GoTo Mark), 1477, 1568
Is Null, 221
Is table, 305
Is_Open, 359, 362
IsOpen, 399
IsTemporary, 399
Item (Item), 1344
Item Anterior de Navegao (Previous
Navigation Item)
Item, 1361
Item de Menu (Menu Item), 1374
Item de Referncia de Detalhe (Detail Reference Item)
Relao, 1400
Item do Banco de Dados (Database Item)
Item, 1365
Item Mgico (Magic Item)
Item de Menu, 1375
Item Sumariado (Summarized Function)
Item, 1365
Item, 1426
Itens de Menu Pop-up de OLE (OLE Popup Menu Items)
Item, 1352
Itens Mgicos
Menu, 944
Iteraes, 1286
J
Janela (Window), 1402
Canvas, 1336
Janela Console (Console Window)
Mdulo Form, 1385
Janela de Form de Parmetros (Parameter
Form Window)
Mdulo Relatrio, 1516
Java, 415, 416
Java Class, 520
Jinitiator, instalando, 1192
Jni, 1446
Jobname, 1539
Join, 117, 118, 231, 232
Juno, 117
Justificao (Justification)
Item, 1346
Item, 1356
Justificao do Prompt (Prompt Justification)
Boto de Opo, 1333
Justificao do Prompt (Prompt Justification)
Item, 1371
Justificar (Justify), 1477, 1563
Justify, 121
K
Key-*, 753, 1468
Key-Clrblk, 1455
Key-Clrfrm, 1455
Key-Clrrec, 1455
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1593
L
Label do Boto (Button Label)
Boto, 1491
Label, 127
Lag, 230, 107
Language C, 417, 422
Language Java, 417, 520
Largura (Width)
Boto de Opo, 1331
Campo da Tela de Parmetros, 1500
Campo, 1495
Canvas, 1336
Coluna de Espao Reservado, 1501
Coluna de Frmula, 1503
Coluna de Sumrio, 1504
Coluna do Banco de Dados, 1506
Editor, 1340
Item, 1368
Janela, 1405
Lov, 1381
Mdulo Relatrio, 1516
Parmetro, 1523
Quadro, 1396
Seo, 1530
Largura Automtica da Coluna (Automatic Column Width)
Lov, 1380
Largura da Barra de Rolagem (Scroll Bar Width)
Bloco de Dados, 1327
Quadro, 1396
Largura da Linha (Line Width), 1563
Quadro, 1397
Largura da Linha (Line), 1478
Largura do Relatrio (Report Width)
Seo, 1531
Largura do Visor (ViewPort Width)
Canvas, 1335
Last, 58, 111, 112, 227, 307, 482
Last_Day, 85, 86, 469
Last_Value, 108
Layout Avanado (Advanced Layout)
Boto, 1493
Campo, 1499
Grfico, 1510
Objeto OLE2, 1522
Quadro, 1525
Quadro de Repetio, 1529
Texto Padronizado, 1489
Layout Geral (General Layout)
Boto, 1493
Campo, 1498
Grfico, 1510
Objeto OLE2, 1521
Quadro, 1524
Quadro de Repetio, 1528
Texto Padronizado, 1488
Lead, 108, 230
Least, 99, 100
Left Outer join, 245
Left, 123
Length, 82, 228, 237, 420
Length2, 82
Length4, 82
Lengthb, 82
Lengthc, 82
Ler do Arquivo (Read From File)
Campo, 1496
Coluna de Espao Reservado, 1501
Coluna de Frmula, 1503
Coluna de Sumrio, 1504
Coluna do Banco de Dados, 1507
Level, 149
Library, 415, 416, 422
Ligao de Dados (Link), 1513
Like, 41, 122, 220, 225, 225
Limit, 306, 307
Limite de Conexo de Tab (Tab Attachment Edge)
Canvas, 1337
NDICE REMISSIVO
Limite de Conexo do Prompt (Prompt Attachment Edge)
Boto de Opo, 1333
Item, 1371
Limite de Navegao do Mouse (Mouse Navigation Limit)
Mdulo Form, 1385
Limpar (Clear), 1474, 1559
Linesize, 136, 138, 234-35
Linha de Comandos da Aplicao (PDF) (Application
Command Line (PDF))
Boto, 1493
Campo, 1497
Grfico, 1509
Objeto OLE2, 1521
Matriz, 1515
Quadro, 1524
Texto Padronizado, 1488
List, 26, 1262, 1429, 1577
Lista de Expresses, 1224
Lista de Valores LOV (List of Values LOV)
Item, 1366
Parmetro, 1523
Listado no Menu Bloco de Dados (Listed in Data Block Menu),
Bloco de Dados, 1328
Literais, 253, 1274
Lob Index, 199, 388
Loboffset, 136
Lobs, 1277, 198, 200, 202, 387
Local, 636
Localizar e Substituir em PL/SQL (Find and Replace in PL/
SQL), 1481, 1569
Localtimestamp, 84, 230, 245, 472
Locator, 199, 388
Lock, 171, 242
Lock-Procedure, 1461
Log, 71, 1548
Logfile, 1539, 1546
Login_Denied, 295
Logon, 451, 1551
Logon_Screen, 1548
Logsource, 136
Long, 136, 200, 208, 258
Long Raw, 200, 208, 259
Longchunk, 1539
Longchunksize, 136
Loop, 287, 523, 527, 1287
Lov (Lov), 919, 1378, 1431
Lower, 77
Lpad, 77, 228, 234, 238
Ltrim, 77, 228, 470
M
Macros, 928-35
Make_Ref, 563-64
Manipulando Colees, 1292
Manipulando Variveis Cursor, 1309
Manter com Objeto de Ancoragem (Keep With
Anchoring Object),
Boto, 1494
Campo, 1499
Grfico, 1511
Objeto OLE2, 1522
Quadro, 1526
Quadro de Repetio, 1530
Texto Padronizado, 1490
Manter Posio do Cursor (Keep Cursor Position)
Item, 1357
Manuais (Manuals), 1484, 1571
Map Member, 540-41, 580-81
Map, 583
Mapeamento de Outros Valores (Mapping of
Other Values)
Item, 1349, 1354
Mapeamento de Outros Valores da Caixa de Seleo (Check
Box Mapping of Other Values)
Item, 1346
MAPI, 953
Marcador (Bookmark),
Boto, 1492
Campo, 1497
Grfico, 1509
Matriz, 1514
Texto Padronizado, 1488
Marcador de Lugar/Frmula (PlaceHolder/Formula),
Campo, 1496
Coluna de Espao Reservado, 1502
Coluna de Frmula, 1503
Marcador (Bookmark),
Objeto OLE2, 1520
Quadro, 1524
Quadro de Repetio, 1528
Margem e Corpo do Relatrio, 1018-19
Margem Horizontal (Horizontal Margin),
Quadro, 1394
Margem Vertical (Vertical Margin),
Quadro, 1394
Markup, 136, 142
Mscara de Entrada (Input Mask),
Campo da Tela de Parmetros, 1500
Parmetro, 1523
Mscara de Formato (Format Mask),
Campo, 1495
Item, 1362
Materialized View Log, 631
Materialized View, 630, 649, 650
Matriz (Matrix), 310, 1513-14, 1145-49
Max, 58, 64, 110-11, 127, 226, 231, 235, 237, 239, 471
Max or Min of Indexed Column, 624
Mx. de Pginas de Corpo Horizontais (Maximum
Horizontal Body Pages)
Mdulo Relatrio, 1515
Mx. de Pginas de Corpo Verticais (Maximum Vertical Body
Pages)
Mdulo Relatrio, 1515
Maxextents, 207
Maximizao Permitida (Maximize Allowed)
Janela, 1404
Maximize, 1539
Mximo de Linhas a Obter (Maximum Rows to Fetch)
Consulta, 1508
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1595
NDICE REMISSIVO
Item, 1369
Janela, 1405
Mostrar Barra de Rolagem Vertical (Show Vertical Scroll Bar),
Canvas, 1336
Editor, 1340
Item, 1369
Janela, 1406
Mostrar Boto Fast Forward (Show Fast Forward Button),
Item, 1369
Mostrar Boto Play (Show Play Button),
Item, 1369
Mostrar Boto Record (Show Record Button),
Item, 1369
Mostrar Boto Rewind (Show Rewind Button),
Item, 1369
Mostrar Canvas (Show Canvas), 1476
Mostrar Controle de Volume (Show Volume Control),
Item, 1369
Mostrar Indicador de Tempo (Show Time Indicator),
Item, 1369
Mostrar Linhas (Show Lines),
Item, 1359
Mostrar Menu Pop-up de OLE (Show OLE Popup Menu),
Item, 1352
Mostrar Pgina Atual (Show Current Page), 1560
Mostrar Paleta (Show Palette),
Item, 1348
Mostrar Smbolos (Show Symbols),
Item, 1359
Mostrar Slider (Show Slider),
Item, 1369
Mostrar Tipo Inquilino de OLE (Show OLE
Tenant Types),
Item, 1352
Mostrar Todas as Pginas (Show All Pages), 1560
Mostrar View (Show View), 1476
Mover Para Frente (Move Forward), 1479, 1566
Mover Para Trs (Move Backward), 1479, 1566
Movimentao Permitida (Move Allowed),
Janela, 1404
Multisseleo (Allow Multiselect),
Item, 1359
N
Name_In, 844
Natural Join, 119
Natural, 255
NaturalN, 255
Navegao (Navigation),
Bloco de Dados, 1319
Item, 1360
Mdulo Form, 1385
Navegao (Navigational), 1459
Navegao do Mouse (Mouse Navigate),
Item, 1360
Navegador de Objetos (Object Navigator), 1482
Navegador de Objetos,
Forms Builder, 670, 680
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1597
NDICE REMISSIVO
Nvl, 100, 530
Nvl2, 100
O
O SQL Buffer, 1249
Object, 534, 553, 566, 591, 596, 610, 638
Object (Object), 1559
Object Lybrary, 670
Object Navigator,951, 1570
Object Table, 535, 857
Object Views, 565
Objeto, 532-33
Objeto Link, 971
Objeto OLE (OLE Object), 1563
Objeto OLE2 (OLE2 Object), 1520
Objetos, 532, 537-38
Objetos do Banco de dados, 671
Obrigatrio (Required), Item, 1362
OCIExtProcAllocCall Memory, 424
OCIExtProcRaiseExcp, 425
OCIExtProcRaiseExcpWithMsg, 425
Ocultar Dados (Conceal Data),
Item, 1357
Ocultar na Sada (Hide on Exit),
Janela, 1404
Ocultar Tudo (Collapse All), 1567
ODCIAggregateInitialize, 609, 639, 640
ODCIAggregateIterate, 609, 639, 640
ODCIAggregateMerge, 609, 639, 640
ODCIAggregateTerminate, 609, 639, 640
ODCIAggregateWrapContext, 609
Of, 127
Off, 122
Old_Value, 122
OLE, 928-35, 1428
Ole2, 1438
OleCreateObjPoolInMemory, 1418
OleDoNotUpdateLinks, 1418
OleUpdateLinksPrompt, 1418
On Commit Refresh, 217
On, 122, 126-27
On-<evento>, 1465
On-Check-Delete-Master, 768, 1458
On-Check-Unique, 1461
On-Clear-Details, 768, 1458
On-Close, 1461
On-Column-Security, 1461
On-Commit, 1462
On-Count, 1462
On-Delete, 760, 1462
On-Dispatch-Event, 814-15, 1452
On-Error, 758, 1459
On-Failure, 1540
On-Fetch, 1462
On-Insert, 760, 1462
On-Lock, 1462
On-Logon, 1462
On-Logout, 1463
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1599
P
Pack_Message, 375
Package, 338, 339, 340, 341, 454, 488, 493, 504, 517-18,
605, 1297
Pacote DBMS_LOB, 856
Pacote Debug , 804, 806, 921, 1089
Pacote Ftree, 922-24
Pacote Ora_NLS, 926
Pacote Ora_PROF, 926
Pacote SRW, 1023-25, 1052, 1054, 1098
Run_Report, 1136
Set_field_num, 1050
Set_Hyperlink, 1158
Pacote Text-IO, 925
Pacotes Embutidos, 671
Pacotes, 696, 1293
Padro de Preenchimento (Fill Pattern),
Alerta, 1315
Atributo Visual, 1318
Bloco de Dados, 1328
Boto de Opo, 1332
Canvas, 1337
Editor, 1341
Item, 1370
Janela, 1406
Lov, 1381
Pgina Tab, 1391
Quadro, 1398
Padro do Limite (Edge Pattern),
Quadro, 1398
Page, 123
Pagesize , 136, 138, 1541, 1546
PageStream, 1540
Pgina Anterior (Previous Page), 1562
Pgina Tab (Tab Page), 1389
Item, 1368
Pgina Tab da Barra de Rolagem (Scroll Bar Tab Page),
NDICE REMISSIVO
Quadro, 1395
Permitir Prompts de Vrias Linhas (Allow
Multi-Line Prompts),
Quadro, 1395
Permitir Prompts Iniciais Anexos (Allow Start-Attached
Prompts),
Quadro, 1395
Permitir Ramificaes Vazias (Allow Empty Branches),
Item, 1359
Peso da Fonte (Font Weight),
Alerta, 1316
Atributo Visual, 1318
Boto de Opo, 1332
Canvas, 1338
Editor, 1341
Item, 1370
Item de Menu, 1378
Janela, 1407
Lov, 1382
Peso da Fonte do Prompt (Prompt Font Weight),
Boto de Opo, 1334
Item, 1372
Peso da Fonte do Ttulo do Quadro (Frame Title
Font Weight),
Quadro, 1399
Physical Files, 247
Pipe, 603
Pipe Row, 607
Pipelined, 602-06, 1296
PL/SQL Externa, 1022
PL/SQL Interna, 1022
PL/SQL Intrnseca , 1022
PL/SQL Library, 950
PL/SQL Wrapper, 412, 1309
Plano de Execuo, 617
PLL, 668
Pls_Integer, 257
PLX, 668
Polimorfismo, 561, 587-89
Posio Automtica (Automatic Position), Lov, 1380
Posio X (X Position),
Boto de Opo, 1331
Editor, 1340
Item, 1368
Janela, 1405
Lov, 1380
Quadro, 1396
Posio X da Barra de Rolagem (Scroll Bar X Position),
Bloco de Dados, 1327
Posio X da Lista (List X Position),
Item, 1367
Posio X do Editor (Editor X Position),
Item, 1367
Posio X do Visor (Viewport X Position),
Canvas, 1335
Posio X do Visor no Canvas (Viewport X Position on
Canvas),
Canvas, 1336
Posio Y (Y Position),
Boto de Opo, 1331
Editor, 1340
Item, 1368
Janela, 1405
Lov, 1380
Quadro, 1396
Posio Y da Barra de Rolagem (Scroll Bar Y Position),
Bloco de Dados, 1327
Posio Y da Lista (List Y Position),
Item, 1367
Posio Y do Editor (Editor Y Position),
Item, 1367
Posio Y do Visor (Viewport Y Position),
Canvas, 1335
Posio Y do Visor no Canvas (Viewport Y Position on
Canvas),
Canvas, 1336
Positive, 255
PositiveN, 255
Post-<evento>, 1466
Post-Block, 757, 1459
Post-Change, 1463
Post-Database-Commit, 760, 1463
Post-Delete, 760, 1463
Post-Form, 757, 1459
Post-Forms-Commit, 760, 1464
Post-Insert, 760, 1464
Post-Logon, 1464
Post-Logout, 1464
Post-Query, 756, 1460
Post-Record, 757, 1459
Post-Select, 1464
Post-Text-Item, 757, 1459
Post-Update, 760, 1464
Power, 71
Pragma Autonomous_Transaction, 453, 526, 607
Pragma Exception_Init, 297, 480, 490, 529
Pragma Restrict_References, 346, 348, 454, 495, 511
Pre-<evento>, 1467
Pre-Block, 757, 1459
Pr-calcular Sumrios (Precompute Summaries),
Bloco de Dados, 1326
Preceding, 106
Pre-Commit, 760, 1464
Pre-Delete, 760, 1464
Preenchimento Vertical (Vertical Fill),
Quadro, 1394
Preferncias (Preferences), 1482, 1570
Pre-Form, 757, 1459
Pre-Insert, 760, 1464
Pre-Logon, 1464
Pre-Logout, 1464
Pre-Popup-Menu, 1460
Pre-Query, 756, 1460
Pre-Record, 757, 1460
Pre-Select, 1465
Preserve Rows, 614
Preserve Rows, 641
Pre-Text-Item, 757, 1460
Pre-Update, 760, 1465
Previsualizador Ativo (Live Previewer) , 965, 1560
Previsualizador de Runtime (Runtime Previewer), 1561
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1601
Q
Quadro (Frame), 1393, 1523
Quadro de Layout (Layout Frame),
Quadro, 1393
Quadro de Repetio (Repeating Frame), 995,
1526, 1528
Quadro de Repetio Horizontal (Horizontal Repeating
Frame),
Matriz, 1514
Quadro de Repetio Vertical (Vertical
Repeating Frame),
Matriz, 1514
Quadros, 1040
Qualidade de Compactao (Compression Quality),
Item, 1347
Qualidade de Exibio (Display Quality),
Item, 1348
Qualidade do Som (Sound Quality),
Item, 1355
NDICE REMISSIVO
Qualificao, 1279
Quebra de Pgina Anterior (Page Break Before),
Boto, 1493
Campo, 1498
Grfico, 1510
Objeto OLE2, 1521
Quadro, 1524
Quadro de Repetio, 1528
Texto Padronizado, 1488
Quebra de Pgina Posterior (Page Break After),
Boto, 1493
Campo, 1498
Grfico, 1510
Objeto OLE2, 1521
Quadro, 1524
Quadro de Repetio, 1528
Texto Padronizado, 1488
Quebras de Pgina (Page Breaks), 1562
Query, 1432
Query Builder, 1102, 1104, 1106-07, 657, 668, 791, 948, 957-62
Query Express, 974
Query_Only, 1549
Query-Procedure, 1461
Query Rewrite, 217, 631, 632, 649
Quick Tour, 1483, 1571
Quiet, 1549
Quit, 32, 1260, 1263
R
Radio, 1428
Raise, 294, 296, 299, 1285
Raise_Application_Error, 298, 479, 488, 489, 525, 581, 582, 1285
Random, 407, 589
Range, 105 , 606, 633
Rank, 60, 112
Rastrear (Trace), 1570
Ratio_To_Report, 109, 230
Raw, 208, 259
RawToHex, 90
RawToNhex, 90
Read, 217, 402
Read Consistency, 173
Read_Error, 359, 364
Readonly, 1541
Real, 257
Receive_Message, 377, 381, 413
Recolher (Collapse), 1476, 1483
Recolher Tudo (Collapse All), 1477, 1483
Record, 1432, 1549, 263, 311
Record Group, 790-91, 1433
Dinmico, 917-18
Esttico, 916-17, 920
Recortar (Cut), 1474, 1559
Recover, 1263
Recsep, 136
Recsepchar, 136
Redimensionamento Permitido (Resize Allowed),
Janela, 1404
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1603
Rows, 105
Rowtype, 502, 527
Rowtype_Mismatch, 295
Rpad, 78, 228, 238
Rtrim, 78, 228, 469
Rule, 617
Run, 31, 1264
Rundebug, 1542
Rwbld60 (Report Builder), 949
Rwcgi60 (Report Server CGI), 1178
Rwcli60, 1176, 1178, 1183
Rwcon60 (Report Convert), 949
Rwmts60 (Report Services), 1178
Rwrbe60 (Report Background Engine), 949
Rwrqm60 (Report Queue Manager), 1178, 1183
Rwrqv60 (Report Queue Viewer), 1178
Rwrun60 (Report Runtime), 949, 1084, 1085
S
Sair (Quit), 1474, 1558
Salto Automtico (Automatic Skip),
Item, 1357
Lov, 1380
Salvar (Save), 1472, 1556
Salvar Como (Save As), 1472, 1556
Salvar Tudo (Save All), 1472
Sample, 240
Sample Table Scan, 620
Save, 34, 1264
Save_Rdf, 1542
Savepoint, 172, 243, 458, 1240
Schedule, 1542
Schema, 203
Schema Builder, 657, 668, 948
Screen, 129
Script, 1552
Seo (Section), 1530
Seo de Layout (Layout Section), 1561
Sees do relatrio, 1017
Second, 514
Seed, 406
Segmentos, 206
Segurana do Menu (Menu Security),
Item de Menu, 1377
Mdulo Form, 1385, 1389
Seleo, 113
Seleo Automtica (Automatic Select), Lov, 1380
Selecionar Filhos (Select Children), 1480, 1567
Selecionar Pai (Select Parent), 1480, 1567
Selecionar Quadro-Pai (Select Parent Frame), 1559
Selecionar Todos (Select All), 1559
Selecionar Tudo (Select All), 1475
Select, 37, 157, 158, 202, 217, 220, 235, 236, 237, 246, 554, 1240
Select For Update, 177, 178, 244
Select Into, 271, 1289
Self, 420, 539, 542, 553, 558, 610
Self_Is_Null, 295
Send_Message, 376, 380
NDICE REMISSIVO
Sequel, 22
Sequence, 211
Server, 1543
Serveroutput, 136, 138
Services, 658
Session, 1550
Sessiontimezone, 83, 230, 245
Set, 134, 236, 1265
Set Constraint, 179, 180, 1241
Set Role, 1241
Set Transaction, 1242
Set Transaction Read Only, 176, 177, 462, 463
Set Transaction Read Write, 462
Set Transaction Use Rollback Segment, 462, 463
Set_Window_Property, 778-79
Seta (Arrow), 1478, 1564
SGA, 7, 130
Shiftinout, 137
Show, 130, 1268
Show_Alert, 785
Show_Editor, 789
Showmode, 137
ShrinkWrap (ShrinkWrap), Quadro, 1394
Shutdown, 1269
Siblings, 149, 238
SID, 7
Sign, 72
SignType, 255
Silent, 141
Sin, 75, 229
Sincronizar com o Item (Synchronize with Item),
Item, 1364
Single Column Indexes, 624
Single Row By Cluster Join, 623
Single Row By Hash Cluster With Unique or
Primary Key, 623
Single Row By Rowid, 623
Single Row By Unique ou Primary Key, 623
Sinh, 75
Sistema Coordenado (Coordinate System),
Mdulo Form, 1387
Skip, 123, 126
Skip Page, 126
Smallint, 257
SmartClasses, 939-40, 1475
Sobre a PL/SQL, 1274
Sobre o Controle (About Control),
Item, 1350
Sobre o Form Builder (About Form Builder), 1484
Sobre o Report Builder (About Report Builder), 1571
Sobre o SQL*Plus, 1248
Sockets, 1164
Software, 10
Some, 52, 225
Somente Consulta (Query Only),
Item, 1365
Sort Merge Join, 624
Sound, 1429
Soundex, 79
Source, 1546
Space, 137
Spool, 1269
Spool, 129
SQL, 22, 23, 129, 283
Sql.Lno, 123
Sql.Pno, 123
Sql.Release, 123
Sql.User, 123
Sql_Trace, 181, 1207
Sqlblanklines, 137
Sqlcase, 137
Sqlcode, 274
Sqlcontinue, 137
SqlErrm, 275, 300
Sqlerror, 140, 1272
Sqlnet.ora, 1179
Sqlnumber, 137
Sqlpluscompatibility, 137
Sqlprefix, 137
Sqlprompt, 137, 138
Sqlterminator, 137, 138
Sqrt, 72, 469
Srw, 1574
Stale_Tolerated, 633
Standard, 349
Start, 35, 1270
Start Witn, 211, 238
Startup, 1270
Static, 558, 560
Statistics, 1550, 1552
Status do Registro, 691, 692
Std, 127
Stddev, 62
Stddev_Pop, 62
Stddev_Samp, 62
Storage_Error, 295
Store, 139, 1270
Stored Subprogram, 1296
String do Host, 12
String, 254
Strip_Source, 1552
Stype, 1546
Subprogramas, 1293
Subquery, 52, 153, 154, 155, 238, 1243
Subscript_Beyound_Count, 295, 309
Subscript_Beyound_Limit, 309
Subscript_Outside_Limit, 295
Subselect, 151
Substr, 79, 402, 475, 489
Substr2, 79
Substr4, 79
Substrb, 79
Substrc, 79
Subtype, 263
Suffix, 137
Sum, 62, 67, 127, 225, 227, 472
Sumrio (Summary),
Campo, 1114-18, 1496
Coluna de Sumrio, 1505
Matriz, 1068
Suporte Interno-Externo de OLE (OLE
Inside-Out Support),
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1605
System.Trigger_Block, 1414
System.Trigger_Item, 1415
System.Trigger_Node, 1415
System.Trigger_Record, 1415
SysTimestamp, 86, 87
T
Tab, 123, 137, 1425
Tabela Temporria, 612, 642
Table Access By Rowid, 620
Table Functions, 600, 601, 607, 637, 1296
Table Scan, 620
Table, 246, 263, 604, 607
Table_Name, 241
Tables, 247
Tablespace, 205, 247
Tag XML (XML Tag),
Coluna de Espao Reservado, 1501
Coluna de Frmula, 1503
Coluna de Sumrio, 1505
Coluna do Banco de Dados, 1507
Grupo, 1512
Mdulo Relatrio, 1518
Tag XML Externa (Outer XML Tag),
Grupo, 1513
Tamanho da Barra de Rolagem (Scroll Bar Height),
Bloco de Dados, 1327
Tamanho da Consulta (Query Length),
Item, 1366
Tamanho da Fonte (Font Size),
Alerta, 1316
Atributo Visual, 1318
Boto de Opo, 1332
Canvas, 1338
Editor, 1341
Item, 1370
Item de Menu, 1378
Janela, 1407
Lov, 1382
Tamanho da Fonte do Prompt (Prompt Font Size),
Boto de Opo, 1334
Item, 1372
Tamanho da Fonte do Ttulo do Quadro (Frame Title Font Size),
Quadro, 1399
Tamanho de Extrao do Grupo de Registros (Record Group
Fetch Size),
Grupo de Registros, 1344
Tamanho do Array de Consulta (Query Array Size),
Bloco de Dados, 1320
Tamanho do Array de DML (DML Array Size),
Bloco de Dados, 1326
Tamanho Fixo (Fixed Length),
Item, 1361
Tamanho Mximo (Maximum Length),
Item, 1361
Parmetro, 1392
Tamanho Normal (Normal Size), 1475, 1562
Tan, 75, 229
NDICE REMISSIVO
Tanh, 75
Tecla de Acesso (Access Key),
Boto de Opo, 1330
Item, 1345, 1353, 1354
Templates no Forms Builder, 938-39
Tempo Mximo Para Consulta (Maximum
Query Time),
Bloco de Dados, 1324
Mdulo Form, 1386
Temporary Table, 613, 641
Term, 1543, 1550
Terminate, 407
Termout, 137
Territrio, 10
Texto (Text),
Boto, 1491
Texto da Ajuda do Teclado (Keyboard Help Text),
Gatilho, 1343
Texto do Gatilho (Trigger Text),
Gatilho, 1342
Texto Padronizado (Boilerplate),
Texto Padronizado, 1487
Texto Padronizado (Boilerplate)/Texto Padronizado do
Arquivo de Vnculo (Link File), 1487
Texto Padronizado do Form de Parmetros (Form Parameter
Boilerplate),
Boilerplate da Tela de Parmetros, 1491
Texto, 1478
Texto_Io, 1438
Thousands, 1543
Time, 137
Time_Zone, 183, 245, 1211
Timeout_On_Resource, 295
Timer, 892, 904, 911
Timestamp With Local Time Zone, 261
Timestamp With Time Zone, 261
Timestamp, 208, 261
Timing, 129, 137, 140, 1271
Tipo (Type),
Boilerplate da Tela de Parmetros, 1491
Boto, 1491
Consulta, 1508
Texto Padronizado, 1487
Tipo de Arquivo Multimdia (Multimedia File Type),
Boto, 1492
Tipo de Atributo Visual (Visual Attribute Type),
Atributo Visual, 1317
Tipo de Canvas (Canvas Type),
Canvas, 1334
Tipo de Coluna (Column Type),
Campo, 1495
Coluna de Espao Reservado, 1501
Coluna de Frmula, 1502
Coluna de Sumrio, 1504
Coluna do Banco de Dados, 1506
Tipo de Coluna Multimdia (Multimedia
Column Type),
Boto, 1492
Tipo de Comando (Command Type),
Item de Menu, 1376
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1607
U
Ui_Icon, 1420
Uid, 103
ltima Pgina (Last Page), 1562
Unbounded Following, 107
Unbounded Range Search on Indexed Columns, 624
Undefine, 132, 1271
Undefined, 131
Under, 217, 580
Underline, 137
Unio, 114, 115
Unicode, 185
Unidade de Medida (Unit of Measurement),
Mdulo Relatrio, 1515
Unidade de Validao (Validation Unit),
Mdulo Form, 1386
Union, 115
Union All, 115, 237
Unique, 209
Unique_Session_name, 380
Unopened_File, 392
Unpack_Message, 378
Upcasting, 560
Update para Cursor, 1283
Update Table, 573
Update, 46, 152, 201, 217, 222, 223, 224, 285, 1245
Update-Procedure, 1461
Updating, 446, 449, 525
Upgrade, 1553
Upgrade_Roles, 1553
Upper, 80, 228, 471, 581
Urowid, 208, 260
Usando Arquivos .Jar, 1175
Usando Estatsticas no Forms Builder, 935-36
Usando Forms Runtime,
Alterando Registros, 684
Bloqueando Registros, 685
Excluindo Registros, 685
Exerccios, 861-67
Incluindo Registros, 683
Navegando entre os Registros, 685
Realizando consultas, 683
Salvando as informaes, 686, 692
Verificando o Erro Ocorrido, 686, 861
Usando o Debugger, 921
Usar Controles 3D (Use 3D Controls),
Mdulo Form, 1387
Usar Folhas de Estilo HTML (Use HTML Style Sheets), 1560
Usar HTML (Use HTML), 1560
Usar Linha de Dicas do Previsualizador (Use Previewer
Hint Line),
Mdulo Relatrio, 1519
NDICE REMISSIVO
Usar Linha de Status do Previsualizador (Use Previewer
Status Line),
Mdulo Relatrio, 1519
Usar PDF (Use PDF), 1560
Usar Segurana (Use Security),
Mdulo Menu, 1389
Usar XML (Use XML), 1560
Use_Concat, 629, 647
Use_Hash, 629, 648
Use_Nl, 629, 648
User, 12, 103, 214, 246
User_Cons_Columns, 164
User_Constraints, 164, 240, 241
User_Ind_Columns, 163
User_Ind_Partitions, 163
User_Indexes, 162, 240
User_Lobs, 167
User_Method_Params, 168
User_Method_Results, 168
User_Nested_Tables, 167
User_Object_Tables, 167
User_Objects, 160
User_Sequences, 164
User_Source, 516, 517, 518
User_Synonyms, 164
User_Tab_Columns, 161, 240
User_Tab_Partitions, 162, 241
User_Tables, 161, 240
User_Type_Attrs, 166
User_Type_Methods, 166
User_Types, 166
User_Updatable_Columns, 165, 241
User_Users, 165
User_Views, 165, 241
Userenv, 103, 104, 229
Userid, 1544, 1546
UseSdi, 1550
Using, 155
Utl_File, 350, 359, 501, 502, 503, 507, 527, 595
Utl_Http, 351
V
Validao (Validation), 1465
Validao, 1431
Validar a partir da Lista (Validate from List),
Item, 1367
Valor de Controle da Pgina de Navegao (Page Navigation
Control Value),
Mdulo Relatrio, 1518
Valor de Prlogo XML (XML Prolog Value),
Mdulo Relatrio, 1519
Valor de Retorno de DML (DML Returning Value),
Bloco de Dados, 1326
Valor do Boto de Opo (Radio Button Value),
Boto de Opo, 1330
Valor do Controle VBX (VBX Control Value),
Item, 1358
Valor Inicial (Initial Value),
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1609
W-Z
Web (Web) , 1440, 1480
WebDb, 1183
When, 156, 445, 460, 478, 481
When Matched, 155
When No_Data_Found, 502
When Not Matched, 155
When Others, 300, 1285
When-<evento>, 1467
When-Button-Pressed, 750, 1453
When-Checkbox-Changed, 751, 1453
When-Clear-Block, 749, 1452
When-Create-Record, 749, 1452
When-Custom-Item-Event, 810, 1453
When-Database-Record, 749, 1452
Whenever, 140
Whenever Oserror, 1272
When-Form-Navigate, 1453
When-Image-Activated, 751, 1453
When-Image-Pressed, 751, 1453
When-List-Activated, 751, 1453
When-List-Changed, 751, 1453
When-Mouse-Click, 751, 1453
When-Mouse-DoubleClick, 751, 1453
When-Mouse-Down, 751, 1454
When-Mouse-Enter, 751, 1454
When-Mouse-Leave, 751, 1454
When-Mouse-Move, 751, 1454
When-Mouse-Up, 751, 1454
When-New-Block-Instance, 757, 1460
When-New-Form-Instance, 757, 1460
When-New-Item-Instance, 758, 1460
When-New-Record-Instance, 757, 1460
When-Radio-Changed, 751, 1454
When-Remove-Record, 749,1452
When-Tab-Page-Changed, 751, 1454
When-Timer-Expired, 751, 1454
When-Tree-Node-Activated, 751, 1454
When-Tree-Node-Expanded, 752, 1454
When-Tree-Node-Selected, 752, 1455
When-Validate-Item, 748, 1465
%Bulk_Exceptions, 1281
%Bulk_Rowcount, 1280
A
Agregate, 1296
All When, 156, 157
All...Insert into, 156
Alter Type, 539, 540
Arquivo de Mapeamento,1185-86, 1200
As Language, 1295
AsciiStr, 89
Assistente para Criao de Tipos, 774-76, 1028-30
Ativando Log no Forms Server, 1192
Atributos de Tag XML (XML Attribute Tag)
Grupo, 1513
Corr, 55
Covar_Pop, 56
Covar_Samp, 56
Create Java Class, 415, 416
Create Library, 415, 416
Create Type as Object, 543-44, 547, 552, 557, 575, 57980, 585
CreateTemporary, 394
Criando Fila do Reports Server, 1183
Cross Join, 119
Cume_Dist, 57, 111-12, 227, 514
Current_Date, 83
Current_Timestamp, 84, 245, 472, 514
D
DBMS_Flashback, 351, 408, 514, 515, 1298
Dbms_Random, 351, 406, 514, 1304
Dbtimezone, 84, 230, 245, 472
Decompose, 90
Definies XML (XML Definitions)
Bin_To_Num, 89
BitAnd, 70
Bounded Range Search on Indexed Columns, 624
Bulk Binds, 316
Bulk_Exceptions, 320
C
Case, 1279, 158, 240, 245, 275-76, 542
Case_Not_Found, 294
Cast, 89, 576-77, 596
Cgicmd.dat,1185
Classe, 532, 533-34
Coalesce, 97
Compose, 89
Configurando Servidor Web
IIS, 1190-92
E
Enable_At_SystemChange_Number, 412
Enable_At_Time, 409, 410
Enforced, 632
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1611
F
First When, 156, 157
Following, 107
Fopen_Nchar, 362
Forms Applet, 1163-64
Forms Listener, 1163
Forms Runtime Engine, 1163
Forms Server, 657
Forms60_DefaultFont, 1416
Forms60_Editor, 1416
Forms60_Error_Date_Format, 1416
Forms60_Error_DateTime_Format, 1416
Forms60_Javadir, 1417
Forms60_Mapping, 1417
Forms60_Output, 1417
Forms60_Output_Date_Format, 1417
Forms60_Output_DateTime_Format, 1417
Forms60_Path, 1417
Forms60_RepFormat, 1417
Forms60_Timeout, 1418
Forms60_User_Date_Format, 1418
Forms60_User_DateTime_Format, 1418
Forms60_UserExits, 1418
Formsweb.cfg, 1168, 1194
Forms Server Parameter, 660
From_Tz, 84, 472
Full Outer Join, 146
Full Table Scan, 620, 625
Funes Analticas, 1233
Funes de Grupo, 1231
Funes Escalares, 1225
Funes Relacionadas a Objetos, 1234
Hints, 627
Home1, 10
Home2, 10
Home3, 10
Home4, 10
Home5, 10
Http, 1165
Https, 1165
I
Importar Classes Java (Import Java Classes), 1481
Index Scan, 620
Index, 629, 647, 651
ndices, 626
Inner Join, 119, 232, 238, 239, 245
Instalao, 656
Instantiable, 556, 559, 579
Instead, 567, 592
Instr2, 81
Instr4, 81
Instrb, 81
Instrc, 81
Interval Day to Second, 261
Interval Day, 208
Interval Year to Month, 261
Interval Year, 208
Invalidate, 540
J-L
Java Class, 520
Jinitiator, 1192
Language Java, 417, 520
Last_Value, 108
Lead, 108, 230
Left Outer join, 245
Length2, 82
Length4, 82
Lengthb, 82
Lengthc, 82
Local, 636
Localtimestamp, 84, 230, 245, 472
G
Gerando um Documento XML, 1085
Get_Line_Nchar, 365
Get_System_Change_Number, 411
Globalization Support, 184
Group_Id, 58, 68
Grouping, 58, 67, 227
Grouping_Id, 58, 67
Q-R
O
ODCIAggregateInitialize, 609, 639, 640
ODCIAggregateIterate, 609, 639, 640
ODCIAggregateMerge, 609, 639, 640
ODCIAggregateTerminate, 609, 639, 640
ODCIAggregateWrapContext, 609
Ora_Java, 1444
Oracle Homes, 1166
Oracle Jinitiator, 1165
Oracle Reporting ActiveX Control,1187-89
Ordsys. OrdImage, 209
Ordsys. OrdVideo, 209
Ordsys. OrdAudio, 209
Overriding, 558-59, 580-82, 586-87
P
Parmetros de Configurao do Reports Services, 1181-82
Parametros de Sistema
Formsweb.cfg,1168-71
Parmetros Especiais de Mapeamento
Reports Server,1186
Parse, 616, 1552
Particionamento de Tabelas, 633
Partition, 221, 223, 230-31, 241, 605-06, 634, 636, 651-52
Partition_Name, 241
Percent_Rank, 58, 111-12
Percentile_Cont, 59, 112, 228
Percentile_Disc, 60, 112, 228, 514
Pipe Row, 607
Pipelined, 602-06, 1296
Polimorfismo, 561, 587-89
PositiveN, 255
Preceding, 106
Preserve Rows, 614, 641
Put_Line_Nchar, 367
Put_Nchar, 366, 369
S
Sample Table Scan, 620
Self, 539, 542, 553, 558, 610
Self_Is_Null, 295
Send_Message, 376, 380
Services, 658
Sessiontimezone, 83, 230, 245
Siblings, 149, 238
SignType, 255
Single Column Indexes, 624
Single Row By Cluster Join, 623
Single Row By Hash Cluster With Unique or Primary
Key, 623
Single Row By Rowid, 623
Single Row By Unique ou Primary Key, 623
CURSO COMPLETO00
Para uso pessoal. Este material no pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1613
V
Valor de Prlogo XML (XML Prolog Value), Mdulo
Relatrio, 1519
Var_Pop, 62
Var_Samp, 62
Variveis de Ambiente,
T
Tabela Temporria, 612, 642
Table Access By Rowid, 620
Table Function, 600-01, 607, 637, 1296
Table Scan, 620
Tag XML (XML Tag), Coluna de Espao Reservado, 1501
Tag XML (XML Tag), Coluna de Frmula, 1503
Tag XML (XML Tag), Coluna de Sumrio, 1505
Tag XML (XML Tag), Coluna do Banco de Dados, 1507
Tag XML (XML Tag), Grupo, 1512
Tag XML (XML Tag), Mdulo Relatrio, 1518
Tag XML Externa (Outer XML Tag), Grupo, 1513
Time_Zone, 183, 245, 1211
Timeout_On_Resource, 295
Timestamp With Local Time Zone, 261
Timestamp With Time Zone, 261
Timestamp, 208, 261
Tipo de Prlogo XML (XML Prolog Type), Mdulo
Relatrio, 1519
Tnsnames.ora,1179
To_Dsinterval, 94
To_Nchar, 95
To_Nclob, 95
To_Timestamp, 96
To_Timestamp_Tz, 96, 230
To_Yminterval, 96
Tolerance, 1543
Treat, 79, 560
Tz_Offset, 87, 230
WebDb,1183
When, 156
When Matched, 155
When Not Matched, 155
Width_Bucket, 72, 229
U
Unbounded Following, 107
Unbounded Range Search on Indexed Columns, 624