Uploaded by Suyanne França

Oracle 9i Curso Completo

advertisement
www.axcel.com.br
®
ORACLE 9i
PARA DESENVOLVEDORES
ORACLE DEVELOPER 6i
CURSO COMPLETO
Lúcia Fernandes
Pirataria é crime contra os direitos autorais, com penas para os infratores de
acordo com a Lei 9.610 de 19 de fevereiro de 1998.
Este e-book não pode ser vendido e/ou distribuído em CD-ROM, DVD-ROM ou por programas de
compartilhamento P2P. A forma correta de obter este arquivo é adquirindo-o através dos sites da Editora
Axcel (www.axcel.com.br) e de Júlio Battisti (www.juliobattisti.com.br).
Se você adquiriu este documento através dos meios legais descritos acima, não distribua ou venda este
produto. Você estará cometendo um crime contra o autor da obra.
Se você adquiriu este e-book por intermédio de terceiros, regularize sua situação entrando em contato pelo e-mail
editora@axcel.com.br, para que não seja alvo das penalizações previstas em Lei. Usar cópia ilegal também é
crime de violação dos direitos autorais.
REPRODUÇÃO PROIBIDA PELA LEI
DO DIREITO AUTORAL.
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
CRÉDITOS
PRODUÇÃO
Alexandre Ramires
Carlos Alberto Sá Ferreira
REVISÃO
Sandro Gomes dos Santos
ARTE E DIAGRAMAÇÃO
Ingo Bertelli
SUPERVISOR DE PRODUÇÃO
Carlos Alberto Sá Ferreira
CAPA
Ingo Bertelli
EDITORA DE PRODUÇÃO
Gisella Narcisi
EDITOR RESPONSÁVEL
Ricardo Reinprecht
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
III
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
DEDICATÓRIA
À minha família, que me acompanha a cada dia, no desenvolvimento deste trabalho, e me encoraja a prosseguir,
principalmente nos momentos de desânimo. Dedico este livro, portanto, aos meus filhos Davi, Daniel e Gabriel,
ao meu esposo Dilson e aos meus pais Lourdes e Milton (em memória). E, também, a uma amiga muito especial,
que foi uma grande admiradora do meu trabalho, Lucianita (em memória).
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 revisão do conteúdo técnico de todo o material.
SOBRE A AUTORA
Lúcia Fernandes é arquiteta formada pela Universidade Federal do Rio de Janeiro. Na área de informática, sua
atuação foi toda voltada para a área de suporte, especialmente banco de dados. Ministrou diversos treinamentos
associados a bancos de dados e linguagens de programação, 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
PREFÁCIO
Este material foi construído 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 três partes:
♦ Fundamentos – onde encontramos a parte básica, a interface com o banco de dados através das linguagens SQL
e PL/SQL.
♦ Developer – onde encontramos o estudo das ferramentas de desenvolvimento de sistemas Form Builder e Report Builder.
♦ Referência – onde encontramos a sintaxe das linguagens estudadas na parte Fundamentos e lista de propriedades,
de menus, de triggers, de rotinas, de parâmetros, 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 lógicas de programação com o PL/SQL. Consideramos que o estudo sobre objetos no
banco de dados merecia uma atenção maior, e por este motivo dedicamos o Capítulo 4 ao estudo de objetos tanto
em SQL quanto em PL/SQL.
Assim, se você não conhece Oracle (é o seu primeiro contato), deve começar o estudo no Capítulo 2 com a linguagem
SQL, passando então para o Capítulo 3, que contém a linguagem PL/SQL (para construção de aplicações em batch).
De posse desse conhecimento, você poderá avaliar o que a versão 9i trouxe de novidades para o desenvolvedor.
Se, por outro lado, você já conhece Oracle 8i, não deixe de estudar os Capítulos 2 e 3, pois você perceberá que
muitas implementações foram feitas no SQL. A quantidade de funções cresceu tremendamente, a sintaxe dos
comandos de DML ganhou acréscimos para aceitar o padrão ANSI. A PL/SQL também ganhou novos pacotes e
implementou todas as alterações realizadas para o SQL.
A parte (tanto da SQL quanto da PL/SQL) relativa a uso de objetos no banco de dados também foi incrementada
com o conceito de herança e polimorfismo. No Capítulo 4 fazemos um estudo específico sobre objetos, tanto do
ponto de vista conceitual quanto do uso no ORACLE.
No Capítulo 5 o desenvolvedor encontrará alguns tópicos gerais relativos ao banco de dados, que podem ser úteis
no emprego mais eficiente no software; muitas vezes, porém, não 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 exercícios e mais de 600 exemplos.
Certamente você encontrará muita coisa interessante para estudar, independente do seu nível de conhecimento
atual. Na parte Referência, você encontrará a sintaxe de SQL9i, de PL/SQL9i além 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 tópicos que sofreram modificações na versão 9i ou que ainda não havíamos
estudado no livro anterior.
Se você pretende se utilizar das ferramentas de desenvolvimento da Oracle, seu estudo ainda não acabou: devemos
passar à segunda parte (Developer), onde estão os capítulos referentes às ferramentas de desenvolvimento.
Iniciamos o estudo das ferramentas com a instalação, no Capítulo 6, e passamos então ao Form Builder 6i (Capítulo
7) e Report Builder 6i (Capítulo 8). O Capítulo 9 é dedicado ao estudo das ferramentas em ambiente Web.
Se você não conhece as ferramentas de desenvolvimento da Oracle, seu estudo começa no Capítulo 7, onde você
conhecerá a filosofia da ferramenta (Form Builder), sua utilização passo a passo e dicas diversas. Em seguida, você
deve passar ao Capítulo 8, para que possamos estudar juntos a confecção de relatórios com a ferramenta Report
Builder. Quando você estiver bem experiente nas duas ferramentas, passe ao Capítulo 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
V
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Se você já conhece as ferramentas em versões anteriores, o estudo dos Capítulos 7 e 8 terá o objetivo de verificar o
que houve de implementação na versão 6i. Não deixe, no entanto, de ler esses capítulos, pois, além das modificações,
você encontrará dicas úteis ao longo do texto. No Capítulo 9, você já sabe, encontrará um estudo passo-a-passo
para a implementação das aplicações em ambiente Web.
A parte Developer conta com um conjunto de aproximadamente 120 exercícios e 200 figuras e 90 listagens com
exemplos. Na parte Referência, você encontrará as propriedades dos objetos do Form e do Report, os menus, as
variáveis de sistema, os parâmetros de execução, os triggers e as rotinas dos pacotes internos. Enfim, muita informação
para o seu estudo.
Quanto ao desenvolvimento do material, utilizamos a seguinte regra geral: os assuntos são apresentados com uma
parte teórica seguida de exemplos que permitam o entendimento prático. Ao final do tópico propomos alguns
exercícios para fixação do assunto. Todos os exercícios estão resolvidos ao final de cada capítulo, para que você
possa comparar o seu resultado com uma solução.
O material segue uma ordem crescente de dificuldade, isto é, minha expectativa é de que você siga o estudo na
ordem proposta, pois o tópico seguinte pressupõe o conhecimento do anterior.
Em relação à convenção sintática apresentada neste livro, utilizamos, basicamente, a mesma encontrada nos manuais
da Oracle.
De acordo com essas convenções, as informações entre colchetes – [ ] – são opcionais e as informações entre os
símbolos < e > indicam valores a serem substituídos. Por exemplo, Round (<n> [ , <m>]) indica que a função Round
aceita um ou dois parâmetros e que n deve ser substituído pelo valor que desejamos arredondar. Nesse caso,
teríamos opcionalmente Round (1234.87) ou Round (1234.87, 1).
As sintaxes alternativas e/ou as repetitivas são representadas por linhas e pontes como na figura-exemplo a seguir.
Figura – Exemplo de sintaxe
Dentro de cada capítulo veremos trechos das sintaxes, pois estaremos analisando individualmente os assuntos;
porém, na parte de anexos, teremos a sintaxe completa com a explicação específica sobre cada opção.
Como recomendação ao leitor interessado em se tornar um desenvolvedor, sugiro que não se atenha apenas à leitura
do material. Praticar traz dúvidas que a leitura não traz; portanto refaça todos os testes apresentados, faça outros
testes complementares com opções não exemplificadas e tente realizar todos os exercícios de fixação. Duvide e teste!
Dessa forma, você terá condições de tirar suas próprias conclusões sobre as ferramentas apresentadas. Se, após este
estudo, você tiver dúvidas, escreva para o e-mail da Editora, a fim de entrar em contato comigo para novas explicações.
Não deixe, também, de obter todos os scripts e aplicativos presentes no livro para que seu estudo seja mais ágil.
Faça download em www.axcel.com.br.
Bom estudo!
Lúcia.
VI
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Sumário
PARTE I – FUNDAMENTOS ................................................................................................................................ 1
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000 .................................................................. 3
Fundamentos em: Instalação do Produto ............................................................................................ 4
Requerimentos Para Instalação ............................................................................................................................ 4
Acompanhando a Instalação ............................................................................................................................... 4
Localização dos Arquivos ..................................................................................................................................... 5
Produtos Disponíveis ........................................................................................................................................... 5
Tipos de Instalação ............................................................................................................................................... 6
Configuração do Banco de Dados ........................................................................................................................ 7
Identificação 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: Substituição da Linguagem .................................................................................. 10
Executando o Regedit ......................................................................................................................................... 10
O Nó Oracle ........................................................................................................................................................ 10
Fundamentos em: Criação de um Usuário-Padrão com o SQL*Plus ................................................. 12
Fundamentos em: Criação 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
CAPÍTULO 2 – SQL E SQL*PLUS ................................................................................................................... 21
Fundamentos em: Linguagem SQL ...................................................................................................... 22
Dados Históricos ................................................................................................................................................ 22
O Oracle e o SQL ................................................................................................................................................ 22
Banco de Dados Relacional ................................................................................................................................ 22
A Abrangência da Linguagem ............................................................................................................................ 23
Linguagem de Manipulação dos Dados (Data Manipulation Language – DML) .......................................... 23
Linguagem de Definição 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 Sessão ........................................................................................................................................... 24
O SQL Buffer ....................................................................................................................................................... 24
Os Comandos do SQL*Plus ................................................................................................................................ 25
Digitando no SQL*Plus ...................................................................................................................................... 25
Comandos de Edição .......................................................................................................................................... 26
List .................................................................................................................................................................. 26
Append ........................................................................................................................................................... 27
Change ........................................................................................................................................................... 27
Del .................................................................................................................................................................. 28
Input .............................................................................................................................................................. 29
Edit ................................................................................................................................................................. 29
Comandos de Execução e de Encerramento ...................................................................................................... 31
Run ................................................................................................................................................................. 31
/ (Barra) .......................................................................................................................................................... 32
Exit / Quit ...................................................................................................................................................... 32
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
VII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Describe .......................................................................................................................................................... 33
Comandos Para Tratamento de Arquivos .......................................................................................................... 34
Save ................................................................................................................................................................ 34
Get .................................................................................................................................................................. 34
Start ................................................................................................................................................................ 35
Fundamentos em: Consulta à Base de Dados ..................................................................................... 37
Introdução .......................................................................................................................................................... 37
Forma Básica do Comando SELECT ................................................................................................................... 37
Restringindo a Consulta ..................................................................................................................................... 38
O Uso de All Versus Distinct ou Unique ............................................................................................................ 38
Operadores de Comparação ............................................................................................................................... 39
Usando And e Or ................................................................................................................................................ 39
Mudando a Precedência das Operações ............................................................................................................. 39
Operadores Aritméticos e de Concatenação ...................................................................................................... 40
Selecionando um Intervalo de Valores – Between ............................................................................................. 40
Selecionando uma Lista de Valores – In ............................................................................................................. 41
Pesquisando o Conteúdo de um Texto – Like .................................................................................................... 41
Pesquisando um Valor Desconhecido – Is Null ................................................................................................. 42
Consultando Dados de uma Tabela Particionada .............................................................................................. 42
Exercícios ............................................................................................................................................................ 43
Fundamentos em: Atualização da Base de Dados .............................................................................. 43
Incluindo Novas Linhas – Insert Básico ............................................................................................................. 44
Retornando Informações dos Dados Incluídos .................................................................................................. 46
Alterando Linhas Existentes – Update Básico .................................................................................................... 46
Retornando Informações dos Dados Alterados .................................................................................................. 48
Excluindo Linhas da Base de Dados – Delete Básico ......................................................................................... 48
Retornando Informações dos Dados Excluídos ................................................................................................. 49
Exercícios ............................................................................................................................................................ 49
Fundamentos em: Ordenação e Subconsulta ..................................................................................... 50
Usando Apelidos ................................................................................................................................................ 50
Obtendo os Resultados em uma Ordem Específica ........................................................................................... 51
Usando Subquery Para Restringir o Resultado ................................................................................................... 52
Exercícios ............................................................................................................................................................ 53
Fundamentos em: Grupamentos ......................................................................................................... 53
Funções de Grupo ou de Agregação ................................................................................................................... 54
Avg ................................................................................................................................................................. 55
Corr ................................................................................................................................................................ 55
Count ............................................................................................................................................................. 56
Covar_Pop ...................................................................................................................................................... 56
Covar_Samp ................................................................................................................................................... 56
Cume_Dist ..................................................................................................................................................... 57
Dense_Rank ................................................................................................................................................... 57
First ................................................................................................................................................................ 57
Group_Id ........................................................................................................................................................ 58
Grouping ........................................................................................................................................................ 58
Grouping_id ................................................................................................................................................... 58
Last ................................................................................................................................................................. 58
Max ................................................................................................................................................................ 58
Min ................................................................................................................................................................. 58
Percent_Rank ................................................................................................................................................. 58
Percentile_Cont ............................................................................................................................................. 59
Percentile_Disc ............................................................................................................................................... 60
Rank ............................................................................................................................................................... 60
VIII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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 Cláusula Having .............................................................................................................................................. 64
As Expressões Rollup e Cube .............................................................................................................................. 65
Rollup ............................................................................................................................................................. 65
Cube ............................................................................................................................................................... 66
Identificando as Linhas com as Funções Group ............................................................................................ 67
Exercícios ............................................................................................................................................................ 68
Fundamentos em: Modificação do Resultado com Funções ............................................................. 69
Introdução .......................................................................................................................................................... 69
Numéricas 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
Trigonométricas ................................................................................................................................................. 73
Acos ................................................................................................................................................................ 73
Asin ................................................................................................................................................................ 74
Atan ................................................................................................................................................................ 74
Atan2 .............................................................................................................................................................. 74
Cos ................................................................................................................................................................. 74
Cosh ............................................................................................................................................................... 74
Sin .................................................................................................................................................................. 75
Sinh ................................................................................................................................................................ 75
Tan ................................................................................................................................................................. 75
Tanh ............................................................................................................................................................... 75
Alfanuméricas ..................................................................................................................................................... 75
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
IX
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Chr ................................................................................................................................................................. 75
Concat ............................................................................................................................................................ 76
Initcap ............................................................................................................................................................ 76
Lower ............................................................................................................................................................. 77
Lpad ............................................................................................................................................................... 77
Ltrim .............................................................................................................................................................. 77
Nls_Initcap ..................................................................................................................................................... 77
Nls_Lower ...................................................................................................................................................... 77
Nls_Upper ...................................................................................................................................................... 78
Nlssort ............................................................................................................................................................ 78
Replace ........................................................................................................................................................... 78
Rpad ............................................................................................................................................................... 78
Rtrim .............................................................................................................................................................. 78
Soundex ......................................................................................................................................................... 79
Substr ............................................................................................................................................................. 79
Substrb, Substrc, Substr2, Substr4 .................................................................................................................. 79
Translate ......................................................................................................................................................... 79
Treat ............................................................................................................................................................... 79
Trim ................................................................................................................................................................ 79
Upper ............................................................................................................................................................. 80
Alfanuméricas que Retornam Valores Numéricos ............................................................................................. 80
Ascii ................................................................................................................................................................ 81
Instr ................................................................................................................................................................ 81
Instrb, Instrc, Instr2, Instr4 ........................................................................................................................... 81
Length ............................................................................................................................................................ 82
Lengthb, Lengthc, Length2, Length4 ............................................................................................................ 82
Datas ................................................................................................................................................................... 82
Sysdate ........................................................................................................................................................... 82
Add_Months .................................................................................................................................................. 82
Current_Date ................................................................................................................................................. 83
Sessiontimezone ............................................................................................................................................ 83
Current_Timestamp ....................................................................................................................................... 84
Dbtimezone ................................................................................................................................................... 84
Extract ............................................................................................................................................................ 84
From_Tz ......................................................................................................................................................... 84
LocalTimestamp ............................................................................................................................................. 84
Last_Day ......................................................................................................................................................... 85
Months_Between ........................................................................................................................................... 85
New_Time ...................................................................................................................................................... 85
Next_Day ....................................................................................................................................................... 86
Round ............................................................................................................................................................. 86
Sys_Extract_UTC ............................................................................................................................................ 86
SysTimestamp ................................................................................................................................................ 86
Trunc .............................................................................................................................................................. 87
Tz_Offset ........................................................................................................................................................ 87
Conversão ........................................................................................................................................................... 87
AsciiStr ........................................................................................................................................................... 89
Bin_To_Num .................................................................................................................................................. 89
Cast ................................................................................................................................................................ 89
CharToRowid ................................................................................................................................................. 89
Compose ........................................................................................................................................................ 89
Convert .......................................................................................................................................................... 89
Decompose .................................................................................................................................................... 90
HexToRaw ...................................................................................................................................................... 90
X
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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
Exercícios .......................................................................................................................................................... 104
Fundamentos em: Funções Analíticas ............................................................................................... 104
Introdução ........................................................................................................................................................ 105
Funções Somente Analíticas ............................................................................................................................. 105
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XI
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
First_Value .................................................................................................................................................... 107
Lag ................................................................................................................................................................ 107
Last_Value .................................................................................................................................................... 108
Lead .............................................................................................................................................................. 108
Ntile ............................................................................................................................................................. 109
Ratio_to_Report ........................................................................................................................................... 109
Row_Number ............................................................................................................................................... 110
Funções de Agregação com uso Analítico ........................................................................................................ 110
Exercícios .......................................................................................................................................................... 113
Fundamentos em: Revisão das Operações Relacionais .................................................................... 113
Introdução ........................................................................................................................................................ 113
Seleção ou Restrição ......................................................................................................................................... 113
Projeção ............................................................................................................................................................ 114
União ................................................................................................................................................................ 114
Interseção ......................................................................................................................................................... 116
Diferença .......................................................................................................................................................... 116
Produto Cartesiano .......................................................................................................................................... 117
Junção ou Join .................................................................................................................................................. 117
Divisão .............................................................................................................................................................. 119
Exercícios .......................................................................................................................................................... 120
Fundamentos em: Detalhamento do SQL*Plus ................................................................................ 120
Comandos de Formatação ............................................................................................................................... 120
Column ........................................................................................................................................................ 120
RepHeader / RepFooter ................................................................................................................................ 123
Ttitle / Btitle ................................................................................................................................................. 124
Break ............................................................................................................................................................ 125
Compute ...................................................................................................................................................... 127
Clear ............................................................................................................................................................. 128
Spool ............................................................................................................................................................ 129
Show ............................................................................................................................................................ 130
Comandos Para Controle de Variáveis de Usuário .......................................................................................... 131
Define ........................................................................................................................................................... 131
Undefine ...................................................................................................................................................... 131
Variable ........................................................................................................................................................ 132
Print ............................................................................................................................................................. 133
Comandos Para Comunicação com o Usuário ................................................................................................ 133
Accept .......................................................................................................................................................... 133
Prompt ......................................................................................................................................................... 133
Pause ............................................................................................................................................................ 134
Modificando Variáveis de Sistema ................................................................................................................... 134
Set ................................................................................................................................................................. 134
Store ............................................................................................................................................................. 139
Comandos Diversos ......................................................................................................................................... 139
Connect / Disconnect .................................................................................................................................. 139
Password, Execute, Host e Remark .............................................................................................................. 140
Copy ............................................................................................................................................................. 140
Timing .......................................................................................................................................................... 140
Whenever Oserror / Sqlerror ....................................................................................................................... 140
Attribute ....................................................................................................................................................... 141
Help .............................................................................................................................................................. 141
Acionando o SQL*Plus em Batch ..................................................................................................................... 141
O Menu do SQL*Plus ........................................................................................................................................ 143
Arquivo ........................................................................................................................................................ 143
XII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Editar ............................................................................................................................................................ 143
Procurar ........................................................................................................................................................ 143
Opções ......................................................................................................................................................... 143
Ajuda ............................................................................................................................................................ 143
Exercícios .......................................................................................................................................................... 143
Fundamentos em: Consultas Complexas .......................................................................................... 145
Outer Join ......................................................................................................................................................... 145
Exists ................................................................................................................................................................. 147
Hierarquia ......................................................................................................................................................... 147
Subselects Correlacionados .............................................................................................................................. 150
Views Relacionais ............................................................................................................................................. 151
Uso de Subquery na Cláusula From ................................................................................................................. 153
Em Selects .................................................................................................................................................... 153
Em Updates .................................................................................................................................................. 154
Em Inserts .................................................................................................................................................... 155
Em Deletes ................................................................................................................................................... 155
O Comando Merge ........................................................................................................................................... 155
Inclusão Simultânea em Diversas Tabelas ........................................................................................................ 156
Usos Incomuns do Comando Select ................................................................................................................ 157
Uso de Case no Select ....................................................................................................................................... 158
Exercícios .......................................................................................................................................................... 158
Fundamentos em: O Dicionário de Dados do Oracle ....................................................................... 159
Introdução ........................................................................................................................................................ 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
Exercícios .......................................................................................................................................................... 168
Fundamentos em: Uso da Data Control Language .......................................................................... 168
Comandos Para Controle da Transação ........................................................................................................... 169
Transaction .................................................................................................................................................. 169
Commit ........................................................................................................................................................ 169
Savepoint ..................................................................................................................................................... 172
Rollback ....................................................................................................................................................... 173
Read Consistency ......................................................................................................................................... 173
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XIII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
O Segmento de Rollback .............................................................................................................................. 175
Set Transaction Read Only ........................................................................................................................... 176
Select For Update ......................................................................................................................................... 177
DeadLocks .................................................................................................................................................... 179
Set Constraint .............................................................................................................................................. 179
Comandos Para Controle da Sessão ................................................................................................................. 181
Alter Session ................................................................................................................................................. 181
Set Role ......................................................................................................................................................... 183
Globalization Support ...................................................................................................................................... 184
Características da Globalization Support .................................................................................................... 184
Esquema de Codificação .............................................................................................................................. 185
Unicode ........................................................................................................................................................ 185
Os Characters Sets do Oracle ....................................................................................................................... 185
Definindo os Parâmetros da Globalization Support .................................................................................... 185
Alter Session ................................................................................................................................................. 186
Variáveis de Ambiente ................................................................................................................................. 193
Os Parâmetros NLS em Uso nas Funções SQL ............................................................................................. 195
Exercícios .......................................................................................................................................................... 195
Fundamentos em: Index Tables e Large Objects .............................................................................. 196
Index Tables ..................................................................................................................................................... 196
Rowid Lógico ............................................................................................................................................... 197
Comparação Entre Rowids Lógicos e Físicos ............................................................................................... 197
Comparando Index Table e Regular Table ................................................................................................... 197
Benefícios de uma Index-Organized Table .................................................................................................. 198
Large Objects .................................................................................................................................................... 198
Tipos de Lobs .................................................................................................................................................... 199
Locator .............................................................................................................................................................. 199
Lob Index ......................................................................................................................................................... 199
Comparação Entre Lob e Longs ....................................................................................................................... 200
Características das Colunas Long e Long Raw ............................................................................................ 200
Características das Colunas Lob .................................................................................................................. 200
Manipulação das Colunas Lob em SQL ........................................................................................................... 200
Inclusão ........................................................................................................................................................ 200
Alteração ...................................................................................................................................................... 201
Consultas ..................................................................................................................................................... 202
Exercícios .......................................................................................................................................................... 202
Fundamentos em: Administração do Banco de Dados .................................................................... 202
Introdução ........................................................................................................................................................ 202
Schema ............................................................................................................................................................. 203
Data Definition Language ................................................................................................................................ 203
Armazenamento ............................................................................................................................................... 204
Tablespace .................................................................................................................................................... 205
Bloco Oracle ................................................................................................................................................. 205
Segmentos .................................................................................................................................................... 206
Extensão ....................................................................................................................................................... 206
Create Table ...................................................................................................................................................... 206
Tipos de Dados ............................................................................................................................................. 207
Constraints .................................................................................................................................................. 209
Create Type ....................................................................................................................................................... 209
Create Index ..................................................................................................................................................... 210
Create Database Link ....................................................................................................................................... 210
Create Synonym ............................................................................................................................................... 210
Create Sequence ............................................................................................................................................... 211
XIV
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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 <privilégios de sistema> .................................................................................................................... 217
Revoke .............................................................................................................................................................. 218
Revoke Para os <objetos> ............................................................................................................................. 218
Revoke <privilégios de sistema> .................................................................................................................. 219
Exercícios .......................................................................................................................................................... 219
Resolução dos Exercícios Propostos ................................................................................................................. 220
CAPÍTULO 3 – PL/SQL ............................................................................................................................. 249
Fundamentos em: Linguagem de Programação .............................................................................. 250
Introdução ........................................................................................................................................................ 250
Estrutura ........................................................................................................................................................... 250
Modularidade ................................................................................................................................................... 250
Arquitetura ....................................................................................................................................................... 251
Vantagens da PL/SQL ....................................................................................................................................... 251
Suporte Para SQL ......................................................................................................................................... 251
Suporte Para Programação Orientada a Objeto ........................................................................................... 251
Performance ................................................................................................................................................. 251
Portabilidade ................................................................................................................................................ 251
Produtividade ............................................................................................................................................... 252
Integração com o Oracle .............................................................................................................................. 252
Fundamentos em: Características da Linguagem ............................................................................ 252
Identificadores .................................................................................................................................................. 252
Palavras Reservadas .......................................................................................................................................... 253
Literais .............................................................................................................................................................. 253
Número ........................................................................................................................................................ 254
Caracter ........................................................................................................................................................ 254
String ............................................................................................................................................................ 254
Boleano ........................................................................................................................................................ 254
Comentários ..................................................................................................................................................... 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XV
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Boolean ........................................................................................................................................................ 260
Date .............................................................................................................................................................. 260
Timestamp ................................................................................................................................................... 261
Timestamp With Time Zone ........................................................................................................................ 261
Timestamp With Local Time Zone .............................................................................................................. 261
Interval Day to Second ................................................................................................................................ 261
Interval Year to Month ................................................................................................................................ 261
Lobs .................................................................................................................................................................. 262
Blob .............................................................................................................................................................. 262
Clob .............................................................................................................................................................. 262
Nclob ............................................................................................................................................................ 262
Bfile .............................................................................................................................................................. 263
Compostos ....................................................................................................................................................... 263
Reference .......................................................................................................................................................... 263
Subtipos Definidos Pelo Usuário ...................................................................................................................... 263
Conversão Implícita ......................................................................................................................................... 264
Fundamentos em: Declarações .......................................................................................................... 265
Introdução ........................................................................................................................................................ 265
Variáveis e Constantes ..................................................................................................................................... 265
%Type ............................................................................................................................................................... 266
Escopo e Visibilidade ........................................................................................................................................ 266
Qualificação ...................................................................................................................................................... 267
Restrições .......................................................................................................................................................... 268
Fundamentos em: Comandos Básicos ............................................................................................... 269
Atribuição ......................................................................................................................................................... 269
IF ....................................................................................................................................................................... 270
Select Into ......................................................................................................................................................... 271
GoTo ................................................................................................................................................................. 272
Restrições ..................................................................................................................................................... 272
Null ................................................................................................................................................................... 273
Funções ............................................................................................................................................................. 274
Funções de SQL Válidas em PL/SQL ............................................................................................................ 274
Funções de SQL Inválidas em PL/SQL ......................................................................................................... 274
Sqlcode ......................................................................................................................................................... 274
SqlErrm ........................................................................................................................................................ 275
Case .................................................................................................................................................................. 275
Exercícios .......................................................................................................................................................... 277
Fundamentos em: Comandos Iterativos ........................................................................................... 279
Cursor ............................................................................................................................................................... 279
Declaração .................................................................................................................................................... 279
Abertura ....................................................................................................................................................... 280
Fetch ............................................................................................................................................................. 281
%Rowtype .................................................................................................................................................... 281
Fechamento ................................................................................................................................................. 282
Cursores Implícitos ...................................................................................................................................... 283
%Found ........................................................................................................................................................ 283
%NotFound .................................................................................................................................................. 283
%Isopen ....................................................................................................................................................... 284
%Rowcount .................................................................................................................................................. 284
Update Para Cursor ...................................................................................................................................... 285
Delete Para Cursor ....................................................................................................................................... 286
Loop ................................................................................................................................................................. 287
Exit ............................................................................................................................................................... 287
XVI
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
While ................................................................................................................................................................ 288
For Loop ........................................................................................................................................................... 289
Cursor Loop ...................................................................................................................................................... 290
Exercícios .......................................................................................................................................................... 291
Fundamentos em: Tratamento de Erro ............................................................................................. 292
Introdução ........................................................................................................................................................ 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
Propagação da Exceção .................................................................................................................................... 299
As Funções Sqlcode e SqlErrm .......................................................................................................................... 300
When Others .................................................................................................................................................... 300
Exceptions Adquiridas na Declaração ......................................................................................................... 301
Exercícios .......................................................................................................................................................... 301
Fundamentos em: Index-By Tables e Registros ................................................................................ 303
Introdução ........................................................................................................................................................ 303
Index-By Tables ................................................................................................................................................ 303
Declaração e Atribuição ............................................................................................................................... 304
Manipulando Index-By Tables ..................................................................................................................... 305
Métodos ............................................................................................................................................................ 305
Exists ............................................................................................................................................................ 306
Count ........................................................................................................................................................... 307
Limit ............................................................................................................................................................. 307
First e Last .................................................................................................................................................... 307
Prior e Next .................................................................................................................................................. 308
Extend .......................................................................................................................................................... 309
Trim .............................................................................................................................................................. 309
Delete ........................................................................................................................................................... 309
Exceptions Para Coleções ................................................................................................................................. 309
Criando Matrizes .............................................................................................................................................. 310
Registros ........................................................................................................................................................... 311
Declarações .................................................................................................................................................. 311
Referenciando Registros ............................................................................................................................... 312
Manipulando Registros ................................................................................................................................ 314
Exercícios .......................................................................................................................................................... 315
Fundamentos em: Bulk Binds ............................................................................................................ 316
Conceitos .......................................................................................................................................................... 316
O Comando ForAll ....................................................................................................................................... 317
A Cláusula Bulk Collect ............................................................................................................................... 318
O atributo %Bulk_RowCount ...................................................................................................................... 319
O atributo %Bulk_Exceptions ...................................................................................................................... 320
Os Demais Atributos .................................................................................................................................... 321
Características ou Restrições ........................................................................................................................ 321
Exercícios .......................................................................................................................................................... 322
Fundamentos em: Subprogramas ...................................................................................................... 322
Conceito ........................................................................................................................................................... 322
Características dos Subprogramas .................................................................................................................... 322
Parâmetros ........................................................................................................................................................ 324
Modos dos Parâmetros ................................................................................................................................. 324
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XVII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Passagem de Parâmetro por Referência ....................................................................................................... 326
Valor Default ................................................................................................................................................ 326
Notação Posicional e Nomeada Para Passagem dos Parâmetros ................................................................. 327
Declarações Forward ........................................................................................................................................ 328
Overloading ...................................................................................................................................................... 329
Stored Subprogram ........................................................................................................................................... 330
Uso de Funções em Comandos de SQL ....................................................................................................... 331
Verificando Erros de Compilação ................................................................................................................ 331
Privilégios em Rotinas Armazenadas ............................................................................................................... 331
Usando AuthId Current_User ...................................................................................................................... 332
Referências Externas .................................................................................................................................... 333
Cuidados Adicionais .................................................................................................................................... 333
Uso de Coleções e Registros como Parâmetros de Subprogramas ................................................................... 334
Usando Funções Para a Criação de Índices ................................................................................................. 335
Exercícios .......................................................................................................................................................... 336
Fundamentos em: Packages ............................................................................................................... 337
Conceito ........................................................................................................................................................... 338
Package Specification ....................................................................................................................................... 338
Package Body .................................................................................................................................................... 339
Restrições .......................................................................................................................................................... 339
Usando Packages .............................................................................................................................................. 340
Usando Pacotes Para Troca de Informações ................................................................................................ 341
Overloading ...................................................................................................................................................... 343
Uso de Funções de Pacotes em Comandos SQL ............................................................................................... 344
Nível de Pureza ............................................................................................................................................ 344
Nível de Pureza e Overloading .................................................................................................................... 345
Nível de Pureza e Comandos de SQL ........................................................................................................... 346
Restrições ..................................................................................................................................................... 347
O Argumento Trust ...................................................................................................................................... 347
Alguns Pacotes do Oracle ................................................................................................................................. 348
Package Standard ......................................................................................................................................... 349
Package Dbms_Standard .............................................................................................................................. 349
Package Dbms_Output ................................................................................................................................. 350
Package Dbms_Pipe ..................................................................................................................................... 350
Package Utl_File ........................................................................................................................................... 350
Package Dbms_Sql ....................................................................................................................................... 351
Package Dbms_Alert ..................................................................................................................................... 351
Package Dbms_Random ............................................................................................................................... 351
Package Dbms_FlashBack ............................................................................................................................ 351
Package Dbms_Lob ...................................................................................................................................... 351
Package Dbms_Rowid .................................................................................................................................. 351
Package Utl_Http ......................................................................................................................................... 351
Exercícios .......................................................................................................................................................... 351
Fundamentos em: O Package Dbms_Output .................................................................................... 352
Conceito ........................................................................................................................................................... 352
Enable ............................................................................................................................................................... 353
Disable .............................................................................................................................................................. 354
Put .................................................................................................................................................................... 354
New_Line .......................................................................................................................................................... 355
Put_Line ........................................................................................................................................................... 355
Get_Line ........................................................................................................................................................... 355
Get_Lines .......................................................................................................................................................... 356
Exemplo Usando o SQL*Plus ........................................................................................................................... 357
XVIII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Exemplo Usando Outro Programa ................................................................................................................... 358
Exercícios .......................................................................................................................................................... 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 Gravação ............................................................................................................................... 370
Exercícios .......................................................................................................................................................... 371
Fundamentos em: O Pacote Dbms_Pipe ............................................................................................ 371
Introdução ........................................................................................................................................................ 372
Pipes Públicos .............................................................................................................................................. 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
Exercícios .......................................................................................................................................................... 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XIX
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Rowid_Verify .................................................................................................................................................... 386
Exercícios .......................................................................................................................................................... 387
Fundamentos em: O pacote Dbms_Lob ............................................................................................. 387
Lobs .................................................................................................................................................................. 387
Tipos de Lobs ............................................................................................................................................... 388
Locator ......................................................................................................................................................... 388
Lob Index ..................................................................................................................................................... 388
Sobre o Pacote .................................................................................................................................................. 388
Componentes do Pacote .............................................................................................................................. 389
Append ............................................................................................................................................................. 391
Close ................................................................................................................................................................. 391
Compare ........................................................................................................................................................... 391
Copy ................................................................................................................................................................. 393
Características .............................................................................................................................................. 393
Comentários ................................................................................................................................................ 393
CreateTemporary .............................................................................................................................................. 394
Erase ................................................................................................................................................................. 394
Comentário .................................................................................................................................................. 395
FileClose ........................................................................................................................................................... 395
FileCloseAll ....................................................................................................................................................... 395
FileExists ........................................................................................................................................................... 395
FileGetName ..................................................................................................................................................... 396
FileIsOpen ........................................................................................................................................................ 397
FileOpen ........................................................................................................................................................... 397
FreeTemporary .................................................................................................................................................. 397
GetChunkSize ................................................................................................................................................... 397
GetLength ........................................................................................................................................................ 398
Instr .................................................................................................................................................................. 399
IsOpen .............................................................................................................................................................. 399
IsTemporary ...................................................................................................................................................... 399
LoadFromFile .................................................................................................................................................... 400
Observações ................................................................................................................................................. 400
Open ................................................................................................................................................................. 401
Read .................................................................................................................................................................. 402
Substr ................................................................................................................................................................ 402
Trim .................................................................................................................................................................. 403
Write ................................................................................................................................................................. 403
WriteAppend .................................................................................................................................................... 403
Restrições .......................................................................................................................................................... 404
Exercícios .......................................................................................................................................................... 404
Fundamentos em: O pacote Dbms_Random ..................................................................................... 406
Introdução ........................................................................................................................................................ 406
Exercícios .......................................................................................................................................................... 407
Fundamentos em: O pacote Dbms_FlashBack .................................................................................. 408
Sobre o Pacote .................................................................................................................................................. 408
Exercícios .......................................................................................................................................................... 412
Fundamentos em: PL/SQL Wrapper .................................................................................................. 412
Introdução ........................................................................................................................................................ 412
Características .................................................................................................................................................. 412
Vantagens ......................................................................................................................................................... 412
Gerando o Código Intermediário..................................................................................................................... 413
Restrições .......................................................................................................................................................... 413
Exercícios .......................................................................................................................................................... 414
XX
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Fundamentos em: External Procedures ............................................................................................ 415
Introdução ........................................................................................................................................................ 415
Criando a Interface .......................................................................................................................................... 415
Definindo a Biblioteca ................................................................................................................................. 415
Registrando Cada Rotina ............................................................................................................................. 416
Parâmetros ........................................................................................................................................................ 417
Características das Linguagens .................................................................................................................... 417
Lista de Compatibilidade C e PL/SQL ......................................................................................................... 418
A Cláusula 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 Parâmetros .................................................................................................................. 422
Passando Parâmetros por Referência ........................................................................................................... 422
Restrições Relativas a Parâmetros ................................................................................................................ 422
A Cláusula With Context ................................................................................................................................. 423
Usando Rotinas Externas ................................................................................................................................. 423
Como a PL/SQL Aciona uma Rotina Externa .................................................................................................. 424
Usando Rotinas de Serviço ............................................................................................................................... 424
OCIExtProcAllocCallMemory ...................................................................................................................... 424
OCIExtProcRaiseExcp .................................................................................................................................. 425
OCIExtProcRaiseExcpWithMsg ................................................................................................................... 425
Exercícios .......................................................................................................................................................... 425
Fundamentos em: Variáveis Cursor ................................................................................................... 425
Conceito ........................................................................................................................................................... 425
Vantagens ......................................................................................................................................................... 426
Definição .......................................................................................................................................................... 426
Manipulando Variáveis Cursor ........................................................................................................................ 426
Restrições Para Variáveis Cursor ....................................................................................................................... 429
Expressões Cursor ............................................................................................................................................. 430
Restrições Relativas a Expressões Cursor ..................................................................................................... 431
Exercícios .......................................................................................................................................................... 432
Fundamentos em: SQL Dinâmico em PL/SQL .................................................................................. 432
Conceito ........................................................................................................................................................... 433
Usando SQL Dinâmico ..................................................................................................................................... 433
O Comando Execute Immediate ................................................................................................................. 433
Os Comandos Open-For, Fetch e Close ....................................................................................................... 435
Passando um Argumento Null ..................................................................................................................... 437
Bulk Dinâmico ............................................................................................................................................. 438
Exercícios .......................................................................................................................................................... 440
Fundamentos em: Triggers ................................................................................................................. 440
Conceito ........................................................................................................................................................... 440
Evento .............................................................................................................................................................. 441
Os Eventos de DDL e Database .................................................................................................................... 441
Tipo .................................................................................................................................................................. 444
Comando ..................................................................................................................................................... 444
Linha ............................................................................................................................................................ 444
Ação .................................................................................................................................................................. 446
Predicados Condicionais ............................................................................................................................. 446
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXI
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Restrições .......................................................................................................................................................... 447
Tabelas Mutantes e Restritas ............................................................................................................................. 448
Compilando Triggers ........................................................................................................................................ 449
Alter Trigger ................................................................................................................................................. 450
Triggers com Eventos de DDL e Database ........................................................................................................ 450
Triggers e Stored Procedures ............................................................................................................................. 452
Transações Autônomas ..................................................................................................................................... 452
Transações Autônomas Versus Dependentes ............................................................................................... 453
Erros Possíveis .............................................................................................................................................. 455
Compilando PL/SQL Para Execução Nativa ..................................................................................................... 455
Exercícios .......................................................................................................................................................... 455
Fundamentos em: Controle da Transação ........................................................................................ 456
Introdução ........................................................................................................................................................ 456
Commit ............................................................................................................................................................ 456
Commit no Fim ........................................................................................................................................... 457
Commit Freqüente ....................................................................................................................................... 457
Rollback ............................................................................................................................................................ 457
Savepoint .......................................................................................................................................................... 458
Rollback Implícito ........................................................................................................................................ 459
Reiniciando uma Transação ............................................................................................................................. 459
Usando uma Tabela de Restart ..................................................................................................................... 459
Salvando por Intervalos ............................................................................................................................... 461
Conclusões ................................................................................................................................................... 462
Set Transaction ................................................................................................................................................. 462
Exercícios .......................................................................................................................................................... 463
Comentários Finais .......................................................................................................................................... 464
Resolução dos Exercícios Propostos ................................................................................................................. 464
CAPÍTULO 4 – OBJETOS E COLEÇÕES .............................................................................................................. 531
Fundamentos em: Objetos e Classes .................................................................................................. 532
Introdução ........................................................................................................................................................ 532
Objetos ............................................................................................................................................................. 532
Primeiras Conclusões ................................................................................................................................... 533
Ações ............................................................................................................................................................ 533
Formalizando os Conceitos ......................................................................................................................... 533
Conclusão .................................................................................................................................................... 533
Classes .............................................................................................................................................................. 533
Comparando com o Mundo Real ................................................................................................................ 534
Conclusão .................................................................................................................................................... 534
Criando Objetos no Banco de Dados ............................................................................................................... 534
Classe ........................................................................................................................................................... 534
Object Table ................................................................................................................................................. 535
Método Construtor ...................................................................................................................................... 535
Inclusão ........................................................................................................................................................ 535
Consulta ....................................................................................................................................................... 536
Alteração e Exclusão .................................................................................................................................... 536
Em PL/SQL ................................................................................................................................................... 537
Métodos ............................................................................................................................................................ 538
Member ........................................................................................................................................................ 539
Map Member ................................................................................................................................................ 540
Restrição ....................................................................................................................................................... 541
Order Member ............................................................................................................................................. 541
Exercícios .......................................................................................................................................................... 542
Fundamentos em: Restrições ............................................................................................................. 542
XXII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Um Tipo Várias Tabelas .................................................................................................................................... 543
Relacionamentos .............................................................................................................................................. 544
Ref ................................................................................................................................................................ 544
Dangling ...................................................................................................................................................... 546
Garantindo a Integridade Referencial ......................................................................................................... 546
Usando Referências em PL/SQL ....................................................................................................................... 549
Deref ............................................................................................................................................................. 550
Exercícios .......................................................................................................................................................... 551
Fundamentos em: Herança ................................................................................................................ 551
Introdução ........................................................................................................................................................ 551
Composição ...................................................................................................................................................... 552
Herança ............................................................................................................................................................ 554
Conceituando Herança ................................................................................................................................ 555
Final Para Tipo ............................................................................................................................................. 556
Instantiable Para Tipo .................................................................................................................................. 556
Final Para Método ........................................................................................................................................ 559
Overriding .................................................................................................................................................... 559
Instantiable Para Métodos ........................................................................................................................... 559
Static ............................................................................................................................................................ 560
Upcasting ......................................................................................................................................................... 560
Treat .................................................................................................................................................................. 560
Testando o Tipo de Objeto ............................................................................................................................... 561
Polimorfismo .................................................................................................................................................... 561
Exercícios .......................................................................................................................................................... 562
Fundamentos em: Funções e Views ................................................................................................... 562
Funções Relacionadas a Objetos ...................................................................................................................... 562
Deref ............................................................................................................................................................. 563
Ref ................................................................................................................................................................ 563
RefToHex ...................................................................................................................................................... 564
Value ............................................................................................................................................................ 564
Make_Ref ...................................................................................................................................................... 564
Object Views ..................................................................................................................................................... 565
Criando a Object View ................................................................................................................................. 566
Inclusão de Linhas Através da Object View ................................................................................................. 567
Exercícios .......................................................................................................................................................... 568
Fundamentos em: Coleções ................................................................................................................ 568
O que são Coleções? ......................................................................................................................................... 569
Como Implementar Coleções 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
Exercícios .......................................................................................................................................................... 577
Fundamentos em: Montagem da Base de Dados Objeto .................................................................. 578
Modelo Objeto ................................................................................................................................................. 578
Gerando a Base de Dados ................................................................................................................................. 579
Resolução dos Exercícios Propostos ................................................................................................................. 582
CAPÍTULO 5 – CONHECENDO O BANCO DE DADOS ............................................................................................ 599
Fundamentos em: Table Functions ................................................................................................... 600
Conceito ........................................................................................................................................................... 600
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXIII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Performance ................................................................................................................................................. 600
Passo a Passo ................................................................................................................................................ 600
Apenas Table Functions ................................................................................................................................... 600
Otimizando Diversas Chamadas a Table Functions .................................................................................... 601
Pipelined Table Functions ................................................................................................................................ 602
Pipelined Table Functions Usando REF CURSOR ............................................................................................ 603
Erros e Restrições ......................................................................................................................................... 603
Obtendo Resultados de Table Functions ..................................................................................................... 604
Usando Mais de um Parâmetro REF CURSOR ............................................................................................. 604
Execução em Paralelo de Table Functions ....................................................................................................... 604
Data Streaming ................................................................................................................................................. 606
Manuseando Table Functions .......................................................................................................................... 607
Executando Operações de DML Dentro de Table Functions ....................................................................... 607
Executando Operações de DML Sobre Table Functions .............................................................................. 607
Controlando Exceptions em Table Functions ............................................................................................. 607
Opções de Implementação Para Pipelined Table Functions ............................................................................ 607
Implementação por Interface ...................................................................................................................... 608
Tipos Transientes e Genéricos .......................................................................................................................... 608
Exercícios .......................................................................................................................................................... 608
Fundamentos em: Criando Suas Próprias Funções de Agregação .................................................. 609
Objetivo ............................................................................................................................................................ 609
Forma ............................................................................................................................................................... 609
Parâmetros ........................................................................................................................................................ 609
Função .............................................................................................................................................................. 610
Restrição ....................................................................................................................................................... 610
Função Analítica .......................................................................................................................................... 610
Criando uma Função de Agregação do Usuário ............................................................................................... 610
Criando o Tipo de Objeto ............................................................................................................................ 610
Criando o Corpo do Tipo ............................................................................................................................ 611
Criando a Função de Agregação .................................................................................................................. 611
Usando a Função de Agregação Criada ....................................................................................................... 612
Cuidado na Preparação da Função .............................................................................................................. 612
Exercícios .......................................................................................................................................................... 612
Fundamentos em: Tabelas Temporárias ........................................................................................... 612
Conceito ........................................................................................................................................................... 612
Características .................................................................................................................................................. 613
Exercícios .......................................................................................................................................................... 614
Fundamentos em: Performance do SQL ........................................................................................... 615
Introdução ........................................................................................................................................................ 615
Conceito ........................................................................................................................................................... 615
Executando um Comando de SQL ................................................................................................................... 616
Parse ............................................................................................................................................................. 616
Execute ......................................................................................................................................................... 616
Fetch ............................................................................................................................................................. 617
Otimização ....................................................................................................................................................... 617
Plano de Execução ....................................................................................................................................... 617
O Otimizador ............................................................................................................................................... 617
Passos da Análise do Otimizador ..................................................................................................................... 617
Resolução de Expressões e Condições ......................................................................................................... 617
Transformação de Comandos ...................................................................................................................... 618
Os Métodos de Otimização .............................................................................................................................. 618
Rule .............................................................................................................................................................. 618
Cost .............................................................................................................................................................. 619
XXIV
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Influenciando a Escolha do Otimizador ...................................................................................................... 619
Visualizando o Caminho de Acesso Escolhido ................................................................................................ 620
Explain Plan ................................................................................................................................................. 620
Lendo o Resultado de um Plano de Execução ............................................................................................. 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 Especificação de Hints ............................................................................................................. 627
Exercícios .......................................................................................................................................................... 628
Fundamentos em: Views Materializadas .......................................................................................... 629
Conceitos Gerais .............................................................................................................................................. 629
A Atualização das Views Materializadas ...................................................................................................... 630
Exemplos .......................................................................................................................................................... 630
Query Rewrite, uma Análise ............................................................................................................................. 631
Métodos ....................................................................................................................................................... 632
Níveis de Integridade ................................................................................................................................... 632
Exercícios .......................................................................................................................................................... 633
Fundamentos em: Particionamento de Tabelas ............................................................................... 633
Uma Visão Geral .............................................................................................................................................. 633
Métodos de Particionamento ........................................................................................................................... 633
Range ........................................................................................................................................................... 633
Hash ............................................................................................................................................................. 634
Composite .................................................................................................................................................... 634
Características e Restrições .......................................................................................................................... 634
Usando Tabelas Particionadas .......................................................................................................................... 634
Movimentação de Linhas ................................................................................................................................. 635
Particionamento de Índices ............................................................................................................................. 636
Índices Globais ............................................................................................................................................. 636
Índices Locais ............................................................................................................................................... 636
Exercícios .......................................................................................................................................................... 637
Resolução dos Exercícios Propostos ................................................................................................................. 637
CAPÍTULO 6 – INSTALANDO O ORACLE DEVELOPER 6I NO WINDOWS ................................................................... 655
Considerações Iniciais ...................................................................................................................................... 656
Fundamentos em: Instalação do Produto ........................................................................................ 656
Iniciando a instalação 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 Instalação do Reports6i ................................................................................................................. 661
Configurando o TnsNames.Ora ....................................................................................................................... 662
PARTE 2 – DEVELOPER ............................................................................................................................... 665
CAPÍTULO 7 – O FORM BUILDER R6I ............................................................................................................ 667
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXV
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Developer com: Forms Developer R6i ............................................................................................... 668
Sobre o Pacote .................................................................................................................................................. 668
Sobre a Ferramenta ........................................................................................................................................... 669
Sobre o Estudo .................................................................................................................................................. 669
Developer com: A Ferramenta Form Builder ................................................................................... 669
Introdução ........................................................................................................................................................ 670
Ativando o Form Builder ............................................................................................................................. 670
O Navegador de Objetos (Object Navigator) ................................................................................................... 670
Expandir ou Recolher .................................................................................................................................. 671
Criar ou Deletar ........................................................................................................................................... 672
Copiar, Recortar e Colar ............................................................................................................................... 672
Executar e Depurar ...................................................................................................................................... 673
Novo, Abrir e Salvar ..................................................................................................................................... 673
Localizar ....................................................................................................................................................... 674
Navegando na Hierarquia ............................................................................................................................ 674
Painéis do Navegador .................................................................................................................................. 675
Alterando o Nome de um Elemento ............................................................................................................ 675
O Menu do Form Builder ............................................................................................................................. 676
Criando uma Aplicação .................................................................................................................................... 676
Bloco de Dados ............................................................................................................................................ 676
Criando uma Aplicação Para a Tabela Func ................................................................................................ 676
Executando a Aplicação Criada ........................................................................................................................ 682
Incluindo um Novo Funcionário ................................................................................................................ 683
Consultando Funcionários .......................................................................................................................... 683
Alterando Funcionários ............................................................................................................................... 684
Excluindo Funcionários ............................................................................................................................... 685
Bloqueando Funcionários ............................................................................................................................ 685
Navegação .................................................................................................................................................... 685
Menu Ajuda ................................................................................................................................................. 685
Salva Implícita ............................................................................................................................................. 686
Conclusões ................................................................................................................................................... 687
Exercícios .......................................................................................................................................................... 687
Developer com: Blocos ........................................................................................................................ 689
Analisando ....................................................................................................................................................... 689
Propriedades ..................................................................................................................................................... 689
A Área de Buffer ................................................................................................................................................ 690
Hierarquia Funcional ................................................................................................................................... 691
Controlando a Situação do Registro ................................................................................................................ 691
Tipos de Blocos ................................................................................................................................................. 691
Revisando a Situação do Registro ................................................................................................................ 692
Ações que Causam a Mensagem .................................................................................................................. 692
Navegação ........................................................................................................................................................ 693
Definindo a Seqüência de Navegação ......................................................................................................... 693
Definindo o Estilo de Navegação ................................................................................................................. 694
Modificando as Características dos Registros .................................................................................................. 694
Ligando o Bloco ao Database ........................................................................................................................... 695
Criando um Bloco a Partir de um Procedimento ............................................................................................ 696
O Pacote Pfunc ............................................................................................................................................. 696
Definindo um Bloco de Dados do Tipo Procedimento ............................................................................... 698
Comentários Relativos a Procedimentos ..................................................................................................... 702
Restrições Relativas aos Tipos de Blocos ...................................................................................................... 702
Exercícios .......................................................................................................................................................... 703
Developer com: Interface Visual ....................................................................................................... 704
XXVI
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Hierarquia Visual .............................................................................................................................................. 704
Itens .................................................................................................................................................................. 705
Propriedades Comuns .................................................................................................................................. 706
Item de Texto (Text Item) ............................................................................................................................ 709
Item da Lista (List Item) ............................................................................................................................... 710
Item de Exibição (Display Item) .................................................................................................................. 711
Grupo de Opções (Radio Group) ................................................................................................................. 711
Botão de Opção (Radio Button) ................................................................................................................... 711
Imagem (Image) ........................................................................................................................................... 711
Tecla (Push Button) ...................................................................................................................................... 712
Caixa de Seleção (Check Box) ...................................................................................................................... 713
Definindo Prompts ...................................................................................................................................... 713
Exercícios .......................................................................................................................................................... 715
Developer com: Canvas e Windows ................................................................................................... 717
Introdução ........................................................................................................................................................ 717
Janelas (Windows) ............................................................................................................................................ 718
Canvas .............................................................................................................................................................. 720
Canvas de Conteúdo (Content) .................................................................................................................. 721
Canvas Barra de Ferramentas (Toolbar) ....................................................................................................... 722
Canvas Empilhado (Stack) ........................................................................................................................... 722
Canvas Tab (Tab) .......................................................................................................................................... 723
Exercícios .......................................................................................................................................................... 723
Developer com: O Editor de Layout .................................................................................................. 725
Introdução ........................................................................................................................................................ 725
Quadro (Frame) ................................................................................................................................................ 725
A Janela do Editor de Layout ........................................................................................................................... 728
Workspace .................................................................................................................................................... 728
Barra de Título (Title bar) ............................................................................................................................. 728
Réguas (Rulers) ............................................................................................................................................. 728
Guias ............................................................................................................................................................ 728
Grid .............................................................................................................................................................. 728
Linha Indicativa de Situação (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 Conteúdo ................. 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 Gráfico ....................................................................................................................................... 737
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXVII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Ações Comuns aos Objetos de Layout ............................................................................................................. 737
Atribuindo Fonte ......................................................................................................................................... 737
Modificando a Linha ................................................................................................................................... 738
Alinhamento e Espacejamento .................................................................................................................... 738
Seleção de um ou Vários Objetos ................................................................................................................ 739
Operações ..................................................................................................................................................... 739
Exercícios .......................................................................................................................................................... 739
Developer com: Eventos e Gatilhos (Triggers) ................................................................................. 741
Conceituando Eventos ..................................................................................................................................... 741
Conceituando Gatilhos (Triggers) ............................................................................................................... 741
Escopo de um Gatilho (Trigger) ....................................................................................................................... 742
Item .............................................................................................................................................................. 742
Bloco ............................................................................................................................................................ 742
Módulo ......................................................................................................................................................... 742
Ordem de Execução ..................................................................................................................................... 742
Restrições ..................................................................................................................................................... 742
Criando Gatilhos (Triggers) .............................................................................................................................. 743
O Editor de PL/SQL .......................................................................................................................................... 743
Indentação Automática ............................................................................................................................... 744
Indentação Manual ...................................................................................................................................... 744
Cores ............................................................................................................................................................ 744
Seleção .......................................................................................................................................................... 745
Cópia e Movimentação de Textos ............................................................................................................... 745
Split da Área de Edição ................................................................................................................................ 745
Impressão, Exportação e Importação........................................................................................................... 745
Opção Desfazer ............................................................................................................................................ 746
Classificação dos Gatilhos (Triggers) ................................................................................................................ 746
Classificação por Nome ............................................................................................................................... 746
Classificação por Categoria Funcional ........................................................................................................ 746
Rotinas Predefinidas .................................................................................................................................... 747
Gatilhos Para Validação ............................................................................................................................... 747
Gatilhos Para Processamento do Bloco ....................................................................................................... 749
Gatilhos Associados à Interface ................................................................................................................... 750
Gatilhos Associados a uma Consulta ........................................................................................................... 756
Gatilhos Associados à Navegação ................................................................................................................ 756
Gatilhos Associados ao Controle de Mensagens ......................................................................................... 758
Gatilhos Associados ao Relacionamento Entre Blocos (Master-Detail) ....................................................... 759
Gatilhos Associados à Interface com o Banco de Dados ............................................................................. 759
Propriedades dos Gatilhos (Triggers) ................................................................................................................ 761
Falha nos Gatilhos ........................................................................................................................................... 762
Paleta de Sintaxe .............................................................................................................................................. 762
Exercícios .......................................................................................................................................................... 763
Developer com: Relacionamento Master-Detail .............................................................................. 765
Conceito ........................................................................................................................................................... 765
O Objeto Relação (Relation) ............................................................................................................................. 765
Métodos de Relacionamento ....................................................................................................................... 765
Conseqüências do Relacionamento ............................................................................................................. 766
Propriedades da Relação ................................................................................................................................... 767
Os Gatilhos (Triggers) de uma Relação ............................................................................................................ 768
Gatilhos Associados ao Relacionamento Entre Blocos (Master-Detail) ....................................................... 768
Exercícios .......................................................................................................................................................... 769
Developer com: Variáveis e Rotinas .................................................................................................. 771
Introdução ................................................................................................................................................... 771
XXVIII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Rotinas .............................................................................................................................................................. 772
Rotinas Locais .............................................................................................................................................. 772
Rotinas Armazenadas no Banco de Dados .................................................................................................. 773
O Assistente Para a Criação de Tipos (Type Wizard) ................................................................................... 774
Rotinas Armazenadas em Bibliotecas (Libraries) ......................................................................................... 776
Empacotamento da Lógica .......................................................................................................................... 776
Variáveis ........................................................................................................................................................... 777
Variáveis Locais ............................................................................................................................................ 777
Itens Fora de Canvas .................................................................................................................................... 778
Variáveis de Pacote no Form ........................................................................................................................ 778
Parâmetros ................................................................................................................................................... 779
Variáveis Globais .......................................................................................................................................... 780
Comparando as Variáveis ............................................................................................................................ 780
Variáveis de Sistema ..................................................................................................................................... 781
Database Triggers .............................................................................................................................................. 782
Exercícios .......................................................................................................................................................... 783
Developer com: Alertas, Atributos Visuais e Editores ..................................................................... 784
Alertas (Alerts) .................................................................................................................................................. 784
Atributos Visuais (Visual Attributes) ................................................................................................................ 786
Editor ................................................................................................................................................................ 787
Exercícios .......................................................................................................................................................... 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 Apresentação da Lov ........................................................................................................... 796
Recomendações 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
Exercícios .......................................................................................................................................................... 800
Developer com: A Depuração do PL/SQL .......................................................................................... 801
Descrição .......................................................................................................................................................... 801
A Janela de Depuração ..................................................................................................................................... 802
Marcando um Ponto de Interrupção ............................................................................................................... 803
BreakPoint .................................................................................................................................................... 803
Trigger .......................................................................................................................................................... 804
Acompanhando uma Depuração ..................................................................................................................... 805
Depurando com um Ponto de Interrupção ................................................................................................. 805
Depurando com um Trigger ........................................................................................................................ 806
Criando uma Interrupção Estática ................................................................................................................... 806
Exercícios .......................................................................................................................................................... 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXIX
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
OCX (ActiveX Control) ............................................................................................................................... 813
Pacotes Embutidos ........................................................................................................................................... 815
Ftree ............................................................................................................................................................. 816
Standard Extensions .................................................................................................................................... 818
DDE .............................................................................................................................................................. 818
Debug ........................................................................................................................................................... 818
OLE2 ............................................................................................................................................................ 818
Ora_Ffi .......................................................................................................................................................... 818
Ora_Nls ........................................................................................................................................................ 819
Ora_Prof ....................................................................................................................................................... 819
Text_IO ......................................................................................................................................................... 820
Tool_Env ...................................................................................................................................................... 820
Tool_Err ........................................................................................................................................................ 821
Tool_Res ....................................................................................................................................................... 821
Pecs .............................................................................................................................................................. 821
VBX .............................................................................................................................................................. 821
Web .............................................................................................................................................................. 822
Forms_Ole .................................................................................................................................................... 822
Standard ....................................................................................................................................................... 822
Exercícios .......................................................................................................................................................... 822
Developer com: Características Gerais ............................................................................................. 823
Estudando o Módulo ........................................................................................................................................ 823
Preferências ...................................................................................................................................................... 825
Pasta Geral ................................................................................................................................................... 825
Pasta Acesso ................................................................................................................................................. 827
Pasta Assistentes ........................................................................................................................................... 827
Pasta Runtime .............................................................................................................................................. 828
Opções de Execução ..................................................................................................................................... 829
Forms Runtime Diagnostics ............................................................................................................................. 831
Sintaxe de Gravação das Informações ......................................................................................................... 831
Construção de um Exemplo ........................................................................................................................ 832
Resultado Gerado ......................................................................................................................................... 832
Exercícios .......................................................................................................................................................... 833
Developer em: Reutilização de Código e Padronização .................................................................. 834
Descrição .......................................................................................................................................................... 834
Template ........................................................................................................................................................... 834
Classe de Propriedades ..................................................................................................................................... 834
Usando o Botão Incluir Propriedade (Add Property) .................................................................................. 835
Usando o Botão Classe de Propriedade (Property Class) ............................................................................. 835
Os Botões Copiar (Copy Properties) e Colar Propriedades (Paste Properties) ............................................. 835
O Botão Deletar Propriedade (Delete Property) ........................................................................................... 835
O Botão Interseção/União (Intersection/Union) ......................................................................................... 836
O Botão Congelar/Descongelar (Freeze/Unfreeze) ...................................................................................... 836
Gatilho em uma Classe de Propriedades ..................................................................................................... 836
Atribuindo a Classe de Propriedades a um Botão ........................................................................................ 836
O Botão Herdar ............................................................................................................................................ 837
Biblioteca de Objetos ....................................................................................................................................... 838
Criando a Biblioteca de Objetos .................................................................................................................. 838
Usando Objetos da Biblioteca ...................................................................................................................... 838
Modificando os Objetos de uma Biblioteca de Objetos .............................................................................. 838
SmartClass .................................................................................................................................................... 839
Copiando Dados de Outra Aplicação ............................................................................................................... 840
Referência ..................................................................................................................................................... 840
XXX
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Cópia ............................................................................................................................................................ 840
Grupo de Objetos (Object Group) ................................................................................................................... 840
Conclusões ....................................................................................................................................................... 840
Exercícios .......................................................................................................................................................... 841
Developer com: O Módulo Library .................................................................................................... 842
Conceituação .................................................................................................................................................... 842
Criando uma Biblioteca (Library) .................................................................................................................... 842
Associando uma Biblioteca a uma Aplicação ................................................................................................... 843
Uso de Variáveis em Bibliotecas ....................................................................................................................... 844
Considerações Sobre Armazenamento ............................................................................................................. 844
Exercícios .......................................................................................................................................................... 845
Developer com: O Módulo Menu ....................................................................................................... 845
Descrição .......................................................................................................................................................... 845
Objetos de um Módulo Menu .......................................................................................................................... 846
Criando Itens de Menu via Navegador ............................................................................................................ 846
Propriedades dos Itens de Menu ...................................................................................................................... 847
Criando Itens de Menu via Editor .................................................................................................................... 848
Associando um Módulo de Menu a um Form ................................................................................................. 850
Demais Propriedades Relativas a Menu ....................................................................................................... 850
Call_Form X New_Form .............................................................................................................................. 851
Características Particulares de Alguns Itens de Menu ...................................................................................... 852
Check Menu Items ....................................................................................................................................... 852
Radio Menu Items ........................................................................................................................................ 852
Restrição ....................................................................................................................................................... 852
Propriedades de um Menu ............................................................................................................................... 852
Propriedades do Módulo Menu ....................................................................................................................... 852
Parâmetros Para Menu ..................................................................................................................................... 853
Parâmetros Predefinidos .............................................................................................................................. 853
Parâmetros do Usuário ................................................................................................................................. 853
Exercícios .......................................................................................................................................................... 854
Relatórios (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
Restrições ..................................................................................................................................................... 857
Suporte a Objetos do Banco de Dados ............................................................................................................. 857
Performance ..................................................................................................................................................... 859
Suporte ao PL/SQL ............................................................................................................................................ 859
Exercícios .......................................................................................................................................................... 860
Resolução dos Exercícios Propostos ................................................................................................................. 860
CAPÍTULO 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXI
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Executar, Imprimir e Mensagem .................................................................................................................. 953
Abrir e Salvar ................................................................................................................................................ 954
Localizar ....................................................................................................................................................... 954
Navegando na Hierarquia ............................................................................................................................ 954
Painéis do Navegador .................................................................................................................................. 955
Alterando o Nome de um Elemento ............................................................................................................ 955
O Menu do Report Builder .......................................................................................................................... 956
Criando uma Aplicação .................................................................................................................................... 956
Estabelecendo Conexão com o Banco de Dados ......................................................................................... 956
Estilo do Relatório ........................................................................................................................................ 956
Query Builder – Tabelas ............................................................................................................................... 957
Query Builder – Diálogo Principal ............................................................................................................... 958
Query Builder – Colunas .............................................................................................................................. 958
Query Builder – SQL .................................................................................................................................... 959
Query Builder – Definindo uma Coluna ..................................................................................................... 960
Query Builder – Ordenando o Resultado ..................................................................................................... 960
Query Builder – Alias ................................................................................................................................... 961
Query Builder – Incluindo uma Restrição ................................................................................................... 961
Campos (Fields) ........................................................................................................................................... 962
Totais (Totals) ............................................................................................................................................... 962
Etiquetas (Labels) ......................................................................................................................................... 962
Gabarito (Template) ..................................................................................................................................... 963
Exercícios .......................................................................................................................................................... 963
Developer com: O Modelo de Dados .................................................................................................. 965
Componentes de um Relatório ........................................................................................................................ 965
O Editor do Modelo de Dados .......................................................................................................................... 965
A Paleta de Ferramentas ............................................................................................................................... 965
A Barra de Ferramentas ................................................................................................................................ 966
A Barra de Status .......................................................................................................................................... 966
Criando uma Consulta ..................................................................................................................................... 967
Consulta (Query) ......................................................................................................................................... 967
Grupo (Group) ............................................................................................................................................. 968
Colunas do Banco de Dados ........................................................................................................................ 968
Criando um Layout ..................................................................................................................................... 969
Criando um Grupo de Quebra ......................................................................................................................... 969
Relacionando Dados ........................................................................................................................................ 971
Variável Cursor ................................................................................................................................................. 973
Integração com Outras Ferramentas de Suporte a Decisão .............................................................................. 974
Ordenação por Dimensão ............................................................................................................................ 975
Exercícios .......................................................................................................................................................... 975
Developer com: Sumários e Fórmulas ............................................................................................... 976
Sumários ........................................................................................................................................................... 976
Determinando a Freqüência de Impressão .................................................................................................. 976
Determinando a Função do Sumário .......................................................................................................... 978
Determinando a Coluna-Origem do Sumário ............................................................................................. 979
Quando Zerar o Sumário ............................................................................................................................. 979
Determinando o Grupo de Totalização ....................................................................................................... 980
Fórmulas ........................................................................................................................................................... 980
Determinando a Freqüência de Impressão .................................................................................................. 981
Determinando o Tipo de Retorno ............................................................................................................... 981
Determinando a Função da Fórmula ........................................................................................................... 981
Exercícios .......................................................................................................................................................... 983
Developer com: Parâmetros ............................................................................................................... 985
XXXII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Conceituação .................................................................................................................................................... 985
Parâmetros 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
Parâmetros de Usuário ..................................................................................................................................... 988
Bind Reference ............................................................................................................................................. 988
Lista de Valores ............................................................................................................................................ 989
Lexical Reference ......................................................................................................................................... 991
Criando uma Tela de Parâmetros ..................................................................................................................... 992
Usando um Criador Automático ................................................................................................................. 992
Exercícios .......................................................................................................................................................... 993
Developer com: Os Primeiros Objetos do Layout ............................................................................. 994
Introdução ........................................................................................................................................................ 995
Quadros de Repetição (Repeating Frames) ....................................................................................................... 995
Campos (Fields) ................................................................................................................................................ 998
Boilerplates ....................................................................................................................................................... 999
Camadas de Impressão ................................................................................................................................... 1001
Freqüência de Impressão ................................................................................................................................ 1002
Elasticidade ..................................................................................................................................................... 1004
Exercícios ........................................................................................................................................................ 1007
Developer com: O Editor do Layout Model .................................................................................... 1008
A Janela do Editor de Layout ......................................................................................................................... 1008
Workspace .................................................................................................................................................. 1008
Barra de Título (Title bar) ........................................................................................................................... 1008
Réguas (Rulers) ........................................................................................................................................... 1008
Guias .......................................................................................................................................................... 1008
Grid ............................................................................................................................................................ 1009
Linha Indicativa de Situação (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 Gráfico ..................................................................................................................................... 1015
Ações Comuns aos Objetos de Layout ........................................................................................................... 1015
Atribuindo Fonte ....................................................................................................................................... 1016
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXIII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Modificando a Linha ................................................................................................................................. 1016
Alinhamento e Espacejamento .................................................................................................................. 1016
Seleção de um ou Vários Objetos .............................................................................................................. 1016
Operações ................................................................................................................................................... 1016
Grupando Objetos ..................................................................................................................................... 1017
Navegando Pelas Diversas Partes de um Relatório ......................................................................................... 1017
Incluindo Elementos na Margem .................................................................................................................. 1019
Inserir Data e Hora ..................................................................................................................................... 1019
Inserir Numeração ..................................................................................................................................... 1020
Importando Arquivos Para o Layout .............................................................................................................. 1020
Adicionando um Boilerplate por um Arquivo de Ligação (Linked File) ................................................... 1021
Exercícios ........................................................................................................................................................ 1021
Developer com: PL/SQL no Relatório ............................................................................................. 1022
Conceitos Iniciais ........................................................................................................................................... 1022
PL/SQL Intrínseca ........................................................................................................................................... 1022
Filtros de Grupo (Group Filters) ................................................................................................................ 1023
Gatilhos de Validação (Validation Triggers) .............................................................................................. 1023
Fórmula (Formula) ..................................................................................................................................... 1024
Gatilhos de Formato (Format Trigger) ....................................................................................................... 1024
PL/SQL Interna ............................................................................................................................................... 1025
PL/SQL Externa .............................................................................................................................................. 1027
Rotinas Armazenadas no Banco de Dados ................................................................................................ 1027
O Assistente Para a Criação de Tipos (Type Wizard) ................................................................................. 1028
Rotinas Armazenadas em Bibliotecas (Libraries) ....................................................................................... 1030
Gatilhos de Relatório (Report Triggers) .......................................................................................................... 1030
Empacotamento da Lógica ............................................................................................................................. 1031
Database Triggers ............................................................................................................................................ 1031
O Editor de PL/SQL ........................................................................................................................................ 1032
Indentação Automática ............................................................................................................................. 1032
Indentação Manual .................................................................................................................................... 1032
Cores .......................................................................................................................................................... 1032
Seleção ........................................................................................................................................................ 1032
Cópia e Movimentação de Textos ............................................................................................................. 1033
Split da Área de Edição .............................................................................................................................. 1033
Impressão, Exportação e Importação......................................................................................................... 1033
Opção Desfazer .......................................................................................................................................... 1033
Exercícios ........................................................................................................................................................ 1033
Developer com: Mais Objetos do Layout ......................................................................................... 1034
Introdução ...................................................................................................................................................... 1034
Visualizando as Informações de Ancoragem ............................................................................................. 1035
Âncoras (Anchors) .......................................................................................................................................... 1036
Quadros (Frames) ........................................................................................................................................... 1039
Botões (Buttons) ............................................................................................................................................. 1041
Exercícios ........................................................................................................................................................ 1042
Developer com: Pacotes Embutidos ................................................................................................ 1043
O Nó Pacotes Embutidos ................................................................................................................................ 1043
Srw .................................................................................................................................................................. 1043
OLE2 ............................................................................................................................................................... 1043
DDE ................................................................................................................................................................ 1043
Ora_Ffi ............................................................................................................................................................ 1044
Ora_De ............................................................................................................................................................ 1044
Ora_Prof ......................................................................................................................................................... 1044
Ora_Nls ........................................................................................................................................................... 1045
XXXIV
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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: Variáveis no Report Builder ................................................................................. 1048
Introdução ...................................................................................................................................................... 1048
Variáveis Locais .............................................................................................................................................. 1048
Coluna de Espaço Reservado (PlaceHolder) ................................................................................................... 1049
Variáveis de Pacote ......................................................................................................................................... 1050
Parâmetros ...................................................................................................................................................... 1051
Exercícios ........................................................................................................................................................ 1051
Developer com: Formatação Dinâmica ........................................................................................... 1052
Conceitos Iniciais ........................................................................................................................................... 1052
Formatação Condicional ................................................................................................................................ 1052
Rotinas ............................................................................................................................................................ 1054
Valores ............................................................................................................................................................ 1054
Exercícios ........................................................................................................................................................ 1055
Developer com: Características Gerais ........................................................................................... 1055
Preferências .................................................................................................................................................... 1056
Pasta Geral ................................................................................................................................................. 1056
Pasta Acessar .............................................................................................................................................. 1057
Pasta Assistentes ......................................................................................................................................... 1057
Pasta Valores de Runtime ........................................................................................................................... 1058
Pasta Definições de Runtime ..................................................................................................................... 1058
Estudando o Módulo ...................................................................................................................................... 1059
Relatório (Report) ....................................................................................................................................... 1059
Janela de Form de Parâmetros (Parameter Form Window) ....................................................................... 1059
Escapes de Relatório (Report Escapes) ....................................................................................................... 1060
Definições XML (XML Definitions) ........................................................................................................... 1061
Modo Caracter (Character Mode) .............................................................................................................. 1061
Exercícios ........................................................................................................................................................ 1062
Developer com: Relatórios Matriciais ............................................................................................. 1062
Conceitos ........................................................................................................................................................ 1063
Simple Matrix com uma Query ...................................................................................................................... 1063
Simple Matrix com Três Queries .................................................................................................................... 1066
Conclusão .................................................................................................................................................. 1067
Simple Matrix com Sumário .......................................................................................................................... 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
Exercícios ........................................................................................................................................................ 1071
Developer com: O Módulo Library .................................................................................................. 1071
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXV
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Introdução ...................................................................................................................................................... 1072
Criando uma Biblioteca (Library) .................................................................................................................. 1072
Associando uma Biblioteca a uma Aplicação ................................................................................................. 1073
Considerações Sobre Armazenamento ........................................................................................................... 1073
Exercícios ........................................................................................................................................................ 1074
Developer com: Gabaritos (Templates) ........................................................................................... 1074
Descrição ........................................................................................................................................................ 1074
A Estrutura de um Gabarito ........................................................................................................................... 1074
Modelo de Dados ....................................................................................................................................... 1075
PL/SQL no Gabarito ................................................................................................................................... 1075
Layout ........................................................................................................................................................ 1075
As Seções do Corpo ........................................................................................................................................ 1075
Seção Default ............................................................................................................................................. 1075
Seção de Sobreposição (Override Section) ................................................................................................. 1076
Propriedades da Seção (Section) ..................................................................................................................... 1076
Grupo Layout ............................................................................................................................................. 1076
Grupo Espaçamento .................................................................................................................................. 1077
Grupo Título .............................................................................................................................................. 1078
Grupo Estilo do Grupo de Itens do Oracle Designer ................................................................................. 1078
Grupo Título do Grupo de Itens do Oracle Designer ................................................................................ 1078
O Nó Estruturas (Frames) ............................................................................................................................... 1078
Grupo Estilo ............................................................................................................................................... 1078
O Nó Labels/Cabeçalhos de Campo ............................................................................................................... 1079
Grupo Etiquetas / Campos ........................................................................................................................ 1079
Montando um Gabarito (Template) ............................................................................................................... 1080
Seção Default ............................................................................................................................................. 1080
Estruturas (Frames) .................................................................................................................................... 1080
Labels / Cabeçalhos de Campos (Field Labels/Headings) .......................................................................... 1080
Campos (Fields) ......................................................................................................................................... 1080
Labels Sumariados (Summary Labels) ....................................................................................................... 1080
Resumos (Summaries) ................................................................................................................................ 1081
Usando o Gabarito Criado ......................................................................................................................... 1081
Exercícios ........................................................................................................................................................ 1081
Developer com: Distribuição, Saída Delimitada e XML ................................................................ 1082
Capacidade de Distribuição ........................................................................................................................... 1082
Uso de Delimitadores ..................................................................................................................................... 1084
Usando o Report Builder ............................................................................................................................ 1084
Usando a Linha de Comando .................................................................................................................... 1085
Gerando um Documento XML ...................................................................................................................... 1085
Exercícios ........................................................................................................................................................ 1086
Developer com: Interpreter ............................................................................................................. 1087
Descrição ........................................................................................................................................................ 1087
A Janela de Depuração ................................................................................................................................... 1087
Marcando um Ponto de Interrupção ............................................................................................................. 1088
BreakPoint .................................................................................................................................................. 1088
Trigger ........................................................................................................................................................ 1089
Acompanhando uma Depuração ................................................................................................................... 1089
Depurando com um Ponto de Interrupção ............................................................................................... 1090
Exercícios ........................................................................................................................................................ 1090
Developer com: Html/PDF ............................................................................................................... 1091
O Previsualizador da Web .............................................................................................................................. 1091
Desenvolvendo um Relatório Para Web ........................................................................................................ 1091
Usando Chart Hyperlinks .............................................................................................................................. 1094
XXXVI
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
HTML Page Streaming .................................................................................................................................... 1095
Navegação .................................................................................................................................................. 1096
Formato dos Arquivos Gerados ................................................................................................................. 1096
Parâmetro ................................................................................................................................................... 1096
Exemplo Usando Script Default ................................................................................................................ 1096
Exemplo Usando Nosso Script ................................................................................................................... 1097
Outras Rotinas do Pacote SRW .................................................................................................................. 1098
Exercícios ........................................................................................................................................................ 1098
Usando o Report Builder a Partir do Form Builder ........................................................................................ 1099
Acionando um Report a Partir do Form ......................................................................................................... 1099
Exercícios ........................................................................................................................................................ 1099
Developer com: Objetos do Banco de Dados ................................................................................... 1099
Suporte a Large Objects (Lobs) ....................................................................................................................... 1100
Suporte a Objetos do Oracle8 ........................................................................................................................ 1100
Exercícios ........................................................................................................................................................ 1102
Resolução dos Exercícios ................................................................................................................................ 1102
CAPÍTULO 9 – O FORMS NA WEB ............................................................................................................... 1165
Developer em: O Ambiente de Três Camadas ................................................................................. 1166
O Ambiente de Duas Camadas ...................................................................................................................... 1166
O Ambiente de Três 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
Considerações Iniciais .................................................................................................................................... 1168
Quanto à Conexão ..................................................................................................................................... 1168
Quanto à Configuração do Browser .......................................................................................................... 1169
Quanto à Quantidade de Servidores .......................................................................................................... 1169
Quanto à Forma de Implementação .......................................................................................................... 1169
Customizando o Produto ............................................................................................................................... 1170
Configurando o Servidor Web ................................................................................................................... 1170
Configurando as Variáveis de Ambiente ................................................................................................... 1170
Parâmetros Para o Serviço .......................................................................................................................... 1171
Customizando os Arquivos de Configuração ............................................................................................ 1172
Considerações Referentes ao Desenho das Aplicações .................................................................................. 1175
Considerações Gerais ................................................................................................................................. 1176
Considerações Sobre Aplicações Forms ..................................................................................................... 1176
Coletando Informações Sobre Desempenho ............................................................................................. 1178
Restrições Para Aplicações Forms na Web ................................................................................................. 1178
Localização de Ícones e Imagens ............................................................................................................... 1178
Acionando Relatório Através do Forms ..................................................................................................... 1179
Exercícios ................................................................................................................................................... 1180
Developer em: Estudando o Reports Server ................................................................................... 1180
Considerações Iniciais .................................................................................................................................... 1180
Quanto à Arquitetura ................................................................................................................................. 1180
O Fluxo de Processamento do Reports Services – Web .............................................................................. 1181
O Fluxo de Processamento do Reports Services – não Web ...................................................................... 1181
Quanto à Forma de Implementação .......................................................................................................... 1181
Quanto à Quantidade de Equipamentos ................................................................................................... 1182
Quanto à Quantidade de Servidores .......................................................................................................... 1182
Quanto aos Softwares Envolvidos ............................................................................................................. 1182
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXVII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Developer em: Configurando o Reports Server ............................................................................. 1182
Customizando o Produto ............................................................................................................................... 1183
Verificando a Instalação do Reports Server ............................................................................................... 1183
Configurando o Servidor Web ................................................................................................................... 1184
Configurando as Variáveis de Ambiente ................................................................................................... 1184
Configurando o Oracle Reports Services ................................................................................................... 1185
Gravando a Fila de Requisições no Banco de Dados ................................................................................. 1186
Acionando um Relatório ................................................................................................................................ 1187
Acionando um Relatório via URL .............................................................................................................. 1188
Acionando um Relatório via HTML .......................................................................................................... 1188
Acionando um Relatório com um Arquivo de Mapeamento .................................................................... 1189
Usando o Queue Manager .............................................................................................................................. 1190
Exercícios ................................................................................................................................................... 1193
Respostas dos Exercícios Propostos ............................................................................................................ 1193
PARTE III – REFERÊNCIA .......................................................................................................................... 1203
CAPÍTULO 10 – GUIA DE REFERÊNCIA DO SQL ............................................................................................. 1205
Alter Session ................................................................................................................................................... 1206
Commit in Procedure ................................................................................................................................ 1206
Close Database Link ................................................................................................................................... 1207
Sql_Trace .................................................................................................................................................... 1207
Flagger ........................................................................................................................................................ 1207
Nls_Language ............................................................................................................................................. 1207
Nls_Territory .............................................................................................................................................. 1208
Nls_Date_Format ....................................................................................................................................... 1209
Nls_Date_Language .................................................................................................................................... 1209
Nls_Numeric_Characters ........................................................................................................................... 1209
Nls_Currency / Nls_Iso_Currency ............................................................................................................. 1209
Nls_Dual_Currency .................................................................................................................................... 1210
Nls_Sort ...................................................................................................................................................... 1210
Nls_Comp .................................................................................................................................................. 1210
Nls_Calendar .............................................................................................................................................. 1211
Nls_Length_Semantics ............................................................................................................................... 1211
Nls_Nchar_Conv_Excp .............................................................................................................................. 1211
Nls_Timestamp_Format ............................................................................................................................. 1211
Nls_Timestamp_TZ_Format ....................................................................................................................... 1211
Time_Zone ................................................................................................................................................. 1211
Current_Schema ........................................................................................................................................ 1211
Constraints ................................................................................................................................................ 1212
Commit .......................................................................................................................................................... 1212
Conclusões ................................................................................................................................................. 1213
<Condition> ................................................................................................................................................... 1213
<Constraints> ................................................................................................................................................. 1214
Create Directory ............................................................................................................................................. 1216
Create Sequence ............................................................................................................................................. 1216
Create Type ..................................................................................................................................................... 1217
Create View .................................................................................................................................................... 1220
<Datatypes> .................................................................................................................................................... 1221
Delete ............................................................................................................................................................. 1223
<Expressões> e <Lista de Expressões> ............................................................................................................ 1224
Funções Escalares ........................................................................................................................................... 1225
Numéricas Simples ..................................................................................................................................... 1226
Trigonométricas ......................................................................................................................................... 1226
Alfanuméricas ............................................................................................................................................ 1227
XXXVIII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Alfanuméricas que Retornam Valores Numéricos ..................................................................................... 1227
Datas .......................................................................................................................................................... 1228
Conversão .................................................................................................................................................. 1229
Outras ......................................................................................................................................................... 1230
Funções de Grupo .......................................................................................................................................... 1231
Funções Analíticas .......................................................................................................................................... 1233
Funções Relacionadas a Objetos .................................................................................................................... 1234
Grant .............................................................................................................................................................. 1234
Grant Para os Objetos ................................................................................................................................ 1234
Grant <privilégios de sistema> .................................................................................................................. 1235
Insert .............................................................................................................................................................. 1236
Merge .............................................................................................................................................................. 1237
<Returning> .................................................................................................................................................... 1238
Bulk Collect ................................................................................................................................................ 1238
Revoke ............................................................................................................................................................ 1238
Revoke Para os <objetos> ........................................................................................................................... 1238
Revoke <privilégios de sistema> ................................................................................................................ 1239
Rollback .......................................................................................................................................................... 1240
Savepoint ........................................................................................................................................................ 1240
Select .............................................................................................................................................................. 1240
Set Constraint ................................................................................................................................................. 1241
Set Role ........................................................................................................................................................... 1241
Set Transaction ............................................................................................................................................... 1242
<subquery> ..................................................................................................................................................... 1243
Update ............................................................................................................................................................ 1245
CAPÍTULO 11 – GUIA DE REFERÊNCIA DO SQL*PLUS ................................................................................... 1247
Sobre o SQL*Plus ............................................................................................................................... 1248
Abrindo uma Sessão ....................................................................................................................................... 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XXXIX
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Execute ........................................................................................................................................................... 1260
Exit/Quit ......................................................................................................................................................... 1260
Get .................................................................................................................................................................. 1261
Help ................................................................................................................................................................ 1261
Host ................................................................................................................................................................ 1262
Input ............................................................................................................................................................... 1262
List .................................................................................................................................................................. 1262
Password, Execute, Host e Remark ................................................................................................................. 1262
Pause ............................................................................................................................................................... 1263
Print ................................................................................................................................................................ 1263
Prompt ............................................................................................................................................................ 1263
Quit ................................................................................................................................................................ 1263
Recover ........................................................................................................................................................... 1263
Remark ........................................................................................................................................................... 1263
RepHeader/RepFooter ..................................................................................................................................... 1263
Run ................................................................................................................................................................. 1264
Save ................................................................................................................................................................. 1264
Set ................................................................................................................................................................... 1265
Show ............................................................................................................................................................... 1268
Shutdown ....................................................................................................................................................... 1269
Spool ............................................................................................................................................................... 1269
Start / @ / @@ .................................................................................................................................................. 1270
Startup ............................................................................................................................................................ 1270
Store ................................................................................................................................................................ 1270
Timing ............................................................................................................................................................ 1271
Ttitle/Btitle ..................................................................................................................................................... 1271
Undefine ......................................................................................................................................................... 1271
Variable ........................................................................................................................................................... 1272
Whenever Oserror/Sqlerror ............................................................................................................................ 1272
CAPÍTULO 12 – GUIA DE REFERÊNCIA DE PL/SQL ....................................................................................... 1273
Sobre a PL/SQL .................................................................................................................................. 1274
Estrutura ......................................................................................................................................................... 1274
Identificadores ........................................................................................................................................... 1274
Palavras Reservadas .................................................................................................................................... 1274
Literais ........................................................................................................................................................ 1274
Comentários .............................................................................................................................................. 1274
Fim de Linha .............................................................................................................................................. 1275
Tipos de Dados ............................................................................................................................................... 1275
Escalares ..................................................................................................................................................... 1275
Lobs ............................................................................................................................................................ 1277
Compostos ................................................................................................................................................. 1277
Reference .................................................................................................................................................... 1277
Conversão Implícita ................................................................................................................................... 1277
Declarações ..................................................................................................................................................... 1278
Variáveis e Constantes ............................................................................................................................... 1278
Atribuição .................................................................................................................................................. 1278
%Type ........................................................................................................................................................ 1279
Escopo e Visibilidade ................................................................................................................................. 1279
Qualificação ............................................................................................................................................... 1279
Restrições ................................................................................................................................................... 1279
Comandos .......................................................................................................................................... 1279
Case ................................................................................................................................................................ 1279
Cursor ............................................................................................................................................................. 1280
XL
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
%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
Declaração 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
Iterações ......................................................................................................................................................... 1286
Exit ............................................................................................................................................................. 1286
ForAll .......................................................................................................................................................... 1286
For Loop ..................................................................................................................................................... 1286
GoTo ........................................................................................................................................................... 1287
Loop ........................................................................................................................................................... 1287
While ......................................................................................................................................................... 1287
Demais Comandos ......................................................................................................................................... 1287
Execute Immediate .................................................................................................................................... 1287
Funções ...................................................................................................................................................... 1288
IF ................................................................................................................................................................ 1289
Null ............................................................................................................................................................ 1289
Select Into .................................................................................................................................................. 1289
Coleções e Registros ....................................................................................................................................... 1290
Nested Tables ............................................................................................................................................. 1290
Varrays ....................................................................................................................................................... 1291
Index-By Tables .......................................................................................................................................... 1291
Manipulando Coleções .............................................................................................................................. 1292
Exceptions Para Coleções .......................................................................................................................... 1292
Registros ..................................................................................................................................................... 1292
Subprogramas e Pacotes ................................................................................................................... 1293
Subprogramas ................................................................................................................................................. 1293
Parâmetros ................................................................................................................................................. 1294
Passagem dos Parâmetros .......................................................................................................................... 1295
Declarações Forward .................................................................................................................................. 1295
Cláusula AuthID ........................................................................................................................................ 1295
Cláusula As Language ................................................................................................................................ 1295
Cláusula Deterministic .............................................................................................................................. 1295
Table Functions .......................................................................................................................................... 1296
Cláusula Pipelined ..................................................................................................................................... 1296
Cláusula Parallel ......................................................................................................................................... 1296
Cláusula Agregate ...................................................................................................................................... 1296
Overloading ............................................................................................................................................... 1296
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLI
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Stored Subprogram .................................................................................................................................... 1296
Call ................................................................................................................................................................. 1296
Packages .......................................................................................................................................................... 1297
Especificação .............................................................................................................................................. 1297
Corpo do Pacote ........................................................................................................................................ 1298
O Pacote Dbms_Flashback ............................................................................................................................. 1298
O Pacote Dbms_Lob ....................................................................................................................................... 1299
O Pacote Dbms_Output ................................................................................................................................. 1302
O Pacote Dbms_Pipe ...................................................................................................................................... 1303
O Pacote Dbms_Random ............................................................................................................................... 1304
O Pacote Dbms_Rowid ................................................................................................................................... 1306
O Pacote Utl_File ............................................................................................................................................ 1307
PL/SQL Wrapper ............................................................................................................................... 1309
Variáveis Cursor ................................................................................................................................ 1309
Manipulando Variáveis Cursor ...................................................................................................................... 1309
A Cláusula Bulk Collect ............................................................................................................................. 1310
Open-For Dinâmico ....................................................................................................................................... 1310
Triggers .............................................................................................................................................. 1311
Eventos dos Triggers .................................................................................................................................. 1312
CAPÍTULO 13 – PROPRIEDADES DO FORMS ................................................................................................... 1313
Alerta (Alert) ..................................................................................................................................... 1314
Geral (General) ............................................................................................................................................... 1314
Nome (Name) ............................................................................................................................................ 1314
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1314
Comentários (Comments) ......................................................................................................................... 1314
Funcional (Functional) ................................................................................................................................... 1314
Título (Title) ............................................................................................................................................... 1314
Mensagem (Message) ................................................................................................................................. 1314
Estilo de Alerta (Alert Style) ....................................................................................................................... 1314
Etiqueta do Botão 1 (Button 1 Label) ........................................................................................................ 1314
Etiqueta do Botão 2 (Button 2 Label) ........................................................................................................ 1315
Etiqueta do Botão 3 (Button 3 Label) ........................................................................................................ 1315
Botão de Alerta Default (Default Alert Button) ......................................................................................... 1315
Atributos Visuais (Visual Attributes) .............................................................................................................. 1315
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1315
Atributo Lógico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1315
Branco Sobre Preto (White on Black) ........................................................................................................ 1315
Cor (Color) ..................................................................................................................................................... 1315
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1315
Padrão de Preenchimento (Fill Pattern) .................................................................................................... 1315
Fonte (Font) .................................................................................................................................................... 1316
Nome da Fonte (Font Name) ..................................................................................................................... 1316
Tamanho da Fonte (Font Size) ................................................................................................................... 1316
Peso da Fonte (Font Weight) ..................................................................................................................... 1316
Estilo da Fonte (Font Style) ........................................................................................................................ 1316
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1316
Internacional (International) ......................................................................................................................... 1316
Direção (Direction) .................................................................................................................................... 1316
Atributo Visual (Visual Attribute) .................................................................................................. 1317
Geral (General) ............................................................................................................................................... 1317
Nome (Name) ............................................................................................................................................ 1317
Tipo de Atributo Visual (Visual Attribute Type) ........................................................................................ 1317
XLII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1317
Comentários (Comments) ......................................................................................................................... 1317
Atributos Visuais (Visual Attribute) ............................................................................................................... 1317
Atributo Lógico 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
Padrão 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
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1318
Bloco de Dados (Data Block) ............................................................................................................ 1319
Geral (General) ............................................................................................................................................... 1319
Nome (Name) ............................................................................................................................................ 1319
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1319
Comentários (Comments) ......................................................................................................................... 1319
Navegação (Navigation) ................................................................................................................................. 1319
Estilo de Navegação (Navigation Style) ..................................................................................................... 1319
Bloco de Dados Anterior de Navegação (Previous Navigation Data Block) .............................................. 1319
Próximo Bloco de Dados de Navegação (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
Número de Registros Armazenados no Buffer (Number of Records Buffered) .......................................... 1320
Número de Registros Exibidos (Number of Records Displayed) ............................................................... 1320
Consultar Todos os Registros (Query All Records) .................................................................................... 1320
Orientação 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 Primária (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
Cláusula WHERE (WHERE Clause) ............................................................................................................ 1322
Cláusula ORDER BY (ORDER BY Clause) .................................................................................................. 1322
Dica do Otimizador (Optimizer Hint) ....................................................................................................... 1323
Inserção Permitida (Insert Allowed) .......................................................................................................... 1323
Atualização Permitida (Update Allowed) ................................................................................................... 1323
Modo de Bloqueio (Locking Mode) ........................................................................................................... 1323
Deleção Permitida (Delete Allowed) .......................................................................................................... 1323
Modo de Tecla (Key Mode) ........................................................................................................................ 1323
Atualizar Somente Colunas Alteradas (Update Changed Columns Only) ................................................ 1324
Impor Segurança da Coluna (Enforce Column Security) .......................................................................... 1324
Tempo Máximo Para Consulta (Maximum Query Time) .......................................................................... 1324
Máximo de Registros Extraídos (Maximum Records Fetched) .................................................................. 1324
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLIII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Banco de Dados Avançado (Advanced Database) .......................................................................................... 1324
Tipo de Destino dos Dados de DML (DML Data Target Type) .................................................................. 1324
Nome de Destino dos Dados de DML (DML Data Target Name) .............................................................. 1325
Inserir Nome do Procedimento (Insert Procedure Name) ......................................................................... 1325
Inserir Colunas de Conjuntos de Resultados de Procedimento (Insert Procedure Result Set Columns) ........ 1325
Inserir Argumentos de Procedimento (Insert Procedure Arguments) ....................................................... 1325
Atualizar Nome do Procedimento (Update Procedure Name) .................................................................. 1325
Atualizar Colunas de Conjuntos de Resultados de Procedimento
(Update Procedure Result Set Columns) .................................................................................................... 1325
Atualizar Argumentos de Procedimento (Update Procedure Arguments) ................................................ 1325
Deletar Nome do Procedimento (Delete Procedure Name) ....................................................................... 1325
Deletar Colunas de Conjuntos de Resultados de Procedimento (Delete Procedure Result Set Columns) ......... 1325
Deletar Argumentos de Procedimento (Delete Procedure Arguments) ..................................................... 1325
Bloquear Nome do Procedimento (Lock Procedure Name) ...................................................................... 1326
Bloquear Colunas de Conjuntos de Resultados de Procedimento (Lock Procedure Result Set Columns) ......... 1326
Bloquear Argumentos de Procedimento (Lock Procedure Arguments) ..................................................... 1326
Tamanho do Array de DML (DML Array Size) ........................................................................................... 1326
Pré-calcular Sumários (Precompute Summaries) ....................................................................................... 1326
Valor de Retorno de DML (DML Returning Value) ................................................................................... 1326
Barra de Rolagem (Scrollbar) .......................................................................................................................... 1327
Mostrar Barra de Rolagem (Show Scroll Bar) ............................................................................................. 1327
Canvas da Barra de Rolagem (Scroll Bar Canvas) ...................................................................................... 1327
Página Tab da Barra de Rolagem (Scroll Bar Tab Page) .............................................................................. 1327
Orientação da Barra de Rolagem (Scroll Bar Orientation) ......................................................................... 1327
Posição X da Barra de Rolagem (Scroll Bar X Position) ............................................................................. 1327
Posição Y da Barra de Rolagem (Scroll Bar Y Position) .............................................................................. 1327
Largura da Barra de Rolagem (Scroll Bar Width) ....................................................................................... 1327
Tamanho da Barra de Rolagem (Scroll Bar Lenght) ................................................................................... 1327
Direção Inversa (Reverse Direction) .......................................................................................................... 1327
Atributos Visuais (Visual Attribute) ............................................................................................................... 1328
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1328
Atributo Lógico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1328
Branco Sobre Preto (White on Black) ........................................................................................................ 1328
Cor (Color) ..................................................................................................................................................... 1328
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1328
Padrão de Preenchimento (Fill Pattern) .................................................................................................... 1328
Modo Caracter (Character Mode) .................................................................................................................. 1328
Listado no Menu Bloco de Dados (Listed in Data Block Menu) ............................................................... 1328
Descrição do Bloco de Dados (Data Block Description) ............................................................................ 1329
Internacional (International) ......................................................................................................................... 1329
Direção (Direction) .................................................................................................................................... 1329
Botão de Opção (Radio Button) ....................................................................................................... 1329
Geral (General) ............................................................................................................................................... 1329
Nome (Name) ............................................................................................................................................ 1329
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1329
Comentários (Comments) ......................................................................................................................... 1330
Funcional (Functional) ................................................................................................................................... 1330
Ativado (Enabled) ...................................................................................................................................... 1330
Etiqueta (Label) .......................................................................................................................................... 1330
Tecla de Acesso (Access Key) ...................................................................................................................... 1330
Valor do Botão de Opção (Radio Button Value) ........................................................................................ 1330
Registros (Records) ......................................................................................................................................... 1330
Distância Entre Registros (Distance Between Records) ............................................................................. 1330
XLIV
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Físico (Physical) .............................................................................................................................................. 1330
Visível (Visible) .......................................................................................................................................... 1330
Posição X (X Position) ............................................................................................................................... 1331
Posição 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 Lógico 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
Padrão 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
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1332
Prompt (Prompt) ............................................................................................................................................ 1333
Prompt (Prompt) ........................................................................................................................................ 1333
Estilo de Exibição do Prompt (Prompt Display Style) ............................................................................... 1333
Justificação do Prompt (Prompt Justification) .......................................................................................... 1333
Limite de Conexão do Prompt (Prompt Attachment Edge) ...................................................................... 1333
Alinhamento do Prompt (Prompt Alignment) .......................................................................................... 1333
Deslocamento de Conexão 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
Espaçamento da Fonte do Prompt (Prompt Font Spacing) ....................................................................... 1334
Canvas (Canvas) ................................................................................................................................ 1334
Geral (General) ............................................................................................................................................... 1334
Nome (Name) ............................................................................................................................................ 1334
Tipo de Canvas (Canvas Type) .................................................................................................................. 1334
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1335
Comentários (Comments) ......................................................................................................................... 1335
Funcional (Functional) ................................................................................................................................... 1335
Aumentar na Entrada (Raise on Entry) ...................................................................................................... 1335
Menu Pop-up (Popup Menu) ..................................................................................................................... 1335
Visualizador (ViewPort) .................................................................................................................................. 1335
Posição X do Visor (ViewPort X Position) ................................................................................................. 1335
Posição Y do Visor (ViewPort Y Position) .................................................................................................. 1335
Largura do Visor (ViewPort Width) ........................................................................................................... 1335
Altura do Visor (ViewPort Height) ............................................................................................................. 1335
Físico (Physical) .............................................................................................................................................. 1336
Visível (Visible) .......................................................................................................................................... 1336
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLV
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Janela (Window) ........................................................................................................................................ 1336
Posição X do Visor no Canvas (ViewPort X Position on Canvas) ............................................................. 1336
Posição Y do Visor no Canvas (Viewport Y Position on Canvas) ............................................................. 1336
Largura (Width) ......................................................................................................................................... 1336
Altura (Height) ........................................................................................................................................... 1336
Bevel (Bevel) ............................................................................................................................................... 1336
Mostrar Barra de Rolagem Horizontal (Show Horizontal Scroll Bar) ........................................................ 1336
Mostrar Barra de Rolagem Vertical (Show Vertical Scroll Bar) .................................................................. 1336
Estilo dos Cantos (Corner Style) ................................................................................................................ 1336
Estilo da Largura (Width Style) .................................................................................................................. 1337
Estilo Ativo (Active Style) .......................................................................................................................... 1337
Limite de Conexão de Tab (Tab Attachment Edge) ................................................................................... 1337
Atributos Visuais (Visual Attribute) ............................................................................................................... 1337
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1337
Atributo Lógico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1337
Branco Sobre Preto (White on Black) ........................................................................................................ 1337
Cor (Color) ..................................................................................................................................................... 1337
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1337
Padrão de Preenchimento (Fill Pattern) .................................................................................................... 1337
Fonte (Font) .................................................................................................................................................... 1338
Nome da Fonte (Font Name) ..................................................................................................................... 1338
Tamanho da Fonte (Font Size) ................................................................................................................... 1338
Peso da Fonte (Font Weight) ..................................................................................................................... 1338
Estilo da Fonte (Font Style) ........................................................................................................................ 1338
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1338
Internacional (International) ......................................................................................................................... 1338
Direção (Direction) .................................................................................................................................... 1338
Editor (Editor) ................................................................................................................................... 1339
Geral (General) ............................................................................................................................................... 1339
Nome (Name) ............................................................................................................................................ 1339
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1339
Comentários (Comments) ......................................................................................................................... 1339
Funcional (Functional) ................................................................................................................................... 1339
Título (Title) ............................................................................................................................................... 1339
Título de Base (Bottom Title) ..................................................................................................................... 1339
Estilo de Sobreposição (Wrap Style) ........................................................................................................... 1339
Físico (Physical) .............................................................................................................................................. 1340
Posição X (X Position) ............................................................................................................................... 1340
Posição Y (Y Position) ................................................................................................................................ 1340
Largura (Width) ......................................................................................................................................... 1340
Altura (Height) ........................................................................................................................................... 1340
Mostrar Barra de Rolagem Vertical (Show Vertical Scroll Bar) .................................................................. 1340
Atributos Visuais (Visual Attribute) ............................................................................................................... 1340
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1340
Atributo Lógico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1340
Branco Sobre Preto (White on Black) ........................................................................................................ 1341
Cor (Color) ..................................................................................................................................................... 1341
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1341
Padrão de Preenchimento (Fill Pattern) .................................................................................................... 1341
Fonte (Font) .................................................................................................................................................... 1341
Nome da Fonte (Font Name) ..................................................................................................................... 1341
Tamanho da Fonte (Font Size) ................................................................................................................... 1341
Peso da Fonte (Font Weight) ..................................................................................................................... 1341
XLVI
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Estilo da Fonte (Font Style) ........................................................................................................................ 1341
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1341
Gatilho (Trigger) ............................................................................................................................... 1342
Geral (General) ............................................................................................................................................... 1342
Nome (Name) ............................................................................................................................................ 1342
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1342
Comentários (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 Execução (Execution Hierarchy) ......................................................................................... 1342
Ajuda (Help) ................................................................................................................................................... 1343
Exibição 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
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1343
Comentários (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 Extração do Grupo de Registros (Record Group Fetch Size) ................................................ 1344
Especificações da Coluna (Column Specifications) ................................................................................... 1344
Item (Item) ........................................................................................................................................ 1344
Geral (General) ............................................................................................................................................... 1344
Nome (Name) ............................................................................................................................................ 1344
Tipo de Item (Item Type) ........................................................................................................................... 1344
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1344
Comentários (Comments) ......................................................................................................................... 1345
Tópico do Livro de Ajuda (Help Book Topic) ............................................................................................ 1345
Funcional (Functional) – Item do Gráfico (Chart Item) ................................................................................ 1345
Menu Pop-up (Popup Menu) ..................................................................................................................... 1345
Funcional (Functional) – Caixa de Seleção (CheckBox) ................................................................................ 1345
Ativado (Enabled) ...................................................................................................................................... 1345
Etiqueta (Label) .......................................................................................................................................... 1345
Tecla de Acesso (Access Key) ...................................................................................................................... 1345
Classe de Implementação (Implementation Class) ................................................................................... 1346
Valor Quando Assinalado (Value When Checked) .................................................................................... 1346
Valor Quando Não-Verificado (Value When Unchecked) ......................................................................... 1346
Mapeamento de Outros Valores da Caixa de Seleção (Check Box Mapping of Other Values) ................. 1346
Menu Pop-up (Popup Menu) ..................................................................................................................... 1346
Funcional (Functional) – Item de Exibição (Display Item) ............................................................................ 1346
Justificação (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 Compactação (Compression Quality) ................................................................................. 1347
Qualidade de Exibição (Display Quality) .................................................................................................. 1348
Mostrar Paleta (Show Palette) .................................................................................................................... 1348
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLVII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Estilo de Dimensionamento (Sizing Style) ................................................................................................ 1348
Menu Pop-up (Popup Menu) ..................................................................................................................... 1348
Funcional (Functional) – Item da Lista (List Item) ........................................................................................ 1348
Ativado (Enabled) ...................................................................................................................................... 1348
Elementos da Lista (Elements in List) ........................................................................................................ 1349
Estilo da Lista (List Style) ........................................................................................................................... 1349
Mapeamento de Outros Valores (Mapping of Other Values) .................................................................... 1349
Classe de Implementação (Implementation Class) ................................................................................... 1349
Restrição a Maiúsculas / Minúsculas (Case Restriction) ............................................................................ 1349
Menu Pop-up (Popup Menu) ..................................................................................................................... 1350
Funcional (Functional) – ActiveX Control (ActiveX Control) ...................................................................... 1350
Ativado (Enabled) ...................................................................................................................................... 1350
Classe OLE (OLE Class) .............................................................................................................................. 1350
Propriedades de Controle (Control Properties) ......................................................................................... 1350
Sobre o Controle (About Control) ............................................................................................................. 1350
Ajuda de Controle (Control Help) ............................................................................................................. 1350
Menu Pop-up (Popup Menu) ..................................................................................................................... 1351
Funcional (Functional) – Container OLE (OLE Container) ........................................................................... 1351
Ativado (Enabled) ...................................................................................................................................... 1351
Classe OLE (OLE Class) .............................................................................................................................. 1351
Estilo de Ativação de OLE (OLE Activation Style) ..................................................................................... 1351
Ativação Local de OLE (OLE In-place Activation) ..................................................................................... 1351
Suporte Interno-Externo de OLE (OLE Inside-Out Support) ..................................................................... 1351
Tipos de Inquilinos de OLE (OLE Tenant Types) ....................................................................................... 1352
Mostrar Tipo Inquilino de OLE (Show OLE Tenant Types) ....................................................................... 1352
Aspecto Inquilino de OLE (OLE Tenant Aspect) ....................................................................................... 1352
Estilo de Redimensionamento de OLE (OLE Resize Style) ........................................................................ 1352
Mostrar Menu Pop-up de OLE (Show OLE Popup Menu) ......................................................................... 1352
Itens de Menu Pop-up de OLE (OLE Popup Menu Items) ......................................................................... 1352
Menu Pop-up (Popup Menu) ..................................................................................................................... 1352
Funcional (Functional) – Tecla (Push Button) ............................................................................................... 1353
Ativado (Enabled) ...................................................................................................................................... 1353
Etiqueta (Label) .......................................................................................................................................... 1353
Tecla de Acesso (Access Key) ...................................................................................................................... 1353
Classe de Implementação (Implementation Class) ................................................................................... 1353
Icônico (Iconic) .......................................................................................................................................... 1353
Nome do Arquivo de Ícones (Icon Filename) ........................................................................................... 1353
Botão Default (Default Button) ................................................................................................................. 1354
Menu Pop-up (Popup Menu) ..................................................................................................................... 1354
Funcional (Functional) – Grupo de Opções (Radio Group) ........................................................................... 1354
Tecla de Acesso (Access Key) ...................................................................................................................... 1354
Mapeamento de Outros Valores (Mapping of Other Values) .................................................................... 1354
Classe de Implementação (Implementation Class) ................................................................................... 1354
Menu Pop-up (Popup Menu) ..................................................................................................................... 1354
Funcional (Functional) – Som (Sound) .......................................................................................................... 1354
Ativado (Enabled) ...................................................................................................................................... 1354
Formato do Som (Sound Format) .............................................................................................................. 1355
Canais de Áudio (Audio Channels) ........................................................................................................... 1355
Compactar (Compress) .............................................................................................................................. 1355
Qualidade do Som (Sound Quality) ........................................................................................................... 1355
Menu Pop-up (Popup Menu) ..................................................................................................................... 1355
Funcional (Functional) – Item de Texto (Text Item) ...................................................................................... 1355
Ativado (Enabled) ...................................................................................................................................... 1355
XLVIII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Justificação (Justification) .......................................................................................................................... 1356
Classe de Implementação (Implementation Class) ................................................................................... 1356
Várias Linhas (Multi-Line) ......................................................................................................................... 1356
Estilo de Sobreposição (Wrap Style) ........................................................................................................... 1356
Restrição a Maiúsculas / Minúsculas (Case Restriction) ............................................................................ 1356
Ocultar Dados (Conceal Data) ................................................................................................................... 1357
Manter Posição do Cursor (Keep Cursor Position) .................................................................................... 1357
Salto Automático (Automatic Skip) ........................................................................................................... 1357
Menu Pop-up (Popup Menu) ..................................................................................................................... 1357
Funcional (Functional) – Área do Usuário (User Area) .................................................................................. 1357
Ativado (Enabled) ...................................................................................................................................... 1357
Funcional (Functional) – Controle VBX (VBX Control) ................................................................................ 1357
Ativado (Enabled) ...................................................................................................................................... 1357
Etiqueta (Label) .......................................................................................................................................... 1358
Icônico (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 Hierárquica (Hierarchical Tree) ................................................................. 1358
Ativado (Enabled) ...................................................................................................................................... 1358
Permitir Ramificações Vazias (Allow Empty Branches) ............................................................................. 1359
Multisseleção (Multi-Selection) ................................................................................................................. 1359
Mostrar Linhas (Show Lines) ..................................................................................................................... 1359
Mostrar Símbolos (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 Implementação (Implementation Class) ................................................................................... 1359
Menu Pop-up (Popup Menu) ..................................................................................................................... 1359
Integração do Oracle Developer (Oracle Developer Integration) .................................................................. 1359
Nome do Arquivo (Filename) .................................................................................................................... 1359
Modo de Execução (Execution Mode) ....................................................................................................... 1360
Modo de Comunicação (Communication Mode) ..................................................................................... 1360
Bloco de Dados da Origem de Dados (Data Source Data Block) ............................................................... 1360
Nome da Consulta (Query Name) ............................................................................................................. 1360
Gráfico (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
Navegação (Navigation) ................................................................................................................................. 1360
Navegável com Teclado (Keyboard Navigable) .......................................................................................... 1360
Navegação do Mouse (Mouse Navigate) .................................................................................................... 1360
Item Anterior de Navegação (Previous Navigation Item) ......................................................................... 1361
Próximo Item de Navegação (Next Navigation Item) ............................................................................... 1361
Dados (Data) ................................................................................................................................................... 1361
Tipo de Dados (Data Type) ........................................................................................................................ 1361
Tamanho Máximo (Maximum Length) ..................................................................................................... 1361
Tamanho Fixo (Fixed Length) ................................................................................................................... 1361
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
XLIX
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Valor Inicial (Initial Value) ........................................................................................................................ 1361
Obrigatório (Required) ............................................................................................................................... 1362
Máscara de Formato (Format Mask) .......................................................................................................... 1362
Mínimo Valor Permitido (Lowest Allowed Value) ..................................................................................... 1363
Máximo Valor Permitido (Highest Allowed Value) ................................................................................... 1364
Copiar Valor a Partir do Item (Copy Value from Item) ............................................................................. 1364
Sincronizar com o Item (Synchronize with Item) ..................................................................................... 1364
Cálculo (Calculation) ..................................................................................................................................... 1364
Modo de Cálculo (Calculation Mode) ....................................................................................................... 1364
Fórmula (Formula) ..................................................................................................................................... 1364
Função Sumária (Summary Function) ....................................................................................................... 1364
Bloco Sumariado (Summarized Block) ...................................................................................................... 1364
Item Sumariado (Sumarized Item) ............................................................................................................. 1365
Registros (Records) ......................................................................................................................................... 1365
Grupo de Atributos Visuais do Registro Atual (Current Record Visual Attribute Group) ......................... 1365
Distância Entre Registros (Distance Between Records) ............................................................................. 1365
Número de Itens Exibidos (Number of Items Displayed) ......................................................................... 1365
Banco de Dados (Database) ............................................................................................................................ 1365
Item do Banco de Dados (Database Item) ................................................................................................. 1365
Nome da Coluna (Column Name) ............................................................................................................ 1365
Chave Primária (Primary Key) ................................................................................................................... 1365
Somente Consulta (Query Only) ............................................................................................................... 1365
Consulta Permitida (Query Allowed) ........................................................................................................ 1365
Tamanho da Consulta (Query Length) ..................................................................................................... 1366
Consulta Insensível a Maiúsculas/Minúsculas (Case Insensitive Query) .................................................. 1366
Inserção Permitida (Insert Allowed) .......................................................................................................... 1366
Atualização Permitida (Update Allowed) ................................................................................................... 1366
Atualizar Somente se Null (Update Only if Null) ...................................................................................... 1366
Bloquear Registro (Lock Record) ................................................................................................................ 1366
Lista de Valores – LOV (List of Values – LOV) ............................................................................................... 1366
Lista de Valores (List of Values) ................................................................................................................. 1366
Posição X da Lista (List X Position) ........................................................................................................... 1367
Posição Y da Lista (List Y Position) ............................................................................................................ 1367
Validar a Partir da Lista (Validate from List) .............................................................................................. 1367
Editor (Editor) ................................................................................................................................................. 1367
Editor (Editor) ............................................................................................................................................ 1367
Posição X do Editor (Editor X Position) .................................................................................................... 1367
Posição Y do Editor (Editor Y Position) ..................................................................................................... 1367
Físico (Physical) .............................................................................................................................................. 1367
Visível (Visible) .......................................................................................................................................... 1367
Canvas (Canvas) ........................................................................................................................................ 1367
Página Tab (Tab Page) ................................................................................................................................ 1368
Posição X (X Position) ............................................................................................................................... 1368
Posição Y (Y Position) ................................................................................................................................ 1368
Largura (Width) ......................................................................................................................................... 1368
Altura (Height) ........................................................................................................................................... 1368
Bevel (Bevel) ............................................................................................................................................... 1368
Finalizado (Rendered) ................................................................................................................................ 1368
Mostrar Barra de Rolagem Horizontal (Show Horizontal Scroll Bar) ........................................................ 1369
Mostrar Barra de Rolagem Vertical (Show Vertical Scroll Bar) .................................................................. 1369
Mostrar Botão Play (Show Play Button) .................................................................................................... 1369
Mostrar Botão Record (Show Record Button) ............................................................................................ 1369
Mostrar Botão Rewind (Show Rewind Button) .......................................................................................... 1369
L
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Mostrar Botão 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 Lógico 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
Padrão 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
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1371
Prompt (Prompt) ............................................................................................................................................ 1371
Prompt (Prompt) ........................................................................................................................................ 1371
Estilo de Exibição do Prompt (Prompt Display Style) ............................................................................... 1371
Justificação do Prompt (Prompt Justification) .......................................................................................... 1371
Limite de Conexão do Prompt (Prompt Attachment Edge) ...................................................................... 1371
Alinhamento do Prompt (Prompt Alignment) .......................................................................................... 1371
Deslocamento de Conexão 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
Espaçamento 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
Direção (Direction) .................................................................................................................................... 1373
Item de Menu (Menu Item) .............................................................................................................. 1374
Geral (General) ............................................................................................................................................... 1374
Nome (Name) ............................................................................................................................................ 1374
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1374
Comentários (Comments) ......................................................................................................................... 1374
Funcional (Functional) ................................................................................................................................... 1374
Ativado (Enabled) ...................................................................................................................................... 1374
Etiqueta (Label) .......................................................................................................................................... 1375
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LI
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Tipo de Item de Menu (Menu Item Type) ................................................................................................. 1375
Item Mágico (Magic Item) ......................................................................................................................... 1375
Grupo de Opções de Itens de Menu (Menu Item Radio Group) ............................................................... 1376
Tipo de Comando (Command Type) ........................................................................................................ 1376
Nome do Submenu (Submenu Name) ....................................................................................................... 1376
Código do Item de Menu (Menu Item Code) ............................................................................................ 1376
Acelerador de Teclado (Keyboard Accelerator) .......................................................................................... 1376
Visível no Menu (Visible in Menu) ........................................................................................................... 1376
Visível na Barra de Ferramentas de Menu Horizontal (Visible in Horizontal Menu Toolbar) .................. 1376
Visível na Barra de Ferramentas de Menu Vertical (Visible in Vertical Menu Toolbar) ............................ 1376
Ícone no Menu (Icon in Menu) ................................................................................................................. 1377
Nome do Arquivo de Ícones (Icon Filename) ........................................................................................... 1377
Segurança do Menu (Menu Security) ............................................................................................................. 1377
Atribuições do Item (Item Roles) ............................................................................................................... 1377
Exibição sem Privilégio (Display without Privilege) .................................................................................. 1377
Físico (Physical) .............................................................................................................................................. 1377
Visível (Visible) .......................................................................................................................................... 1377
Atributos Visuais (Visual Attribute) ............................................................................................................... 1377
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1377
Fonte (Font) .................................................................................................................................................... 1378
Nome da Fonte (Font Name) ..................................................................................................................... 1378
Tamanho da Fonte (Font Size) ................................................................................................................... 1378
Peso da Fonte (Font Weight) ..................................................................................................................... 1378
Estilo da Fonte (Font Style) ........................................................................................................................ 1378
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1378
Ajuda (Help) ................................................................................................................................................... 1378
Dica (Hint) ................................................................................................................................................. 1378
Modo Caracter (Character Mode) .................................................................................................................. 1378
Descrição da Ajuda (Help Description) ..................................................................................................... 1378
Lov (Lov) ............................................................................................................................................ 1378
Geral (General) ............................................................................................................................................... 1378
Nome (Name) ............................................................................................................................................ 1378
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1379
Comentários (Comments) ......................................................................................................................... 1379
Funcional (Functional) ................................................................................................................................... 1379
Título (Title) ............................................................................................................................................... 1379
Tipo de Lista (List Type) ............................................................................................................................. 1379
Grupo de Registros (Record Group) ........................................................................................................... 1379
Propriedades de Mapeamento de Coluna (Column Mapping Properties) ................................................ 1379
Filtrar Antes da Exibição (Filter Before Display) ........................................................................................ 1379
Exibição Automática (Automatic Display) ................................................................................................ 1379
Renovação Automática (Automatic Refresh) ............................................................................................. 1380
Seleção Automática (Automatic Select) ..................................................................................................... 1380
Salto Automático (Automatic Skip) ........................................................................................................... 1380
Posição Automática (Automatic Position) ................................................................................................. 1380
Largura Automática da Coluna (Automatic Column Width) ................................................................... 1380
Físico (Physical) .............................................................................................................................................. 1380
Posição X (X Position) ............................................................................................................................... 1380
Posição Y (Y Position) ................................................................................................................................ 1380
Largura (Width) ......................................................................................................................................... 1381
Altura (Height) ........................................................................................................................................... 1381
Atributos Visuais (Visual Attribute) ............................................................................................................... 1381
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1381
LII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Atributo Lógico 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
Padrão 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
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1382
Internacional (International) ......................................................................................................................... 1382
Direção (Direction) .................................................................................................................................... 1382
Menu e Submenu (Menu) ................................................................................................................. 1383
Geral (General) ............................................................................................................................................... 1383
Nome (Name) ............................................................................................................................................ 1383
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1383
Comentários (Comments) ......................................................................................................................... 1383
Funcional (Functional) ................................................................................................................................... 1383
Menu Tirar (Tear-off Menu) ....................................................................................................................... 1383
Menu Pop-up (Popup Menu) ............................................................................................................ 1383
Geral (General) ............................................................................................................................................... 1383
Nome (Name) ............................................................................................................................................ 1383
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1383
Comentários (Comments) ......................................................................................................................... 1384
Funcional (Functional) ................................................................................................................................... 1384
Menu Tirar (Tear-off Menu) ....................................................................................................................... 1384
Módulo Form (Form Module) ........................................................................................................... 1384
Geral (General) ............................................................................................................................................... 1384
Nome (Name) ............................................................................................................................................ 1384
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1384
Comentários (Comments) ......................................................................................................................... 1384
Título do Livro de Ajuda (Help Book Topic) ............................................................................................. 1384
Funcional (Functional) ................................................................................................................................... 1384
Título (Title) ............................................................................................................................................... 1384
Janela Console (Console Window) ............................................................................................................ 1385
Origem de Menu (Menu Source) ............................................................................................................... 1385
Módulo de Menu (Menu Module) ............................................................................................................. 1385
Menu Inicial (Initial Menu) ....................................................................................................................... 1385
Diferir Imposição Obrigatória (Defer Required Enforcement) .................................................................. 1385
Segurança do Menu (Menu Security) ............................................................................................................. 1385
Atribuição de Menu (Menu Role) .............................................................................................................. 1385
Navegação (Navigation) ................................................................................................................................. 1385
Limite de Navegação do Mouse (Mouse Navigation Limit) ...................................................................... 1385
Primeiro Bloco de Dados de Navegação (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 Validação (Validation Unit) ................................................................................................... 1386
Modo de Interação (Interaction Mode) ..................................................................................................... 1386
Tempo Máximo Para Consulta (Maximum Query Time) .......................................................................... 1386
Máximo de Registros Extraídos (Maximum Records Fetched) .................................................................. 1386
Modo de Isolamento (Isolation Mode) ...................................................................................................... 1386
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LIII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Físico (Physical) .............................................................................................................................................. 1387
Sistema Coordenado (Coordinate System) ................................................................................................ 1387
Usar Controles 3D (Use 3D Controls) ....................................................................................................... 1387
Canvas da Barra de Ferramentas Horizontal do Form (Form Horizontal ToolBar Canvas) ...................... 1387
Canvas da Barra de Ferramentas Vertical do Form (Form Vertical ToolBar Canvas) ................................ 1387
Internacional (International) ......................................................................................................................... 1387
Direção (Direction) .................................................................................................................................... 1387
Compatibilidade (Compatibility) .................................................................................................................. 1388
Modo de Compatibilidade em Runtime (Runtime Compatibility Mode) ................................................ 1388
Módulo Menu (Menu Module) .......................................................................................................... 1388
Geral (General) ............................................................................................................................................... 1388
Nome (Name) ............................................................................................................................................ 1388
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1388
Comentários (Comments) ......................................................................................................................... 1388
Funcional (Functional) ................................................................................................................................... 1388
Menu Principal (Main Menu) .................................................................................................................... 1388
Diretório do Menu (Menu Directory) ........................................................................................................ 1389
Nome do Arquivo do Menu (Menu Filename) .......................................................................................... 1389
Código de Inicialização (Startup Code) ..................................................................................................... 1389
Compartilhar Biblioteca com o Form (Share Library with Form) ............................................................. 1389
Segurança do Menu (Menu Security) ............................................................................................................. 1389
Usar Segurança (Use Security) ................................................................................................................... 1389
Atribuições do Módulo (Module Roles) ..................................................................................................... 1389
Página Tab (Tab Page) ...................................................................................................................... 1389
Geral (General) ............................................................................................................................................... 1389
Nome (Name) ............................................................................................................................................ 1389
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1390
Comentários (Comments) ......................................................................................................................... 1390
Funcional (Functional) ................................................................................................................................... 1390
Ativado (Enabled) ...................................................................................................................................... 1390
Etiqueta (Label) .......................................................................................................................................... 1390
Físico (Physical) .............................................................................................................................................. 1390
Visível (Visible) .......................................................................................................................................... 1390
Atributos Visuais (Visual Attribute) ............................................................................................................... 1391
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1391
Atributo Lógico do Modo Caractere (Character Mode Logical Attribute) ................................................ 1391
Branco Sobre Preto (White on Black) ........................................................................................................ 1391
Cor (Color) ..................................................................................................................................................... 1391
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1391
Padrão de Preenchimento (Fill Pattern) .................................................................................................... 1391
Internacional (International) ......................................................................................................................... 1391
Direção (Direction) .................................................................................................................................... 1391
Parâmetro (Parameter) .................................................................................................................... 1392
Geral (General) ............................................................................................................................................... 1392
Nome (Name) ............................................................................................................................................ 1392
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1392
Comentários (Comments) ......................................................................................................................... 1392
Dados (Data) ................................................................................................................................................... 1392
Tipos de Dados de Parâmetro (Parameter Data Type) ............................................................................... 1392
Tamanho Máximo (Maximum Length) ..................................................................................................... 1392
Valor Inicial do Parâmetro (Parameter Initial Value) ................................................................................ 1393
Quadro (Frame) ................................................................................................................................. 1393
Geral (General) ............................................................................................................................................... 1393
LIV
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Nome (Name) ............................................................................................................................................ 1393
Tipos de Gráficos (Graphics Type) ............................................................................................................. 1393
Informações Sobre a Divisão 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 Expansão (Allow Expansion) ....................................................................................................... 1394
ShrinkWrap (ShrinkWrap) ......................................................................................................................... 1394
Preenchimento Vertical (Vertical Fill) ....................................................................................................... 1394
Máximo 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 Várias 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
Número de Registros Exibidos (Number of Records Displayed) ............................................................... 1395
Distância 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
Físico (Physical) .............................................................................................................................................. 1396
Posição X (X Position) ............................................................................................................................... 1396
Posição Y (Y Position) ................................................................................................................................ 1396
Largura (Width) ......................................................................................................................................... 1396
Altura (Height) ........................................................................................................................................... 1396
Largura da Linha (Line Width) .................................................................................................................. 1397
Estilo de Traço (Dash Style) ....................................................................................................................... 1397
Estilo de Maiúsculas/Minúsculas (Cap Style) ............................................................................................ 1397
Estilo de União (Join Style) ........................................................................................................................ 1397
Bevel (Bevel) ............................................................................................................................................... 1397
Atributos Visuais (Visual Attribute) ............................................................................................................... 1397
Grupo de Atributos Visuais (Visual Attribute Group) ............................................................................... 1397
Grupo de Atributos Visuais do Título do Quadro (Frame Title Visual Attribute Group) .......................... 1397
Cor (Color) ..................................................................................................................................................... 1398
Cor de Fundo (Foreground Color) / Cor de Fundo (Background Color) .................................................. 1398
Padrão de Preenchimento (Fill Pattern) .................................................................................................... 1398
Cor de Fundo do Limite (Edge Foreground Color) / Cor de Fundo do Limite
(Edge Background Color) ........................................................................................................................... 1398
Padrão do Limite (Edge Pattern) ................................................................................................................ 1398
Título de Quadro (Frame Title) ...................................................................................................................... 1398
Título do Quadro (Frame Title) ................................................................................................................. 1398
Alinhamento do Título do Quadro (Frame Title Alignment) ................................................................... 1399
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LV
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Deslocamento do Título do Quadro (Frame Title Offset) ......................................................................... 1399
Espaçamento do Título do Quadro (Frame Title Spacing) ........................................................................ 1399
Ordem de Leitura do Título do Quadro (Frame Title Reading Order) ...................................................... 1399
Cor do Título do Quadro (Frame Title Color) ................................................................................................ 1399
Cor de Fundo do Título do Quadro (Frame Title Foreground Color) ....................................................... 1399
Fonte do Título (Frame Title Font) ................................................................................................................. 1399
Nome da Fonte do Título do Quadro (Frame Title Font Name) ............................................................... 1399
Tamanho da Fonte do Título do Quadro (Frame Title Font Size) ............................................................. 1399
Peso da Fonte do Título do Quadro (Frame Title Font Weight) ................................................................ 1399
Estilo da Fonte do Título do Quadro (Frame Title Font Style) .................................................................. 1399
Espaçamento da Fonte do Título do Quadro (Frame Title Font Spacing) ................................................. 1399
Relação (Relation) ............................................................................................................................ 1400
Geral (General) ............................................................................................................................................... 1400
Nome (Name) ............................................................................................................................................ 1400
Tipo de Relação (Relation Type) ................................................................................................................ 1400
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1400
Comentários (Comments) ......................................................................................................................... 1400
Funcional (Functional) ................................................................................................................................... 1400
Bloco de Dados Detalhado (Detail Data Block) ......................................................................................... 1400
Item de Referência de Detalhe (Detail Reference Item) ............................................................................ 1400
Condição de União (Join Condition) ........................................................................................................ 1400
Deletar Comportamento do Registro (Delete Record Behavior) ............................................................... 1401
Impedir Operações sem Mestre (Prevent Masterless Operation) ............................................................... 1401
Coordenação (Coordination) ......................................................................................................................... 1401
Diferido (Deferred) ..................................................................................................................................... 1402
Consulta Automática (Automatic Query) ................................................................................................. 1402
Janela (Window) ............................................................................................................................... 1402
Geral (General) ............................................................................................................................................... 1402
Nome (Name) ............................................................................................................................................ 1402
Informações Sobre a Divisão em Subclasses (Subclass Information) ........................................................ 1402
Comentários (Comments) ......................................................................................................................... 1402
Tópicos do Livro de Ajuda (Help Book Topics) ......................................................................................... 1402
Funcional (Functional) ................................................................................................................................... 1403
Título (Title) ............................................................................................................................................... 1403
Canvas Principal (Primary Canvas) ........................................................................................................... 1403
Canvas da Barra de Rolagem Horizontal (Horizontal Toolbar Canvas) .................................................... 1403
Canvas da Barra de Ferramentas Vertical (Vertical Toolbar Canvas) ......................................................... 1403
Estilo da Janela (Window Style) ................................................................................................................. 1403
Modal (Modal) ........................................................................................................................................... 1403
Ocultar na Saída (Hide on Exit) ................................................................................................................. 1404
Fechamento Permitido (Close Allowed) .................................................................................................... 1404
Movimentação Permitida (Move Allowed) ................................................................................................ 1404
Redimensionamento Permitido (Resize Allowed) ..................................................................................... 1404
Maximização Permitida (Maximize Allowed) ........................................................................................... 1404
Minimização Permitida (Minimize Allowed) ............................................................................................ 1404
Título Minimizado (Minimized Title) ....................................................................................................... 1404
Nome do Arquivo de Ícones (Icon Filename) ........................................................................................... 1404
Herdar Menu (Inherit Menu) ..................................................................................................................... 1405
Físico (Physical) .............................................................................................................................................. 1405
Posição X (X Position) ............................................................................................................................... 1405
Posição Y (Y Position) ................................................................................................................................ 1405
Largura (Width) ......................................................................................................................................... 1405
Altura (Height) ........................................................................................................................................... 1405
LVI
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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 Lógico 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
Padrão 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
Espaçamento da Fonte (Font Spacing) ...................................................................................................... 1407
Internacional (International) ......................................................................................................................... 1407
Direção (Direction) .................................................................................................................................... 1407
CAPÍTULO 14 – VARIÁVEIS DE SISTEMA DOFORMS E VARIÁVEIS DE AMBIENTE .................................................... 1409
Variáveis 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LVII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
System.Mouse_Record_Offset ........................................................................................................................ 1414
System.Record_Status ..................................................................................................................................... 1414
System.Suppress_Working ( * ) ....................................................................................................................... 1414
System.Tab_New_Page ................................................................................................................................... 1414
System.Tab_Previous_Page ............................................................................................................................. 1414
System.Trigger_Block ...................................................................................................................................... 1414
System.Trigger_Item ....................................................................................................................................... 1415
System.Trigger_Node ...................................................................................................................................... 1415
System.Trigger_Record ................................................................................................................................... 1415
Variáveis de Ambiente ...................................................................................................................... 1415
Ca_Gprefs ....................................................................................................................................................... 1416
Ca_Uprefs ....................................................................................................................................................... 1416
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
OleCreateObjPoolInMemory ......................................................................................................................... 1418
OleDoNotUpdateLinks ................................................................................................................................... 1418
OleUpdateLinksPrompt .................................................................................................................................. 1418
Reports60_CGIDiagBodyTags ......................................................................................................................... 1419
Reports60_CGIDiagHeadTags ........................................................................................................................ 1419
Reports60_CGIHlp ......................................................................................................................................... 1419
Reports60_CGIMap ........................................................................................................................................ 1419
Reports60_CGINoDiag ................................................................................................................................... 1419
Reports60_Cookie_Expire .............................................................................................................................. 1419
Reports60_DB_Auth ....................................................................................................................................... 1419
Reports60_Encryption_Key ............................................................................................................................ 1419
Reports60_Path .............................................................................................................................................. 1419
Reports60_Reports_Server .............................................................................................................................. 1420
Reports60_Sys_Auth ....................................................................................................................................... 1420
Reports60_Tmp .............................................................................................................................................. 1420
Reports60_UserExit ........................................................................................................................................ 1420
Ui_Icon ........................................................................................................................................................... 1420
CAPÍTULO 15 – BUILT-INS DO FORMS .......................................................................................................... 1421
Extensões Standard (Standard Extensions) .................................................................................... 1422
ActiveX ........................................................................................................................................................... 1422
Alerta (Alert) ................................................................................................................................................... 1423
Aplicação ........................................................................................................................................................ 1423
Bloco ............................................................................................................................................................... 1424
Canvas-View ................................................................................................................................................... 1424
Canvas (Content) ....................................................................................................................................... 1424
View (Stacked) ............................................................................................................................................ 1424
LVIII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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
Validação ........................................................................................................................................................ 1431
Parâmetro Para Form ...................................................................................................................................... 1431
Query .............................................................................................................................................................. 1432
Record ............................................................................................................................................................. 1432
Record Group ................................................................................................................................................. 1433
Relation .......................................................................................................................................................... 1434
Report ............................................................................................................................................................. 1434
Transaction ..................................................................................................................................................... 1435
Window .......................................................................................................................................................... 1436
Compatibilidade com Versões Anteriores ...................................................................................................... 1436
Vbx ..................................................................................................................................................... 1437
Descrição do Pacote ....................................................................................................................................... 1437
Rotinas do Pacote ........................................................................................................................................... 1437
Texto_Io .............................................................................................................................................. 1438
Descrição do Pacote ....................................................................................................................................... 1438
Rotinas do Pacote ........................................................................................................................................... 1438
Ole2 ..................................................................................................................................................... 1438
Descrição do Pacote ....................................................................................................................................... 1438
Rotinas do Pacote ........................................................................................................................................... 1439
Debug ................................................................................................................................................. 1439
Descrição do Pacote ....................................................................................................................................... 1439
Rotinas do pacote ........................................................................................................................................... 1439
Pecs ..................................................................................................................................................... 1440
Descrição do Pacote ....................................................................................................................................... 1440
Rotinas do Pacote ........................................................................................................................................... 1440
Web ..................................................................................................................................................... 1440
Descrição do Pacote ....................................................................................................................................... 1440
Rotinas do Pacote ........................................................................................................................................... 1440
Ora_Ffi ................................................................................................................................................ 1441
Descrição do Pacote ....................................................................................................................................... 1441
Rotinas do Pacote ........................................................................................................................................... 1441
Ora_prof ............................................................................................................................................. 1442
Descrição do Pacote ....................................................................................................................................... 1442
Rotinas do Pacote ........................................................................................................................................... 1442
Ora_Nls ............................................................................................................................................... 1442
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LIX
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Descrição do Pacote ....................................................................................................................................... 1442
Rotinas do Pacote ........................................................................................................................................... 1442
Tool_Res ............................................................................................................................................. 1443
Descrição do Pacote ....................................................................................................................................... 1443
Rotinas do Pacote ........................................................................................................................................... 1443
Tool_Env ............................................................................................................................................. 1443
Descrição do Pacote ....................................................................................................................................... 1443
Rotinas do Pacote ........................................................................................................................................... 1443
Tool_Err ............................................................................................................................................. 1443
Descrição do Pacote ....................................................................................................................................... 1443
Rotinas do Pacote ........................................................................................................................................... 1443
DDE ..................................................................................................................................................... 1444
Descrição do Pacote ....................................................................................................................................... 1444
Rotinas do Pacote ........................................................................................................................................... 1444
Ora_Java ............................................................................................................................................. 1444
Descrição do Pacote ....................................................................................................................................... 1444
Rotinas do Pacote ........................................................................................................................................... 1444
Jni ....................................................................................................................................................... 1446
Descrição do Pacote ....................................................................................................................................... 1446
Rotinas do Pacote ........................................................................................................................................... 1446
Ftree .................................................................................................................................................... 1447
Descrição do Pacote ....................................................................................................................................... 1447
Rotinas do Pacote ........................................................................................................................................... 1447
Exec_Sql ............................................................................................................................................. 1448
Descrição do Pacote ....................................................................................................................................... 1448
Rotinas do Pacote ........................................................................................................................................... 1448
CAPÍTULO 16 – TRIGGERS DO FORMS .......................................................................................................... 1451
Classificação Funcional .................................................................................................................... 1452
ActiveX (ActiveX) ........................................................................................................................................... 1452
On-Dispatch-Event .................................................................................................................................... 1452
Processamento do Bloco (Block Processing) .................................................................................................. 1452
When-Clear-Block ...................................................................................................................................... 1452
When-Create-Record ................................................................................................................................. 1452
When-Database-Record ............................................................................................................................. 1452
When-Remove-Record ............................................................................................................................... 1452
Eventos de Interface (Interface Event) ........................................................................................................... 1452
When-Button-Pressed ................................................................................................................................ 1453
When-Checkbox-Changed ........................................................................................................................ 1453
When-Custom-Item-Event ........................................................................................................................ 1453
When-Form-Navigate ................................................................................................................................ 1453
When-Image-Activated .............................................................................................................................. 1453
When-Image-Pressed ................................................................................................................................. 1453
When-List-Activated .................................................................................................................................. 1453
When-List-Changed ................................................................................................................................... 1453
When-Mouse-Click .................................................................................................................................... 1453
When-Mouse-DoubleClick ........................................................................................................................ 1453
When-Mouse-Down .................................................................................................................................. 1454
When-Mouse-Enter .................................................................................................................................... 1454
When-Mouse-Leave ................................................................................................................................... 1454
When-Mouse-Move ................................................................................................................................... 1454
When-Mouse-Up ....................................................................................................................................... 1454
When-Radio-Changed ............................................................................................................................... 1454
LX
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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
Navegação (Navigational) .............................................................................................................................. 1459
Post-Block .................................................................................................................................................. 1459
Post-Form ................................................................................................................................................... 1459
Post-Record ................................................................................................................................................ 1459
Post-Text-Item ............................................................................................................................................ 1459
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXI
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Pre-Block .................................................................................................................................................... 1459
Pre-Form ..................................................................................................................................................... 1459
Pre-Popup-Menu ........................................................................................................................................ 1460
Pre-Record .................................................................................................................................................. 1460
Pre-Text-Item .............................................................................................................................................. 1460
When-New-Block-Instance ........................................................................................................................ 1460
When-New-Form-Instance ........................................................................................................................ 1460
When-New-Item-Instance ......................................................................................................................... 1460
When-New-Record-Instance ...................................................................................................................... 1460
Consulta (Query-Time) .................................................................................................................................. 1460
Post-Query ................................................................................................................................................. 1460
Pre-Query ................................................................................................................................................... 1460
Blocos de Procedimentos (Stored Procedures) ............................................................................................... 1460
Query-Procedure ........................................................................................................................................ 1461
Insert-Procedure ......................................................................................................................................... 1461
Delete-Procedure ........................................................................................................................................ 1461
Lock-Procedure .......................................................................................................................................... 1461
Update-Procedure ...................................................................................................................................... 1461
Transacional (Transactional) .......................................................................................................................... 1461
On-Check-Unique ...................................................................................................................................... 1461
On-Close .................................................................................................................................................... 1461
On-Column-Security ................................................................................................................................. 1461
On-Commit ............................................................................................................................................... 1462
On-Count ................................................................................................................................................... 1462
On-Delete ................................................................................................................................................... 1462
On-Fetch .................................................................................................................................................... 1462
On-Insert .................................................................................................................................................... 1462
On-Lock ..................................................................................................................................................... 1462
On-Logon ................................................................................................................................................... 1462
On-Logout .................................................................................................................................................. 1463
On-Rollback ............................................................................................................................................... 1463
On-Savepoint ............................................................................................................................................. 1463
On-Select .................................................................................................................................................... 1463
On-Sequence-Number ............................................................................................................................... 1463
On-Update ................................................................................................................................................. 1463
Post-Change ............................................................................................................................................... 1463
Post-Database-Commit .............................................................................................................................. 1463
Post-Delete ................................................................................................................................................. 1463
Post-Forms-Commit ................................................................................................................................... 1464
Post-Insert .................................................................................................................................................. 1464
Post-Logon ................................................................................................................................................. 1464
Post-Logout ................................................................................................................................................ 1464
Post-Select .................................................................................................................................................. 1464
Post-Update ................................................................................................................................................ 1464
Pre-Commit ............................................................................................................................................... 1464
Pre-Delete ................................................................................................................................................... 1464
Pre-Insert .................................................................................................................................................... 1464
Pre-Logon ................................................................................................................................................... 1464
Pre-Logout .................................................................................................................................................. 1464
Pre-Select .................................................................................................................................................... 1465
Pre-Update ................................................................................................................................................. 1465
Validação (Validation) .................................................................................................................................... 1465
When-Validate-Item .................................................................................................................................. 1465
When-Validate-Record ............................................................................................................................... 1465
LXII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Classificação por Prefixo ................................................................................................................. 1465
On-<evento> .................................................................................................................................................. 1465
Post-<evento> ................................................................................................................................................. 1466
Pre-<evento> .................................................................................................................................................. 1467
When-<evento> .............................................................................................................................................. 1467
Key-* ............................................................................................................................................................... 1468
CAPÍTULO 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
Administração (Administration) .................................................................................................................... 1473
Acesso ao Módulo (Module Access) ........................................................................................................... 1473
Relatório 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
Opções de Controle de Origem (Source Control Options) ....................................................................... 1474
Configurar Página (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
Réguas (Rulers) ............................................................................................................................................... 1475
Guias de Régua (Ruler Guides) ....................................................................................................................... 1476
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXIII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Grade (Grid) ................................................................................................................................................... 1476
Alinhar à Grade (Snap to Grid) ...................................................................................................................... 1476
Paleta de Ferramentas (Tool Palette) .............................................................................................................. 1476
Barra de Status (Status Bar) ............................................................................................................................. 1476
Mostrar View (Show View) ............................................................................................................................. 1476
Mostrar Canvas (Show Canvas) ..................................................................................................................... 1476
Views Sobrepostas (Stacked Views) ................................................................................................................ 1476
Menu Navegador (Navigator) ........................................................................................................... 1476
Expandir (Expand) ......................................................................................................................................... 1476
Recolher (Collapse) ........................................................................................................................................ 1476
Expandir Tudo (Expand All) ........................................................................................................................... 1476
Recolher Tudo (Collapse All) .......................................................................................................................... 1477
Criar (Create) .................................................................................................................................................. 1477
Deletar (Delete) .............................................................................................................................................. 1477
Adicionar Marcador (Add Bookmark) ............................................................................................................ 1477
Ir Para Marcador (GoTo Bookmark) ............................................................................................................... 1477
Colar Nome (Paste Name) .............................................................................................................................. 1477
Colar Argumentos (Paste Arguments) ............................................................................................................ 1477
Menu Formato (Format) ................................................................................................................... 1477
Fonte (Font) .................................................................................................................................................... 1477
Justificar (Justify) ............................................................................................................................................ 1477
Espaçamento de Texto (Text Spacing) ............................................................................................................ 1477
Largura da Linha (Line Width) ...................................................................................................................... 1478
Bevel ............................................................................................................................................................... 1478
Traço (Dash) ................................................................................................................................................... 1478
Seta (Arrow) .................................................................................................................................................... 1478
Borda (Border) ................................................................................................................................................ 1478
Opções de Gráficos (Graphics Options) ......................................................................................................... 1478
Geral (General) .......................................................................................................................................... 1478
Texto (Text) ................................................................................................................................................ 1478
Imagem (Image) ......................................................................................................................................... 1478
Arco (Arc) ................................................................................................................................................... 1478
Retângulo Arredondado (Rounded Rectangle) .......................................................................................... 1478
Reduzir Resolução da Imagem (Reduce Image Resolution) ....................................................................... 1478
Opções de Layout (Layout Options) .............................................................................................................. 1479
Menu Organizar (Arrange) .............................................................................................................. 1479
Atualizar Layout (Update Layout) .................................................................................................................. 1479
Trazer Para Frente (Bring to Front) ................................................................................................................. 1479
Enviar Para Trás (Send to Back) ...................................................................................................................... 1479
Mover Para Frente (Move Forward) ............................................................................................................... 1479
Mover Para Trás (Move Backward) ................................................................................................................. 1479
Alinhar Objetos (Align Objects) ..................................................................................................................... 1479
Repetir Alinhamento (Repeat Alignment) ..................................................................................................... 1479
Dimensionar Objetos (Size Objects) .............................................................................................................. 1479
Repetir Dimensionamento (Repeat Sizing) .................................................................................................... 1479
Prompt Associado (Associate Prompt) ........................................................................................................... 1480
Agrupar (Group) ............................................................................................................................................. 1480
Desagrupar (Ungroup) .................................................................................................................................... 1480
Agrupar Operações (Group Operations) ........................................................................................................ 1480
Selecionar Pai (Select Parent) ..................................................................................................................... 1480
Selecionar Filhos (Select Childrens) .......................................................................................................... 1480
Adicionar no Grupo (Add to Group) ......................................................................................................... 1480
Remover do Grupo (Remove from Group) ................................................................................................ 1480
LXIV
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Menu Programa (Program) .............................................................................................................. 1480
Executar Form (Run Form) ............................................................................................................................. 1480
Cliente/Servidor (Client/Server) ................................................................................................................ 1480
Web (Web) ................................................................................................................................................. 1480
Depurar (Debug) ........................................................................................................................................ 1480
Compilar (Compile) ....................................................................................................................................... 1481
Compilar Seleção (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 Gráfico (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
Preferências (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
Próxima Ocorrência (Next Instance) ............................................................................................................. 1483
Alternar Orientação (Switch Orientation) ..................................................................................................... 1483
Menu Ajuda (Help) ............................................................................................................................ 1483
Tópicos 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
CAPÍTULO 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXV
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Fechar Verticalmente (Collapse Vertically) ............................................................................................... 1486
Texto Padronizado (Boilerplate) ..................................................................................................... 1487
Informações Gerais (General Information) ................................................................................................... 1487
Nome (Name) ............................................................................................................................................ 1487
Comentários (Comments) ......................................................................................................................... 1487
Texto Padronizado (Boilerplate)/Texto Padronizado do Arquivo de Vínculo (Link File) .............................. 1487
Tipo (Type) ................................................................................................................................................. 1487
Extensão da Linha com Quadro (Line Stretch With Frame) ..................................................................... 1487
Formato do Arquivo de Origem (Source File Format) ............................................................................... 1487
Nome do Arquivo de Origem (Source Filename) ...................................................................................... 1487
Configurações de Web (Web Configuration) ................................................................................................. 1487
Destino de Hiperligação (Hyperlink Destination) ..................................................................................... 1487
Marcador (Bookmark) ................................................................................................................................ 1488
Contém Tags HTML (Contains HTML Tags) ............................................................................................. 1488
Nome de Exibição (HTML) - (Display Name) ........................................................................................... 1488
Hiperligação (Hyperlink) ........................................................................................................................... 1488
Linha de Comandos da Aplicação (PDF) - (Application Command Line (PDF)) ...................................... 1488
Layout Geral (General Layout) ...................................................................................................................... 1488
Quebra de Página Anterior (Page Break Before) ........................................................................................ 1488
Quebra de Página Posterior (Page Break After) .......................................................................................... 1488
Proteção de Página (Page Protect) .............................................................................................................. 1489
Elasticidade Vertical (Vertical Elasticity) ................................................................................................... 1489
Elasticidade Horizontal (Horizontal Elasticity) ......................................................................................... 1489
Mínimo de Linhas Viúvas (Minimum Widow Lines) ................................................................................ 1489
Formatação Condicional (Conditional Formatting) ................................................................................. 1489
Layout Avançado (Advanced Layout) ............................................................................................................ 1489
Impressão de Objeto Ativada (Print Object On) ....................................................................................... 1489
Impressão de Base Ativada (Base Printing On) .......................................................................................... 1490
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1490
Gatilho de Formato (Format Trigger) ........................................................................................................ 1490
Código da Impressora Anterior (Printer Code Before) .............................................................................. 1490
Código da Impressora Posterior (Printer Code After) ................................................................................ 1490
Boilerplate da Tela de Parâmetros (Parameter Form Boilerplate) .............................................. 1490
Informações Gerais (General Information) ................................................................................................... 1490
Nome (Name) ............................................................................................................................................ 1490
Comentários (Comments) ......................................................................................................................... 1490
Texto Padronizado do Form de Parâmetros (Form Parameter Boilerplate) ................................................... 1491
Tipo (Type) ................................................................................................................................................. 1491
Configurações de Web (Web Configuration) ................................................................................................. 1491
Contém Tags HTML (Contains HTML Tags) ............................................................................................. 1491
Botão (Button) .................................................................................................................................. 1491
Informações Gerais (General Information) ................................................................................................... 1491
Nome (Name) ............................................................................................................................................ 1491
Comentários (Comments) ......................................................................................................................... 1491
Label do Botão (Button Label) ....................................................................................................................... 1491
Tipo de Etiqueta (Label Type) .................................................................................................................... 1491
Texto (Text) ................................................................................................................................................ 1491
Nome do Ícone (Icon Name) ..................................................................................................................... 1491
Comportamento do Botão (Button Behavior) ............................................................................................... 1491
Tipo (Type) ................................................................................................................................................. 1491
Arquivo Multimídia (Multimedia File) ...................................................................................................... 1492
Tipo de Arquivo Multimídia (Multimedia File Type) ................................................................................ 1492
Coluna Multimídia (Multimedia Column) ............................................................................................... 1492
LXVI
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Tipo de Coluna Multimídia (Multimedia Column Type) ......................................................................... 1492
Gatilho PL/SQL (PL/SQL Trigger) .............................................................................................................. 1492
Configurações de Web (Web Configuration) ................................................................................................. 1492
Destino de Hiperligação (Hyperlink Destination) ..................................................................................... 1492
Marcador (Bookmark) ................................................................................................................................ 1492
Hiperligação (Hyperlink) ........................................................................................................................... 1492
Linha de Comandos da Aplicação (PDF) - (Application Command Line (PDF)) ...................................... 1493
Layout Geral (General Layout) ...................................................................................................................... 1493
Quebra de Página Anterior (Page Break Before) ........................................................................................ 1493
Quebra de Página Posterior (Page Break After) .......................................................................................... 1493
Proteção de Página (Page Protect) .............................................................................................................. 1493
Formatação Condicional (Conditional Formatting) ................................................................................. 1493
Layout Avançado (Advanced Layout) ............................................................................................................ 1493
Impressão de Objeto Ativada (Print Object On) ....................................................................................... 1493
Impressão de Base Ativada (Base Printing On) .......................................................................................... 1494
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1494
Gatilho de Formato (Format Trigger) ........................................................................................................ 1494
Código da Impressora Anterior (Printer Code Before) .............................................................................. 1494
Código da Impressora Posterior (Printer Code After) ................................................................................ 1494
Campo (Field) .................................................................................................................................... 1494
Informações Gerais (General Information) ................................................................................................... 1494
Nome (Name) ............................................................................................................................................ 1494
Comentários (Comments) ......................................................................................................................... 1494
Campo (Field) ................................................................................................................................................. 1494
Origem (Source) ......................................................................................................................................... 1494
Tipo de Dados de Origem (Source Datatype) ............................................................................................ 1495
Visível (Visible) .......................................................................................................................................... 1495
Máscara de Formato (Format Mask) .......................................................................................................... 1495
Numeração de Página (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/Fórmula (PlaceHolder/Formula) ..................................................................................... 1496
Fórmula PL/SQL (PL/SQL Formula) ........................................................................................................... 1496
Sumário (Summary) ....................................................................................................................................... 1496
Função (Function) ..................................................................................................................................... 1496
Origem (Source) ......................................................................................................................................... 1496
Reiniciar (Reset At) ..................................................................................................................................... 1497
Computar (Compute At) ........................................................................................................................... 1497
Configurações de Web (Web Configuration) ................................................................................................. 1497
Destino de Hiperligação (Hyperlink Destination) ..................................................................................... 1497
Marcador (Bookmark) ................................................................................................................................ 1497
Contém Tags HTML (Contains HTML Tags) ............................................................................................. 1497
Hiperligação (Hyperlink) ........................................................................................................................... 1497
Linha de Comandos da Aplicação (PDF) - (Application Command Line (PDF)) ..................................... 1497
Layout Geral (General Layout) ...................................................................................................................... 1498
Quebra de Página Anterior (Page Break Before) ........................................................................................ 1498
Quebra de Página Posterior (Page Break After) .......................................................................................... 1498
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXVII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Proteção de Página (Page Protect) .............................................................................................................. 1498
Elasticidade Vertical (Vertical Elasticity) ................................................................................................... 1498
Elasticidade Horizontal (Horizontal Elasticity) ......................................................................................... 1498
Mínimo de Linhas Viúvas (Minimum Widow Lines) ................................................................................ 1498
Formatação Condicional (Conditional Formatting) ................................................................................. 1498
Layout Avançado (Advanced Layout) ............................................................................................................ 1499
Impressão de Objeto Ativada (Print Object On) ....................................................................................... 1499
Impressão de Base Ativada (Base Printing On) .......................................................................................... 1499
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1499
Gatilho de Formato (Format Trigger) ........................................................................................................ 1499
Código da Impressora Anterior (Printer Code Before) .............................................................................. 1499
Código da Impressora Posterior (Printer Code After) ................................................................................ 1499
Campo da Tela de Parâmetros (Parameter Form Field) ................................................................ 1500
Informações Gerais (General Information) ................................................................................................... 1500
Nome (Name) ............................................................................................................................................ 1500
Comentários (Comments) ......................................................................................................................... 1500
Campo do Form de Parâmetros (Parameter Form Field) ............................................................................... 1500
Origem (Source) ......................................................................................................................................... 1500
Parâmetro (Parameter) ................................................................................................................................... 1500
Tipo de Dados (Datatype) .......................................................................................................................... 1500
Largura (Width) ......................................................................................................................................... 1500
Máscara de Entrada (Input Mask) .............................................................................................................. 1500
Valor Inicial (Initial Value) ........................................................................................................................ 1500
Gatilho de Validação (Validation Trigger) ................................................................................................. 1500
Configurações de Web (Web Configuration) ................................................................................................. 1500
Atributos Adicionais (HTML) (Additional Attributes (HTML)) ................................................................. 1500
Coluna de Espaço Reservado (Placeholder) .................................................................................... 1501
Informações Gerais (General Information) ................................................................................................... 1501
Nome (Name) ............................................................................................................................................ 1501
Comentários (Comments) ......................................................................................................................... 1501
Coluna (Column) ........................................................................................................................................... 1501
Tipo de Coluna (Column Type) ................................................................................................................. 1501
Tipo de Dados (Datatype) .......................................................................................................................... 1501
Largura (Width) ......................................................................................................................................... 1501
Valor se Nulo (Value If Null) ...................................................................................................................... 1501
Ler do Arquivo (Read From File) ................................................................................................................ 1501
Formato de Arquivo (File Format) ............................................................................................................. 1501
Definições XML (XML Definitions) ............................................................................................................... 1501
Tag XML (XML Tag) ................................................................................................................................... 1501
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1502
Excluir de Saída XML (Exclude from XML Output) .................................................................................. 1502
Contém Tags XML (Contains XML Tags) .................................................................................................. 1502
Marcador de Lugar/Fórmula (PlaceHolder/Formula) ..................................................................................... 1502
Fórmula PL/SQL (PL/SQL Formula) ........................................................................................................... 1502
Coluna de Fórmula (Formula Column) ........................................................................................... 1502
Informações Gerais (General Information) ................................................................................................... 1502
Nome (Name) ............................................................................................................................................ 1502
Comentários (Comments) ......................................................................................................................... 1502
Coluna (Column) ........................................................................................................................................... 1502
Tipo de Coluna (Column Type) ................................................................................................................. 1502
Tipo de Dados (Datatype) .......................................................................................................................... 1502
Largura (Width) ......................................................................................................................................... 1503
Valor se Nulo (Value If Null) ...................................................................................................................... 1503
LXVIII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Ordem de Quebra (Break Order) ................................................................................................................ 1503
Ler do Arquivo (Read From File) ................................................................................................................ 1503
Formato de Arquivo (File Format) ............................................................................................................. 1503
Marcador de Lugar/Fórmula (PlaceHolder/Formula) ..................................................................................... 1503
Fórmula PL/SQL (PL/SQL Formula) ........................................................................................................... 1503
Definições XML (XML Definitions) ............................................................................................................... 1503
Tag XML (XML Tag) ................................................................................................................................... 1503
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1503
Excluir de Saída XML (Exclude from XML Output) .................................................................................. 1504
Contém Tags XML (Contains XML Tags) .................................................................................................. 1504
Coluna de Resumo (Summary Column) .......................................................................................... 1504
Informações Gerais (General Information) ................................................................................................... 1504
Nome (Name) ............................................................................................................................................ 1504
Comentários (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
Sumário (Summary) ....................................................................................................................................... 1505
Função (Function) ..................................................................................................................................... 1505
Origem (Source) ......................................................................................................................................... 1505
Reiniciar (Reset At) ..................................................................................................................................... 1505
Computar (Compute At) ........................................................................................................................... 1505
Definições XML (XML Definitions) ............................................................................................................... 1505
Tag XML (XML Tag) ................................................................................................................................... 1505
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1506
Excluir de Saída XML (Exclude from XML Output) .................................................................................. 1506
Contém Tags XML (Contains XML Tags) .................................................................................................. 1506
Coluna do Banco de Dados (Database Column) ............................................................................. 1506
Informações Gerais (General Information) ................................................................................................... 1506
Nome (Name) ............................................................................................................................................ 1506
Comentários (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
Definições XML (XML Definitions) ............................................................................................................... 1507
Tag XML (XML Tag) ................................................................................................................................... 1507
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1507
Excluir de Saída XML (Exclude from XML Output) .................................................................................. 1507
Contém Tags XML (Contains XML Tags) .................................................................................................. 1507
Consulta (Query) ............................................................................................................................... 1508
Informações Gerais (General Information) ................................................................................................... 1508
Nome (Name) ............................................................................................................................................ 1508
Comentários (Comments) ......................................................................................................................... 1508
Consulta (Query) ............................................................................................................................................ 1508
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXIX
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Tipo (Type) ................................................................................................................................................. 1508
Arquivo de Origem de Consulta Externo (External Query Source File) .................................................... 1508
Instrução de Consulta SQL (SQL Query Statement) .................................................................................. 1508
Máximo de Linhas a Obter (Maximum Rows to Fetch) ............................................................................ 1508
Gráfico (Chart) .................................................................................................................................. 1508
Informações Gerais (General Information) ................................................................................................... 1508
Nome (Name) ............................................................................................................................................ 1508
Comentários (Comments) ......................................................................................................................... 1508
Gráfico (Chart) ............................................................................................................................................... 1508
Nome do Arquivo de Gráfico (Chart Filename) ........................................................................................ 1508
Parâmetros e Colunas (Parameters and Columns) .................................................................................... 1509
Hiperligação de Gráfico (Chart HyperLink) .............................................................................................. 1509
Configurações de Web (Web Configuration) ................................................................................................. 1509
Destino de Hiperligação (Hyperlink Destination) ..................................................................................... 1509
Marcador (Bookmark) ................................................................................................................................ 1509
Nome de Exibição (Display Name) ............................................................................................................ 1509
Hiperligação (Hyperlink) ........................................................................................................................... 1509
Linha de Comandos da Aplicação (PDF) – (Application Command Line (PDF)) ..................................... 1509
Layout Geral (General Layout) ...................................................................................................................... 1510
Quebra de Página Anterior (Page Break Before) ........................................................................................ 1510
Quebra de Página Posterior (Page Break After) .......................................................................................... 1510
Proteção de Página (Page Protect) .............................................................................................................. 1510
Elasticidade Vertical (Vertical Elasticity) ................................................................................................... 1510
Elasticidade Horizontal (Horizontal Elasticity) ......................................................................................... 1510
Formatação Condicional (Conditional Formatting) ................................................................................. 1510
Layout Avançado (Advanced Layout) ............................................................................................................ 1510
Impressão de Objeto Ativada (Print Object On) ....................................................................................... 1510
Impressão de Base Ativada (Base Printing On) .......................................................................................... 1511
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1511
Gatilho de Formato (Format Trigger) ........................................................................................................ 1511
Código da Impressora Anterior (Printer Code Before) .............................................................................. 1511
Código da Impressora Posterior (Printer Code After) ................................................................................ 1511
Grupo (Group) ................................................................................................................................... 1511
Informações Gerais (General Information) ................................................................................................... 1511
Nome (Name) ............................................................................................................................................ 1511
Comentários (Comments) ......................................................................................................................... 1512
Grupo (Group) ............................................................................................................................................... 1512
Tipo de Filtro (Filter Type) ......................................................................................................................... 1512
Número de Registros (Number of Records) ............................................................................................... 1512
Filtro PL/SQL (PL/SQL Filter) ..................................................................................................................... 1512
Definições XML (XML Definitions) ............................................................................................................... 1512
Tag XML (XML Tag) ................................................................................................................................... 1512
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1512
Excluir de Saída XML (Exclude from XML Output) .................................................................................. 1512
Tag XML Externa (Outer XML Tag) ........................................................................................................... 1512
Atributos XML Externos (Outer XML Attributes) ..................................................................................... 1513
Ligação de Dados (Link) ................................................................................................................... 1513
Cláusula SQL (SQL Clause) ........................................................................................................................ 1513
Condição (Condition) ............................................................................................................................... 1513
Grupo-Pai (Parent Group) .......................................................................................................................... 1513
Coluna-Pai (Parent Column) ..................................................................................................................... 1513
Consulta-Filha (Child Query) .................................................................................................................... 1513
Coluna-Filha (Child Column) ................................................................................................................... 1513
LXX
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Matriz (Matrix) ................................................................................................................................. 1513
Informações Gerais (General Information) ................................................................................................... 1513
Nome (Name) ............................................................................................................................................ 1513
Comentários (Comments) ......................................................................................................................... 1514
Matriz (Matrix) ............................................................................................................................................... 1514
Quadro de Repetição Vertical (Vertical Repeating Frame)......................................................................... 1514
Quadro de Repetição Horizontal (Horizontal Repeating Frame) .............................................................. 1514
Grupo de Produto Cruzado (Cross Product Group) .................................................................................. 1514
Configurações de Web (Web Configuration) ................................................................................................. 1514
Destino de Hiperligação (Hyperlink Destination) ..................................................................................... 1514
Marcador (Bookmark) ................................................................................................................................ 1514
Hiperligação (Hyperlink) ........................................................................................................................... 1514
Linha de Comandos da Aplicação (PDF) - (Application Command Line – (PDF)) ................................... 1515
Módulo Relatório (Report) ............................................................................................................... 1515
Informações Gerais (General Information) ................................................................................................... 1515
Nome (Name) ............................................................................................................................................ 1515
Comentários (Comments) ......................................................................................................................... 1515
Relatório (Report) ........................................................................................................................................... 1515
Unidade de Medida (Unit of Measurement) ............................................................................................. 1515
Máx. de Páginas de Corpo Horizontais (Maximum Horizontal Body Pages)............................................ 1515
Máx. de Páginas de Corpo Verticais (Maximum Vertical Body Pages) ...................................................... 1515
Ordem de Impressão do Painel (Panel Print Order) .................................................................................. 1515
Direção (Direction) .................................................................................................................................... 1516
Título do Previsualizador (Preview Title) ................................................................................................... 1516
Nome da Função (Role Name) ................................................................................................................... 1516
Distribuição (Distribution) ........................................................................................................................ 1516
Janela de Form de Parâmetros (Parameter Form Window) ............................................................................ 1516
Largura (Width) ......................................................................................................................................... 1516
Altura (Height) ........................................................................................................................................... 1516
Número de Páginas (Number of Pages) ..................................................................................................... 1516
Escapes de Relatório (Report Escapes) ............................................................................................................ 1517
Antes do Tipo de Relatório (Before Report Type) ...................................................................................... 1517
Antes do Valor do Relatório (Before Report Value) ................................................................................... 1517
Depois do Tipo de Relatório (After Report Type) ...................................................................................... 1517
Depois do Valor do Relatório (After Report Value) ................................................................................... 1517
Antes do Tipo de Página (Before Page Type) ............................................................................................. 1517
Antes do Valor da Página (Before Page Value) ........................................................................................... 1517
Depois do Tipo de Página (After Page Type) .............................................................................................. 1517
Depois do Valor da Página (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 Página de Navegação (Page Navigation Control Type) ............................................ 1518
Valor de Controle da Página de Navegação (Page Navigation Control Value) ......................................... 1518
Definições XML (XML Definitions) ............................................................................................................... 1518
Tag XML (XML Tag) ................................................................................................................................... 1518
Atributos de Tag XML (XML Attribute Tag) .............................................................................................. 1518
Tipo de Prólogo XML (XML Prolog Type) ................................................................................................. 1519
Valor de Prólogo 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXI
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Usar Linha de Status do Previsualizador (Use Previewer Status Line) ....................................................... 1519
Incluir Objetos de Bitmap (Include Bitmapped Objects) .......................................................................... 1519
Incluir Bordas (Include Borders) ................................................................................................................ 1519
Desativar Item de Menu do Host (Disable Host Menu Item) .................................................................... 1519
Desativar Tecla de Tela Dividida (Disable Split Screen Key) ...................................................................... 1519
Desativar Tecla de Zoom (Disable Zoom Key) ........................................................................................... 1519
Iniciar no Zoom (Start in Zoom) ............................................................................................................... 1520
Suprimir Título do Previsualizador (Suppress Previewer Title) ................................................................. 1520
Objeto OLE2 (OLE2 Object) ............................................................................................................... 1520
Informações Gerais (General Information) ................................................................................................... 1520
Nome (Name) ............................................................................................................................................ 1520
Comentários (Comments) ......................................................................................................................... 1520
Configurações de Web (Web Configuration) ................................................................................................. 1520
Destino de Hiperligação (Hyperlink Destination) ..................................................................................... 1520
Marcador (Bookmark) ................................................................................................................................ 1520
Hiperligação (Hyperlink) ........................................................................................................................... 1520
Linha de Comandos da Aplicação (PDF) - (Application Command Line (PDF)) ..................................... 1521
Layout Geral (General Layout) ...................................................................................................................... 1521
Quebra de Página Anterior (Page Break Before) ........................................................................................ 1521
Quebra de Página Posterior (Page Break After) .......................................................................................... 1521
Proteção de Página (Page Protect) .............................................................................................................. 1521
Elasticidade Vertical (Vertical Elasticity) ................................................................................................... 1521
Elasticidade Horizontal (Horizontal Elasticity) ......................................................................................... 1521
Formatação Condicional (Conditional Formatting) ................................................................................. 1521
Layout Avançado (Advanced Layout) ............................................................................................................ 1522
Impressão de Objeto Ativada (Print Object On) ....................................................................................... 1522
Impressão de Base Ativada (Base Printing On) .......................................................................................... 1522
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1522
Gatilho de Formato (Format Trigger) ........................................................................................................ 1522
Código da Impressora Anterior (Printer Code Before) .............................................................................. 1522
Código da Impressora Posterior (Printer Code After) ................................................................................ 1522
Parâmetro (Parameter) .................................................................................................................... 1523
Informações Gerais (General Information) ................................................................................................... 1523
Nome (Name) ............................................................................................................................................ 1523
Comentários (Comments) ......................................................................................................................... 1523
Parâmetro (Parameter) ................................................................................................................................... 1523
Tipo de Dados (Datatype) .......................................................................................................................... 1523
Largura (Width) ......................................................................................................................................... 1523
Máscara de Entrada (Input Mask) .............................................................................................................. 1523
Valor Inicial (Initial Value) ........................................................................................................................ 1523
Gatilho de Validação (Validation Trigger) ................................................................................................. 1523
Lista de Valores (List of Values) ................................................................................................................. 1523
Quadro (Frame) ................................................................................................................................. 1523
Informações Gerais (General Information) ................................................................................................... 1523
Nome (Name) ............................................................................................................................................ 1523
Comentários (Comments) ......................................................................................................................... 1524
Configurações de Web (Web Configuration) ................................................................................................. 1524
Destino de Hiperligação (Hyperlink Destination) ..................................................................................... 1524
Marcador(Bookmark) ................................................................................................................................. 1524
Hiperligação (Hyperlink) ........................................................................................................................... 1524
Linha de Comandos da Aplicação (PDF) - (Application Command Line (PDF)) ...................................... 1524
Layout Geral (General Layout) ...................................................................................................................... 1524
Quebra de Página Anterior (Page Break Before) ........................................................................................ 1524
LXXII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Quebra de Página Posterior (Page Break After) .......................................................................................... 1524
Proteção de Página (Page Protect) .............................................................................................................. 1525
Elasticidade Vertical (Vertical Elasticity) ................................................................................................... 1525
Elasticidade Horizontal (Horizontal Elasticity) ......................................................................................... 1525
Formatação Condicional (Conditional Formatting) ................................................................................. 1525
Layout Avançado (Advanced Layout) ............................................................................................................ 1525
Impressão de Objeto Ativada (Print Object On) ....................................................................................... 1525
Impressão de Base Ativada (Base Printing On) .......................................................................................... 1526
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1526
Gatilho de Formato (Format Trigger) ........................................................................................................ 1526
Código da Impressora Anterior (Printer Code Before) .............................................................................. 1526
Código da Impressora Posterior (Printer Code After) ................................................................................ 1526
Final da Seção de Layout (End of Layout Section) .................................................................................... 1526
Quadro de Repetição (Repeating Frame) ........................................................................................ 1526
Informações Gerais (General Information) ................................................................................................... 1526
Nome (Name) ............................................................................................................................................ 1526
Comentários (Comments) ......................................................................................................................... 1526
Quadro de Repetição (Repeating Frame) ........................................................................................................ 1526
Origem (Source) ......................................................................................................................................... 1526
Direção de Impressão (Print Direction) ..................................................................................................... 1527
Máximo de Registros por Página (Maximum Records Per Page) ............................................................... 1527
Mínimo de Registros Viúvos (Minimum Widow Records) ........................................................................ 1527
Modo de Coluna (Column Mode) ............................................................................................................. 1527
Espaçamento Horiz. Entre Quadros (Horiz. Space Between Frames) ........................................................ 1527
Espaçamento Vert. Entre Quadros (Vert. Space Between Frames) ............................................................. 1527
Grupo (Group) ............................................................................................................................................... 1527
Tipo de Filtro (Filter Type) ......................................................................................................................... 1527
Número de Registros (Number of Records) ............................................................................................... 1527
Filtro PL/SQL (PL/SQL Filter) ..................................................................................................................... 1528
Configurações de Web (Web Configuration) ................................................................................................. 1528
Destino de Hiperligação (Hyperlink Destination) ..................................................................................... 1528
Marcador (Bookmark) ................................................................................................................................ 1528
Hiperligação (Hyperlink) ........................................................................................................................... 1528
Linha de Comandos da Aplicação (PDF) – (Application Command Line (PDF)) ..................................... 1528
Layout Geral (General Layout) ...................................................................................................................... 1528
Quebra de Página Anterior (Page Break Before) ........................................................................................ 1528
Quebra de Página Posterior (Page Break After) .......................................................................................... 1528
Proteção de Página (Page Protect) .............................................................................................................. 1529
Elasticidade Vertical (Vertical Elasticity) ................................................................................................... 1529
Elasticidade Horizontal (Horizontal Elasticity) ......................................................................................... 1529
Formatação Condicional (Conditional Formatting) ................................................................................. 1529
Layout Avançado (Advanced Layout) ............................................................................................................ 1529
Impressão de Objeto Ativada (Print Object On) ....................................................................................... 1529
Impressão de Base Ativada (Base Printing On) .......................................................................................... 1530
Manter com Objeto de Ancoragem (Keep With Anchoring Object) ......................................................... 1530
Gatilho de Formato (Format Trigger) ........................................................................................................ 1530
Código da Impressora Anterior (Printer Code Before) .............................................................................. 1530
Código da Impressora Posterior (Printer Code After) ................................................................................ 1530
Seção (Section) ................................................................................................................................... 1530
Seção (Section) ............................................................................................................................................... 1530
Largura (Width) ......................................................................................................................................... 1530
Altura (Height) ........................................................................................................................................... 1530
Painéis Horizontais por Página (Horizontal Panels per Page) ................................................................... 1530
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXIII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Painéis Verticais por Página (Vertical Panels per Page) ............................................................................. 1530
Orientação (Orientation) ........................................................................................................................... 1531
Distribuição (Distribution) ........................................................................................................................ 1531
Modo Caractere (Character Mode) ................................................................................................................ 1531
Largura do Relatório (Report Width) ......................................................................................................... 1531
Altura do Relatório (Report Height) .......................................................................................................... 1531
CAPÍTULO 19 – PARÂMETROS DE EXECUÇÃO ................................................................................................. 1533
Para Relatórios .................................................................................................................................. 1534
Access ............................................................................................................................................................. 1534
Arraysize ......................................................................................................................................................... 1534
Authid ............................................................................................................................................................ 1534
Autocommit ................................................................................................................................................... 1534
Background .................................................................................................................................................... 1534
Batch ............................................................................................................................................................... 1535
BlankPages ...................................................................................................................................................... 1535
Buffers ............................................................................................................................................................. 1535
CacheLob ........................................................................................................................................................ 1535
CellWrapper ................................................................................................................................................... 1535
Cmdfile ........................................................................................................................................................... 1535
Copies ............................................................................................................................................................. 1535
Currency ......................................................................................................................................................... 1536
Customize ....................................................................................................................................................... 1536
DateFormatMask ............................................................................................................................................ 1536
Decimal .......................................................................................................................................................... 1536
Delimiter ........................................................................................................................................................ 1536
Desformat ....................................................................................................................................................... 1536
Desname ......................................................................................................................................................... 1537
Destination ..................................................................................................................................................... 1537
Destype ........................................................................................................................................................... 1537
DisableFile ...................................................................................................................................................... 1538
DisableMail ..................................................................................................................................................... 1538
DisableNew ..................................................................................................................................................... 1538
DisablePrint .................................................................................................................................................... 1538
Distribute ........................................................................................................................................................ 1538
Errfile .............................................................................................................................................................. 1538
Express_Server ................................................................................................................................................ 1539
Jobname ......................................................................................................................................................... 1539
Keyin .............................................................................................................................................................. 1539
Keyout ............................................................................................................................................................ 1539
Logfile ............................................................................................................................................................. 1539
Longchunk ..................................................................................................................................................... 1539
Maximize ........................................................................................................................................................ 1539
Mode .............................................................................................................................................................. 1540
Module | Report .............................................................................................................................................. 1540
Nonblocksql ................................................................................................................................................... 1540
NumberFormatMask ...................................................................................................................................... 1540
PageStream ..................................................................................................................................................... 1540
Onfailure ........................................................................................................................................................ 1540
Onsuccess ....................................................................................................................................................... 1540
Orientation ..................................................................................................................................................... 1541
Pagesize ........................................................................................................................................................... 1541
Paramform ...................................................................................................................................................... 1541
Printjob ........................................................................................................................................................... 1541
LXXIV
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXV
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Add_Triggers ................................................................................................................................................... 1550
Batch ............................................................................................................................................................... 1550
Build ............................................................................................................................................................... 1550
Compile_All ................................................................................................................................................... 1551
Crt_File ........................................................................................................................................................... 1551
Debug ............................................................................................................................................................. 1551
Delete ............................................................................................................................................................. 1551
Extract ............................................................................................................................................................ 1551
Help ................................................................................................................................................................ 1551
Insert .............................................................................................................................................................. 1551
Logon ............................................................................................................................................................. 1551
Module_Access ............................................................................................................................................... 1551
Module_Type .................................................................................................................................................. 1551
Nofail .............................................................................................................................................................. 1552
Options_Screen .............................................................................................................................................. 1552
Output_File ..................................................................................................................................................... 1552
Parse ............................................................................................................................................................... 1552
Script .............................................................................................................................................................. 1552
Statistics .......................................................................................................................................................... 1552
Strip_Source .................................................................................................................................................... 1552
Upgrade .......................................................................................................................................................... 1553
Upgrade_Roles ................................................................................................................................................ 1553
Version ........................................................................................................................................................... 1553
Widen_Fields .................................................................................................................................................. 1553
CAPÍTULO 20 – OS MENUS DO REPORT BUILDER .......................................................................................... 1555
Menu Arquivo (File) .......................................................................................................................... 1556
Novo (New) .................................................................................................................................................... 1556
Abrir (Open) ................................................................................................................................................... 1556
Fechar (Close) ................................................................................................................................................. 1556
Salvar (Save) ................................................................................................................................................... 1556
Salvar Como (Save As) .................................................................................................................................... 1556
Reverter (Revert) ............................................................................................................................................. 1556
Importar (Import) ........................................................................................................................................... 1556
Exportar (Export) ............................................................................................................................................ 1557
Conectar (Connect) ........................................................................................................................................ 1557
Desconectar (Disconnect) .............................................................................................................................. 1557
Express (Express) ............................................................................................................................................ 1557
Administração (Administration) .................................................................................................................... 1557
Acesso ao Relatório (Report Access) ........................................................................................................... 1557
Gerar Relatório Sobre Relatórios (Report on Reports) ............................................................................... 1557
Renomear (Rename) .................................................................................................................................. 1557
Deletar (Delete) .......................................................................................................................................... 1557
Compilar Relatório (Compile Report) ....................................................................................................... 1557
Converter (Convert) .................................................................................................................................. 1557
Verificação Interna (CheckIn) ................................................................................................................... 1558
Verificação Externa (CheckOut) ................................................................................................................ 1558
Opções de Controle de Origem (Source Control Options) ....................................................................... 1558
Configurar Página (Page Setup) ..................................................................................................................... 1558
Imprimir (Print) ............................................................................................................................................. 1558
Correio (Mail) ................................................................................................................................................. 1558
Distribuir (Distribute) ..................................................................................................................................... 1558
Criar Para Arquivo (Generate to File)............................................................................................................. 1558
Sair (Exit) ........................................................................................................................................................ 1558
LXXVI
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
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 Seleção de Todos (Deselect All) ....................................................................................................... 1559
Selecionar Quadro-Pai (Select Parent Frame) ................................................................................................. 1559
Vínculos (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 Página Atual (Show Current Page) ............................................................................................... 1560
Mostrar Todas as Páginas (Show All Pages) ............................................................................................... 1560
Modelo de Dados (Data Model) ..................................................................................................................... 1561
Modelo de Layout (Layout Model) ................................................................................................................ 1561
Form de Parâmetro (Parameter Form) ............................................................................................................ 1561
Seção 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 Página (First Page) ............................................................................................................................ 1561
Página Anterior (Previous Page) ..................................................................................................................... 1562
Próxima Página (Next Page) ........................................................................................................................... 1562
Última Página (Last Page) .............................................................................................................................. 1562
Tamanho Normal (Normal Size) .................................................................................................................... 1562
Ajustar à Janela (Fit to Window) .................................................................................................................... 1562
Réguas (Rulers) ............................................................................................................................................... 1562
Guias de Régua (Ruler Guides) ....................................................................................................................... 1562
Grade (Grid) ................................................................................................................................................... 1562
Alinhar à Grade (Snap to Grid) ...................................................................................................................... 1562
Quebras de Página (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
Número de Página (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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXVII
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO
Fonte (Font) .................................................................................................................................................... 1563
Justificar (Justify) ............................................................................................................................................ 1563
Espaçamento de Texto (Text Spacing) ............................................................................................................ 1563
Direção (Direction) ......................................................................................................................................... 1563
Largura da Linha (Line Width) ...................................................................................................................... 1563
Bevel (Bevel) ................................................................................................................................................... 1564
Traço (Dash) ................................................................................................................................................... 1564
Seta (Arrow) .................................................................................................................................................... 1564
Borda (Border) ................................................................................................................................................ 1564
Moeda (Currency) .......................................................................................................................................... 1564
Percentual (Percent) ....................................................................................................................................... 1564
Vírgulas (Commas) ......................................................................................................................................... 1564
Casas Decimais (Decimal Places) ................................................................................................................... 1564
Opções de Gráficos (Graphics Options) ......................................................................................................... 1564
Geral (General) .......................................................................................................................................... 1564
Imagem (Image) ......................................................................................................................................... 1564
Arco (Arc) ................................................................................................................................................... 1564
Retângulo Arredondado (Rounded Rectangle) .......................................................................................... 1565
Reduzir Resolução da Imagem (Reduce Image Resolution) ....................................................................... 1565
Opções de Layout (Layout Options) .............................................................................................................. 1565
Réguas (Rulers) ........................................................................................................................................... 1565
Modelo de Layout (Layout Model) ............................................................................................................ 1565
Paleta de Cores (Color Palette) .................................................................................................................. 1565
Formatação Condicional (Conditional Formatting) ..................................................................................... 1566
Menu Organizar (Arrange) .............................................................................................................. 1566
Trazer Para Frente (Bring to Front) ................................................................................................................. 1566
Enviar Para Trás (Send to Back) ...................................................................................................................... 1566
Mover Para Frente (Move Forward) ............................................................................................................... 1566
Mover Para Trás (Move Backward) ................................................................................................................. 1566
Alinhar Objetos (Align Objects) ..................................................................................................................... 1566
Repetir Alinhamento (Repeat Alignment) ..................................................................................................... 1566
Dimensionar Objetos (Size Objects) .............................................................................................................. 1566
Repetir Dimensionamento (Repeat Sizing) .................................................................................................... 1566
Agrupar (Group) ............................................................................................................................................. 1566
Desagrupar (Ungroup) .................................................................................................................................... 1566
Agrupar Operações (Group Operations) ........................................................................................................ 1567
Selecionar Pai (Select Parent) ..................................................................................................................... 1567
Selecionar Filhos (Select Children) ............................................................................................................ 1567
Adicionar no Grupo (Add to Group) ......................................................................................................... 1567
Remover do Grupo (Remove from Group) ................................................................................................ 1567
Menu Navigator (Navigator) ............................................................................................................ 1567
Expandir (Expand) ......................................................................................................................................... 1567
Fechar (Collapse) ............................................................................................................................................ 1567
Expandir Todos (Expand All) ......................................................................................................................... 1567
Ocultar Tudo (Collapse All) ............................................................................................................................ 1567
Criar (Create) .................................................................................................................................................. 1567
Deletar (Delete) .............................................................................................................................................. 1567
Adicionar Marcador (Add BookMark) ............................................................................................................ 1567
Ir Para Marcador (GoTo BookMark) ............................................................................................................... 1568
Opções do Navegador (Navigator Options) ................................................................................................... 1568
Pasta Geral (General Tab) ........................................................................................................................... 1568
Pasta Layout (Layout Tab) .......................................................................................................................... 1568
Menu Programa (Program) .............................................................................................................. 1568
LXXVIII
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
SUMÁRIO
Executar Relatório (Run Report) .................................................................................................................... 1568
Compilar (Compile) ....................................................................................................................................... 1568
Compilar Seleção (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 Relatório (Report Wizard) ......................................................................................................... 1569
Assistente de Dados (Data Wizard) ................................................................................................................ 1569
Assistente de Gráfico (Chart Wizard) ............................................................................................................. 1569
Assistente de Web (Web Wizard) .................................................................................................................... 1569
Rastrear (Trace) ............................................................................................................................................... 1570
Editor de Relatório (Report Editor) ................................................................................................................ 1570
Editor de Gabarito (Template Editor) ............................................................................................................. 1570
Object Navigator ............................................................................................................................................ 1570
Paleta de Propriedades (Property Palette) ...................................................................................................... 1570
Criador de Form de Parâmetros (Parameter Form Builder) ........................................................................... 1570
Preferências (Preferences) ............................................................................................................................... 1570
Menu Ajuda (Help) ............................................................................................................................ 1570
Tópicos 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
CAPÍTULO 21 – BUILT-INS DO REPORTS ....................................................................................................... 1573
Srw .................................................................................................................................................................. 1574
List .................................................................................................................................................................. 1577
ÍNDICE REMISSIVO ................................................................................................................................... 1579
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
LXXIX
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
Parte I
FUNDAMENTOS
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
1
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
2
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
Capítulo 1
INSTALANDO O PERSONAL
ORACLE9I NO WINDOWS2000
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
3
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Neste capítulo serão apresentados os procedimentos para a instalação do produto Personal Oracle9i para Windows 2000.
O Oracle9i release 9.0.1.1.1 não é suportado para o Windows 95. Podemos, no entanto, instalar a versão client
(Oracle8i client ou Oracle8 client) para estabelecer conexão com um banco de dados Oracle9i Sever.
FUNDAMENTOS EM: INSTALAÇÃO DO PRODUTO
PRÉ-REQUISITOS
♦ Noções básicas da utilização do ambiente Windows.
METODOLOGIA
♦ Acompanhamento passo a passo das etapas da instalação.
REQUERIMENTOS PARA INSTALAÇÃO
O Personal Oracle9i é um banco de dados pessoal, ou seja, o número de usuários (pessoas) em conexão com o
banco é 1(um). Os requerimentos dizem respeito tanto a software quanto a hardwares mínimos para que a instalação
e uso sejam bem-sucedidos. As informações relativas a requerimentos relacionadas a seguir dizem respeito à instalação
da versão 9.0.1.1.1 do Oracle9i Personal Edition.
Com relação à software, o sistema operacional necessário para a instalação é o Windows NT4.0 (Workstation ou
Server, com Service Pack 5.0 ou superior) ou o Windows 2000 (Professional, Server ou superior) ou o Windows
Terminal Server (no Windows 2000 Server ou superior).
Com relação a hardware precisamos de um processador Pentium 166 ou superior, espaço em disco de 1.72 Gb para
um banco de dados padrão, só com a documentação básica (New Features, Release Notes, Installation, Migration
e Configuration). Os manuais relativos à versão (SQL, PL/SQL, Java, etc.) se acham em uma biblioteca de
documentação composta de 2 CD-Roms separados. A memória mínima solicitada pela Oracle é de 128Mb, sendo
recomendado 256Mb e vídeo de 256 cores. Durante a instalação pode ser necessário mais área de disco.
Descreveremos a seguir, passo a passo, as etapas necessárias para a instalação do software Personal Oracle9i e a
criação de um usuário padrão utilizado nos exemplos deste material.
ACOMPANHANDO A INSTALAÇÃO
Ao colocarmos o CD-ROM na unidade apropriada, será apresentada a tela Autorun, na qual teremos três opções
para execução.
A primeira opção, com o título de Iniciar Instalação, efetua a instalação dos produtos. A segunda opção, intitulada
Explore CD, faz a leitura do diretório-raiz do CD-ROM e o apresenta para que possamos navegar (ou explorar) pelas
diversas pastas presentes. A terceira e última opção chamada de Informações de Paginação abre a documentação em
formato HTML (welcome.htm) presente no CD-ROM. Os dois botões no fim da página 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 instalação propriamente dita, devemos clicar na primeira opção, ou seja, Iniciar Instalação, a
qual dará início ao programa de instalação chamado Oracle Universal Installer, que fará alguns questionamentos
para efetuar a gravação dos arquivos.
Caso a tela de Autorun, por algum motivo, não apareça automaticamente, podemos executar (no menu Iniciar do Windows, opção 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.
4
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
Figura 1.01 – Personal Oracle9i – Autorun
A próxima tela apresentada dá as Boas-Vindas ao usuário e permite que façamos uma verificação dos produtos já instalados.
Uma vez que estamos iniciando o processo de instalação agora, passaremos simplesmente ao próximo diálogo.
LOCALIZAÇÃO DOS ARQUIVOS
Neste diálogo é apresentado, na parte Origem, o arquivo (diretório e nome de arquivo) que contém as informações
necessárias aos produtos que desejamos instalar. Esta informação já aparece preenchida e não deve ser alterada.
Na parte Destino encontramos duas informações: o nome e o caminho do Oracle Home. O nome do Oracle Home
é de nossa escolha, assim como o diretório. O instalador fará uma associação entre o nome que escolhermos para
Oracle Home e o diretório físico em disco.
A escolha é livre. No meu caso escolhi como Oracle Home o texto OraHome9i e como diretório de destino
c:\Oracle\Ora9i.
PRODUTOS DISPONÍVEIS
Nova tela de diálogo será apresentada para que façamos a escolha do que desejamos instalar. Neste momento,
optaremos por Oracle9i Database 9.0.1.1.1, pois esta é a opção que fará a instalação do banco de dados (que é o
nosso interesse).
A segunda opção Oracle9i Client 9.0.1.1.1 seria usada se tivéssemos instalado o banco de dados em uma máquina
(que faria o papel de servidora de banco de dados) e desejássemos fazer acesso a este banco de dados a partir de
outra máquina (que faria o papel de cliente para o banco de dados).
A terceira opção Oracle9i Management and Integration 9.0.1.0.1 seria usada também em uma máquina cliente,
porém por alguém (um DBA, por exemplo) que viesse a gerenciar ou controlar os serviços do banco de dados.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
5
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Figura 1.02 – Produtos Disponíveis
TIPOS DE INSTALAÇÃO
Este diálogo é apresentado para nós porque optamos, anteriormente, por instalar o banco de dados Oracle9i.
Observamos na Figura 1.03 que podemos optar por três tipos diferentes de bancos de dados ou por uma instalação
customizada (opção Personalizar).
Figura 1.03 – Tipos de Instalação
6
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
As duas primeiras opções se referem a bancos de dados a serem instalados em máquinas servidoras; o que varia de
um para o outro (além do preço, é claro) é a quantidade de características disponíveis no software. A versão
Enterprise é completa contendo todas “features” disponíveis para o Oracle9i. Já a versão Standard não apresenta
determinadas “features”, como particionamento de tabelas, por exemplo, sendo, portanto, uma versão mais barata.
A terceira opção, que será exatamente a escolhida por nós, instalará um banco de dados similar à versão Enterprise
(a maioria da “features”), porém restrito à uma pessoa. É a versão ideal para testes e estudos.
CONFIGURAÇÃO DO BANCO DE DADOS
Neste diálogo (não apresentado) devemos informar qual a finalidade do banco de dados que iremos instalar. No
nosso caso a primeira opção é a ideal uma vez que estaremos realizando testes e estudo; no entanto, vamos verificar
quais as outras alternativas.
A segunda opção, Processamento de Transações, tem a finalidade de criar um banco de dados para um ambiente
com utilização principal de processamento de transações. Isto quer dizer que o uso principal do banco de dados
será para processos de atualização (inclusão, exclusão e alteração).
A terceira opção Data Warehouse criará um banco de dados voltado para um ambiente de Data Warehouse, ou seja,
onde a expectativa é que os acessos sejam preponderantemente de consulta em uma grande quantidade de dados.
A quarta opção Personalizada construirá um banco de dados de acordo com as questões que viermos a definir nos
diálogos seguintes.
A última opção não cria o banco de dados, apenas o software. A criação do banco de dados poderá ser feita
posteriormente de forma manual ou através do Database Configuration Assistant.
IDENTIFICAÇÃO DO BANCO DE DADOS
Neste diálogo duas informações devem ser supridas por nós.
No primeiro campo devemos fornecer o nome do banco de dados global. Em um ambiente de rede em que temos
bancos de dados em nós diferentes da rede é comum utilizarmos um nome seguido de um domínio (por exemplo
dbprd.rj). Como estamos fazendo a instalação de um banco de dados personal, podemos indicar apenas um nome
(por exemplo ORACLE), sem mesmo especificar domínio.
Quando digitamos no campo superior, o campo inferior também é preenchido da mesma forma. Este campo
corresponde à identificação da instância Oracle que fará acesso ao banco de dados. Ainda não estudamos a diferença
entre instância e banco de dados; faremos um pequeno parêntese neste ponto só para início de explicação.
Um banco de dados é composto dos arquivos que estão em disco (os arquivos onde os nossos dados estão
armazenados, os arquivos que controlam a integridade da informação, etc.); já a instância é composta pela parte
de memória (os produtos necessários ao funcionamento do banco – chamados de processos background, e da área
de memória compartilhada por estes processos – chamada de System Global Area, SGA). Desta forma é possível
que mais de uma instância (desde que tenham nomes diferentes) faça acesso a um mesmo banco de dados.
No nosso caso estaremos instalando um banco de dados que será usado por uma única instância. A identificação
da instância (SID) deve ser única no computador, mas não precisa ter o mesmo nome do banco de dados; portanto,
o nome fica a nosso critério.
Pela Figura 1.04, você observa que a escolha feita por mim foi um nome único para as duas informações.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
7
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Figura 1.04 – Identificação do banco de dados
LOCAL DO ARQUIVO DO BANCO DE DADOS
Este diálogo já apresenta uma sugestão da Oracle, no sentido de separarmos os arquivos do software (que serão
instalados no Oracle Home, escolhido no início da instalação) e os arquivos do banco de dados.
Neste diálogo podemos informar um diretório onde desejamos que os arquivos do banco de dados sejam instalados
(se tivermos um outro disco, esta pode ser uma opção interessante). No meu caso escolhi C:\DATABASE\ORADATA.
CONJUNTO DE CARACTERES DE BANCO DE DADOS
Quando armazenamos uma informação alfanumérica no banco de dados, cada caracter enviado passa por um
processo de conversão que transforma o caracter em um número (ou índice) em uma tabela de caracteres. Quando
obtemos uma informação do banco de dados, o processo inverso ocorre.
As diversas línguas existentes no mundo utilizam caracteres diferentes para escrever seus idiomas. Por exemplo, na língua
portuguesa utilizamos caracteres como o ç (cedilha), acentos agudos, circunflexo, crase, til, que não existem no inglês.
Neste diálogo devemos escolher qual conjunto de caracteres (ou tabela de caracteres) é capaz de armazenar todas
as peculiaridades da língua ou línguas que desejamos armazenar.
A primeira opção já apresenta uma tabela ou conjunto de caracteres previamente escolhido baseado no idioma em
que o sistema operacional está instalado. No meu caso o valor que aparece na Figura 1.05 (WE8MSWIN1252) foi
escolhido porque o meu Windows 2000 Professional foi instalado em português.
A segunda opção Unicode (UTF8) corresponde a um conjunto de caracteres que engloba diversos outros e permite
a utilização simultânea de diversas línguas.
Na terceira opção podemos escolher o conjunto de caracteres de nosso agrado.
8
✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
Figura 1.05 – Conjunto de Caracteres do banco de dados
RESUMO
Neste diálogo não fornecemos nenhuma outra indicação; 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 instalação devemos pressionar o botão Instalar. O tempo de instalação dependerá do hardware e da
quantidade de memória que você tiver. Não haverá mais necessidade de intervenção do usuário de agora em diante.
Ao término da instalação 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 instalação).
Figura 1.06 – pasta Oracle – OraHome9i
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
9
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Os utilitários estão subdivididos por grupos. Na pasta Application Development encontramos as ferramentas que,
possivelmente, utilizaremos no desenvolvimento de aplicações (Sql*Plus, Objects for OLE, Pro*C-C++, etc.). Durante o estudo neste livro, utilizaremos o SQL*Plus, você poderá usar o SQL*Plus WorkSheet, que possui uma
interface mais amigável que o SQL*Plus.
Na pasta Configuration and Migration Tools encontramos ferramentas que nos auxiliarão na criação/configuração
de um novo banco de dados (Database Configuration Assistant), administração do banco de dados em uso (Administration Assistant), configuração da parte de rede, ODBC, etc. A pasta Enterprise Manager Quick Tours possui
apenas um ícone que aciona uma apresentação sobre a ferramenta.
Na pasta Integrated Management Tools encontramos ferramentas relacionadas a segurança em diversos níveis e
formas. A última pasta trata do Oracle 9i HTTP Server (ativação e interrupção do serviço no Windows).
Além desta pasta você também encontrará uma outra pasta chamada Oracle Installation Products onde encontraremos o instalador e documentação sobre ele, além de uma ferramenta (Home Selector) que permite a troca do
Oracle Home principal.
FUNDAMENTOS EM: SUBSTITUIÇÃO DA LINGUAGEM
PRÉ-REQUISITOS
♦ Conhecimentos básicos sobre o editor de registro do Windows (Regedit).
METODOLOGIA
♦ Descrição dos procedimentos necessários à modificação das variáveis de ambiente do Oracle presentes no registro do Windows.
Durante o processo de instalação do Personal, são criadas algumas variáveis de ambiente no Windows. Estas
variáveis são consultadas por todos os programas Oracle que viermos a executar. Elas contêm os diretórios dos
aplicativos, banco de dados, ícones, preferências padrão para cada aplicativo e para o banco de dados e outras
informações necessárias à inicialização do banco de dados e/ou dos softwares aplicativos.
Uma das informações registradas nesta área é o idioma, território e conjunto de caracteres válidos para a estação do
usuário, que após o processo de instalação do banco corresponde ao valor escolhido para o banco de dados.
Se desejarmos, podemos modificar o valor destas variáveis de ambiente a fim de modificarmos algumas das
características de nosso sistema. Para tal, devemos executar o programa Regedit do Windows que apresenta todas
as variáveis cadastradas para todos os aplicativos.
EXECUTANDO O REGEDIT
No menu Iniciar, opção Executar, podemos digitar Regedit e pressionar o botão OK para que seja apresentada a tela
abaixo, contendo a estrutura principal onde estão armazenadas as informações de ambiente. Estas informações
estão organizadas em nós. Como nosso interesse se refere às variáveis do Oracle, deveremos expandir o nó (basta
clicar sobre o símbolo + à esquerda do nome do nó) HKEY_LOCAL_MACHINE e, subordinado a este nó, deveremos
expandir também 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 instalação, significa que você só tem um Oracle Home e, portanto, não estão 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
criado nesta máquina. Isto significa que cada produto Oracle instalado foi armazenado em um diretório físico
diferente (lembra que existe uma associação entre o Oracle Home e o diretório físico?).
Figura 1.07 – Variáveis de ambiente do Oracle
Para verificarmos as variáveis de ambiente e seus valores, devemos clicar sobre a pasta Home0 (para vocês e Home5
para mim). As variáveis de ambiente relativas a esta instalação estão visíveis na janela à direita. Nesta janela
procure a variável Oracle_Home e verifique o diretório correspondente.
Dentre estas variáveis, devemos procurar pela variável 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 português.
Para modificarmos o valor desta variável, devemos efetuar um double-click no ícone (ab) à esquerda do nome da
variável para que seja apresentada uma janela de edição.
Os valores válidos para estas variáveis estão detalhados no item referente a Globalization Support. Para efeito de
exemplificação, modificamos seu valor para “AMERICAN_AMERICA.WE8MSWIN1252”.
Figura 1.08 – NLS_LANG
Com esta alteração todas as mensagens que recebermos no SQL*Plus passarão a ser apresentadas em inglês e toda
informação monetária ou de data apresentará o padrão americano. Como, agora, você já sabe modificar esta variável,
você poderá escolher uma das duas opções apresentadas anteriormente para ela. Observe, com cuidado, porém, 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
11
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
FUNDAMENTOS EM: CRIAÇÃO DE UM USUÁRIO-PADRÃO COM O SQL*PLUS
PRÉ-REQUISITOS
♦ Noções básicas da utilização do ambiente Windows.
METODOLOGIA
♦ Apresentação e acompanhamento das etapas necessárias para a criação de um usuário 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 usuário e a senha. O texto presente nesta tela varia de acordo com a
linguagem em uso.
Figura 1.09 – Diálogo de login em português
Neste momento, preencheremos o campo usuário com SYSTEM e o campo senha com o valor MANAGER. O
campo referente à string de conexão (Host String ou String do Host) não precisa ser preenchido, uma vez que
estamos fazendo conexão com um banco de dados local. Posteriormente, ao instalarmos os softwares aplicativos
(Oracle Developer 6i), necessitaremos preencher um nome para a conexão, e este assunto será visto no item
referente à instalação dos produtos de desenvolvimento. Dê OK.
Para a criação de um usuário, devemos digitar na linha apresentada o comando mostrado na Listagem 1.01. O
texto deve ser digitado exatamente como mostrado na listagem (começando com o texto CREATE USER). Após
cada linha, tecle Enter para que o SQL*Plus perceba que o comando tem continuação e numere as linhas seguintes.
Listagem 1.01 – Criação do usuário DESENV
SQL> CREATE USER DESENV
2 IDENTIFIED BY DESENV
3 DEFAULT TABLESPACE USERS
4 TEMPORARY TABLESPACE TEMP
5 QUOTA UNLIMITED ON USERS;
Usuário criado.
A troca de linha é feita com Enter. Para execução do comando, deve ser anexado na última linha um ponto-evírgula.
A criação do usuário não é suficiente para sua utilização. O próximo comando dará poderes de DBA (administrador
do banco de dados) para o usuário DESENV.
Listagem 1.02 – Autorizando o usuário DESENV
SQL> GRANT CONNECT, DBA TO DESENV;
Operação de Grant bem-sucedida.
Poderemos, agora, estabelecer conexão como DESENV.
12 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
Listagem 1.03 – Estabelecendo conexão como DESENV
SQL> CONNECT DESENV/DESENV
Conectado.
Todos os exercícios do livro usarão este usuário. A seguir faremos a criação das tabelas que usaremos em nosso
estudo. Para tal começaremos com o modelo de dados e, na seqüência, passaremos para os arquivos (scripts) que
contêm os comandos para criação e preenchimento das referidas tabelas.
FUNDAMENTOS EM: CRIAÇÃO DA BASE RELACIONAL
PRÉ-REQUISITOS
♦ Noções básicas da utilização do ambiente Windows.
METODOLOGIA
♦ Apresentação da base de dados relacional e descrição dos procedimentos para criação dos dados.
MODELO DE DADOS
Na Figura 1.10, apresentamos um esquema do modelo de entidades e relacionamentos, descrito logo a seguir.
Figura 1.10 – Modelo de dados
A tabela Funcionário (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 não 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
13
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
GERANDO A BASE DE DADOS
Apresentamos a seguir um conjunto de arquivos contendo as etapas necessárias para a criação da base de dados a
ser usada nos exercícios de cada um dos capítulos. Os comandos podem ser criados em um único arquivo ou em
arquivos separados, como está apresentado a seguir. A ordem de execução, no entanto, deve ser respeitada.
Todos os arquivos devem ser criados em um mesmo diretório. Escolhemos defini-los no diretório SQL criado na
raiz do drive C, ou seja, C:\SQL.
Listagem 1.04 – Arquivo L01_04.SQL
DROP TABLE PRJATV CASCADE CONSTRAINTS;
DROP TABLE ATIV CASCADE CONSTRAINTS;
DROP TABLE PROJ CASCADE CONSTRAINTS;
DROP TABLE FUNC CASCADE CONSTRAINTS;
DROP TABLE DEPTO CASCADE CONSTRAINTS;
DROP TABLE HST_PROMO;
ALTER SESSION SET NLS_DATE_FORMAT = 'DDMMYYYY';
Observe que na última linha da listagem, o caractere delimitador é o plic ( ' ). No momento da digitação, certifique-se de usar esse caractere. Caso
seja utilizado algum outro, como aspas simples ( ‘ ), por exemplo, haverá erro na compilação. Use sempre o plic!
Nesse primeiro script, todas as tabelas são removidas, o que permite que reexecutemos as mesmas operações
diversas vezes e façamos a implementação do modelo novamente; portanto, não 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 não existe.
Listagem 1.05 – Arquivo L01_05.SQL
CREATE TABLE DEPTO
(
CD_DEPTO
CHAR(3) NOT NULL
,NM_DEPTO
VARCHAR2(40)
,CD_GERENTE
NUMBER(5)
,CD_DEPTO_CTB CHAR(3)
,PRIMARY KEY (CD_DEPTO)
)
STORAGE (INITIAL 4K
NEXT 4K
MINEXTENTS 1
MAXEXTENTS 5)
PCTFREE 10
PCTUSED 80;
Nesse script, criamos a especificação física da tabela Depto. Observe que foram fornecidos parâmetros físicos no
comando Create Table para que a tabela criada tivesse um tamanho reduzido.
Listagem 1.06 – Arquivo L01_06.SQL
CREATE TABLE FUNC
(
CD_MAT
NUMBER(5) NOT NULL
,NM_FUNC
VARCHAR2(12)
,NM_SOBRENOME VARCHAR2(12)
,CD_DEPTO
CHAR(3) REFERENCES DEPTO(CD_DEPTO)
,NR_RAMAL
NUMBER(4)
,DT_ADM
DATE
,NR_CARGO
NUMBER(3)
,NR_GIT
NUMBER(2)
,IN_SEXO
VARCHAR2(1) CHECK(IN_SEXO IN ('F', 'M'))
,DT_NASC
DATE
,VL_SAL
NUMBER(9,2),
,NM_FOTO
VARCHAR2(100)
,PRIMARY KEY (CD_MAT)
)
14 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
STORAGE (INITIAL 4K
NEXT 4K
MINEXTENTS 1
MAXEXTENTS 5)
PCTFREE 10
PCTUSED 80;
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.
Listagem 1.07 – Arquivo L01_07.SQL
CREATE TABLE PROJ
(
CD_PROJ
CHAR(6)
NOT NULL,
NM_PROJ
VARCHAR2(30)
NOT NULL,
CD_DEPTO
CHAR(3)
NOT NULL
REFERENCES DEPTO (CD_DEPTO),
CD_RESP
NUMBER(5)
NOT NULL
REFERENCES FUNC (CD_MAT),
QT_EQP
NUMBER(02),
DT_INI
DATE,
DT_FIM
DATE,
PRIMARY KEY (CD_PROJ))
STORAGE(initial 4k next 4k minextents 1 maxextents 5)
PCTFREE 10
PCTUSED 80;
A criação da tabela Proj apresentada na Listagem 1.07 já estabelece os relacionamentos com as tabelas Depto e Func.
Listagem 1.08 – Arquivo L01_08.SQL
CREATE TABLE ATIV
(
CD_ATIV
NUMBER(3) PRIMARY KEY,
NM_SIGLA
VARCHAR2(12),
TX_DESCRICAO
VARCHAR2(30)
)
ORGANIZATION INDEX
STORAGE (INITIAL 4K
NEXT 2K
MINEXTENTS 1
MAXEXTENTS 3);
A criação da tabela Ativ apresenta como particularidade a expressão Organization Index, indicando que não haverá
estruturas separadas para os dados e a PK. Será construída uma única estrutura B*Tree contendo o índice e na
mesma linha os dados correspondentes. Esta tabela não possui Rowid físico e sim lógico. Estudaremos este assunto
no próximo capítulo.
Listagem 1.09 – Arquivo L01_09.SQL
CREATE TABLE PRJATV
(CD_PROJ
CHAR(06)
NOT NULL REFERENCES PROJ,
CD_ATIV
NUMBER(03) NOT NULL REFERENCES ATIV,
DT_INI
DATE
NOT NULL,
DT_FIM
DATE
NOT NULL,
PRIMARY KEY (CD_PROJ, CD_ATIV)
)
STORAGE (INITIAL
8K
NEXT
8K
MINEXTENTS 1
MAXEXTENTS 5)
PCTFREE 10
PCTUSED 80;
Na Listagem 1.09, criamos a tabela Projetos-Atividades com os relacionamentos estabelecidos para as tabelas Proj e Ativ.
Listagem 1.10 – Arquivo L01_10.SQL
CREATE TABLE HST_PROMO
(
DT_PROMOCAO
DATE
NOT NULL
,CD_MAT
NUMBER(5) NOT NULL
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
15
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
,VL_SAL
NUMBER(9,2)
,CD_DEPTO
CHAR(3)
,NR_CARGO
NUMBER(3)
,TX_MOTIVO
VARCHAR2(200)
,PRIMARY KEY (DT_PROMOCAO, CD_MAT)
)
STORAGE (INITIAL
4K
NEXT
4K
MINEXTENTS 1
MAXEXTENTS 15)
PCTFREE 10
PCTUSED 80
PARTITION BY RANGE (DT_PROMOCAO)
(PARTITION ANOS80 VALUES
LESS THAN (TO_DATE('01011990', 'DDMMYYYY')),
PARTITION ANOS90_94 VALUES
LESS THAN (TO_DATE('01011995', 'DDMMYYYY')),
PARTITION ANOS95_99 VALUES
LESS THAN (TO_DATE('01012000', 'DDMMYYYY')),
PARTITION ANOS2000 VALUES
LESS THAN (MAXVALUE)
);
Na Listagem 1.10, criamos uma tabela que não se acha presente no modelo. Ela tem as colunas cd_mat e cd_depto,
mas não estabelece relacionamento com as tabelas Func e Depto. Essa tabela tem a finalidade de armazenar
informações históricas da empresa que podem não mais estar cadastradas nas tabelas diárias. Usaremos suas
informações para teste de tabelas particionadas.
Observe que ela possui uma cláusula Partition By Range, indicando que, fisicamente, esta tabela está subdividida
em quatro partes e que, logicamente, se trata de uma única tabela. O Oracle é responsável por adicionar ou
pesquisar as informações na partição correta.
Listagem 1.11 – Arquivo L01_11.SQL
INSERT INTO DEPTO VALUES
('A00','DIRETORIA DA EMPRESA',10,NULL);
INSERT INTO DEPTO VALUES
('B01','ASSESSORIA',20,'A00');
INSERT INTO DEPTO VALUES
('C01','CENTRO DE INFORMACAO',30,'A00');
INSERT INTO DEPTO VALUES
('D01','DIRETORIA DE SISTEMAS',NULL,'A00');
INSERT INTO DEPTO VALUES
('D11','GERENCIA DE SISTEMAS COMERCIAIS',60,'D01');
INSERT INTO DEPTO VALUES
('D21','GERENCIA DE SISTEMAS ADMINISTRATIVOS',70,'D01');
INSERT INTO DEPTO VALUES
('E01','DIRETORIA DE SUPORTE/PRODUCAO',50,'A00');
INSERT INTO DEPTO VALUES
('E11','OPERACAO',90,'E01');
INSERT INTO DEPTO VALUES
('E21','SUPORTE DE SOFTWARE',100,'E01');
Na Listagem 1.11, estamos cadastrando os dados referentes a Depto.
A seguir, os dados referentes a Func.
Listagem 1.12 – Arquivo L01_12.SQL
INSERT INTO FUNC VALUES
(10,'CRISTINA','HENDERSON','A00',3978,'01011995',66,18,'F','14081953'
,5275,'c:\windows\bolhas.bmp');
INSERT INTO FUNC VALUES
(20,'MIGUEL','TEIXEIRA','B01',3476,'10101993',61,18,'M','02021968'
,4125,'c:\windows\egito.bmp');
INSERT INTO FUNC VALUES
(30,'SANDRA','KWAN','C01',4738,'05041995',60,20,'F','11051961'
,3825,'c:\windows\ladrilhos.bmp');
INSERT INTO FUNC VALUES
(50,'JOAO','GOMES','E01',6789,'17081989',58,16,'M','15091955'
,4017.5,'c:\windows\esteira.bmp');
INSERT INTO FUNC VALUES
16 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
(60,'IRACY','SOUZA','D11',6423,'14091993',55,16,'F','07071955'
,3225,'c:\windows\bolhas.bmp');
INSERT INTO FUNC VALUES
(70,'EVA','PEREIRA','D21',7831,'30091990',56,16,'F','26051963'
,3617,'c:\windows\ladrilhos.bmp');
INSERT INTO FUNC VALUES
(90,'ELIANE','HONOFRE','E11',5498,'15081995',55,16,'F','15051971'
,2975,'c:\windows\esteira.bmp');
INSERT INTO FUNC VALUES
(100,'TEODORO','SIQUEIRA','E21',972,'16061990',54,14,'M','18121966'
,2615,'c:\windows\bolhas.bmp');
INSERT INTO FUNC VALUES
(110,'VICENTE','LOURENCO','A00',3490,'16051994',58,19,'M','05111969'
,4650,'c:\windows\egito.bmp');
INSERT INTO FUNC VALUES
(120,'SILVIO','OLIVA','A00',2167,'05121993',58,14,'M','18101962'
,2925,'c:\windows\esteira.bmp');
INSERT INTO FUNC VALUES
(130,'DOLORES','QUEIROZ','C01',4578,'28071991',55,16,'F','15091955'
,2380,'c:\windows\ondas.bmp');
INSERT INTO FUNC VALUES
(140,'HELENA','NOVAES','C01',1793,'15121991',56,18,'F','19011956'
,2842,'c:\windows\bolhas.bmp');
INSERT INTO FUNC VALUES
(150,'BRUNO','AZEVEDO','D11',4510,'12021992',55,16,'M','17051967'
,2528,'c:\windows\pied-de-poule.bmp');
INSERT INTO FUNC VALUES
(160,'ELIZABET','PINTO','D11',3782,'11101993',54,17,'F','12041965'
,2225,'c:\windows\egito.bmp');
INSERT INTO FUNC VALUES
(170,'GABRIEL','YVES','D11',2890,'15091989',54,16,'M','05011971'
,2468,'c:\windows\bolhas.bmp');
INSERT INTO FUNC VALUES
(180,'MARIA','SANTOS','D11',1682,'07071990',53,17,'F','21021969'
,2134,'c:\windows\pied-de-poule.bmp');
INSERT INTO FUNC VALUES
(190,'JAIRO','WILARES','D11',2986,'26071994',53,16,'M','25061972'
,2045,'c:\windows\ladrilhos.bmp');
INSERT INTO FUNC VALUES
(200,'DAVI','BARBOSA','D11',4501,'03031996',55,16,'M','29051971'
,2774,'c:\windows\ondas.bmp');
INSERT INTO FUNC VALUES
(210,'WILIAM','JONES','D11',942,'11041994',52,17,'M','23021963'
,1827,'c:\windows\egito.bmp');
INSERT INTO FUNC VALUES
(220,'JOANA','LUZ','D11',672,'29081995',55,18,'F','19031968'
,2984,'c:\windows\pied-de-poule.bmp');
INSERT INTO FUNC VALUES
(230,'JOAQUIM','JANUARIO','D21',2094,'21111995',53,14,'M','30051965'
,2218,'c:\windows\bolhas.bmp');
INSERT INTO FUNC VALUES
(240,'SALVADOR','MEDEIROS','D21',3780,'05121993',55,17,'M','31031974'
,2876,'c:\windows\esteira.bmp');
INSERT INTO FUNC VALUES
(250,'DANIEL','SANTANA','D21',961,'30101999',52,15,'M','12111969'
,1918,'c:\windows\ladrilhos.bmp');
INSERT INTO FUNC VALUES
(260,'SILVIA','JUVENTO','D21',8953,'11091995',52,16,'F','05101966'
,1725,'c:\windows\pied-de-poule.bmp');
INSERT INTO FUNC VALUES
(270,'MARTA','PARENTE','D21',9001,'30091990',55,15,'F','26051973'
,2738,'c:\windows\esteira.bmp');
INSERT INTO FUNC VALUES
(280,'ELINE','SEVERO','E11',8997,'24031991',54,17,'F','28031966'
,2625,'c:\windows\bolhas.bmp');
INSERT INTO FUNC VALUES
(290,'JOAO','PONTES','E11',4502,'30051990',42,12,'M','09071966'
,1534,'c:\windows\egito.bmp');
INSERT INTO FUNC VALUES
(300,'FELIPE','SARAIVA','E11',2095,'19061992',48,14,'M','27101956'
,1775,'c:\windows\esteira.bmp');
INSERT INTO FUNC VALUES
(310,'MARINA','SALGADO','E11',3332,'12091991',43,12,'F','21041971'
,1590,'c:\windows\ondas.bmp');
INSERT INTO FUNC VALUES
(320,'ROBERTO','MARQUES','E21',9990,'07071990',52,16,'M','11081972'
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
17
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
,1995,'c:\windows\ladrilhos.bmp');
INSERT INTO FUNC VALUES
(330,'WILSON','LOPES','E21',2103,'23021996',55,14,'M','18071971'
,2537,'c:\windows\egito.bmp');
INSERT INTO FUNC VALUES
(340,'DILSON','GONCALVES','E21',5698,'05051996',54,16,'M','17051966'
,2384,'c:\windows\bolhas.bmp');
A Listagem 1.13 apresenta os dados referentes a Proj.
Listagem 1.13 – Arquivo L01_13.SQL
INSERT INTO PROJ VALUES
('MA2100','AUTOMACAO COMERCIAL', 'D21', 070, 12, '01011996', '01021996');
INSERT INTO PROJ VALUES
('MA2110','PROGRAMACAO', 'D11', 060, 09, '01011996', '01021996');
INSERT INTO PROJ VALUES
('MA2111','ANALISE', 'D11', 150, 02, '01011996', '01021996');
INSERT INTO PROJ VALUES
('MA2112','LEVANTAMENTO', 'D11', 060, 03, '01011996', '01021996');
INSERT INTO PROJ VALUES
('MA2113','DEPURACAO', 'D11', 170, 03, '15021996', '15091996');
INSERT INTO PROJ VALUES
('PL2100','PLANEJAMENTO', 'B01', 020, 01, '01011996', '01021996');
INSERT INTO PROJ VALUES
('IF1000','CONSULTORIA', 'C01', 030, 02, '01011996', '01021996');
INSERT INTO PROJ VALUES
('IF2000','TREINAMENTO', 'C01', 130, 01, '01011996', '01021996');
INSERT INTO PROJ VALUES
('AD3100','SERVICOS ADMINISTRATIVOS', 'A00', 010, 06, '01011996', '01021996');
INSERT INTO PROJ VALUES
('AD3110','ADMINISTRACAO GERAL', 'A00', 110, 06, '01011996', '01021996');
INSERT INTO PROJ VALUES
('AD3111','PROGRAMACAO DE PAGAMENTO', 'D21', 240, 02, '01011996', '01021996');
INSERT INTO PROJ VALUES
('AD3112','PROGRAMACAO DE PESSOAL', 'D21', 250, 01, '01011996', '01021996');
INSERT INTO PROJ VALUES
('AD3113','ASSISTENCIA MEDICA', 'D21', 070, 02, '01011996', '01021996');
INSERT INTO PROJ VALUES
('OP1000','SUPORTE PRODUCAO', 'E01', 050, 06, '01011996', '01021996');
INSERT INTO PROJ VALUES
('OP2010','SUPORTE SISTEMAS', 'E21', 320, 04, '01011996', '01021996');
INSERT INTO PROJ VALUES
('OP2011','SUPORTE SOFTWARE', 'E21', 330, 01, '01011996', '01021996');
INSERT INTO PROJ VALUES
('OP2012','SUPORTE USUARIO', 'E21', 340, 01, '01011996', '01021996');
INSERT INTO PROJ VALUES
('OP2013','SUPORTE DB/DC', 'E21', 100, 01, '01011996', '01021996');
INSERT INTO PROJ VALUES
('OP1010','OPERACAO', 'E11', 090, 05, '01011996', '01021996');
INSERT INTO PROJ VALUES
('OP2000','SISTEMAS DE CONTROLE', 'E01', 050, 05, '01011996', '01021996');
A Listagem 1.14 apresenta os dados de Ativ.
Listagem 1.14 – Arquivo L01_14.SQL
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
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
(10, 'GERENCIA', 'GERÊNCIA');
(20, 'CUSTO', 'ESTIMATIVA DE CUSTO');
(30, 'LEVANTAMENTO', 'FASE DE LEVANTAMENTO');
(40, 'DEFINICAO', 'DEFINIÇÃO DE PROGRAMAS');
(50, 'APRESENTACAO', 'APRESENTAÇÃO DO PROJETO');
(60, 'LOGICA', 'DESCRIÇÃO DA LÓGICA');
(70, 'CODIGO', 'CODIFICAÇÃO DE PROGRAMAS');
(80, 'TESTE', 'TESTE DE PROGRAMAS');
(90, 'FISICO', 'PROJETO FÍSICO');
(100, 'CURSO', 'MINISTRAR CURSOS');
(110, 'PREPARACAO', 'DESENVOLVIMENTO DE CURSOS');
(120, 'PESSOAL', 'ADMINISTRAÇÃO DE PESSOAL');
(130, 'OPERACAO', 'OPERAÇÃO DE SISTEMAS');
(140, 'MANUTENCAO', 'MANUTENÇÃO DE SOFTWARE');
(150, 'ADMPROD', 'ADMINISTRAÇÃO DE PRODUÇÃO');
(160, 'ADMDB', 'ADMINISTRAÇÃO BANCO DE DADOS');
(170, 'ADMREDE', 'ADMINISTRAÇÃO DE REDE');
(180, 'DOC', 'DOCUMENTAÇÃO DE SISTEMAS');
18 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 1 – INSTALANDO O PERSONAL ORACLE9I NO WINDOWS2000
A listagem a seguir apresenta os dados de PrjAtv.
Listagem 1.15 – Arquivo L01_15.SQL
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
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');
Finalmente, a carga de dados para a tabela de histórico.
Listagem 1.16 – Arquivo L01_16.SQL
INSERT INTO HST_PROMO
(DT_PROMOCAO, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, TX_MOTIVO)
SELECT DT_ADM, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, 'ADMISSÌO'
FROM FUNC
/
INSERT INTO HST_PROMO
(DT_PROMOCAO, CD_MAT, VL_SAL, CD_DEPTO,
NR_CARGO, TX_MOTIVO)
SELECT DT_ADM + 1/1440, CD_MAT, VL_SAL, CD_DEPTO,
NR_CARGO, 'Cargo gerencial. Não haverá % de valor adicional'
FROM FUNC
WHERE CD_MAT IN (SELECT CD_GERENTE FROM DEPTO);
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 atualizações realizadas. Como último passo, fecha o SQL*Plus.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
19
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 1.17 – Arquivo L01_17.SQL
@L01_04.SQL;
@L01_05.SQL;
@L01_06.SQL;
@L01_07.SQL;
@L01_08.SQL;
@L01_09.SQL;
@L01_10.SQL;
@L01_11.SQL;
@L01_12.SQL;
@L01_13.SQL;
@L01_14.SQL;
@L01_15.SQL;
@L01_16.SQL;
alter table depto
add foreign key (cd_depto_ctb) references depto;
alter table depto
add foreign key (cd_gerente) references func;
commit;
QUIT;
CRIANDO O ATALHO PARA O SQL*PLUS
Crie um atalho no Windows para o programa C:\Oracle\Ora9i\Bin\Sqlplusw.Exe. Preencha a propriedade “Iniciar
em” com o nome do diretório onde você instalou os arquivos para criação da base de dados. No nosso caso, C:\SQL.
Execute o atalho definido para que o SQL*Plus seja ativado. Estabeleça conexão com o usuário criado no início
deste capítulo (Desenv) e, finalmente, execute o arquivo (script) L01_17.SQL na linha de comando do SQL*Plus,
conforme o exemplo a seguir: SQL> @L01_17.SQL
Todos os demais arquivos serão executados instalando a base de dados relacional.
SOBRE A BASE DE DADOS OBJETO-RELACIONAL
No livro anterior (sobre Oracle8/8i), criamos imediatamente após a Base de Dados Relacional a Base de Dados
Objeto-Relacional, porém, neste livro, todo o assunto sobre Objetos e Coleções será tratado à parte no Capítulo 4,
portanto, deixaremos a criação da base de dados para este momento.
Passemos ao próximo capítulo para o estudo simultâneo do SQL e do SQL*Plus.
20 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Capítulo 2
SQL E SQL*PLUS
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
21
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Neste capítulo, estaremos estudando a ferramenta SQL*Plus e parte da linguagem SQL.
A ferramenta SQL*Plus nos permitirá estabelecer interface com o banco de dados Oracle utilizando a linguagem SQL.
A SQL é a linguagem que deveremos utilizar para criar objetos, manipular dados, definir autorizações, controlar o
acesso aos dados, etc., ou seja, toda a comunicação com o banco de dados. Nosso foco no estudo da SQL é a parte
da linguagem chamada de DML (Data Manipulation Language), capaz de realizar a manipulação dos dados do
usuário. Veremos, também, de forma superficial, comandos para controle de acesso e criação de objetos.
FUNDAMENTOS EM: LINGUAGEM SQL
PRÉ-REQUISITOS
♦ Conhecimentos teóricos e práticos de modelagem de dados e da teoria relacional.
METODOLOGIA
♦ Apresentação teórica dos objetivos da linguagem e suas características.
DADOS HISTÓRICOS
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 início da mudança na filosofia de bancos de dados, até então hierárquicos
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 padrão para bancos de dados relacionais.
A SQL (Structured Query Language) é uma linguagem para interface com bancos de dados relacionais, isto é, todos
os usuários 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 instituições estabeleceram
padrões para a linguagem. A última versão 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 padrão.
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, não utiliza SQL, o que fazem, na verdade, é
converter as solicitações dos usuários em comandos de SQL no relacionamento com o banco de dados.
Desta forma, poderíamos concluir dizendo que o banco de dados Oracle só entende SQL.
BANCO DE DADOS RELACIONAL
Dissemos, anteriormente, que a linguagem SQL é um padrão para bancos de dados relacionais.
De forma bastante simplista, poderíamos dizer que um banco de dados relacional tem como objetivo implementar o
modelo de dados relacional, com todas as suas características básicas, ou seja, entidades, atributos e relacionamentos.
Conceitualmente, um software de banco de dados relacional (RDBMS) usa tabelas para implementar entidades e colunas
para atributos. Os relacionamentos são mantidos por valor com o uso de primary key e de foreign key. As operações
relacionais também são contempladas, permitindo a realização de uniões, interseções, junções, subtrações, etc.
22 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Ao longo deste capítulo, veremos como usar o SQL do Oracle9i para: fazer acesso, incluir, excluir e alterar as
informações armazenadas no banco de dados. Aprenderemos sobre as operações relacionais e sobre os
relacionamentos (sua implementação e garantias).
No Capítulo 1 você encontrará o modelo de dados utilizado ao longo de todo o livro, além do conjunto de valores armazenados. Se necessário,
para estudarmos características específicas, novas tabelas ou colunas poderão ser adicionadas.
No Capítulo 4 faremos um estudo direcionado a armazenamento de objetos no banco de dados, discutiremos
conceitos como herança e polimorfismo e veremos sua implementação no banco de dados Oracle9i.
A ABRANGÊNCIA DA LINGUAGEM
Se o banco de dados só entende SQL, então devemos supor que a linguagem possui não apenas comandos de
manipulação, mas também comandos para criação dos diversos objetos, controle de acesso, autorização, etc.
Como isto é verdade e em função da grande quantidade de comandos, a linguagem SQL foi dividida em três
partes principais.
LINGUAGEM DE MANIPULAÇÃO DOS DADOS (DATA MANIPULATION LANGUAGE – DML)
Esta parte da SQL possui comandos para que os usuários façam acesso e armazenamento dos seus dados. Esta é a
parte da SQL que estaremos mais interessados em estudar, pois trata dos comandos a serem utilizados nos aplicativos
de acesso ao banco de dados.
LINGUAGEM DE DEFINIÇÃO DOS DADOS (DATA DEFINITION LANGUAGE – DDL)
Esta parte da SQL descreve como as tabelas e outros objetos Oracle podem ser definidos, alterados e removidos.
Esta parte da linguagem, de um modo geral, é utilizada pelo administrador do banco de dados (DBA). Veremos que
os comandos de DDL não podem ser usados em todos os aplicativos (a PL/SQL, por exemplo, não permite a
utilização direta dos comandos de DDL).
LINGUAGEM DE CONTROLE DOS DADOS (DATA CONTROL LANGUAGE – DCL)
A última parte da SQL nos dá uma visão dos mecanismos de controle, subdividida em três grupos de comandos:
♦ Comandos para Controle da Transação – são os comandos necessários para que possamos controlar a efetivação
ou não das modificações realizadas no banco de dados.
♦ Comandos para Controle da Sessão – são os comandos necessários para que possamos modificar as características
de nossa sessão.
♦ Comandos para Controle do Sistema – são os comandos necessários para a modificação de características da
instância Oracle. Não serão vistas neste livro.
Além destas partes, a SQL contém comandos a serem usados nas linguagens HOST, tais como COBOL, C, ADA, etc.
Estes comandos são chamados de EMBEDDED, pois são codificados como parte integrante das linguagens HOST.
Na verdade, são os mesmos comandos da DML e DCL incorporados ao código do programa. Uma vez que existe a
necessidade de troca de informação entre as variáveis dos dois ambientes (HOST e SQL), existem pequenas diferenças
na codificação dos comandos de SQL quando utilizamos estas linguagens HOST. Estas sintaxes especiais são tratadas
em uma parte da linguagem chamada Embedded SQL Commands (não será vista neste livro).
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
23
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Para darmos início aos testes dos comandos, precisamos de uma ferramenta que nos possibilite esta conversa
(interação) com o banco de dados. A ferramenta que usaremos em todo este capítulo se chama SQL*Plus.
FUNDAMENTOS EM: FERRAMENTA SQL*PLUS
PRÉ-REQUISITOS
♦ Noções básicas da utilização do ambiente Windows. Conhecimentos teóricos da linguagem SQL.
METODOLOGIA
♦ Apresentação conceitual da ferramenta e descrição sintática dos comandos necessários à edição, execução e tratamento de arquivos.
TÉCNICA
♦ Apresentação de exemplos utilizando os comandos básicos descritos.
ABRINDO UMA SESSÃO
O SQL*Plus é uma ferramenta que nos possibilita a interação com o banco de dados Oracle. Funciona como um
intermediário entre o usuário e o banco de dados.
Ao acionarmos a execução da ferramenta (botão Iniciar, pasta Programas, pasta Oracle – Orahome9i, pasta Application Development, SQL*Plus), será apresentado um diálogo de login a fim de que possamos fornecer o nome do
usuário e senha para estabelecer conexão com o banco de dados. Nosso usuário padrão para testes será DESENV
(criado no tópico Criando um Usuário Padrão do Capítulo 1).
Figura 2.01 – Conexão com o banco de dados através do SQL*Plus
A terceira informação deste diálogo corresponde à string de conexão (String do Host), ou seja, o nome de um
parâmetro que indica a que máquina e a que banco de dados desejamos estabelecer conexão. Se você estiver
estabelecendo conexão com um banco de dados instalado na mesma máquina (local), este valor não precisa ser
preenchido; caso isto não aconteça, consulte seu DBA para obter o nome adequado para preenchimento. Em todo
este capítulo estaremos usando o Personal Oracle9i (versão 9.0.1.1.1) para realização dos testes. A instalação deste
produto se encontra descrita no Capítulo 1 (Instalando o Personal Oracle9i no Windows 2000).
Quando a conexão é estabelecida, obtemos permissão do banco de dados para enviar comandos e receber respostas.
O intervalo de tempo entre o momento em que uma conexão é estabelecida até o momento em que ela é encerrada
é chamado de Sessão.
O SQL BUFFER
No SQL*Plus, a tela apresentada mostra uma linha com o texto SQL> à esquerda do vídeo, indicando que poderemos
digitar o comando que desejamos executar.
24 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Figura 2.02 – Linha de comando do SQL*Plus
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 memória chamada SQL Buffer (ver Figura 2.03).
Figura 2.03 – Esquema de funcionamento do SQL*Plus
Quando terminamos a digitação, esta área de memória, 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 informação, a formata e apresenta.
OS COMANDOS DO SQL*PLUS
No esquema da Figura 2.03, observamos que nem todos os comandos digitados são colocados na área de Buffer para
transmissão ao banco de dados. Isto ocorre porque o SQL*Plus também possui comandos próprios 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 execução.
♦ Modificar o modo de trabalhar do SQL*Plus.
♦ Enviar mensagens e receber respostas de outros usuários.
♦ Listar a definição de qualquer tabela.
♦ Fazer acesso e copiar dados entre banco de dados.
DIGITANDO NO SQL*PLUS
A digitação na linha de prompt pode ser contínua (uma única linha) ou pode ocupar mais de uma linha, bastando
que teclemos Enter para que seja mostrada uma numeração seqüencial no lado esquerdo do vídeo, indicando que
o SQL*Plus considerou continuação do estado de digitação.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
25
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Para encerrarmos a digitação de um comando temos quatro opções, cada uma delas indicando ações diferentes.
A primeira opção é digitar um ponto-e-vírgula (;) seguido de Enter, indicando fim de digitação e ao mesmo tempo
solicitação de execução.
Outra opção que causa o mesmo resultado é pressionarmos a tecla Enter e na nova linha digitarmos a barra (/),
como primeiro caracter da linha, seguida de Enter. Novamente, o SQL*Plus considerará fim de digitação e dará
início à execução do comando.
Se não desejarmos que o comando seja executado, podemos teclar Enter duas vezes seguidas (deixando uma linha
vazia) ou teclar Enter uma vez, colocar um ponto (.) como primeiro caracter da nova linha e pressionar Enter
novamente. Nestas duas situações, o SQL*Plus apenas registrará o comando no SQL Buffer, mas não o executará.
Listagem 2.01 – Digitando no SQL*Plus
SQL>
2
3
4
5
SQL>
SELECT
'TESTE'
FROM
DUAL
.
Havendo um comando de SQL armazenado no SQL Buffer, poderemos alterá-lo, listá-lo ou substituí-lo com alguns
comandos básicos, próprios do SQL*Plus.
COMANDOS DE EDIÇÃO
Os comandos de edição têm o objetivo de modificar a informação armazenada no SQL Buffer. Estes comandos
afetam apenas uma linha de cada vez, isto é, a edição é feita linha a linha.
Quando listamos o conteúdo do SQL Buffer, o SQL*Plus mostra do lado esquerdo do texto (ao lado da numeração)
um asterisco em uma das linhas, indicando que se trata da linha corrente, ou seja, da linha apta para modificação.
Desta forma, qualquer comando de edição 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.
Listagem 2.02 – Listando o SQL Buffer
SQL>
2*
SQL>
2
3
4*
SQL>
4*
SQL>
1
2
3
4*
SQL>
4*
SQL>
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 minúscula. Repita o exemplo utilizando letra maiúscula. Você
poderá observar agora que os comandos do SQL*Plus não são case sensitive, isto é, a informação pode ser fornecida
em letra minúscula ou maiúscula indiferentemente.
26 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
A Sintaxe 2.01 indica como podemos listar parte do SQL Buffer e transformar em linha corrente quaisquer das
linhas digitadas.
Sintaxe 2.01 – List
Repita o teste apresentado na Listagem 2.02 com outras opções sintáticas. Verifique se ocorre alguma diferença na
digitação dos comandos em letra maiúscula ou minúscula.
APPEND
Com este comando, podemos adicionar um trecho de texto ao fim da linha corrente. Sua sintaxe é apresentada na
Sintaxe 2.02 a seguir.
Sintaxe 2.02 – Append
Observe, no exemplo da Listagem 2.03, que o texto é adicionado imediatamente após o texto existente na linha
corrente, mesmo havendo um branco entre o comando e o texto. Observe, ainda, que, após a execução do comando,
o SQL*Plus apresenta a linha modificada para verificação.
Listagem 2.03 – Append
SQL>
1
2
3
4*
SQL>
2*
SQL>
2*
SQL>
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-vírgula ao final de alguma linha. Isto não é possível, uma vez que o ponto-e-vírgula não faz parte da
sintaxe do SQL e tem uma conotação especial para o SQL*Plus, pois indica término de digitação e solicitação de
execução. Se, porém, o trecho que estivermos digitando não for de SQL e sim de PL/SQL, teremos necessidade de
incluir o ponto-e-vírgula no texto. Para que isto seja possível, devemos repetir a ação realizada com o branco, ou
seja, para a inclusão de um ponto-e-vírgula ao fim do texto, devemos digitar dois ponto-e-vírgulas seguidos.
CHANGE
Este comando de edição tem o objetivo de substituir parte do texto (ou todo) por outro. O separador (<sepchar>)
pode ser qualquer caracter especial que não esteja presente no texto <old> nem no texto <new>.
Observe que os separadores apresentados são iguais. Podemos utilizar qualquer caracter especial não presente nos
textos, porém, dentro de um comando, só podemos usar um deles.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
27
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Sintaxe 2.03 – Change
Listagem 2.04 – Change
SQL>
1
2
3
4*
SQL>
2*
SQL>
2*
SQL>
L
SELECT
'TESTE', 'OUTRO TESTE'
FROM
DUAL
L2
'TESTE', 'OUTRO TESTE'
C/TESTE/TST
'TST', 'OUTRO TESTE'
Este comando efetua apenas uma substituição 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 substituição pelo texto <new> e o
comando é encerrado. Se desejarmos repetir a substituição para outro trecho da linha, devemos digitar o
comando novamente.
Para que não precisemos digitar repetidamente o mesmo comando, podemos “pintá-lo” com o botão 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 botão esquerdo,
clicar o botão direito do mouse. Esta ação 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 não sejam informados parâmetros que indiquem a
linha a ser removida, será excluída a linha corrente.
Sintaxe 2.04 – Del
No exemplo da Listagem 2.05, foi excluída a linha 2, deixando a sintaxe do comando SQL inválida. O próximo
comando (Input) resolve este problema.
Listagem 2.05 – Del
SQL>
1
2
3
4*
SQL>
SQL>
1
2
3*
SQL>
L
SELECT
'TST', 'OUTRO TESTE'
FROM
DUAL
DEL 2
L
SELECT
FROM
DUAL
28 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
INPUT
Este comando adiciona uma ou mais linhas após a linha corrente (no SQL Buffer). Este comando difere do comando
Append uma vez que pode voltar ao estado de digitação, abrindo uma nova linha para digitação imediatamente
após a linha corrente.
Sintaxe 2.05 – Input
Quando digitamos o comando juntamente com um texto, é criada uma nova linha imediatamente após a linha
corrente, sendo seu conteúdo o texto informado. Quando digitamos apenas o comando, o SQL*Plus volta ao
estado de digitação, apresentando uma linha vazia com a numeração à esquerda seqüencial à da linha corrente,
anexada da letra i (ver exemplo da Listagem 2.06).
Para concluirmos a digitação desta(s) linha(s), devemos seguir os procedimentos normais vistos anteriormente no
tópico Digitando no SQL*Plus.
Listagem 2.06 – Input
SQL>
1
2
3*
SQL>
1*
SQL>
2I
3I
4I
SQL>
1
2
3
4
5*
SQL>
L
SELECT
FROM
DUAL
L1
SELECT
I
'TESTE',
'OUTRO TESTE'
L
SELECT
'TESTE',
'OUTRO TESTE'
FROM
DUAL
Observe que, ao listarmos o conteúdo do SQL Buffer novamente, as linhas já foram renumeradas.
EDIT
Este comando aciona um editor registrado no Windows e passa como parâmetro 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 parâmetro
o texto do SQL Buffer.
Quando desejamos editar um determinado arquivo, seu nome pode ser informado com ou sem a extensão. A
extensão default é SQL.
Sintaxe 2.06 – Edit
O editor em uso pode ser obtido através de uma variável 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 variável solicitada. No segundo caso, serão apresentadas todas as variáveis existentes até o momento.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
29
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Posteriormente, no item referente a outros comandos do SQL*Plus, veremos o que são as variáveis de substituição
(ou variáveis definidas pelo usuário) e como podemos criar novas variáveis ou removê-las.
Listagem 2.07 – Variáveis de substituição predefinidas do SQL*Plus
SQL> DEFINE
DEFINE _SQLPLUS_RELEASE = “900010001” (CHAR)
DEFINE _EDITOR
= “Notepad” (CHAR)
DEFINE _O_VERSION
= “Personal Oracle9i Release 9.0.1.1.1 - Production
With the Partitioning option
JServer Release 9.0.1.1.1 - Production” (CHAR)
DEFINE _O_RELEASE
= “900010101” (CHAR)
SQL>
O editor-padrão no Windows é o bloco de notas (Notepad). Antes de substituirmos o editor-padrão por outro de
nossa escolha, devemos nos lembrar de que o editor escolhido deve aceitar um parâmetro correspondente ao arquivo
a ser editado. A Figura 2.04 apresenta a execução do comando EDIT sem que informemos o nome do arquivo.
Figura 2.04 – Comando EDIT sem parâmetros
Observe a mensagem apresentada na linha imediatamente abaixo da linha de prompt. Nesta situação, o SQL*Plus
deveria passar como parâmetro para o editor o conteúdo 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 parâmetro para o editor.
Quando efetuamos as modificações 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 após a última linha lida para que continuemos a digitação. Experimente.
O diretório do Windows onde serão gravados (ou lidos) os arquivos de trabalho pode ser controlado por nós
(default é C:\<Oracle Home>\BIN). Se criarmos um atalho para o SQL*Plus (o executável se encontra na pasta
C:\<Oracle Home>\BIN e se chama SqlPlusw.exe), basta que modifiquemos o diretório “Iniciar em” da pasta
Atalho (ver Figura 2.05), obtida ao pressionarmos o botão direito do mouse sobre o ícone do SQL*Plus e escolhermos
a opção Propriedades.
Podemos, também, modificar o diretório de trabalho default do atalho presente na pasta Application Development
da seguinte forma: clicar no botão Iniciar (do Windows), opção Configurações, opção Barra de Tarefas e menu Iniciar,
pasta Avançado, clicar no botão Avançado, expandir o nó Programas, pesquisar (subordinado à pasta Documents
and Settings) a pasta All Users e expandi-la, seguir expandindo seqüencialmente 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 botão direito do mouse sobre o ícone do SQL*Plus e escolher a opção
30 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Propriedades. Novamente será mostrada a tela de propriedades e, na pasta Atalho, poderemos alterar o diretório
“Iniciar em” (ver Figura 2.05). Para que a modificação tenha efeito, o SQL*Plus deve ser reiniciado.
Figura 2.05 – Propriedades do atalho SQL*Plus
Com esta modificação, qualquer arquivo a ser lido ou gravado pelo SQL*Plus o será no novo diretório default.
Se desejarmos efetuar a leitura ou gravação de arquivos em outros diretórios, podemos incluir o caminho onde se
encontra o arquivo ao usarmos o comando EDIT.
COMANDOS DE EXECUÇÃO E DE ENCERRAMENTO
Neste grupo de comandos, veremos como executar o conteúdo do SQL Buffer e como fechar o SQL*Plus.
RUN
Este comando envia o conteúdo do SQL Buffer para o banco de dados e, ao mesmo tempo, apresenta no vídeo as
linhas enviadas (lista o SQL Buffer).
Sintaxe 2.07 – Run
Para efeito de teste, digite o comando de SQL apresentado na Listagem 2.08 e execute o comando RUN.
Listagem 2.08 – Run
SQL>
2
3
SQL>
1
2*
SELECT 'TESTE'
FROM DUAL
RUN
SELECT 'TESTE'
FROM DUAL
'TEST
----TESTE
SQL>
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
31
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
/ (BARRA)
Quando digitamos uma barra na linha de prompt e em seguida teclamos Enter, o SQL*Plus envia o conteúdo do
SQL Buffer para o banco de dados, porém não apresenta o texto enviado, isto é, não lista o SQL Buffer. Esta é a
diferença entre o comando Run e a barra.
Sintaxe 2.08 – / (barra)
EXIT / QUIT
Os comandos Exit e Quit são equivalentes e têm a finalidade de encerrar a sessão do SQL*Plus. Isto significa que a
conexão com o banco de dados e, simultaneamente, o próprio programa serão encerrados.
De acordo com a Sintaxe 2.09, observamos que podemos determinar como deve ser considerado o término do
programa, isto é, com sucesso ou não e com efetivação ou não das modificações realizadas no banco de dados.
Sintaxe 2.09 – Exit / Quit
Quando digitamos apenas Quit (ou apenas Exit), ficam valendo as opções sublinhadas. O término do programa é
considerado normal e a conexão se encerra também normalmente com Commit.
As demais opções indicam a ocorrência de uma falha na execução 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 término do programa anterior, para que o próximo comando do arquivo seja executado ou não.
Podemos informar um valor numérico fixo, o valor de uma variável de substituição ou o valor de uma variável
BIND (variável para troca de informações com um programa PL/SQL será vista posteriormente).
A utilização destes parâmetros de encerramento é comum em arquivo de comandos. Desta forma, poderemos
transferir o valor para o arquivo de comandos a fim de controlar a execução do comando seguinte.
A conexão com o banco pode ser encerrada independentemente do tipo de término do SQL*Plus (Commit ou Rollback).
A execução de um comando Commit indica ao banco de dados que todos os comandos que modificaram informações do banco de dados devem
ser considerados válidos e as alterações devem ser efetivadas. Já um comando Rollback indica que as modificações devem ser desconsideradas.
Na Figura 2.06 (a seguir), incluímos três janelas:
♦ A janela da esquerda apresenta um script chamado exsql.sh, contendo a execução do SQL*Plus numa linha de
comando recebendo como parâmetros o user, password e o script a ser executado (@valor). Após a execução,
verificamos se o término foi normal ou não e adotamos caminhos alternativos. Foi utilizado o parâmetro –s
indicando que a janela do SQL*Plus não deve ser aberta, ou seja, indicando execução em batch.
♦ Na janela da direita, apresentamos o conteúdo deste script valor: ele encerra o SQL*Plus com warning.
♦ Na janela inferior, vemos a execução do script exsql.sh, no qual o término do programa (SQL*Plus) foi anormal,
e recebemos as mensagens adequadas.
32 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Figura 2.06 – Execução do SQL*Plus em ambiente UNIX
O objetivo de transferirmos informações para o ambiente é permitir que executemos o SQL*Plus em batch e
façamos o controle sobre o resultado, definindo alternativas de ação em caso de erro, warning, etc.
DESCRIBE
Este comando tem a finalidade de apresentar a definição de um objeto criado na base de dados Oracle. O objeto
pode ser uma table, view, synonym, function, procedure ou package.
Sintaxe 2.10 – Describe
A Sintaxe 2.10 indica que podemos obter informações de objetos pertencentes ao usuário que estabeleceu a conexão,
objetos de outros usuários (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 descrição da tabela Dual e da rotina Proc.
Listagem 2.09 – Describe
SQL> DESC SYS.DUAL
Nome
Nulo?
----------------------------------------- ----DUMMY
SQL> DESC PROC
PROCEDURE PROC
Nome do Argumento
Tipo
---------------------------------- -----PAR1
NUMBER
SQL>
Tipo
-----------VARCHAR2(1)
In/Out Default?
--------------IN
Observe que a tabela Dual não pertence ao usuário DESENV e sim ao usuário SYS; por este motivo, estamos
informando o schema da tabela. Já a procedure Teste pertence ao usuário DESENV e desta forma não é necessário
que o schema seja fornecido.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
33
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Por default, o banco de dados procura o objeto no próprio schema do usuário conectado.
COMANDOS PARA TRATAMENTO DE ARQUIVOS
O conjunto de comandos que passaremos a estudar neste item permitirá que guardemos comandos de SQL em
arquivos para execução posterior.
SAVE
Este comando salva o conteúdo do SQL Buffer em um arquivo do sistema operacional.
Sintaxe 2.11 – Save
A sintaxe acima permite que o conteúdo do SQL Buffer seja salvo em um arquivo novo (default), substitua um
arquivo existente ou seja adicionado a um arquivo existente.
A extensão do arquivo é fornecida por .<ext> . Caso seja omitida, será usado SQL como extensão padrão. O padrão
pode ser mudado com o uso da variável de sistema Suffix.
Listagem 2.10 – Save
SQL> SELECT COUNT(*)
2 FROM FUNC
3 /
COUNT(*)
-------32
SQL> SAVE QTD
Criado file QTD
SQL> SAVE QTD
Arq. “QTD.SQL” já exst.
Use out. nome ou “SAVE nome arq.REPLACE”.
SQL> SAVE QTD REP
Gravou file qtd
SQL>
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 opção Replace,
indicando que desejamos a substituição do arquivo.
GET
A recuperação de um texto para o SQL Buffer é feita por meio do comando GET. Todo o conteúdo do arquivo é
copiado para o SQL Buffer, e portanto este arquivo deve conter apenas um comando.
Sintaxe 2.12 – Get
34 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
A extensão só precisa ser mencionada se for diferente do padrão (SQL). O padrão pode ser mudado com o uso da
variável de sistema Suffix.
Observe no exemplo (Listagem 2.11) que todo o conteúdo do arquivo é carregado para o SQL Buffer; desta forma,
se o arquivo contiver mais de um comando, ocorre um erro na execução porque o SQL*Plus envia todo o buffer
para o banco de dados como se fosse um único comando e, portanto, não reconhecido pelo banco de dados.
Listagem 2.11 – Get
SQL> CLEAR BUFFER
buffer conteúdo removido
SQL> GET QTD
1 SELECT COUNT(*)
2*
FROM FUNC
SQL> GET DUPLO
1 SELECT SYSDATE FROM DUAL
2 /
3* SELECT MAX(VL_SAL) FROM FUNC
SQL> /
/
*
ERRO na linha 2:
ORA-00933: comando SQL não encerrado adequadamente
Caso o nome do arquivo seja composto das palavras List ou File, seu nome deve ser mencionado entre aspas.
Por default, o conteúdo do arquivo é listado após ser carregado para o SQL Buffer. Se esta ação não for desejada,
devemos usar a opção Nolist.
START
Este comando executa o conteúdo 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.
Sintaxe 2.13 – Start
O comando @ é sinônimo de Start e o @@ é semelhante, com a diferença de que, se este comando for incluído em
um arquivo de comandos, ele pesquisará o arquivo associado no diretório do arquivo de comando e não no
diretório local, como seria o caso do @ e do Start.
A Sintaxe 2.13 do comando Start permite a passagem de parâmetros. Estes parâmetros são variáveis de substituição
que são utilizadas para a alteração de trechos do comando SQL. Observe no exemplo (Listagem 2.12) que o valor
passado como parâmetro é substituído antes de o SQL*Plus enviar o comando ao banco de dados (é apresentada
uma mensagem com o texto da linha antes e após a substituição).
Listagem 2.12 – Start
SQL> SELECT NM_FUNC, VL_SAL, CD_MAT, NR_GIT
2
FROM FUNC
3
WHERE NR_GIT > &1 AND CD_DEPTO = '&2'
4
SQL> SAVE TESTE
Criado file teste
SQL> START TESTE 16 D11
antigo
3: WHERE NR_GIT > &1 AND CD_DEPTO = '&2'
novo
3: WHERE NR_GIT > 16 AND CD_DEPTO = 'D11'
Foram usados dois parâmetros, um para a coluna Nr_git (numérica) e outro para a coluna Cd_depto (alfanumérica).
O valor &1 indica que deve ser feita a substituição pelo primeiro parâmetro passado na linha de comando. Como
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
35
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
este valor é numérico, não houve necessidade de ser informado entre aspas simples. O segundo parâmetro deveria
ser informado entre aspas simples, pois se tratava de uma string. No exemplo, utilizamos a comparação com ‘&2’
no próprio comando de SQL, de tal forma que o valor informado na linha de comando não precisasse de aspas.
Quando executamos o comando Start passando parâmetros na linha de comando, o SQL*Plus define uma variável
de substituição com o nome de cada um dos parâmetros passados, de tal forma que uma segunda execução do
mesmo comando não precisa da passagem dos parâmetros (ver Listagem 2.13).
Listagem 2.13 – Start
SQL> @TESTE
antigo
3: WHERE NR_GIT > &1 AND CD_DEPTO = '&2'
novo
3: WHERE NR_GIT > 16 AND CD_DEPTO = 'D11'
As variáveis de substituição não precisam ter nomes numéricos, podemos dar qualquer nome a elas; porém, neste
caso, não podem ser utilizadas como parâmetro para o comando Start. Ao executarmos um comando de SQL ou de
SQL*Plus contendo uma referência a variáveis de substituição, o SQL*Plus solicita que o valor da variável seja
informado. Observe na Listagem 2.14 que, mesmo quando informamos os valores na linha de comando, estes são
ignorados e é feita a solicitação dos valores.
Listagem 2.14 – Variáveis de substituição
SQL> GET TESTE
1 SELECT NM_FUNC, VL_SAL, CD_MAT, NR_GIT
2
FROM FUNC
3* WHERE NR_GIT > &INST AND CD_DEPTO = '&DEP'
SQL> @TESTE 17 A00
Entre o valor para INST: 16
Entre o valor para DEP: D11
antigo
3: WHERE NR_GIT > &INST AND CD_DEPTO = '&DEP'
novo
3: WHERE NR_GIT > 16 AND CD_DEPTO = 'D11'
Quando o comando contém a variável de substituição com nome alfanumérico precedido por um &, o SQL*Plus
não define uma variável de substituição com este nome. Se for desejada esta ação, devemos preceder a variável de
substituição com && e teremos o mesmo efeito que no caso do Start com parâmetros numéricos.
Listagem 2.15 – Variáveis de substituição
SQL> GET TESTE
1 SELECT NM_FUNC, VL_SAL, CD_MAT, NR_GIT
2
FROM FUNC
3* WHERE NR_GIT > &&INST AND CD_DEPTO = '&&DEP'
SQL> @TESTE
Entre o valor para INST: 17
Entre o valor para DEP: D11
antigo
3: WHERE NR_GIT > &&INST AND CD_DEPTO = '&&DEP'
novo
3: WHERE NR_GIT > 17 AND CD_DEPTO = 'D11'
NM_FUNC
------------JOANA
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 variável de substituição seja concatenado com outro valor, devemos usar um
ponto (.) para separar seu nome do valor.
Listagem 2.16 – Variáveis de substituição
SQL> GET TESTE
1 SELECT NM_FUNC, VL_SAL, CD_MAT, NR_GIT
2
FROM FUNC
3* WHERE NR_GIT > &1 AND CD_DEPTO = '&2.11'
SQL> @TESTE 17 D
Entre o valor para 1: 17
Entre o valor para 2: D11
36 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
antigo
3: WHERE NR_GIT > &1 AND CD_DEPTO = '&2.11'
novo
3: WHERE NR_GIT > 17 AND CD_DEPTO = 'D11'
Com este comando, encerramos nosso estudo preliminar do SQL*Plus, pois já estamos em condições 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 características de execução da ferramenta.
FUNDAMENTOS EM: CONSULTA À BASE DE DADOS
PRÉ-REQUISITOS
♦ Conhecimentos teóricos e práticos de modelagem de dados e da teoria relacional. Conhecimentos de SQL*Plus para edição e execução de comandos.
METODOLOGIA
♦ Apresentação e descrição da sintaxe básica de um comando Select.
TÉCNICA
♦ Exemplificação de uso com indicação dos resultados obtidos.
INTRODUÇÃO
Retomaremos, agora, o estudo da linguagem SQL. Para os testes iniciados a partir deste ponto, utilizaremos as
tabelas apresentadas no tópico Criação da Base Relacional (no Capítulo 1).
Como já vimos anteriormente, a DML é a parte da SQL que permite que os usuários façam consultas, modifiquem
informações existentes, criem novos dados ou excluam dados das tabelas do banco de dados.
As consultas aos dados são feitas através do comando SELECT, que é um dos comandos mais ricos da linguagem,
possuindo uma sintaxe ampla que permite diversas opções de pesquisa.
FORMA BÁSICA DO COMANDO SELECT
A forma básica de um comando SELECT é apresentada a seguir.
Sintaxe 2.14 – SELECT básico
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 condições devem ser satisfeitas
para a obtenção destes dados.
As informações a serem trazidas do banco de dados podem ser compostas de nomes de colunas, funções ou expressões.
Listagem 2.17 – Select
SQL> SELECT CD_MAT, TO_CHAR(DT_NASC, 'DD/MM/YYYY'),
2
VL_SAL * 1.2
3
FROM FUNC;
No exemplo da Listagem 2.17 usamos uma função (to_char), uma expressão matemática (vl_sal * 1.2) e um nome
de coluna (cd_mat) na cláusula Select. Repita este exemplo e você verificará que todas as linhas da tabela Func são
apresentadas no resultado, uma vez que não existem restrições quanto às linhas lidas da tabela.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
37
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
RESTRINGINDO A CONSULTA
As restrições são estabelecidas com o uso da cláusula Where. É com esta cláusula que determinamos que linhas
devem ser selecionadas. Observe o exemplo da Listagem 2.18.
Listagem 2.18 – Where
SQL> SELECT cd_MAT, to_char(dt_NASC, 'DD/MM/YYYY'),
2
VL_sal * 1.2
3
FROM fUNc
4
WhErE cD_dEpTO = 'A00';
Neste exemplo, só os funcionários que trabalham no departamento A00 são apresentados no resultado. Se você
observar detalhadamente o exemplo, verificará que a forma como foi escrito o comando SELECT mistura letras
maiúsculas e minúsculas indiscriminadamente e sem problemas de execução, porém a string ‘A00’ deve ser escrita
em letras maiúsculas, uma vez que, na coluna cd_depto da tabela Func, esta informação foi armazenada em letras
maiúsculas. Repita o exemplo anterior comparando cd_depto com a string ‘a00’. Qual o resultado encontrado?
Imaginemos agora que desejamos obter informações de todas as colunas da tabela Func para o funcionário com
matrícula 100.
Listagem 2.19 – Select com Where
SQL> select * from func
2 WHERE CD_MAT = 100;
Ao utilizarmos o símbolo * (asterisco), estamos informando ao Oracle que desejamos obter todas as colunas da
tabela referenciada na cláusula From. Estas colunas são apresentadas na mesma ordem em que foram criadas na
tabela correspondente. Já no exemplo da Listagem 2.18, as informações foram trazidas na ordem de seleção, uma
vez que mencionamos explicitamente o que desejávamos 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 apresentação; desta forma, existem alguns padrões de layout de acordo com o tipo de coluna.
Para as colunas de data, o tamanho é determinado pela máscara de edição default em uso na sessão (obtida pela
NLS do banco de dados ou da estação) ou pela máscara de edição específica modificada pelo uso da função To_Char.
Em ambos os casos, o alinhamento é pela esquerda.
Para as colunas alfanuméricas, o tamanho da coluna é determinado por sua definição 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 variáveis de sistema Longchunksize ou Long,
o que for menor.
Para as colunas numéricas, o tamanho é determinado pelo cabeçalho da coluna, sendo que seu tamanho mínimo
é dado pela variável de sistema NumWidth (do SQL*Plus). O alinhamento é pela direita.
Todos estes padrões podem ser modificados com o uso do comando Column do SQL*Plus.
O USO DE ALL VERSUS DISTINCT OU UNIQUE
Quando realizamos uma seleção de dados do banco, eventualmente podem ocorrer linhas duplicadas no resultado
gerado, como na Listagem 2.20.
Listagem 2.20 – All implícito
SQL> SELECT CD_DEPTO
2
FROM FUNC
3
WHERE IN_SEXO = 'M';
38 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Isto ocorre porque a cláusula Select possui duas palavras-chave que podemos utilizar para indicar se desejamos que
todas as linhas sejam selecionadas (mesmo correndo o risco de obtermos duplicidades) ou se desejamos que apenas
as linhas distintas sejam selecionadas. Quando não mencionamos nenhuma das opções, por default, todas as
linhas são selecionadas. Estas palavras-chave devem ser codificadas imediatamente após a cláusula Select, e fazem
referência a toda a linha e não apenas à primeira coluna. As palavras-chave são ALL (todas as linhas devem ser
selecionadas) e DISTINCT ou UNIQUE (apenas as linhas distintas devem ser selecionadas). As palavras DISTINCT
e UNIQUE são sinônimas. Observe, agora, a diferença no resultado gerado na Listagem 2.21.
Listagem 2.21 – Distinct
SQL> SELECT distinct CD_DEPTO
2
FROM FUNC
3
WHERE IN_SEXO = 'M';
OPERADORES DE COMPARAÇÃO
Até este momento, as restrições estabelecidas na cláusula Where utilizaram apenas a igualdade como operador de
comparação, porém a sintaxe do comando permite a utilização dos seguintes operadores: = (igual), ^= (diferente),
> (maior), >= (maior ou igual), < (menor), <= (menor ou igual), <> (diferente) e != (diferente).
Listagem 2.22 – Operador de comparação
SQL> SELECT CD_MAT, NM_FUNC, NM_SOBRENOME
2
FROM FUNC
3
WHERE NR_CARGO > 56;
A palavra NOT também pode ser usada para estabelecer uma negação.
Listagem 2.23 – Not
SQL> SELECT CD_MAT, NM_FUNC, NR_CARGO
2
FROM FUNC
3
WHERE NOT NR_CARGO > 48;
USANDO AND E OR
Se desejamos colocar mais de uma condição de restrição na cláusula Where, estas condições devem ser combinadas
através das palavras And ou Or.
Com a palavra And, indicamos restrições que devem acontecer simultaneamente, ambas obrigatórias. Com a
palavra Or, indicamos restrições que podem ou não acontecer simultaneamente. Veja os exemplos da Listagem
2.24 a seguir.
Listagem 2.24 – And e Or
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO, NR_CARGO
2
FROM FUNC
3
WHERE CD_DEPTO = 'D11' AND NR_CARGO = 55;
ou
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO, NR_CARGO
2
FROM FUNC
3
WHERE CD_DEPTO = 'A00' OR NR_CARGO = 56;
MUDANDO A PRECEDÊNCIA DAS OPERAÇÕES
A utilização dos parênteses é permitida na sintaxe da cláusula Where e pode ser muito útil quando desejamos
alterar a precedência de execução das operações. No exemplo da Listagem 2.25 são selecionados funcionários de
um dos departamentos D11 ou D21, porém que tenham cargo maior que 54.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
39
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Observe a diferença de resultado quando retiramos os parênteses. Neste caso, são selecionados os funcionários do
departamento D11 (todos) e ainda aqueles do departamento D21 que tenham cargo maior que 54.
Listagem 2.25 – Uso de parênteses
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO, NR_CARGO
2
FROM FUNC
3
WHERE (CD_DEPTO = 'D11' OR CD_DEPTO = 'D21')
4
AND NR_CARGO > 54;
OPERADORES ARITMÉTICOS E DE CONCATENAÇÃO
Os símbolos indicativos de operações aritméticas são + (soma), - (subtração), / (divisão), * (multiplicação), - (menos
unário) e + (mais unário). A concatenação é indicada com os símbolos || (duas barras verticais).
Estes operadores podem ser usados em expressões na cláusula Select para definir uma expressão ou na cláusula
Where para estabelecer uma condição complexa.
Listagem 2.26 – Concatenação
SQL> SELECT NM_FUNC || NM_SOBRENOME, VL_SAL * -1.1
2
FROM FUNC
3
WHERE VL_SAL > NR_GIT * NR_CARGO * 4.1;
Observe no exemplo da Listagem 2.26 que o valor do salário está sendo multiplicado por um número negativo (1.1). O Oracle considera este símbolo como o sinal do número (menos unário) e não uma operação de subtração.
SELECIONANDO UM INTERVALO DE VALORES – BETWEEN
Um predicado nada mais é que uma qualificação a ser incluída na cláusula Select. O primeiro que estudaremos é o
predicado Between.
Este predicado compara uma expressão em um intervalo de valores. Pode ser usado na cláusula Where juntamente
com outras condições. Pode ou não ser precedido por NOT.
Neste primeiro exemplo, desejamos obter informações sobre todos os funcionários que possuam matrícula entre
100 e 140. Os funcionários com as matrículas 100 e 140 também são incluídos no resultado.
Listagem 2.27 – Between
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO
2
FROM FUNC
3
WHERE CD_MAT BETWEEN 100 AND 140;
Este predicado compara valores correspondentes à coluna mencionada. Podemos comparar valores numéricos,
alfanuméricos e até mesmo datas. Neste caso, desejamos selecionar todos os funcionários com data de nascimento
entre 01/01/70 e 31/12/71.
Listagem 2.28 – Between com valores de data
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO
2
FROM FUNC
3
WHERE DT_NASC BETWEEN TO_DATE('01011970', 'DDMMYYYY')
4
AND
TO_DATE('01011972', 'DDMMYYYY') - 1/86400;
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
funcionários nascidos até às 23:59:59 do dia 31/12/71 pudessem ser selecionados.
40 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
SELECIONANDO UMA LISTA DE VALORES – IN
O predicado IN torna possível a comparação do conteúdo de uma coluna (ou expressão) com uma lista de valores.
A comparação retornará verdadeira se o conteúdo da coluna (ou expressão) for igual a qualquer dos valores presentes
na lista. Se utilizarmos a palavra NOT na comparação, serão obtidas as linhas em cuja coluna (ou expressão) não
existam valores iguais a quaisquer daqueles da lista.
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 alfanuméricos, datas ou valores numéricos.
Listagem 2.30 – Not In
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO
2
FROM FUNC
2
WHERE CD_DEPTO NOT IN ('A00', 'C01', 'D11', 'D21');
PESQUISANDO O CONTEÚDO DE UM TEXTO – LIKE
O predicado Like permite que pesquisemos o texto de uma determinada coluna (ou expressão). No predicado Like,
e exclusivamente com ele, os caracteres % (porcentagem) e _ (sublinhado) adquirem significado especial. A
porcentagem indica a substituição de um número qualquer de caracteres (de 0 a n). Já o sublinhado determina a
substituição de exatamente um caracter. A sintaxe Not Like também é permitida.
Listagem 2.31 – Like
SQL> SELECT CD_MAT, NM_FUNC, CD_DEPTO
2
FROM FUNC
3
WHERE NM_FUNC LIKE 'E%'
4
AND CD_DEPTO LIKE 'D_1';
No exemplo (Listagem 2.31), foram selecionados todos os funcionários cujo nome começasse com a letra “E” e que
trabalhassem em um departamento cujo código tivesse três caracteres, o primeiro fosse “D” e o terceiro fosse “1”.
Se desejássemos saber quais os funcionários que tivessem a letra “A” em seu nome, qual a sintaxe necessária?
Os caracteres porcentagem e sublinhado, por possuírem um significado especial, não podem ser usados normalmente
na string de pesquisa; precisamos indicar ao Oracle que estamos pesquisando exatamente aquele caracter.
Suponhamos, então, que desejássemos pesquisar a existência do caracter % num texto de uma determinada coluna
de tabela. Teríamos a necessidade de indicar que, neste caso, o símbolo de porcentagem deveria ser considerado
um caracter normal apto para pesquisa. Veja exemplo na Listagem 2.32.
Listagem 2.32 – Like com escape
SQL> SELECT CD_MAT, CD_DEPTO, TX_MOTIVO
2
FROM HST_PROMO
3
WHERE TX_MOTIVO LIKE '%/%%' ESCAPE '/';
Na cláusula Like, aparece o caracter porcentagem três vezes. A primeira e a última indicam que pode haver qualquer
número 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 cláusula Escape e pode ser qualquer caracter exceto % e _ (underscore).
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
41
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
PESQUISANDO UM VALOR DESCONHECIDO – IS NULL
Quando incluímos uma linha em uma tabela e não informamos valor para todas as colunas, estas não são gravadas
no banco de dados. Desta forma, dizemos que o valor para aquela coluna é ausente ou indeterminado. Um valor
ausente não pode ser comparado com outros valores através dos operadores de comparação normais (>, <, >=, <=,
=, etc.) uma vez que, sendo seu valor desconhecido, o resultado da comparação também seria desconhecido. O
Oracle possui uma expressão específica para obtermos informações das linhas que tenham uma determinada
coluna sem valor. É a expressão Is Null. Veja Listagem 2.33.
Listagem 2.33 – Null
SQL> SELECT CD_DEPTO, NM_DEPTO
2
FROM DEPTO
3
WHERE CD_GERENTE = NULL;
não há linhas selecionadas
SQL> SELECT CD_DEPTO, NM_DEPTO
2
FROM DEPTO
3
WHERE CD_GERENTE >= NULL;
não há linhas selecionadas
SQL> SELECT CD_DEPTO, NM_DEPTO
2
FROM DEPTO
3
WHERE CD_GERENTE IS NULL;
CD_ NM_DEPTO
--- --------------------D01 DIRETORIA DE SISTEMAS
No exemplo, tentamos comparar o valor ausente com NULL através dos operadores >= (maior ou igual) e = (igual),
o que não produziu nenhuma linha como resultado. Faça outros testes utilizando comparações com esta coluna e
você comprovará que, apenas quando vier a utilizar a expressão Is Null, conseguirá obter a linha em que a coluna
cd_gerente não está preenchida, ou seja, seu valor está ausente.
CONSULTANDO DADOS DE UMA TABELA PARTICIONADA
A tabela Hst_Promo é uma tabela particionada. Isto quer dizer que a tabela está fisicamente subdividida em partições
de acordo com o valor de uma ou mais colunas.
No nosso caso (veja o layout da tabela no tópico Criação da Base Relacional), a tabela está particionada em relação
à coluna dt_promocao e foram estabelecidas quatro partições de nomes Anos80, Anos90_94, Anos95_99 e Anos2000.
A consulta em uma tabela com estas características pode ser feita normalmente. De acordo com a sintaxe apresentada,
o Oracle direcionará a consulta para uma ou mais partições.
No exemplo (Listagem 2.34) de como a cláusula Where faz referência à data da promoção, que é justamente a
coluna sobre a qual ocorre o particionamento, é possível que o banco de dados, através da descrição da tabela,
perceba que só há necessidade de pesquisar a partição Anos90_94.
Listagem 2.34 – Tabela particionada
SQL> SELECT CD_MAT, VL_SAL, CD_DEPTO
2
FROM HST_PROMO
3
WHERE DT_PROMOCAO BETWEEN '01/01/91' AND '01/01/93';
Se a pesquisa, por outro lado, não fornecer possibilidade de o Oracle restringir a busca a determinadas partições,
todas serão selecionadas.
Utilizando uma sintaxe própria do comando SELECT, podemos contornar esta situação (se desejarmos) limitando
a busca a uma determinada partição, bastando que mencionemos a cláusula Partition após a cláusula From, como
mostrado na Listagem 2.35.
42 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Listagem 2.35 – Cláusula Partition
SQL> SELECT CD_MAT, VL_SAL, CD_DEPTO
2
FROM HST_PROMO PARTITION (ANOS90_94)
3
WHERE CD_DEPTO IN ('E11', 'C01');
O uso de tabelas particionadas pode ser muito útil, justamente para dados históricos, que não precisam ser
consultados todo o tempo e que, estando armazenados em áreas (tablespaces) separadas das linhas mais
freqüentemente utilizadas da tabela, podem trazer significativo ganho na performance das aplicações diárias.
EXERCÍCIOS
A solução dos exercícios propostos aqui está no último tópico deste Capítulo, intitulado Resolução dos Exercícios
Propostos. Tente resolver toda a lista primeiro e só no final verifique as respostas. Salve todos os exercícios em
arquivos de trabalho. Se as respostas estiverem difíceis de conferir refaça a carga das tabelas com o sript L01_17.sql
2.01) Deseja-se uma lista que contenha número da matrícula, primeiro e último nome e cargo de todos os
funcionários do sexo feminino que tenham cargo superior a 55.
2.02) Deseja-se uma lista que contenha número de matrícula, nome e sobrenome do funcionário em cujo sobrenome
não seja encontrada a letra “E”.
2.03) Repita o exercício anterior de tal forma que a letra pesquisada seja fornecida por variável de substituição na
linha do comando.
2.04) Deseja-se uma lista contendo código e nome do projeto para todos os projetos que possuam o texto “AMA”
em algum lugar de seu nome. Como restrição adicional, temos que somente os projetos em cujo código existam os
números 21 como terceiro e quarto caracter devem ser pesquisados.
2.05) Obtenha a descrição da tabela Funcionário.
2.06) Deseja-se uma lista contendo os códigos de departamento para os departamentos que possuam funcionários.
Na listagem-resposta, não deve haver repetição de código de departamento.
2.07) Deseja-se uma lista contendo código do departamento e nome do departamento de todos os departamentos
em que o código do departamento contábil não está preenchido.
2.08) Deseja-se uma lista (matrícula, nome e departamento) de todos os funcionários que estejam alocados aos
departamentos A00, B01 ou C01.
2.09) Deseja-se saber quais os funcionários (matrícula, cargo e departamento) que foram cadastrados na partição
Anos95_99 da tabela de histórico de promoções.
FUNDAMENTOS EM: ATUALIZAÇÃO DA BASE DE DADOS
PRÉ-REQUISITOS
♦ Conhecimento do modelo de dados em uso. Capacidade de consultar os dados armazenados.
METODOLOGIA
♦ Apresentação e descrição da sintaxe básica dos comandos Insert, Update e Delete.
TÉCNICA
♦ Atualização dos dados armazenados utilizando a sintaxe descrita seguida de consulta a estes dados.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
43
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
INCLUINDO NOVAS LINHAS – INSERT BÁSICO
O primeiro comando que estudaremos será o comando Insert. Sua forma básica é apresentada na Sintaxe 2.15 a seguir.
Sintaxe 2.15 – Insert básico
Com esta sintaxe, podemos incluir linhas em tabelas locais, de outros schemas e ainda de outros bancos de dados
(@<dblink>). A inclusão 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 inclusão de diversas linhas pode ser feita com um único comando Insert. Finalmente,
podemos definir que os valores sejam cadastrados em uma determinada partição de uma tabela específica. A
seguir, estudaremos separadamente cada uma das opções apresentadas.
Suponhamos que desejássemos incluir duas novas linhas na tabela de funcionários, porém não dispomos de
informações completas destes novos funcionários. Observe as diferenças sintáticas nos exemplos da Listagem 2.36.
Listagem 2.36 – Insert
SQL> INSERT INTO FUNC
2
(VL_SAL, CD_MAT, NM_FUNC, CD_DEPTO, IN_SEXO, NM_SOBRENOME)
3 VALUES
4
(1838, 272, 'Laura', 'D21', 'F', 'Pereira');
1 linha criada.
SQL> INSERT INTO FUNC
2 VALUES
3
(274, 'Elizabeth', 'Jorio', 'D21', NULL, NULL, NULL,
4
NULL, 'F', NULL, 1874, NULL);
1 linha criada.
No primeiro Insert, foram mencionadas as colunas que desejávamos preencher. Desta forma, informamos valores
apenas para estas colunas.
No segundo caso, as colunas da tabela não foram mencionadas; sendo assim, precisamos associar valores a cada
uma das colunas. Faça um Describe da tabela Func e verifique a ordem em que as colunas foram criadas na tabela.
Esta é a ordem em que devemos fornecer informações para a segunda forma sintática.
Quando não possuímos valor para uma determinada coluna, podemos utilizar a palavra-chave NULL, indicando
que a coluna específica não será gravada no banco de dados.
No próximo exemplo, faremos a inclusão de dados sem mencionar em que partição a inclusão deve ser realizada.
Uma vez que a coluna dt_promocao é de preenchimento obrigatório, será em função dela que o Oracle descobrirá
em que partição deve incluir cada uma das linhas.
Listagem 2.37 – Insert em tabela particionada
SQL> INSERT INTO HST_PROMO
2
(DT_PROMOCAO, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, TX_MOTIVO)
3 VALUES
4
('01/01/99', 272, 1950, 'D11', 55, 'Enquadramento');
1 linha criada.
SQL> SELECT *
2
FROM HST_PROMO PARTITION (ANOS95_99)
3
WHERE CD_MAT = 272;
44 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Neste exemplo (Listagem 2.37), apesar de não mencionarmos em qual partição desejávamos que fosse feita a
inclusão das linhas, em função da especificação feita no momento da criação da tabela para a coluna dt_promocao,
o Oracle pode determinar qual a partição mais adequada para a inclusão da nova linha.
O comando Select apresentado já menciona o nome da partição. Sendo assim, a consulta se restringe à partição mencionada.
Listagem 2.38 – Insert com a cláusula Partition
SQL> INSERT INTO HST_PROMO PARTITION (ANOS2000)
2
(DT_PROMOCAO, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, TX_MOTIVO)
3 VALUES
4
('01/01/99', 274, 1950, 'D11', 55, 'Enquadramento');
INSERT INTO HST_PROMO PARTITION (ANOS2000)
*
ERRO na linha 1:
ORA-14401: chave inserida da partição esta fora da partição especificada
SQL> INSERT INTO HST_PROMO PARTITION (ANOS95_99)
2
(DT_PROMOCAO, CD_MAT, VL_SAL, CD_DEPTO, NR_CARGO, TX_MOTIVO)
3 VALUES
4
('01/01/99', 274, 1950, 'D11', 55, 'Enquadramento');
1 linha criada.
Neste exemplo, tentamos incluir linhas na partição Anos2000, quando, na verdade, a data da promoção era de
1999. Observamos que o Oracle, apesar de informarmos o nome da partição, faz a verificação e impede que façamos
a inclusão na partição incorreta, garantindo a integridade lógica da informação armazenada.
Listagem 2.39 – Insert com Select
SQL> INSERT INTO FUNC
2
(CD_MAT, NM_FUNC, NM_SOBRENOME, CD_DEPTO, IN_SEXO)
3
SELECT CD_MAT + CD_MAT / 20, NM_SOBRENOME, NM_FUNC,
4
'D01', IN_SEXO
5
FROM FUNC
6
WHERE CD_DEPTO = 'E21';
4 linhas criadas.
No exemplo da Listagem 2.39, o comando Insert foi utilizado para efetuar a inclusão de diversas linhas
simultaneamente. As linhas foram obtidas da própria tabela Func para efeito de teste. Observe que o novo código
da matrícula foi derivado do valor antigo, porém foi obrigatória sua modificação, pois cd_mat é primary key da
tabela Func. Isto significa que o Oracle não admitirá duas linhas com o mesmo valor de matrícula.
Listagem 2.40 – Integridade referencial
SQL> INSERT INTO FUNC
2
(CD_MAT, NM_FUNC, NM_SOBRENOME, CD_DEPTO, IN_SEXO)
3 VALUES
4
(100, 'Teste', 'Duplicidade', 'A00', 'M');
INSERT INTO FUNC
*
ERRO na linha 1:
ORA-00001: restrição exclusiva (DESENV.SYS_C00642) violada
SQL> INSERT INTO FUNC
2
(CD_MAT, NM_FUNC, NM_SOBRENOME, CD_DEPTO, IN_SEXO)
3 VALUES
4
(101, 'Teste', 'Estrangeira', 'XXX', 'M');
INSERT INTO FUNC
*
ERRO na linha 1:
ORA-02291: restrição de integridade (DESENV.SYS_C00643) violada chave-pai não localizada
Na Listagem 2.40, foram feitas duas tentativas de inclusão que resultaram em falha.
No primeiro comando, tentamos incluir uma matrícula já existente, o que causou a mensagem de erro ORA00001: restrição exclusiva (DESENV.SYS_C00642) violada, onde nos é mostrada qual a regra de integridade que foi
violada (SYS_C00642); este é o nome da restrição de primary key da tabela Func.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
45
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
No segundo comando, fizemos a tentativa de incluir uma linha com matrícula válida, porém contendo um código
de departamento que não existe na tabela Depto. Neste caso, a mensagem de erro ORA-02291: restrição de integridade
(DESENV.SYS_C00643) violada – chave-pai não localizada, nos informa novamente qual a regra de integridade
referencial violada (SYS_C00643).
Experimente, agora, incluir linha com um valor inválido para a coluna in_sexo (válidos são F e M escritos com
letras maiúsculas). Verifique qual a mensagem de erro obtida.
Todas estas regras são definidas pelo DBA quando da criação da tabela. Estas regras de integridade estabelecidas no
banco de dados garantem que, independente do modo como o usuário faça a inclusão ou alteração dos dados
(SQL*Plus, Forms Builder, Reports Builder, PL/SQL, etc.), sua validação será feita pelo banco de dados e nenhuma
tentativa de violação será aceita.
RETORNANDO INFORMAÇÕES DOS DADOS INCLUÍDOS
Em relação à sintaxe do comando Insert ainda nos resta um teste para fazer, que se refere à cláusula Returning. Esta
cláusula permite que obtenhamos alguma informação da linha que está sendo incluída.
Listagem 2.41 – Cláusula Returning
SQL>
SQL>
SQL>
2
3
4
5
VARIABLE MAT NUMBER
VARIABLE NOME VARCHAR2(20)
INSERT INTO FUNC
(CD_MAT, NM_FUNC, NM_SOBRENOME, CD_DEPTO, IN_SEXO)
VALUES
(101, 'Teste', 'Returning', 'A00', 'M')
RETURNING CD_MAT, NM_FUNC INTO :MAT, :NOME;
SQL> PRINT MAT
MAT
--101
À primeira vista, pode não fazer sentido a utilização desta cláusula, porém, posteriormente, veremos que pode ser
interessante obter como retorno o endereço lógico de gravação da linha, chamado de ROWID, ou ainda a referência
a um objeto tabela (object table).
No exemplo, declaramos duas variáveis no SQL*Plus (será visto no item Conhecendo Mais Sobre o SQL*Plus) e as utilizamos
para receber o valor retornado. O comando Print também é um comando do SQL*Plus e será visto no mesmo item.
ALTERANDO LINHAS EXISTENTES – UPDATE BÁSICO
O comando Update tem a finalidade de alterar informações já gravadas na base de dados. Diferentemente do
comando Insert, o comando Update possui uma cláusula Where, a qual determinará que linhas serão modificadas.
Para encontrar estas linhas, o Oracle faz um Select implícito no banco de dados, uma pesquisa para determinar que
linhas atendem à cláusula Where presente no comando. Caso não seja informada nenhuma cláusula Where, todas
as linhas serão modificadas.
Neste primeiro exemplo, faremos a atualização do ramal e grau de instrução dos dois novos funcionários contratados
(matrículas 272 e 274). A palavra DEFAULT atribuída à coluna NR_GIT indica que o valor da coluna será obtido da
definição (DEFAULT) dada pelo DBA quando criou a tabela. Se esta coluna não possuir um valor default definido,
lhe será atribuído NULL.
Listagem 2.42 – Update
SQL> UPDATE FUNC
2
SET NR_RAMAL = 4176, NR_GIT = DEFAULT
3
WHERE CD_MAT IN (272, 274);
2 linhas atualizadas.
46 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Sintaxe 2.16 – Update básico
Suponhamos que desejássemos alterar o salário de todos os funcionários em 10%. O comando Update poderia ser
utilizado de forma que o novo salário fosse igual ao anterior mais 10%. Para que todos os funcionários fossem
atualizados, bastaria que omitíssemos a cláusula Where. Faça este teste.
No próximo exemplo, tentaremos atualizar o salário e cargo dos funcionários com cargo 58 para que ganhem 90%
do salário da gerente Cristina Henderson (matrícula 10) e o mesmo cargo. Para realizarmos esta atualização,
precisaremos consultar os dados para obter o salário e cargo do gerente, calcular 90% do salário e, então, fazer a
atribuição aos funcionários com cargo 58.
Listagem 2.43 – Update com Select
SQL> UPDATE FUNC
2
SET (VL_SAL, NR_CARGO) = (SELECT VL_SAL * .9, NR_CARGO
3
FROM FUNC
4
WHERE CD_MAT = 10)
5
WHERE NR_CARGO = 58;
3 linhas atualizadas.
No exemplo apresentado, todas as operações foram feitas em um único comando Update. Sua sintaxe permite que
na cláusula de atribuição façamos uma busca para obtenção do valor a ser atribuído. Observe que o Select interno
possui uma cláusula Where que determina os valores a serem obtidos e o comando Update também possui uma
cláusula Where para determinar quais linhas serão atualizadas.
Experimente repetir o exemplo, porém no lugar de matrícula 10 na restrição do Select utilize matrícula maior que
10. Substitua o cargo para 66 (caso contrário, nenhuma linha estará apta para atualização).
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 atribuição nas colunas a serem atualizadas.
Daremos um exemplo a seguir que fará a atualização dos dados em uma tabela particionada (Hst_Promo).
Primeiramente sem mencionar a partição e posteriormente indicando qual a partição a ser modificada.
Listagem 2.44 – Update em tabela particionada
SQL> UPDATE HST_PROMO
2
SET TX_MOTIVO = 'Informação inicial do funcionário'
3
WHERE TX_MOTIVO = 'ADMISSÃO';
32 linhas atualizadas.
SQL> UPDATE HST_PROMO PARTITION(ANOS95_99)
2
SET TX_MOTIVO = 'Alteração de salário devido a enquadramento'
3
WHERE TX_MOTIVO = 'Enquadramento';
2 linhas atualizadas.
Se não mencionarmos a partição, todas as partições serão consultadas para verificação da condição de seleção.
Quando mencionamos a partição, a restrição presente na cláusula Where somente será verificada para esta partição.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
47
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
RETORNANDO INFORMAÇÕES DOS DADOS ALTERADOS
Como último teste relativo ao comando Update, tentaremos obter o endereço da linha atualizada e determinada
pela matrícula.
Listagem 2.45 – Cláusula Returning
SQL> VARIABLE END_LINHA VARCHAR2(20)
SQL> UPDATE FUNC
2
SET VL_SAL = (SELECT VL_SAL FROM FUNC
3
WHERE CD_MAT = 110)
4
WHERE CD_MAT = 230
5 RETURNING ROWIDTOCHAR(ROWID) INTO :END_LINHA;
1 linha atualizada.
SQL> PRINT :END_LINHA
END_LINHA
-----------------AAAAd/AACAAAAGkAAU
Neste exemplo apenas uma linha foi atualizada; para que fosse possível o retorno das informações de diversas
linhas, deveríamos declarar um host array (por exemplo, um nível 01 do Cobol) para receber a informação. Os
tipos das colunas retornadas e os elementos do array devem ser compatíveis, além do que o número de linhas
retornadas não pode exceder ao tamanho do array.
Na Listagem 2.45, declaramos uma variável BIND no SQL*Plus do tipo alfanumérica e utilizamos a função
ROWIDTOCHAR para converter o formato ROWID para o formato alfanumérico, já que não pudemos declarar no
SQL*Plus uma variável com o tipo de que necessitávamos. As funções de SQL serão tratadas ainda neste capítulo
no tópico Modificando o Resultado com Funções e a declaração de variáveis no SQL*Plus no tópico Conhecendo
Mais Sobre o SQL*Plus.
EXCLUINDO LINHAS DA BASE DE DADOS – DELETE BÁSICO
Veremos agora como excluir linhas cadastradas no banco de dados. A forma básica do comando Delete está descrita
na Sintaxe 2.17 a seguir. Da mesma forma que o comando Update, a cláusula Where será a responsável por determinar
que linhas poderão ser removidas. Caso esta cláusula não seja informada, o comando tentará remover todas as
linhas da tabela informada.
Sintaxe 2.17 – Delete básico
Nosso primeiro exemplo removerá aquela funcionária recém-contratada “Elizabeth Jorio” e, ainda, o gerente do
departamento D11.
No primeiro comando Delete executado, conseguimos remover a funcionária desejada. Na cláusula Where, utilizamos
a pesquisa pelo nome Elizabeth, que foi escrito exatamente igual à forma como estava armazenado. O que aconteceria
se tivéssemos feito a pesquisa com o nome escrito com todas as letras em maiúsculas? Faça este teste você mesmo.
A sintaxe dos comandos de SQL pode ser escrita em letras maiúsculas ou minúsculas, conforme nosso desejo, uma
vez que os comandos não são sensíveis à utilização de maiúsculas ou minúsculas. Já o conteúdo de uma coluna
depende da forma como a informação foi armazenada. Em uma pesquisa posterior, devemos igualar a coluna a um
valor constante escrito exatamente da mesma forma que foi armazenado. Caso contrário, não encontraremos a
linha na base de dados.
48 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
No segundo comando Delete executado, não conseguimos remover o gerente do departamento D11 porque existe um
relacionamento (veja o modelo de dados) entre a tabela de Departamentos e a tabela de Funcionários, onde o código do
gerente (que corresponde à matrícula do funcionário) se encontra presente na tabela de Departamentos. Neste caso, o
Oracle somente permitirá a remoção do funcionário se, primeiro, tirarmos sua referência da tabela de Departamentos.
Listagem 2.46 – Delete
SQL> DELETE FROM FUNC
2
WHERE NM_FUNC = 'Elizabeth';
1 linha deletada.
SQL> DELETE FROM FUNC WHERE CD_MAT = 60;
DELETE FROM FUNC WHERE CD_MAT = 60
*
ERRO na linha 1:
ORA-02292: restrição de integridade (DESENV.SYS_C00650) violada registro filho localizado
A mensagem de erro ORA-02292: restrição de integridade (DESENV.SYS_C00650) violada – registro filho localizado,
indica que foi encontrado um registro subordinado ao registro de funcionário que desejávamos remover. A restrição
de integridade que garante esta regra se chama SYS_C00650.
Nosso próximo teste será a remoção de linhas de uma tabela particionada. Inicialmente sem mencionarmos a
partição e, posteriormente, mencionando o nome da partição desejada.
Listagem 2.47 – Delete em tabela particionada
SQL> DELETE FROM HST_PROMO
2
WHERE TX_MOTIVO LIKE '%gerencial%';
8 linhas deletadas.
SQL> DELETE FROM HST_PROMO PARTITION (ANOS95_99)
2
WHERE TX_MOTIVO LIKE '%enquadramento%';
2 linhas deletadas.
Quando mencionamos o nome da partição, estamos restringindo a pesquisa a esta partição, tornando a execução
do comando mais eficiente. Quando isto não ocorre, todas as partições são pesquisadas.
RETORNANDO INFORMAÇÕES DOS DADOS EXCLUÍDOS
Neste exemplo (Listagem 2.48), apenas uma linha é removida do banco de dados. Desta forma, pudemos obter o
número da matrícula da linha removida em uma variável Bind declarada no SQL*Plus.
Listagem 2.48 – Cláusula Returning
SQL> VARIABLE MAT NUMBER
SQL> DELETE FROM FUNC
2
WHERE NM_FUNC = 'Laura'
3 RETURNING CD_MAT INTO :MAT;
1 linha deletada.
SQL> PRINT MAT
MAT
--272
EXERCÍCIOS
A solução dos exercícios propostos aqui está no fim deste capítulo, em tópico intitulado Resolução dos Exercícios
Propostos. Tente resolver toda a lista primeiro e só no final verifique as respostas. Salve todos os exercícios em
arquivos de trabalho.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
49
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
2.10) Deseja-se incluir dois novos empregados na tabela de funcionários. Este cadastramento é preliminar e,
portanto, nem todos os dados são conhecidos. Utilize as duas sintaxes vistas no item Incluindo Novas Linhas
para realizar as inclusões.
nome do funcionário
Joana Rodrigues
Marcelo Salgado
salário
R$ 1.435,00
R$ 1.743,00
departamento
E21
B01
sexo
feminino
masculino
grau de instrução
17
19
cargo
52
55
2.11) Deseja-se, agora, completar as informações sobre os novos funcionários. Sabendo-se que a funcionária Joana
recebeu ramal 1512 e data de admissão 15/01/99 e que o funcionário Marcelo recebeu ramal 1418 e data de
admissão 15/02/99, é necessário que os dados na tabela Func sejam atualizados e que sejam incluídas as linhas
correspondentes ao valor inicial dos funcionários na tabela de histórico de promoções.
2.12) Inclua-se como funcionário. Preencha todas as colunas da tabela. O número da matrícula deve corresponder
ao dia do seu aniversário somado ao ano.
2.13) Tente trocar o código do departamento associado a você para um código de departamento inválido. O que
acontece? Por quê?
2.14) Inclua todos os funcionários do departamento D11 no departamento D01, acrescentando ao número da
matrícula o valor 340.
2.15) Altere o ramal de todos os funcionários do departamento D11 para 1437.
2.16) Exclua todas as linhas da partição Anos80.
2.17) Aumente o salário de todos os funcionários em 10%.
2.18) Exclua todos os funcionários que ganhem mais que o funcionário cuja matrícula é 200. O que ocorre? Por quê?
FUNDAMENTOS EM: ORDENAÇÃO E SUBCONSULTA
PRÉ-REQUISITOS
♦ Conhecimentos básicos dos comandos Select, Insert, Update e Delete.
METODOLOGIA
♦ Apresentação e descrição de cláusulas adicionais para os comandos Select, Insert, Update e Delete que permitam ordenação e restrições baseadas em consultas.
TÉCNICA
♦ Apresentação de problemas resolvidos com a utilização da sintaxe descrita.
USANDO APELIDOS
A partir de agora, você verá aparecer nos comandos de SQL apelidos para as colunas (ou expressões) e posteriormente
para o nome da tabela. A utilização de apelidos é bastante simples, bastando que coloquemos o apelido desejado
ao lado da expressão (ou nome da coluna), sem vírgula 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 cabeçalho
do resultado gerado.
50 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Este apelido pode ser informado entre aspas duplas se desejarmos um texto que não seja permitido sintaticamente
como nome de coluna Oracle (por exemplo, um nome composto).
OBTENDO OS RESULTADOS EM UMA ORDEM ESPECÍFICA
O comando Select possui uma cláusula especial para permitir que as linhas resultantes da consulta sejam apresentadas
em uma determinada ordem. Esta cláusula é a Order By. Com ela, podemos especificar se desejamos ordenação
ascendente ou descendente e em relação a que colunas (ou expressões) desejamos efetuar a ordenação.
Observe nos exemplos que a referência às colunas pode ser feita pelo nome da coluna, pelo alias da coluna, pelo
posicionamento da coluna (ou expressão) ou pelo nome de uma coluna não selecionada.
Listagem 2.49 – Cláusula Order By
SQL> SELECT CD_DEPTO, NM_SOBRENOME, VL_SAL
2
FROM FUNC
3
WHERE VL_SAL > 4000
4
ORDER BY CD_DEPTO ASC, 3 DESC;
Neste primeiro exemplo, ordenamos o resultado por código do departamento ascendentemente e por salário
(terceira coluna da lista de seleção) em ordem descendente. Observe que as três primeiras linhas são do departamento
A00 e que o primeiro funcionário apresentado possui salário superior aos demais.
Listagem 2.50 – Cláusula Order By
SQL> SELECT VL_SAL * 1.1 PROJEÇÃO, CD_DEPTO
2
FROM FUNC
3
WHERE VL_SAL > 3000
4
ORDER BY 2, PROJEÇÃO DESC;
Na Listagem 2.50, a ordenação primária é feita pela coluna cd_depto (segunda coluna na lista de seleção) sem que
tenhamos fornecido a indicação Asc ou Desc. Pelo resultado, concluímos que a ordenação default é Asc.
Neste comando Select foi calculada uma expressão (vl_sal * 1.1), a qual recebeu o apelido de Projeção. Este apelido
foi utilizado com sucesso na cláusula Order By.
Listagem 2.51 – Cláusula Order By
SQL> SELECT VL_SAL * 1.1 AS “Novo Salário”, CD_MAT
2
FROM FUNC
3
WHERE VL_SAL > 4000
4
ORDER BY CD_DEPTO, 1 DESC;
No exemplo anterior, a ordenação foi feita pela coluna cd_depto, apesar de esta não estar presente na lista de
seleção. Na verdade, o Oracle faz a seleção da coluna, ordena o resultado e apenas não envia o valor correspondente
para o usuário solicitante.
Ainda neste exemplo, utilizamos para apelido um nome composto de duas palavras, sendo necessário o uso das
aspas para indicar que se tratava de um único nome. A palavra-chave “AS” foi usada para indicar ao Oracle que
incluiríamos um apelido para a coluna, isto não é obrigatório; 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 utilização
sem aspas e verifique o erro recebido.
Façamos, agora, a ordenação proposta pela Listagem 2.52. O que acontece quando ordenamos por uma coluna
cujo conteúdo de alguma (ou algumas linhas) está ausente. Teste este exemplo.
Listagem 2.52 – Cláusula Order By
SQL> SELECT CD_DEPTO, CD_GERENTE FROM DEPTO
2 ORDER BY 2;
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
51
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Podemos observar que a linha em que o gerente não está definido aparece em último lugar, ou seja, para ordenação
ascendente NULL é considerado “maior valor”. Experimente usar ORDER BY 2 DESC e confirme que neste caso o
departamento D01 é o primeiro a ser apresentado.
Listagem 2.53 – Cláusula Order By com Nulls First
SQL> SELECT CD_DEPTO, CD_GERENTE FROM DEPTO
2 ORDER BY 2 NULLS FIRST;
Na Listagem 2.53 usamos a cláusula NULLS FIRST para que o posicionamento das linhas com valores ausentes seja
apresentado antes dos demais valores em ordenação. Podemos optar por NULLS LAST se desejarmos que estas
linhas sejam apresentadas após os demais valores.
USANDO SUBQUERY PARA RESTRINGIR O RESULTADO
Na cláusula Where dos comandos Select, Update ou Delete podemos utilizar o resultado de uma subconsulta para
restringir o resultado da consulta principal.
A utilização é direta, através dos operadores de comparação, quando a subquery retorna apenas uma linha. Na
Listagem 2.54 a seguir, estamos obtendo todos os funcionários que recebam maior salário que o gerente do
departamento X (recebido como parâmetro de substituição).
Listagem 2.54 – Subquery
SQL> SELECT CD_MAT, CD_DEPTO, NM_FUNC, VL_SAL
2
FROM FUNC
3
WHERE VL_SAL > (SELECT VL_SAL FROM FUNC
4
WHERE CD_MAT = (SELECT CD_GERENTE FROM DEPTO
5
WHERE CD_DEPTO = '&DEP'));
Foram utilizados dois subselects. O mais interno retorna apenas uma linha, pois a restrição é feita pelo código do
departamento (que é primary key da tabela Depto). O segundo também retorna uma única linha, pois a restrição
é feita por cd_mat (que é primary key da tabela Func). A execução do comando é iniciada no subselect mais
interno até atingir o nível da consulta principal.
Listagem 2.55 – Subquery
SQL> SELECT CD_MAT, CD_DEPTO, NM_FUNC, VL_SAL
2
FROM FUNC
3
WHERE CD_DEPTO = (SELECT CD_DEPTO FROM DEPTO
4
WHERE CD_GERENTE = &GER);
No exemplo da Listagem 2.55, estamos selecionando todos os funcionários do gerente cuja matrícula é fornecida
como parâmetro.
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 comparação não poderá ser feita
apenas com um dos operadores de comparação (>, <, =, >=, etc.).
Listagem 2.56 – Subquery com Some
SQL> SELECT CD_MAT, CD_DEPTO, NM_FUNC, VL_SAL
2
FROM FUNC
3
WHERE CD_DEPTO = SOME (SELECT CD_DEPTO FROM DEPTO
4
WHERE CD_DEPTO_CTB = &DEP);
Na Listagem 2.56, a subconsulta retornou diversas linhas (B01, C01, D01 e E01). Desta forma, a consulta principal
não poderia testar apenas a igualdade para uma lista de valores. Foi, então, utilizada a palavra-chave Some (ou
Any), que indica “algum”. As palavras-chave a serem usadas juntamente com os operadores de comparação são:
52 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
♦ ALL – A condição será satisfeita se a expressão for verdadeira para todos os valores do subconjunto obtido.
♦ ANY ou SOME – A condição será satisfeita se a expressão for verdadeira para algum dos valores do subconjunto obtido.
Listagem 2.57 – Subquery com All
SQL> SELECT CD_DEPTO, NM_DEPTO
2
FROM DEPTO
3
WHERE CD_DEPTO <> ALL (SELECT DISTINCT CD_DEPTO
4
FROM FUNC);
Na Listagem 2.57, foram selecionados todos os departamentos em que não existiam funcionários alocados, uma
vez que a restrição indicava diferente de todos os códigos de departamento selecionados na subquery.
Além desta combinação de palavras-chave e operadores de comparação para tratamento das subqueries, também
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.
Listagem 2.58 – Subquery com In
SQL> SELECT CD_MAT, NM_SOBRENOME, CD_DEPTO
2
FROM FUNC
3
WHERE CD_MAT IN (SELECT CD_GERENTE FROM DEPTO);
Neste exemplo (Listagem 2.58) foram selecionadas, da tabela de funcionários, apenas informações dos gerentes.
O gerente do departamento é identificado na tabela Depto através da coluna cd_gerente, cujo conteúdo corresponde
ao código da matrícula do funcionário (gerente) na tabela de Funcionários.
EXERCÍCIOS
2.19) Deseja-se atualizar o salário de todos os funcionários que são gerentes de departamento em 5%.
2.20) Deseja-se excluir todos os departamentos que não possuam funcionários alocados.
2.21) Deseja-se uma lista (matrícula, nome e salário) de todos os funcionários que ganhem mais que todos os
funcionários do departamento parametrizado. Ordene o resultado por salário. Os funcionários sem salário devem
ser apresentados no início da relação.
2.22) Deseja-se uma lista (matrícula, nome e cargo) dos funcionários que possuam cargo igual ao cargo de algum
dos funcionários do departamento D11.
2.23) Deseja-se uma lista contendo matrícula, nome, departamento e salário de todos os funcionários que sejam
responsáveis por projeto (tabela Proj), mas não sejam gerentes (tabela Depto). Ordene o resultado por salário. Os
funcionários sem salário devem ser apresentados no fim da relação.
2.24) Deseja-se uma lista (código e nome) dos departamentos que iniciaram projetos em janeiro de 1996.
FUNDAMENTOS EM: GRUPAMENTOS
PRÉ-REQUISITOS
♦ Conhecimentos básicos do comando Select.
METODOLOGIA
♦ Apresentação e descrição das funções que efetuam cálculos sobre um conjunto de valores e da cláusula Group By que organiza as linhas selecionadas em
grupos de acordo com a especificação fornecida.
TÉCNICA
♦ Apresentação de exemplos que desenvolvam as sintaxes descritas em uma seqüência crescente de dificuldade.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
53
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
FUNÇÕES DE GRUPO OU DE AGREGAÇÃO
Sintaxe 2.18 – Funções de grupo
54 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
São programas que têm a finalidade de efetuar cálculos sobre um conjunto de linhas e retornam um valor. Elas se
aplicam a um grupo de linhas e retornam um único valor relativo a todo o grupo selecionado. Neste conjunto o
Oracle disponibiliza 34 funções que conheceremos a seguir.
O argumento para estas funções pode ser o nome de uma coluna ou uma expressão (combinação de nomes de
colunas, constantes ou outras funções).
Listagem 2.59 – Funções de agregação
SQL> SELECT SUM(VL_SAL), AVG(VL_SAL), MAX(VL_SAL)
2
MIN(VL_SAL), COUNT(CD_MAT)
3
FROM FUNC;
Neste primeiro exemplo, o grupo sobre o qual os cálculos foram feitos foi toda a tabela Funcionário, uma vez que
não limitamos as linhas selecionadas (Where). Obtivemos a soma de todos os salários cadastrados, a média salarial
(aritmética), o valor do maior e do menor salário e quantas linhas foram encontradas na tabela Funcionário.
Dentro do algoritmo de cálculo das funções de grupo, as linhas com NULL são excluídas da etapa de avaliação.
Caso esta ação não fosse efetuada, o resultado, freqüentemente, seria NULL, uma vez que ao operarmos um valor
desconhecido (NULL) com um valor conhecido o resultado será invariavelmente desconhecido.
Para verificação dos resultados gerados, prepare a massa de teste apresentada na Listagem 2.60 a seguir.
Listagem 2.60 – Massa de dados para teste das funções de grupo
SQL> SELECT CD_MAT, NM_FUNC, VL_SAL, NR_CARGO
2
FROM FUNC
3
WHERE CD_DEPTO = 'A02'
4 /
CD_MAT NM_FUNC
VL_SAL
NR_CARGO
------ ---------------- -------- -------101 TESTE1
100
32
102 TESTE2
200
45
103 TESTE3
200
65
104 TESTE4
300
21
105 TESTE5
100
32
106 TESTE6
107 TESTE7
100
8
108 TESTE8
12
8 linhas selecionadas.
Nesta massa de teste, temos duas linhas em que a coluna Salário não está preenchida. Sobre esta massa vamos
efetuar alguns cálculos relativos às funções de grupo.
Na sintaxe verificamos que All é a opção default; todos os valores (exceto NULL) são passados como argumento das funções.
De acordo com a descrição das funções de agregação a seguir faremos exemplos com a massa de dados anterior
para que os resultados possam ser conferidos e entendidos.
AVG
Retorna a média dos valores de <expressão>. Ela pode ser usada como uma função de agregação ou analítica. Se a
função for aplicada a um grupamento vazio (sem linhas) o retorno é null.
CORR
Retorna o coeficiente da correlação de um conjunto de pares de números. Ela pode ser usada como uma função de
agregação ou analítica. Os parâmetros <expr1> e <expr2> devem ser numéricos. Os pares em que <expr1> ou
<expr2> estiverem sem valor são excluídos do resultado. A fórmula de cálculo para esta função é a seguinte:
COVAR_POP(<expr1>, <expr2>) / (STDDEV_POP (<expr1>) * STDDEV_POP (<expr2>))
Se a função for aplicada a um grupamento vazio (sem linhas) o retorno é null.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
55
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
COUNT
Retorna o número de linhas que satisfaçam a query. Ela pode ser usada como uma função de agregação ou analítica.
COVAR_POP
Retorna a covariância populacional de um conjunto de pares numéricos. Ela pode ser usada como uma função de
agregação ou analítica. Os parâmetros <expr1> e <expr2> devem ser numéricos. Os pares em que <expr1> ou
<expr2> estiverem sem valor são excluídos do resultado. A fórmula de cálculo para esta função é a seguinte:
(SUM(<expr1> * <expr2>) – (SUM(<expr2>) * SUM(<expr1>)) / n) / n
Se a função for aplicada a um grupamento vazio (sem linhas) o retorno é null. O divisor n indica a quantidade de
linhas onde <expr1> e <expr2> estão preenchidos.
Listagem 2.61 – AVG, COUNT, CORR, COVAR_POP
SQL> SELECT AVG(VL_SAL) AVG,
2
COUNT(VL_SAL) COUNT_SAL, COUNT(CD_MAT) COUNT_MAT, COUNT(*) COUNT,
3
SUM(VL_SAL) SUM_SAL, SUM(NR_CARGO) SUM_CARGO, SUM(VL_SAL * NR_CARGO) SUM_PROD,
4
CORR(VL_SAL, NR_CARGO) CORR,
5
COVAR_POP(VL_SAL, NR_CARGO) COVAR_POP
6
FROM FUNC
7
WHERE CD_DEPTO = 'A02';
AVG COUNT_SAL COUNT_MAT
COUNT SUM_SAL SUM_CARGO SUM_PROD
CORR COVAR_POP
------- --------- --------- ------- ------- --------- -------- ------- --------166,667
6
8
8
1000
215
35500 ,207533
277,778
A função AVG nos traz como resultado 166,667, indicando que a soma das linhas (1000) foi dividida por 6 (linhas
em que salário tem valor) e não por 8 (total de linhas que atendem à condição de busca). As linhas em que salário
não possui valor (NULL) são ignoradas para cálculo do resultado.
A função 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 função 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 função Count com o argumento * (asterisco) retorna o mesmo valor que para a coluna cd_mat. Esta
sintaxe fornece o número de linhas selecionadas no comando, independente de qualquer coluna. Pode ser usada
sempre que desejarmos saber a quantidade de linhas obtidas.
A função Sum soma todas as linhas não nulas do resultado. Caso as linhas com valor Null fossem incluídas, o valor
seria necessariamente Null (isto é, desconhecido).
A fórmula da função Covar_Pop utiliza apenas a função Sum sendo, neste caso, mais fácil de conferirmos o resultado. Se
aplicarmos a fórmula ( [35500 – [[215*1000 ] / 6 ]] / 6 ) diretamente aos valores obtidos separadamente no exemplo
verificaremos que o resultado obtido é negativo (-55.556). Devemos observar que a descrição da função diz que as linhas
em que uma das expressões é Null são excluídas do resultado, e neste caso a linha com cargo 12 não entra nos cálculos. A
fórmula modificada ( [35500 – [[203*1000 ] / 6 ]] / 6 ) em função desta regra obtém o valor esperado de 277,778.
Observe a seguir a descrição da função Covar_Samp. Repita o exemplo da Listagem 2.61 substituindo Covar_Pop
por Covar_Samp e confira o resultado.
COVAR_SAMP
Retorna a covariância simples de um conjunto de pares numéricos. Ela pode ser usada como uma função de
agregação ou analítica. Os parâmetros <expr1> e <expr2> devem ser numéricos. Os pares em que <expr1> ou
<expr2> estiverem sem valor são excluídos do resultado. A fórmula de cálculo para esta função é a seguinte:
(SUM(<expr1> * <expr2>) – (SUM(<expr2>) * SUM(<expr1>)) / n) / (n-1)
56 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Se a função for aplicada a um grupamento vazio (sem linhas) o retorno é null. O divisor n indica a quantidade de
linhas onde <expr1> e <expr2> estão preenchidos.
CUME_DIST
Esta função calcula a distribuição cumulativa de um valor em um grupo de valores. O valor retornado por esta função
estará dentro do intervalo > 0 e <= 1. Ela calcula, para uma linha hipotética R identificada pelos argumentos da
função e especificação de ordenação, a posição relativa de R no grupo de agregação. O cálculo considera como se R
estivesse inserida no grupo de linhas a serem agregadas. Os argumentos da função identificam um única linha dentro
de cada grupo; desta forma devem estar associados a expressões constantes dentro de cada grupo. Os números de
expressões no argumento e na cláusula Order By devem ser idênticos pois serão considerados 1 para 1 posicionalmente.
DENSE_RANK
Esta função calcula o posicionamento (rank) de uma linha em um grupo ordenado de linhas. O posicionamento é
consecutivo, inteiro, começando em 1. O maior valor do Rank corresponde ao número de valores distintos retornados
pela query. Ela calcula o posicionamento relativo de uma linha hipotética identificada pelos argumentos da função
de acordo com a ordenação especificada. Os argumentos da função identificam uma única linha dentro de cada
grupo; desta forma devem estar associados a expressões constantes dentro de cada grupo. Os números de expressões
no argumento e na cláusula Order By devem ser idênticos pois serão considerados 1 para 1 posicionalmente.
FIRST
Pode ser usada como função de agregação ou analítica. Opera em um conjunto de valores a partir de um conjunto
de linhas que “rank” (são identificadas) como FIRST com relação a uma determinada ordem. Se somente uma
linha for classificada (“rank”) como FIRST, a agregação é realizada em um conjunto de apenas uma linha. A função
de agregação utilizada em conjunto pode ser MIN, MAX, SUM, COUNT, AVG, VARIANCE ou STDDEV.
Listagem 2.62 – CUME_DIST, DENSE_RANK, FIRST
SQL> SELECT CUME_DIST(300) WITHIN GROUP(ORDER BY VL_SAL ASC NULLS FIRST) CUME_ASC,
2
CUME_DIST(300) WITHIN GROUP(ORDER BY VL_SAL DESC NULLS FIRST) CUME_DESC,
3
DENSE_RANK(300) WITHIN GROUP(ORDER BY VL_SAL ASC NULLS FIRST) RANK_ASC,
4
DENSE_RANK(300) WITHIN GROUP(ORDER BY VL_SAL DESC NULLS FIRST) RANK_DESC,
5
MAX(NR_CARGO) KEEP (DENSE_RANK FIRST ORDER BY VL_SAL ASC NULLS LAST) FIRST_ASC,
6
MAX(NR_CARGO) KEEP (DENSE_RANK FIRST ORDER BY VL_SAL DESC NULLS LAST) FIRST_DESC
7
FROM FUNC
8 WHERE CD_DEPTO = 'A02'
CUME_ASC CUME_DESC RANK_ASC RANK_DESC FIRST_ASC FIRST_DESC
-------- --------- -------- --------- --------- ---------1
,444444
4
2
32
21
Na Listagem 2.62 observamos que as funções Cume_Dist e Dense_Rank receberam como parâmetro a constante
300. Poderíamos ter fornecido mais de um valor (separados por vírgulas), desde que constantes.
Como primeiro resultado da Cume_Dist para o valor 300 recebemos 1, isto significa que 100% das linhas selecionadas
possuíam valores de salário menores (ou igual) que 300 considerando-se um total de 9 linhas ordenadas
ascendentemente por salário (o valor 300 é incluído no resultado) e nos quais os valores Null são considerados os
menores. O segundo resultado (44,44%) indica que o cálculo 4/9 foi realizado. Este cálculo possui a seguinte
lógica: o valor 300 é incluído 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 matrícula 104 e o da constante) ocuparam
respectivamente o terceiro e quarto lugares na seqüência de leitura. Como o cálculo se refere a todos os valores
maiores ou iguais a 300 (devido à ordenação estabelecida), escolhe-se a posição 4 como numerador do cálculo. Se
toda esta explicação está confusa para você, faça as contas com um valor que não 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
modificações devem te ajudar a entender melhor o resultado.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
57
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
A primeira construção função Dense_Rank classifica o valor da expressão (no caso 300) dentro do conjunto de
valores selecionados e de acordo com a ordenação especificada na cláusula Within Group. O resultado é 4, o que
indica que a classificação 1 é atribuída às linhas com NULL (pois indicamos que NULLS FIRST), a classificação 2
para as linhas com salário 100, a classificação 3 para as linhas com salário 200 e a 4 para o valor 300. Observe que
a classificação é do valor e não da quantidade de linhas. A segunda construção, com ordenação descendente,
classifica o valor 300 em segundo lugar, já que o primeiro é ocupado pelas linhas com salário null (Nulls First).
A primeira construção da função FIRST obterá o maior cargo (max) das linhas classificadas como FIRST. Esta
classificação é dada através da ordenação de salário, no caso ASC e com nulls no fim. Sendo assim, o menor valor
de salário é 100 (as linhas com salário 100 são, portanto, classificadas como FIRST). Das 3 linhas com salário 100,
o maior cargo é 32. No segundo exemplo a ordenação de salário é descendente; desta forma a linha com salário
300 é classificada como FIRST e, portanto, o maior (e único) cargo é 21.
GROUP_ID
Esta função distingue linhas duplicadas resultantes de uma especificação GROUP BY. Ela somente é válida em
comandos SELECT que utilizem a cláusula GROUP BY. Se houver n duplicatas para um determinado grupamento
a função retornará valores de 0 a n-1.
GROUPING
Esta função distingue valores relativos a uma agregação que utilize GROUP BY juntamente com as extensões
ROLLUP ou CUBE. O objetivo é determinar quando o valor null de uma determinada expressão significa uma
agregação e quando significa o valor real (ou ausente) da expressão. A <expressão> que viermos a usar na função
GROUPING deve ser compatível com o valor usado na cláusula GROUP BY. O retorno da função é 1 se o valor de
<expressão> é null significando um conjunto de todos os valores e 0 se o null significar valor ausente.
GROUPING_ID
Retorna um número que corresponde ao Grouping bit vector associado com uma linha. É aplicável somente a
comandos SELECT que incluam a cláusula GROUP BY com a extensão ROLLUP ou CUBE e uma função GROUPING.
LAST
Pode ser usada como função de agregação ou analítica. Opera em um conjunto de valores a partir de um conjunto
de linhas que “rank” (são identificadas) como LAST com relação a uma determinada ordem. Se somente uma linha
for classificada (“rank”) como LAST, a agregação é realizada em um conjunto de apenas uma linha. A função de
agregação utilizada em conjunto pode ser MIN, MAX, SUM, COUNT, AVG, VARIANCE ou STDDEV.
MAX
Retorna o maior valor de <expressão>. Pode ser usada como uma função de agregação ou analítica.
MIN
Retorna o menor valor de <expressão>. Pode ser usada como uma função de agregação ou analítica.
PERCENT_RANK
Esta função é similar a CUME_DIST (distribuição 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Listagem 2.63 – LAST, PERCENT_RANK, MAX, MIN
SQL> SELECT MIN(NR_CARGO) KEEP (DENSE_RANK LAST ORDER BY VL_SAL ASC NULLS LAST) L_ASC,
2
MIN(NR_CARGO) KEEP (DENSE_RANK LAST ORDER BY VL_SAL DESC NULLS FIRST) L_DESC,
3
MAX(VL_SAL) MX_SAL, MAX(NR_CARGO) MX_CRG,
4
MIN(VL_SAL) MN_SAL, MIN(NR_CARGO) MN_CRG,
5
PERCENT_RANK (310) WITHIN GROUP(ORDER BY VL_SAL ASC NULLS LAST) P310_ASC,
6
PERCENT_RANK (290) WITHIN GROUP(ORDER BY VL_SAL ASC NULLS LAST) P290_ASC,
7
PERCENT_RANK (310) WITHIN GROUP(ORDER BY VL_SAL DESC NULLS LAST) P310_DESC,
8
PERCENT_RANK (290) WITHIN GROUP(ORDER BY VL_SAL DESC NULLS LAST) P290_DESC
9
FROM FUNC
10
WHERE CD_DEPTO = 'A02';
L_ASC L_DESC MX_SAL MX_CRG MN_SAL MN_CRG P310_ASC P290_ASC P310_DESC P290_DESC
----- ------ ------ ------ ------ ------ -------- -------- --------- --------12
8
300
65
100
8
,75
,625
0
,125
A primeira construção da função LAST obterá o menor cargo (min) das linhas classificadas como LAST. Esta
classificação é dada através da ordenação de salário, no caso ASC e com nulls no fim. Sendo assim, o maior valor de
salário é NULL (as linhas sem salário são, portanto, classificadas como LAST). Das 2 linhas com salário 100, o
menor cargo é 12. No segundo exemplo a ordenação de salário é descendente e as linhas sem salário (NULL) são
ordenadas no início da fila; desta forma as linhas com salário 100 são classificadas como LAST e, portanto, o
menor deste grupo cargo é 8.
As funções max e min são facilmente compreendidas por nós. O maior salário, desconsiderando-se as linhas sem
salário, é 300 e o maior cargo é 65. O menor salário e o menor cargo são, respectivamente, 100 e 8.
Nos testes da função Percent_Rank utilizamos, desta vez, valores que não pertencem à lista de valores presentes na
tabela. Como esta função é similar à função Cume_Dist já sabemos que a fórmula corresponde à divisão da posição
da linha em questão em relação à posição da última linha do grupo. Como esta função inicia a classificação em
zero, temos como primeira fórmula a divisão de 6 por 8, ou seja, a posição da linha com valor de salário 310 é 6 (os
três valores 100 ocupam as posições 0, 1 e 2; os dois valores 200 ocupam as posições 3 e 4; o valor 300 ocupa a
quinta posição; o valor 310 a sexta e os dois valores null as posições 7 e 8) e da última linha é 8. O resultado 0.75
corresponde a esta divisão. No segundo exemplo temos 5 sobre 8 (os três valores 100 ocupam as posições 0, 1 e 2;
os dois valores 200 ocupam as posições 3 e 4; o valor 290 ocupa a quinta posição; o valor 300 a sexta posição e os
dois valores null as posições 7 e 8). No terceiro exemplo, pela classificação, o valor 310 é o primeiro da lista,
recebendo o valor 0, que, dividido por qualquer valor, dá zero. No último exemplo a divisão realizada é de 1 por 8.
PERCENTILE_CONT
Esta função realiza uma distribuição inversa considerando um modelo de distribuição contínua. Ela obtém um
valor percentual e uma especificação de ordenação e retorna um valor interpolado que deve cair dentro do percentual
em relação à especificação de ordenação. Os nulls são ignorados no cálculo. O parâmetro deve ser uma constante
com valor entre 0 e 1, pois indica um valor percentual. A cláusula ORDER BY deve ser composta de uma única
expressão numérica ou datetime. O resultado é calculado por uma interpolação linear entre os valores após a
ordenação. Usando-se o valor percentual (P) e o número de linhas (N) no grupo de agregação, determina-se o
número da linha de interesse. Este número de linha é calculado de acordo com a fórmula:
RN = (1 + (P * ( N –1)
O resultado final da função de agregação é calculado pela interpolação linear entre os valores das linhas relativas
ao número da linha, onde CRN = CEILING(RN) e FRN = FLOOR(RN). O resultado final será o valor da expressão da
linha em RN se CRN=FRN=RN (não houver mais de um valor resultante) ou (CRN – RN) * (valor da expressão da
linha em FRN) + (RN – FRN) * (valor da expressão da linha em CRN).
Também pode ser usada como função analítica.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
59
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
PERCENTILE_DISC
É uma distribuição inversa que assume um modelo de distribuição discreta. Ela recebe um valor percentual e uma
especificação de ordenação e retorna um elemento do conjunto. Os Nulls são ignorados no cálculo. O parâmetro deve
ser uma constante com valor numérico entre 0 e 1 pois corresponde a um percentual. A cláusula ORDER BY não possui
restrições de tipo. Para um determinado valor percentual P e de acordo com a ordenação, a função retornará o menor
valor CUME_DIST (com relação à mesma especificação de ordenação) que seja maior ou igual ao parâmetro P.
RANK
Calcula o posicionamento (rank) de um valor em um grupo de valores. As linhas com valores iguais recebem a
mesma classificação. Calcula a posição de uma linha hipotética identificada pelos argumentos da função com
relação a uma ordenação. Os argumentos da função devem ser constantes. O número de expressões no argumento
e na cláusula Order By devem ser idênticos pois serão considerados 1 para 1 posicionalmente.
Listagem 2.64 – PERCENTILE_CONT, PERCENTILE_DISC, RANK
SQL> SELECT PERCENTILE_CONT(.5) WITHIN GROUP (ORDER BY VL_SAL ASC)
2
PERCENTILE_CONT(.5) WITHIN GROUP (ORDER BY VL_SAL DESC)
3
PERCENTILE_DISC(.5) WITHIN GROUP (ORDER BY VL_SAL ASC)
4
PERCENTILE_DISC(.5) WITHIN GROUP (ORDER BY VL_SAL DESC)
5
RANK(290) WITHIN GROUP (ORDER BY VL_SAL ASC NULLS FIRST)
6
RANK(290) WITHIN GROUP (ORDER BY VL_SAL DESC NULLS FIRST)
7
FROM FUNC
8
WHERE CD_DEPTO = 'A02';
CONT_ASC,
CONT_DESC,
DISC_ASC,
DISC_DESC,
RK_ASC,
RK_DESC
CONT_ASC CONT_DESC DISC_ASC DISC_DESC RK_ASC RK_DESC
-------- --------- -------- --------- ------ ------150
150
100
200
8
4
Para as funções Percentile, passamos como parâmetro um percentual e recebemos como resultado um valor relativo
à expressão de ordenação (no nosso caso VL_SAL), ou seja, elas funcionam de forma inversa à da função CUME_DIST.
Nos quatro exemplos passamos como parâmetro 50%. Uma vez que nestas funções os valores NULLS são 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 não conseguimos obter uma única linha (veja a seguir o cálculo de RN), devemos
aplicar a fórmula (CRN – RN) * (valor da expressão da linha em FRN) + (RN – FRN) * (valor da expressão 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 não existe, devemos aplicar a fórmula mostrada acima e
obter o valor de salário.
Valor = (4 – 3.5) * (salário na linha FRN = 100) + (3.5 – 3) * (salário na linha CRN = 200)
Valor = 0.5 * 100 + 0.5 * 200 = 50 + 100 = 150
Para Percentile_Disc não é feita a interpolação, o valor retornado será o primeiro em relação às linhas que atendem
ao percentual, ou seja, será o valor da linha FRN. Neste caso temos valores diferentes para ordenações diferentes.
Para ordenação ascendente, o valor correspondente à linha 3 (FRN) é 100 e para ordenação descendente, o valor
correspondente à linha 3 (FRN) é 200.
A função Rank dá a posição 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 posição 4 para o valor de salário 290, o que significa: null (1), null
(2), 300 (3), 290 (4), 200 (5), 200 (6), 100 (7), 100 (8) e 100 (9).
As funções a seguir calculam a regressão linear de um conjunto de duplas de números. Podem ser usadas como
funções de agregação ou analíticas.
60 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
REGR_AVGX
Avalia a média da variável independente, representada por <expressão2> da regressão linear. Ela calcula
AVG(<expressão2>) após a eliminação das linhas em que <expressão1> ou <expressão2> não possuem valor (NULL).
REGR_AVGY
Avalia a média da variável dependente, representada por <expressão1> da regressão linear. Ela calcula
AVG(<expressão1>) após a eliminação das linhas em que <expressão1> ou <expressão2> não possuem valor (NULL).
REGR_COUNT
Retorna um inteiro que representa o número de pares não nulos usados para cálculo da regressão linear.
REGR_INTERCEPT
Retorna o y-intercept da regressão linear. Após a eliminação dos pares de nulos o seguinte cálculo é realizado:
AVG(<expr1>) – REGR_SLOPE(<expr1>, <expr2>) * AVG(<expr2>)
REGR_R2
Retorna o coeficiente de determinação para a regressão. Após a eliminação dos pares nulos o seguinte cálculo é 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. Após a eliminação dos pares nulos, o seguinte cálculo é realizado:
COVAR_POP(<expr1>, <expr2>) / VAR_POP(<expr2>)
REGR_SXX
As funções Regr_Sxx, Regr_Sxy e Regr_Syy são funções auxiliares usadas para calcular várias estatísticas. Após a
eliminação dos pares nulos, o seguinte cálculo é realizado:
REGR_COUNT(<expr1>, <expr2>) * VAR_POP(<expr2>)
REGR_SXY
As funções Regr_Sxx, Regr_Sxy e Regr_Syy são funções auxiliares usadas para calcular várias estatísticas. Após a
eliminação dos pares nulos, o seguinte cálculo é realizado:
REGR_COUNT(<expr1>, <expr2>) * COVAR_POP(<expr1>, <expr2>)
REGR_SYY
As funções Regr_Sxx, Regr_Sxy e Regr_Syy são funções auxiliares usadas para calcular várias estatísticas. Após a
eliminação dos pares nulos, o seguinte cálculo é realizado:
REGR_COUNT(<expr1>, <expr2>) * VAR_POP(<expr1>)
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
61
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 2.65 – Funções de regressão
SQL> SELECT REGR_AVGX(VL_SAL, NR_CARGO) AVG_CRG, REGR_AVGY(VL_SAL, NR_CARGO) AVG_SAL,
2
REGR_COUNT(VL_SAL, NR_CARGO) COUNT,
3
REGR_SLOPE(VL_SAL, NR_CARGO) SLOPE, REGR_INTERCEPT(VL_SAL, NR_CARGO) INTERC,
4
REGR_R2(VL_SAL, NR_CARGO) R2, REGR_SXX(VL_SAL, NR_CARGO) SXX,
5
REGR_SXY(VL_SAL, NR_CARGO) SXY, REGR_SYY(VL_SAL, NR_CARGO) SYY
6
FROM FUNC
7
WHERE CD_DEPTO = 'A02';
AVG_CRG AVG_SAL COUNT SLOPE INTERC
R2
SXX
SXY
SYY
------- ------- ------ ------ ------ ------ ------ ------ -----33,833 166,67
6 ,8614 137,52 ,04307 1934,8 1666,7 33333
Neste exemplo analisaremos apenas os três primeiros, pois os demais podem ser conferidos diretamente pelas
fórmulas 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 cálculo em todas as funções deste grupo.
Para a média de NR_CARGO (calculada por REGR_AVGX) devemos levar em consideração os valores (8 + 32 + 32
+ 45 + 65 + 21) divididos por 6. Para a média de VL_SAL (calculada por REGR_AVGY devemos levar em consideração
os valores (100 + 100 + 100 + 200 + 200 + 300) divididos por 6.
STDDEV
Retorna o desvio padrão simples da <expressão>. Pode ser usada tanto como função de agregação como função analítica.
Retorna 0 quando houver apenas uma linha de entrada. O resultado corresponde à raiz quadrada da variância.
STDDEV_POP
Calcula o desvio padrão populacional e retorna a raiz quadrada da variância populacional. Pode ser usada como
uma função de agregação ou como função analítica. Retorna Null se o retorno da função VAR_POP for Null.
STDDEV_SAMP
Calcula o desvio padrão simples cumulativo e retorna a raiz quadrada da variância simples. Pode ser usada como
função de agregação ou analítica. Utiliza a função VAR_SAMP como entrada. Se o resultado de VAR_SAMP for null,
seu retorno também será null.
SUM
Retorna o somatório dos valores de <expressão>. Pode ser usada como função de agregação ou analítica.
VAR_POP
Retorna a variância populacional de um conjunto de linhas após descartar as linha nulas. Pode ser usada como função
de agregação ou analítica. Se o conjunto de entrada for vazio, o resultado será null. O seguinte cálculo é realizado:
(SUM(<expr> ** 2) - SUM(<expr>) ** 2 / COUNT(<expr>)) / COUNT(<expr>)
VAR_SAMP
Retorna a variância simples de um conjunto de linhas após descartar as linhas nulas. Pode ser usada como função
de agregação ou analítica. Se o conjunto de entrada for vazio, o resultado será null. O seguinte cálculo é realizado:
(SUM(<expr> ** 2) - SUM(<expr>) ** 2 / COUNT(<expr>)) / (COUNT(<expr>) – 1)
Esta função é similar à função VARIANCE, exceto que para um elemento a função VARIANCE retorna 0 e VAR_SAMP
retorna null.
62 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
VARIANCE
Retorna a variância dos valores de <expressão>. Pode ser usada como função de agregação ou analítica. O cálculo
da variância é feito da seguinte forma:
IF <quantidade de linhas> = 1 THEN 0
ELSE VAR_SAMP(<expr>)
Listagem 2.66 – STDDEV, STDDEV_POP, SUM, VAR_POP, VAR_SAMP, VARIANCE
SQL> SELECT STDDEV(VL_SAL) SDEV, STDDEV_POP (VL_SAL) SDEV_POP,
2
STDDEV_SAMP(VL_SAL) SDEV_SAMP,
3
SUM(VL_SAL) SUM, SUM(DISTINCT VL_SAL) SUM_DIST,
4
SUM(POWER(VL_SAL,2)) SUM_2, POWER(SUM(VL_SAL),2) “SUM**2”,
5
VAR_POP(VL_SAL) VAR_POP, VAR_SAMP(VL_SAL) VAR_SAMP,
6
VARIANCE(VL_SAL) VAR
7
FROM FUNC
8
WHERE CD_DEPTO = 'A02';
SDEV SDEV_POP SDEV_SAMP
SUM SUM_DIST SUM_2
SUM**2 VAR_POP VAR_SAMP
VAR
------ -------- --------- ----- -------- ------ -------- ------- -------- -----81,65
74,536
81,65 1000
600 200000 1000000 5555,6
6666,7 6666,7
Começando pelo fim, confirmamos que o resultado da função VARIANCE e VAR_SAMP são iguais pois a quantidade
de linhas informadas para a função foi maior que 1. A função SUM, presente no resultado, pode ser utilizada
juntamente com a cláusula DISTINCT indicando que somente valores diferentes de salário serão somados (100 +
200 + 300). Para conferirmos os valores das demais funções devemos apenas realizar os cálculos 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 salário é 6.
GRUPANDO AS LINHAS SELECIONADAS
A cláusula Group By, adicionada a um comando SELECT, separa as linhas selecionadas em grupos de acordo com
a coluna ou expressão que determinarmos como grupamento. Após esta etapa, para cada um dos grupos formados
podemos aplicar as funções de grupo. Desta forma, obteremos como resultado uma linha para cada grupo contendo
o resultado das funções aplicadas às colunas e, opcionalmente, as colunas em relação às quais foi feito o grupamento.
Listagem 2.67 – Uso de Group By
SQL> SELECT CD_DEPTO, COUNT(*), SUM(VL_SAL)
2
FROM FUNC
3
WHERE CD_DEPTO IN ('A00', 'B01', 'C01')
4
GROUP BY CD_DEPTO;
CD_
--A00
B01
C01
COUNT(*) SUM(VL_SAL)
-------- ----------4
19665,13
2
6681,68
3
10162,08
Neste primeiro exemplo, as linhas da tabela de funcionários foram divididas em grupos com relação à coluna
Código do Departamento. Desta forma, o grupo com cd_depto valendo ‘A00’ possui soma total dos salários igual
a 19.665,13 e é composto de quatro linhas. Já o grupo com cd_depto valendo ‘C01’ possui soma total dos salários
igual a 10.162,08 e é composto de três linhas. Das informações apresentadas, a única que não se apresenta como
argumento de uma função de grupo é a coluna em relação à qual foi feito o grupamento, uma vez que seu valor é
igual em todas as linhas do grupo.
Listagem 2.68 – Uso de funções de agregação com Group By
SQL> SELECT CD_DEPTO, COUNT(*), SUM(VL_SAL), NM_FUNC
2
FROM FUNC
3
WHERE CD_DEPTO IN ('A00', 'B01', 'C01')
4
GROUP BY CD_DEPTO;
SELECT CD_DEPTO, COUNT(*), SUM(VL_SAL), NM_FUNC
*
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
63
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
ERRO na linha 1:
ORA-00979: não é uma expressão GROUP BY
Na Listagem 2.68, foi feita uma tentativa de se obter uma informação unitária do conjunto de linhas de cada
grupo. A mensagem de erro indica que isto não é possível, uma vez que aquela coluna não se encontra presente na
cláusula Group By.
REGRA
Não é possível a utilização direta de colunas não referenciadas na cláusula Group By na lista de seleção. Estas
colunas só podem ser usadas como argumento das funções de grupo.
Na lista de seleção, podemos utilizar outras expressões que resultem no mesmo valor para todas as linhas de cada
grupo, tais como: valores constantes, as funções User, Userid, Sysdate, cálculos envolvendo as colunas sobre as
quais está sendo feito o grupamento (ver Listagem 2.65).
Listagem 2.69 – Restringindo os dados a grupar
SQL> SELECT NR_CARGO, MAX(VL_SAL) MÁXIMO,
2
MIN(VL_SAL) MÍNIMO, AVG(VL_SAL) MÉDIA
3
FROM FUNC
4
WHERE IN_SEXO = 'M'
5
GROUP BY NR_CARGO;
No exemplo da Listagem 2.69, foram selecionadas da tabela Funcionário as linhas em que a coluna in_sexo possuía
o valor ‘M’. Este conjunto de linhas foi separado de acordo com o valor de cargo. Para cada um dos grupos foram
aplicadas as funções Max, Min e Avg.
Observe que a restrição presente na cláusula Where faz referência a uma informação da tabela Func. Imagine que
desejássemos obter apenas as linhas em que a média salarial fosse superior a R$ 2.500,00.
Listagem 2.70 – Uso de funções de grupo para restrição
SQL> SELECT NR_CARGO, MAX(VL_SAL) MÁXIMO,
2
MIN(VL_SAL) MÍNIMO, AVG(VL_SAL) MÉDIA
3
FROM FUNC
4
WHERE IN_SEXO = 'M'
5
AND AVG(VL_SAL) > 2500
6
GROUP BY NR_CARGO;
AND AVG(VL_SAL) > 2500
*
ERRO na linha 5:
ORA-00934: a função de grupo não é permitida aqui
A utilização desta restrição na cláusula Where causa um erro (ORA-00934: a função de grupo não é permitida aqui)
que indica que não podemos fazer referência ao resultado do grupamento antes de o grupamento ser realizado.
A CLÁUSULA HAVING
A cláusula Having vem resolver o problema apresentado no exemplo da Listagem 2.70. Ela se aplica após o
grupamento ter sido realizado. Assim, poderemos efetuar uma restrição sobre as colunas calculadas durante a
execução da cláusula Group By.
A cláusula Having não precisa ser usada em conjunto com a cláusula Group By. Se ela for usada sem a cláusula Group By, toda a tabela será
tratada como um (1) grupo.
Listagem 2.71 – Usando Having
SQL> SELECT NR_CARGO, MAX(VL_SAL) MÁXIMO,
2
MIN(VL_SAL) MÍNIMO, AVG(VL_SAL) MÉDIA
64 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
3
4
5
6
FROM FUNC
WHERE IN_SEXO = 'M'
GROUP BY NR_CARGO
HAVING AVG(VL_SAL) > 2500;
Este exemplo corrige o erro apresentado na Listagem 2.70.
Da mesma forma que na cláusula Order By e na Group By, as expressões referenciadas na cláusula Having não
precisam, necessariamente, estar presentes na cláusula Select.
Listagem 2.72 – Restringindo com Having
SQL> SELECT NR_CARGO, MIN(VL_SAL) MÍNIMO, AVG(VL_SAL) MÉDIA,
2
'Constante', (NR_CARGO/2), USER
3
FROM FUNC
4
WHERE IN_SEXO = 'M'
5
GROUP BY NR_CARGO
6 HAVING SUM(VL_SAL) > 2500;
Na Listagem 2.71, a restrição foi feita sobre a soma salarial que não foi mencionada na cláusula Select. Neste
exemplo, foram selecionados outros tipos de informação que podem aparecer na lista de seleção 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 operação
de ordenação para separar as linhas selecionadas de acordo com os grupos. O resultado desta operação pode trazer os
dados na ordem ascendente do grupo ou não. A cláusula Group By tem a finalidade de grupar as linhas e não ordenar.
A cláusula a ser usada para garantir que o resultado será apresentado na ordem desejada é a cláusula Order By.
AS EXPRESSÕES ROLLUP E CUBE
Visando aplicações de Data WareHouse, as operações de agregação com o uso de Group By e Having podem se
utilizar de operações chamadas de Rollup e Cube, que são, na verdade, subtotais e tabulações sobre as dimensões.
Essas mesmas operações podem ser feitas com a sintaxe tradicional, porém sua execução é mais eficiente com o
uso das expressões adicionadas à cláusula Group By.
ROLLUP
É uma extensão da cláusula Group By que, além de executar as funções de agregação para os grupos estabelecidos
na cláusula, executa as mesmas funções de agregação para subgrupos compostos das n-1, n-2, ..., até 0 expressões
incluídas na cláusula Rollup e retorna uma única linha sumariada para cada um destes subgrupos. Tem grande
utilidade na construção 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 cláusula Rollup acrescentou uma linha para cada grupo depto-cargo, outra linha
para cada depto, contendo um sumário ou subtotal referente às linhas grupadas, e, finalmente, um total geral.
Listagem 2.73 – Rollup
SQL> SELECT CD_DEPTO, NR_CARGO, IN_SEXO, SUM(VL_SAL)
2
FROM FUNC
3
WHERE CD_DEPTO IN ('D11', 'D21', 'E11', 'E21')
4
AND NR_CARGO IN (48, 52, 54, 56)
5
GROUP BY ROLLUP(CD_DEPTO, NR_CARGO, IN_SEXO)
6 /
CD_ NR_CARGO I SUM(VL_SAL)
--- -------- - ----------D11
52 M
1827
D11
52
1827
D11
54 F
2225
D11
54 M
2468
D11
54
4693
** acumulado de depto= D11 e cargo = 52 independente de sexo
** acumulado de depto= D11 e cargo = 54 independente de sexo
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
65
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
D11
D21
D21
D21
D21
D21
D21
E11
E11
E11
E11
E11
E21
E21
E21
E21
E21
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
*** acumulado de depto= D11 independente de sexo e cargo
** acumulado de depto= D21 e cargo = 52 independente de sexo
** acumulado de depto= D21 e cargo = 56 independente de sexo
*** acumulado de depto= D21 independente de sexo e cargo
** acumulado de depto= E11 e cargo = 48 independente de sexo
** acumulado de depto= E11 e cargo = 54 independente de sexo
*** acumulado de depto= E11 independente de sexo e cargo
** acumulado de depto= E21 e cargo = 52 independente de sexo
** acumulado de depto= E21 e cargo = 54 independente de sexo
*** acumulado de depto= E21 independente de sexo e cargo
***** Total geral
23 linhas selecionadas.
Poderíamos considerar que esta cláusula fez uma operação de grupamento para cada quebra do grupo. Esta operação
de agregação para cima (para estabelecer sumários menos detalhados) é chamada de Rollup.
A quantidade de grupos que a cláusula Rollup gerará será igual à quantidade de expressões incluídas na cláusula + 1. No caso do exemplo,
incluímos na cláusula Rollup três expressões; portanto, obtivemos quatro tipos de totais.
CUBE
Também é uma extensão da cláusula Group By que, além de executar as funções de agregação para os grupos
estabelecidos na cláusula Cube, executa as mesmas funções de agregação para subgrupos compostos dos valores de
todas as possíveis combinações das expressões (informadas para Cube) e retorna uma única linha sumariada para
cada subgrupo. Podemos nos utilizar desta característica para a montagem de produtos matriciais (cross-tab).
Observe na Listagem 2.74 que utilizamos o mesmo grupamento do exemplo anterior, porém obtivemos um número
maior de linhas no resultado.
Listagem 2.74 – Cube
SQL> SELECT CD_DEPTO, NR_CARGO, IN_SEXO, SUM(VL_SAL)
2
FROM FUNC
3
WHERE CD_DEPTO IN ('D11', 'D21', 'E11', 'E21')
4
AND NR_CARGO IN (48, 52, 54, 56)
5
GROUP BY CUBE(CD_DEPTO, NR_CARGO, IN_SEXO)
6 /
CD_ NR_CARGO I SUM(VL_SAL)
--- -------- - ----------D11
52 M
1827
D11
52
1827
D11
54 F
2225
D11
54 M
2468
D11
54
4693
D11
F
2225
D11
M
4295
D11
6520
D21
52 F
1725
D21
52 M
1918
D21
52
3643
D21
56 F
3617
D21
56
3617
D21
F
5342
D21
M
1918
D21
7260
E11
48 M
1775
E11
48
1775
** acumulado de depto= D11 e cargo = 52 independente de sexo
** acumulado de depto= D11 e cargo = 54 independente de sexo
**** acumulado de depto = D11 e sexo=F independente de cargo
**** acumulado de depto = D11 e sexo=M independente de cargo
****** acumulado de depto = D11 independente de sexo e cargo
** acumulado de depto= D21 e cargo = 52 independente de sexo
** acumulado de depto= D21 e cargo = 56 independente de sexo
**** acumulado de depto = D21 e sexo=F independente de cargo
**** acumulado de depto = D21 e sexo=M independente de cargo
****** acumulado de depto = D21 independente de sexo e cargo
** acumulado de depto= E11 e cargo = 48 independente de sexo
66 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
E11
E11
E11
E11
E11
E21
E21
E21
E21
E21
E21
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
** acumulado de depto= E11 e cargo = 54 independente de sexo
**** acumulado de depto = E11 e sexo=F independente de cargo
**** acumulado de depto = E11 e sexo=M independente de cargo
****** acumulado de depto = D21 independente de sexo e cargo
** acumulado de depto= E21 e cargo = 52 independente de sexo
** acumulado de depto= E21 e cargo = 54 independente de sexo
**** acumulado de depto = E21 e sexo=M independente de cargo
****** acumulado de depto = D21 independente de sexo e cargo
## acumulado de cargo=48 e sexo = M independende de depto
#### acumulado de cargo = 48 independente de sexo e depto
## acumulado de cargo=52 e sexo = F independende de depto
## acumulado de cargo=52 e sexo = M independende de depto
#### acumulado de cargo = 52 independente de sexo e depto
## acumulado de cargo=54 e sexo = F independende de depto
## acumulado de cargo=54 e sexo = M independende de depto
#### acumulado de cargo = 54 independente de sexo e depto
## acumulado de cargo=56 e sexo = M independende de depto
#### acumulado de cargo = 56 independente de sexo e depto
###### acumulado de sexo = F independente de cargo e depto
###### acumulado de sexo = M independente de cargo e depto
>>>>>>>> Total Geral
42 linhas selecionadas.
Isso ocorreu porque a cláusula Cube, além de calcular a função SUM(vl_sal) para o grupo depto-cargo-sexo, também
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 cláusula Cube gerará será igual a 2 elevado à quantidade de expressões incluídas na cláusula. No caso do exemplo,
incluímos na cláusula Cube três expressões; portanto, obtivemos 8 tipos de totais.
IDENTIFICANDO AS LINHAS COM AS FUNÇÕES GROUP
Você já deve ter percebido, pelos resultados acima, que a utilização de Rollup e Cube pode tornar o resultado um
pouco confuso, principalmente se as expressões envolvidas possuírem valores Null.
Temos 3 funções que podem nos ajudar a distinguir um valor Null que representa um subgrupo (de uma das
agregações produzidas pelo Rollup ou Cube), de um valor Null real.
A expressão a ser incluída na função Grouping deve corresponder a uma das expressões da cláusula Group by. Esta
função retornará 1 se o valor da expressão representar um subgrupo, e caso contrário, retornará zero. O tipo de valor
retornado é Number. Para efeito de teste inclua uma linha com preenchimento apenas de cd_depto (D11) e cd_mat (1).
Listagem 2.75 – Grouping e Grouping_Id
SQL> SELECT CD_DEPTO, GROUPING(CD_DEPTO) GRP_DEPTO,
2
IN_SEXO, GROUPING(IN_SEXO) GRP_SEXO,
3
GROUPING_ID(CD_DEPTO, IN_SEXO) GRP_ID,
4
SUM(VL_SAL)
5
FROM FUNC
6
WHERE CD_DEPTO IN ('D11', 'D21', 'E11', 'E21')
7
GROUP BY CUBE(CD_DEPTO, IN_SEXO)
8 /
CD_ GRP_DEPTO I GRP_SEXO GRP_ID SUM(VL_SAL)
--- --------- - -------- ------ ----------D11
0 F
0
0
10568 GRP_ID = 0 * 2**1
D11
0 M
0
0
11642 GRP_ID = 0 * 2**1
D11
0
0
0
GRP_ID = 0 * 2**1
D11
0
1
1
22210 *** acumulado por
D21
0 F
0
0
8080 GRP_ID = 0 * 2**1
D21
0 M
0
0
7012 GRP_ID = 0 * 2**1
D21
0
1
1
15092 *** acumulado por
E11
0 F
0
0
7190 GRP_ID = 0 * 2**1
+ 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
67
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
E11
E11
E21
E21
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
3309 GRP_ID = 0 * 2**1 + 0 * 2**0
10499 *** acumulado por depto
9531 GRP_ID = 0 * 2**1 + 0 * 2**0
9531 *** acumulado por depto
25838 ### acumulado por sexo
31494 ### acumulado por sexo
### acumulado por sexo
57332
>>>>>> Total Geral
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 à concatenação dos diversos resultados da função Grouping na ordem em que ocorrem. Considerando-se uma formação (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).
Listagem 2.76 – Group_Id
SQL> SELECT CD_DEPTO, IN_SEXO, GROUP_ID(), SUM(VL_SAL)
2
FROM FUNC
3
WHERE CD_DEPTO IN ('D11', 'D21')
4
GROUP BY CD_DEPTO, ROLLUP(CD_DEPTO, IN_SEXO)
5 /
CD_
--D11
D11
D11
D21
D21
D11
D21
D11
D21
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 função GROUP_ID para identificar as linhas de D11 e D21 que aparecem duas
vezes (com os mesmos valores em toda a linha) em função de um grupamento duplo entre cd_depto e a extensão
Rollup de cd_depto com in_sexo.
EXERCÍCIOS
2.25) Deseja-se uma lista contendo matrícula, nome e salário de todos os funcionários que ganhem mais que a
média salarial da empresa.
2.26) Produza uma lista contendo a média salarial, total de salários e quantidade de linhas selecionadas por
departamento, de todos os funcionários que tenham em seu primeiro nome a letra “A”.
2.27) Produza uma lista contendo o cargo, a média salarial e o número de funcionários grupados por cargo para os
departamentos D01, D11, D21 e E11. Todos os cargos com menos de três funcionários devem ser excluídos do
resultado. A lista deve vir ordenada descendentemente por média salarial.
2.28) Determine a quantidade de atividades diferentes por projeto (tabela Prjatv).
2.29) Deseja-se obter, em média, quantos funcionários existem por departamento.
2.30) Deseja-se obter uma lista (nr_cargo) de todos os cargos que possuam mais de duas funcionárias.
68 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
2.31) Deseja-se uma lista (cd_mat, vl_sal, nr_git) dos funcionários mais graduados (com maior grau de instrução)
da empresa.
2.32) Deseja-se saber qual departamento possui maior média salarial da empresa.
2.33) Deseja-se saber quais os funcionários (matrícula, nome, sobrenome e data de admissão) que possuem mais de
nove anos de empresa.
2.34) Deseja-se uma relação contendo matrícula, nome completo e idade do funcionário na data de admissão.
2.35) Deseja-se o total salarial e a média salarial por quantidade de anos trabalhados e por cargo dos funcionários
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, além de um acumulado geral.
2.36) Deseja-se uma tabulação contendo a quantidade de funcionários por sexo e por quantidade de anos na
empresa. Além dos dados individuais, deseja-se totalizações por sexo, por quantidade de anos e por sexo e quantidade
de anos simultaneamente.
2.37) Repita os dois exercícios anteriores de tal forma que os totais provenientes da quebra sejam identificados
diferentemente dos valores gerados em função de valores NULL.
2.38) Um novo funcionário foi contratado na empresa, o cargo definido para ele foi 55 e seu salário deve ser 2700,
2800 ou 2900. Determine qual dos três salários se enquadra nos requisitos estabelecidos pela gerência de projetos:
a) Seu salário deve ser superior ao quarto maior salário dentre os funcionários com o mesmo cargo.
b) Pelo menos 60% do grupo de funcionários com o mesmo cargo deve ter salário menor que o dele.
2.39) Para determinar o percentual de promoção dos funcionários, o departamento Pessoal solicitou:
a) o menor, o maior e a média salárial do menor cargo
b) o menor, o maior e a média salárial do maior cargo
2.40) O novo diretor do Departamento pessoal deseja estabelecer faixas salariais para futuro enquadramento dos
funcionários. Com este objetivo deseja obter informações sobre a distribuição salarial atual. Considerando-se
intervalos de 20% (.20, .40, .60, .80 ou 1) deseja-se saber qual o salário correspondente.
FUNDAMENTOS EM: MODIFICAÇÃO DO RESULTADO COM FUNÇÕES
PRÉ-REQUISITOS
♦ Conhecimentos básicos do comando Select.
METODOLOGIA
♦ Apresentação e descrição sintática das funções escalares subdivididas em grupos de acordo com o tipo de parâmetro e retorno.
TÉCNICA
♦ Apresentação de exemplos que desenvolvam as funções descritas analisando as diversas opções sintáticas oferecidas, quando cabível.
INTRODUÇÃO
Funções são programas que realizam determinadas ações, podem receber parâmetros e retornam pelo menos um resultado.
As funções de que trataremos neste item são as escalares. Uma função é dita escalar quando se aplica a um valor (e
não a um conjunto, como as funções de grupo).
Dentre as funções predefinidas pelo SQL do Oracle9i, o maior conjunto se refere às funções 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
69
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Podemos subdividir este grupo de funções de acordo com o tipo de parâmetro e resultado gerado, da seguinte forma:
♦ Numéricas – São aquelas que recebem parâmetros numéricos e geram resultados numéricos. Podem ser
subdivididas em Trigonométricas e Numéricas Simples.
♦ Alfanuméricas – Geram resultados alfanuméricos. Recebem parâmetros alfanuméricos e (algumas) numéricos.
♦ Alfanuméricas que Retornam Valores Numéricos – Recebem parâmetros alfanuméricos e geram resultados numéricos.
♦ Datas – Realizam a manipulação de datas.
♦ Conversão – Realizam conversão de tipo.
♦ Outras – Características diversas.
Para efeito de simplicidade usaremos, na exemplificação, sempre que possível, valores constantes e a tabela Dual (do dicionário de dados do
Oracle), pois possui apenas uma linha.
NUMÉRICAS SIMPLES
Recebem parâmetros numéricos e geram resultados numéricos. Foram, para efeito de sintaxe, grupadas de acordo
com a quantidade de parâmetros recebidos: um parâmetro, dois parâmetros obrigatórios e um parâmetro obrigatório
e um opcional. Serão apresentadas em ordem alfabética.
Sintaxe 2.19 – Funções numéricas simples
ABS
Retorna o valor absoluto do argumento.
BITAND
Calcula uma operação de AND entre os bits dos dois argumentos. Os valores do argumento devem ser não
negativos e inteiros.
Esta função não determina o tipo de seu resultado; portanto, pode ser necessário que a utilizemos dentro de outra
função (TO_NUMBER, por exemplo) para garantir que o retorno será numérico.
CEIL
Retorna o menor inteiro maior ou igual ao argumento.
70 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
EXP
Retorna e elevado à n-ésima potência (de acordo com o valor do argumento), onde e = 2.71828183....
Listagem 2.77 – Abs, Ceil e Bitand
SQL> SELECT ABS(-5), CEIL(1.2), CEIL(-2.5), EXP(1), EXP(2),
2
BITAND(1,2), BITAND(5,2), BITAND(6,2)
3
FROM DUAL;
ABS(-5) CEIL(1.2) CEIL(-2.5) EXP(1) EXP(2) BITAND(1,2) BITAND(5,2) BITAND(6,2)
------- --------- ---------- ------- ------- ----------- ----------- ----------5
2
-2 2,71828 7,38906
0
0
2
Na Listagem 2.77, observamos que a função Ceil, quando recebe um argumento negativo, aparentemente produz
um resultado incorreto; porém, devemos nos lembrar que –2 é maior que –2.5 e, portanto, o resultado está correto.
Para entendermos o resultado da função Bitand devemos nos lembrar da formação binária dos números envolvidos:
1 = 0 * 2**2 + 0 * 2**1 + 1 * 2**0
5 = 1 * 2**2 + 0 * 2**1 + 1 * 2**0
2 = 0 * 2**2 + 1 * 2**1 + 0 * 2**0
6 = 1 * 2**2 + 1 * 2**1 + 0 * 2**0
Uma operação 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 não ocorre empate (de 1 e 1 na mesma posição
correspondente), o resultado é zero. Observe o resultado entre 6 (110) e 2(010).
Esta função 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 <expressão2> na base <expressão1>. A base (<expressão1>) deve ser qualquer número
positivo diferente de 0 e 1 e <expressão2> deve ser maior que zero.
Listagem 2.78 – Floor, Ln e Log
SQL> SELECT FLOOR(1.2), FLOOR(-2.5), LN(10.5), LOG(0.5, 10.2)
2
FROM DUAL;
FLOOR(1.2) FLOOR(-2.5) LN(10.5) LOG(0.5,10.2)
---------- ----------- --------- ------------1
-3 2,3513753
-3,350497
MOD
Retorna o resto da divisão de <expressão1> por <expressão2>. Se o valor do divisor (<expressão2>) for zero, retornará
o próprio valor de <expressão1>.
POWER
Retorna <expressão1> elevada à <expressão2> potência. Os argumentos <expressão1> e <expressão2> podem assumir
qualquer valor, porém se <expressão1> for negativo, <expressão2> deve ser inteira.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
71
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 2.79 – Exemplo de Mod e Power
SQL> SELECT MOD(10,3), MOD(-10, -3), MOD(-3,0),
2
POWER(1.2, 3), POWER(-3,2)
3
FROM DUAL;
MOD(10,3) MOD(-10, -3) MOD(-3,0) POWER(1.2,3) POWER(-3,2)
--------- ------------ --------- ------------ ----------1
-1
-3
1,728
9
ROUND
Retorna <expressão1> arredondado para um determinado número (<expressão2>) de posições à direita do ponto decimal.
Se <expressão2> for omitida, o segundo argumento será considerado zero. Se <expressão2> for negativa, serão arredondados
os dígitos à esquerda do ponto decimal. Como restrição temos que <expressão2> deve ser um valor inteiro.
Listagem 2.80 – Exemplo de Round
SQL> SELECT ROUND(17.654, 2), ROUND(17.654),
2
ROUND(17.654, -1), ROUND(17.654, -2)
3
FROM DUAL;
ROUND(17.654,2) ROUND(17.654) ROUND(17.654,-1) ROUND(17.654,-2)
--------------- ------------- ---------------- ---------------17,65
18
20
0
A função Round realiza a ação de arredondamento se o valor do número a ser omitido for maior ou igual a 5. Caso
contrário, a casa decimal será simplesmente omitida do resultado.
SIGN
Retorna o sinal da <expressão>. Desta forma, se a <expressão> for menor que zero, o valor retornado será –1. Se a
<expressão> for igual a zero, o valor retornado será zero e se a <expressão> for maior que zero, o valor retornado será 1.
SQRT
Retorna a raiz quadrada do argumento. A função retorna um resultado real. O argumento (<expressão>) deve ser positivo.
TRUNC
Retorna <expressão1> truncado para um determinado número (<expressão2>) de posições à direita do ponto decimal. Não há arredondamento; as posições superiores ao valor de <expressão2> são apenas omitidas do resultado. Se
<expressão2> for omitida, o segundo argumento será considerado zero. Se <expressão2> for negativa, serão considerados
os dígitos à esquerda do ponto decimal. Como restrição temos que <expressão2> deve ser um valor inteiro.
Listagem 2.81 – Sign, Sqrt e Trunc
SQL> SELECT SIGN(-132), SQRT(9), TRUNC(175.894, 0),
2
SIGN(0), TRUNC(175.894, -2)
3
FROM DUAL;
SIGN(-132)
SQRT(9) TRUNC(175.894,0)
SIGN(0) TRUNC(175.894,-2)
---------- --------- ---------------- --------- -----------------1
3
175
0
100
WIDTH_BUCKET
Esta função permite a construção de um histograma de intervalos de mesmo tamanho. Os parâmetros <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 são do tipo fechado-aberto, o que significa que o valor inferior de cada intervalo estará incluído naquele
grupo e o valor superior não. A <expressão> deve ser do tipo numérica ou datetime.
72 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Se forem encontrados valores abaixo do <menor_valor>, o Oracle criará um Bucket 0 onde acomodará todos estes
valores. Caso ocorra o oposto, ou seja, valores acima do <maior_valor> será criado um Bucket <num_buckets> + 1
que acomodará todos os valores superiores.
Listagem 2.82 – Width_Bucket
SQL> SELECT VL_SAL, WIDTH_BUCKET(VL_SAL, 1, 4000, 10) FAIXAS
2
FROM FUNC
3
WHERE VL_SAL BETWEEN 2000 AND 3000
4* ORDER BY 1;
VL_SAL
-----2045
2134
2218
2225
2380
2384
2468
2528
2537
2615
2625
2738
2774
2842
2876
2925
2975
2984
FAIXAS
-----6
6
6
6
6
6
7
7
7
7
7
7
7
8
8
8
8
8
18 linhas selecionadas.
TRIGONOMÉTRICAS
Recebem parâmetros numéricos e geram resultados numéricos. Estão relacionadas com cálculos matemáticos de
trigonometria. Levam em consideração que o círculo trigonométrico tem o tamanho de 1. Os argumentos relativos
a ângulos são fornecidos em radianos.
Sintaxe 2.20 – Funções trigonométricas
Para transformarmos um ângulo (em graus) para radianos, devemos dividi-lo por 57.29578.
ACOS
Retorna o arco do cosseno (argumento) informado.
O argumento (<expressão>) 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
73
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
ASIN
Retorna o arco do seno (argumento) informado.
O argumento (<expressão>) deve estar no intervalo de –1 a 1. O resultado será fornecido em radianos e varia de
-p/2 a p/2 (pi / 2).
Listagem 2.83 – Asin e Acos
SQL> SELECT TRUNC(ASIN(0.5)
2
TRUNC(ASIN(1) *
3
TRUNC(ACOS(0.5)
4
TRUNC(ACOS(1) *
5
FROM DUAL;
* 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 (<expressão>) informada.
O resultado será fornecido em radianos e varia de -p/2 a p/2 (pi / 2).
ATAN2
Retorna o arco da tangente (<expressão1>/<expressão2>) informada.
O resultado será fornecido em radianos e varia de -p a p (pi). Observe que ATAN2 (<expressão1>, <expressão2>)
produz o mesmo resultado que ATAN (<expressão1>/<expressão2>).
Listagem 2.84 – Exemplo de Atan e Atan2
SQL> SELECT TRUNC(ATAN(0) * 57.29578)
2
TRUNC(ATAN(0.5) * 57.29578)
3
TRUNC(ATAN(1) * 57.29578)
4
TRUNC(ATAN2(0,1) * 57.29578)
5
TRUNC(ATAN2(1,2) * 57.29578)
6
TRUNC(ATAN2(1,1) * 57.29578)
7
FROM DUAL;
“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 (<expressão>) informado, o qual deve ser expresso em radianos.
COSH
Retorna o cosseno hiperbólico do ângulo (<expressão>) informado, o qual deve ser expresso em radianos.
Listagem 2.85 – Exemplo de Cos e Cosh
SQL> SELECT COS(30/57.29578)
2
COS(60/57.29578)
3
COS(0/57.29578)
4
COSH(30/57.29578)
5
COSH(60/57.29578)
6
COSH(0/57.29578)
7
FROM DUAL;
“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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
SIN
Retorna o seno do ângulo (<expressão>) informado, o qual deve ser expresso em radianos.
SINH
Retorna o seno hiperbólico do ângulo (<expressão>) informado, o qual deve ser expresso em radianos.
Listagem 2.86 – Exemplo de Sin e Sinh
SQL> SELECT SIN(30/57.29578)
2
SIN(60/57.29578)
3
SIN(0/57.29578)
4
SINH(30/57.29578)
5
SINH(60/57.29578)
6
SINH(0/57.29578)
7
FROM DUAL;
“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 (<expressão>) informado, o qual deve ser expresso em radianos.
TANH
Retorna a tangente hiperbólica do ângulo (<expressão>) informado, o qual deve ser expresso em radianos.
Listagem 2.87 – Exemplo de Tan e Tanh
SQL> SELECT TAN(30/57.29578)
2
TAN(60/57.29578)
3
TAN(45/57.29578)
4
TANH(30/57.29578)
5
TANH(60/57.29578)
6
TANH(0/57.29578)
7
FROM DUAL;
“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
ALFANUMÉRICAS
Recebem parâmetros alfanuméricos e/ou numéricos e geram resultados alfanuméricos.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parâmetros recebidos, porém serão apresentadas
em ordem alfabética.
Os exemplos, preferencialmente, usarão constantes para melhor entendimento e a tabela Dual (do dicionário de
dados do Oracle) por conter apenas uma linha.
CHR
Retorna o caracter correspondente a <valor>. Esta transformação pode ser feita de acordo com o charset do banco
de dados ou de acordo com o national charset .
Se a opção Using Nchar_Cs não for utilizada, a transformação de <valor> no caracter equivalente será feita de
acordo com o charset do banco de dados.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
75
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Sintaxe 2.21 – Funções alfanuméricas
Se a opção Using Nchar_Cs for utilizada, a transformação de <valor> no caracter equivalente será feita de acordo
com o national charset .
O charset e o national charset são especificados no momento da criação do banco de dados e não podem ser
modificados posteriormente. O charset determina o conjunto de valores válidos para armazenamento. O national
charset determina o conjunto de valores válidos para colunas do tipo Nchar, Nvarchar, etc.
CONCAT
Retorna um texto resultante da concatenação de <texto1> com <texto2>. O resultado é equivalente ao uso do
operador || (concatenação).
INITCAP
Retorna <texto> com a primeira letra de cada palavra em maiúscula e as demais em minúsculas. O espaço em
branco determina o término de uma palavra e o início de outra. Podemos utilizar também outros caracteres não
alfanuméricos com este fim.
Listagem 2.88 – Chr, Concat e Initcap
SQL> SELECT CHR(84) ||CHR(69)||CHR(83)||CHR(84)||CHR(69) “CHR”,
2
CONCAT(CONCAT('PRIMEIRO', ' '), 'SEGUNDO') “CONCAT”,
3
INITCAP ('PALAVRA SEGUNDA*&^^TERCEIRA') “INITCAP”
4
FROM DUAL;
CHR
CONCAT
INITCAP
76 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
----- -------- ------- ------TESTE PRIMEIRO SEGUNDO Palavra Segunda*&^^Terceira
LOWER
Retorna o <texto> com todas as letras em minúsculas.
LPAD
Retorna <texto1> completado à esquerda com os caracteres definidos em <texto2> para o comprimento definido
por <tamanho>. Caso <texto2> não 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 não pertencente a <conjunto>.
Caso <conjunto> não seja fornecido, o caracter pesquisado será o branco.
Listagem 2.89 – Lower, Lpad e Ltrim
SQL> SELECT LOWER('TEXTO EXEMPLO') “LOWER”,
2
LPAD('EXEMPLO', 10, '@M') “LPAD”,
3
LPAD('EXEMPLO', 5) “LPAD”,
4
LTRIM('EXEEXEMPLO', 'XE') “LTRIM”
5
FROM DUAL;
LOWER
LPAD
LPAD LTRI
----- ------- ---------- ----- ---texto exemplo @M@EXEMPLO EXEMP MPLO
NLS_INITCAP
Retorna <texto> com a primeira letra de cada palavra em letra maiúscula e as demais em minúsculas. A função
considera que as palavras estão separadas por brancos ou caracteres não alfanuméricos.
O segundo parâmetro (<nlsparam>) só pode conter a sintaxe NLS_SORT = <sort>, onde <sort> pode ser um nome
de idioma ou BINARY. A seqüência de ordenação para determinadas línguas também apresenta requerimentos
específicos para colocação de maiúsculas e minúsculas.
Listagem 2.90 – Exemplo de Initcap
SQL> SELECT NLS_INITCAP('IJSLAND') “INITCAP”
2
NLS_INITCAP('IJSLAND', 'NLS_SORT=XDUTCH') “NLS_INITCAP”
3
FROM DUAL;
INITCAP NLS_INI
------- ------Ijsland IJsland
NLS_LOWER
Retorna <texto> com todas as letras em minúsculas.
O segundo parâmetro (<nlsparam>) só pode conter a sintaxe NLS_SORT = <sort>, onde <sort> pode ser um nome
de idioma ou BINARY. A seqüência de ordenação para determinadas línguas também tem requerimentos específicos
para colocação de maiúsculas e minúsculas.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
77
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
NLS_UPPER
Retorna <texto> com todas as letras em maiúsculas.
O segundo parâmetro (<nlsparam>) só pode conter a sintaxe NLS_SORT = <sort>, onde <sort> pode ser um nome
de idioma ou BINARY. A seqüência de ordenação para determinadas línguas também tem requerimentos específicos
para colocação de maiúsculas e minúsculas.
NLSSORT
Retorna a string de bytes usada para ordenar <texto>.
O segundo parâmetro (<nlsparam>) só pode conter a sintaxe NLS_SORT = <sort>, onde <sort> pode ser um nome
de idioma ou BINARY. Se omitirmos o segundo parâmetro, esta função usa a ordenação default em uso na sessão.
Se especificarmos BINARY, ela retorna <texto>.
Listagem 2.91 – Exemplo de Nlssort
SQL> SELECT NLSSORT('CHA') “DEFAULT”,
2
NLSSORT('CHA', 'NLS_SORT = BINARY')
3
FROM DUAL;
“BINARY”
DEFAULT
BINARY
---------------------------- -------1E37140001010100
43484100
REPLACE
Retorna <texto> substituindo cada aparecimento de <string1> no <texto> por <string2>. Se <string2> não 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> não 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 não pertencente a <conjunto>.
Caso <conjunto> não seja fornecido, o caracter pesquisado será o branco.
Listagem 2.92 – Replace, Rpad e Rtrim
SQL> SELECT REPLACE('MARIA JOÃO', 'IA ', 'TA E ') “TROCA”,
2
RPAD('TESTE', 10, '%2W')
“COMPLETA”,
3
RPAD('BRANCOS', 10)||'FIM' “RPAD”,
4
RTRIM('TEXTO COM ESPAÇOS
') “RTRIM1”,
5
RTRIM('TEXTO COM XZSCDDCSZZSC', 'SDCZ') “RTRIM2”
6
FROM DUAL;
TROCA
COMPLETA
RPAD
RTRIM1
RTRIM2
------------ ---------- ------- ----------------------- ----------MARTA E JOÃO TESTE%2W%2 BRANCOS
FIM TEXTO COM ESPAÇOS TEXTO COM X
78 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
SOUNDEX
Retorna uma string que represente o som de <texto>. A função retorna fonemas iguais para palavras que tenham
o mesmo som em inglês.
SUBSTR
Retorna uma parte de <texto>, começando no caracter definido por <posição> e com comprimento de <tamanho>.
A função realiza ações diferentes de acordo com o valor de <posição>. Se <posição> for maior que zero, o Oracle
iniciará a contagem a partir do caracter mais à esquerda. Se <posição> for zero, o comprimento será considerado 1
(o caracter mais à esquerda). Finalmente, se <posição> for menor que zero, o Oracle iniciará a contagem a partir do
caracter mais à direita.
O parâmetro <tamanho>, quando omitido, indica que será considerado o comprimento determinado por <posição>
até o final da string. Por outro lado, se <tamanho> for menor que 1, será retornado Null.
Se para os parâmetros numéricos forem fornecidos valores em ponto flutuante haverá transformação com truncamento.
Listagem 2.93 – Exemplo de Soundex e Substr
SQL> SELECT SOUNDEX('Smythe') “Soundex”,
2
SOUNDEX('Smyth')
“Soundex”,
3
SOUNDEX('Smih')
“Soundex”,
4
SOUNDEX('Two')
“Soundex”,
5
SOUNDEX('Too')
“Soundex”,
6
SUBSTR('EXEMPLO', 3.5, 2.7) “SUBSTR”,
7
SUBSTR('EXEMPLO', -3, 2)
“SUBSTR”,
8
SUBSTR('EXEMPLO', 2, -1)
“SUBSTR”,
9
FROM DUAL;
Soundex Soundex Soundex Soundex Soundex SUBSTR SUBSTR SUBSTR
------- ------- ------- ------- ------- ------ ------ -----S530
S530
S530
T000
T000
EM
PL
SUBSTRB, SUBSTRC, SUBSTR2, SUBSTR4
Estas funções executam a mesma operação da função SUBSTR. A diferença ocorre em função do charset e da forma
de tratamento do tamanho. Para Substrb a informação é fornecida em bytes (em vez de caracteres), para SubstrC
em Unicode complete characteres, para Substr2 em UCS2 codepoints e para Substr4 em UCS4 codepoints. Desta
forma, a utilização destas variações da função Substr está ligada à forma de armazenamento das informações no
banco de dados (charset ou national charset ) ou ao ambiente do usuário.
TRANSLATE
Retorna <texto> substituindo cada uma das ocorrências de <conjunto1> pela ocorrência 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 correspondência serão omitidos do resultado.
TREAT
Esta função altera o tipo declarado para a expressão. Uma vez que ela está ligada à definição de tipo, somente será
estudada no Capítulo 4.
TRIM
A função 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, deverão ser apresentados entre aspas simples.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
79
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 2.94 – Trim
SQL> SELECT TRIM(0 FROM 00098765000) FROM DUAL;
TRIM(
----98765
SQL> SELECT '*'||TRIM('
'*'||TRIM('ABCDEFGH
------------------*ABCDEFGHI JKLMNO*
ABCDEFGHI
JKLMNO
')||'*' FROM DUAL;
Nos exemplos da Listagem 2.94, usamos um conjunto de caracteres numéricos do qual retiramos os zeros iniciais
e finais, e um conjunto de caracteres alfanuméricos (literais) do qual retiramos os brancos iniciais e finais. Se não
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 três indicações, o Oracle remove tanto os caracteres do lado esquerdo
quanto os do lado direito que sejam iguais ao Trim_Character.
Listagem 2.95 – Trim
SQL> SELECT TRIM(TRAILING '@' FROM '@@@TESTE@@@') FROM DUAL;
TRIM(TRA
-------@@@TESTE
SQL> SELECT TRIM(LEADING '@' FROM '@@@TESTE@@@') FROM DUAL;
TRIM(LEA
-------TESTE@@@
A função retorna um VARCHAR2 com comprimento máximo igual ao de Trim_Source.
Se Trim_Source ou Trim_Character forem Null, o retorno da função será Null.
UPPER
Retorna <texto> com todas as letras maiúsculas.
Listagem 2.96 – Exemplo de Translate e Upper
SQL> SELECT TRANSLATE('EXEMPLO', 'XPLE', '123') “TRANSLATE”,
2
UPPER('texto em maiúsculas') “UPPER”
3
FROM DUAL;
TRANS UPPER
----- -------------------1M230 TEXTO EM MAIÚSCULAS
ALFANUMÉRICAS QUE RETORNAM VALORES NUMÉRICOS
Neste grupo de funções, trataremos daquelas que recebem parâmetros alfanuméricos e geram resultados numéricos.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parâmetros recebidos, porém serão apresentadas
em ordem alfabética.
Os exemplos, preferencialmente, usarão constantes para melhor entendimento e a tabela Dual (do dicionário de
dados do Oracle) por conter apenas uma linha.
80 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Sintaxe 2.22 – Funções alfanuméricas que retornam valores Numéricos
ASCII
Retorna a representação decimal, no charset do banco de dados, para o primeiro byte de <texto>. Se o charset do
banco de dados for ASCII, esta função retornará um valor ASCII. Se o banco de dados possuir um charset EBCDIC,
esta função retornará o valor EBCDIC correspondente.
Listagem 2.97 – Exemplo de Ascii
SQL> SELECT ASCII('ã')
“A COM TIL”,
2
ASCII('Álcool') “A COM ACENTO”
3
FROM DUAL
4 /
A COM TIL A COM ACENTO
--------- -----------227
193
INSTR
Retorna a posição da n-ésima ocorrência de <texto2> dentro de <texto1>. A ocorrência desejada é fornecida pelo
parâmetro <ocorrência>. A posição inicial de pesquisa é dada por <posição>. Se <posição> for negativa, a pesquisa
se dará da direita para a esquerda.
Listagem 2.98 – Exemplo de Instr
SQL> SELECT INSTR('TEXTO EXEMPLO', 'E')
2
INSTR('TEXTO EXEMPLO', 'E', 3)
3
INSTR('TEXTO EXEMPLO', 'E', 3, 2)
4
INSTR('TEXTO EXEMPLO', 'E', -6)
5
INSTR('TEXTO EXEMPLO', 'E', -6, 2)
6
FROM DUAL
7 /
“PRIMEIRO E”,
“POSIÇÃO 3”,
“2A OCORR.”,
“POSIÇÃO -6”,
“2A OCORR.”
PRIMEIRO E POSIÇÃO 3 2A OCORR. POSIÇÃO -6 2A OCORR.
---------- --------- --------- ---------- --------2
7
9
7
2
Observe na Listagem 2.98 que, quando <posição> é negativa, o posicionamento é feito da direita para a esquerda, a
ocorrência é contabilizada da direita para a esquerda, mas a posição resultante é fornecida da esquerda para a direita.
INSTRB, INSTRC, INSTR2, INSTR4
Similar a Instr. A diferença ocorre em função do charset e da forma de tratamento do tamanho. Para InstrB a
informação é fornecida em bytes (em vez de caracteres), para InstrC em Unicode complete characteres, para Instr2
em UCS2 codepoints e para Instr4 em UCS4 codepoints. Desta forma, a utilização destas variações da função Instr
está ligada à forma de armazenamento das informações no banco de dados (charset ou national charset) ou ao
ambiente do usuário.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
81
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
LENGTH
Retorna o comprimento de <texto> em caracteres.
LENGTHB, LENGTHC, LENGTH2, LENGTH4
Similar à função Length. A diferença ocorre em função do charset e da forma de tratamento do tamanho. Para
LengthB a informação é fornecida em bytes (em vez de caracteres), para LengthC em Unicode complete characteres,
para Length2 em UCS2 codepoints e para Length4 em UCS4 codepoints. Desta forma, a utilização destas variações
da função Length está ligada à forma de armazenamento das informações no banco de dados (charset ou national
charset) ou ao ambiente do usuário.
Listagem 2.99 – Exemplo de Length e Nlssort
SQL> SELECT LENGTH('TEXTO EXEMPLO')
2
NLSSORT('CLAS', 'NLS_SORT = XSPANISH')
3
NLSSORT('CHA', 'NLS_SORT = XSPANISH')
4
FROM DUAL
5
WHERE NLSSORT('CHA', 'NLS_SORT = XSPANISH')
6
NLSSORT('CLAS', 'NLS_SORT = XSPANISH')
7 /
“LENGTH”,
“CLAS”,
“CHA”
>
LENGTH CLAS
CHA
------- -------------------- -----------13 1E4B1469000101010100 201400010100
DATAS
Realizam manipulação de datas.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parâmetros recebidos, porém serão apresentadas
em ordem alfabética (exceto Sysdate e SessionTimezone).
Os exemplos, preferencialmente usarão constantes para melhor entendimento e a tabela Dual (do dicionário de
dados do Oracle) por conter apenas uma linha.
Em algumas das funções de data, podemos passar um texto no lugar do parâmetro <data>. O Oracle fará a conversão
usando a função To_Date com o formato de acordo com o padrão em uso na estação do usuário. Nas funções Trunc
e Round, esta ação não é possível.
SYSDATE
Retorna a data e hora correntes do banco de dados. O formato de apresentação depende do idioma e do território
em uso na estação do usuário. Não é afetado pelas modificações de zona de tempo da sessão do usuário.
ADD_MONTHS
Retorna a data <data1> adicionada de <meses>. O parâmetro <meses> deve ser inteiro, porém pode ser negativo. Se
o mês resultante da soma tiver menos dias que o dia calculado ou se o dia fornecido no parâmetro <data>
corresponder ao último dia do mês, o dia resultante será o último dia do mês calculado. Caso contrário, será
exatamente o dia fornecido no parâmetro <data1>.
Listagem 2.100 – Sysdate e Add_Months
SQL> SELECT SYSDATE “DATA ATUAL”,
2
ADD_MONTHS('28/02/99', 3) “MAIO”,
3
ADD_MONTHS('31/01/99', 1) “FEVEREIRO”,
4
ADD_MONTHS('15/01/99', 1) “DIA 15”
5
FROM DUAL
82 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
DATA ATU MAIO
FEVEREIR DIA 15
-------- -------- -------- -------11/11/01 31/05/99 28/02/99 15/02/99
Sintaxe 2.23 – Funções de data
CURRENT_DATE
Retorna a data corrente na zona de tempo (meridiano) da sessão do usuário. Caso não venhamos a modificar
características de meridiano, esta função e a Sysdate serão similares.
SESSIONTIMEZONE
Apresenta o posicionamento em relação ao fuso horário da sessão do usuário. Os fusos horários são calculados em
relação ao meridiano de Greenwich. Se caminharmos para o lado esquerdo do Planisfério (para este teste é conveniente que você tenha um à mão) estaremos subtraindo horas em relação à hora oficial de Greenwich. Se caminharmos
para a direita estaremos somando.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
83
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 2.101 – Sessiontimezone e Current_Date
SQL> SELECT SESSIONTIMEZONE, CURRENT_DATE, SYSDATE FROM DUAL;
SESSIONTIMEZONE
CURRENT_DATE
SYSDATE
--------------- ----------------- --------------------------03:00
11/11/2001 11:51:45 11/11/2001 11:51:45
SQL> ALTER SESSION SET TIME_ZONE = '-6:00';
Sessão alterada.
SQL> SELECT SESSIONTIMEZONE, CURRENT_DATE, SYSDATE FROM DUAL;
SESSIONTIMEZONE
CURRENT_DATE
SYSDATE
--------------- ----------------- --------------------------06:00
11/11/2001 08:51:49 11/11/2001 11:51:49
Observe na Listagem 2.101 que Sysdate não foi afetada pela modificação na zona de tempo da sessão do usuário.
CURRENT_TIMESTAMP
Retorna a data corrente e hora na zona de tempo da sessão do usuário. Apresenta, adicionalmente, a time zone da
sessão do usuário. A precisão determina fração de segundos (o default é 6, o limite é 9). A diferença entre esta função
e LocalTimestamp é que é apresentado o valor da zona de tempo enquanto que Localtimestamp não apresenta.
Listagem 2.102 – Current_Timestamp e Current_Date
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY';
Sessão alterada.
SQL> SELECT CURRENT_TIMESTAMP, CURRENT_DATE FROM DUAL;
CURRENT_TIMESTAMP
CURRENT_DA
------------------------------- -------------11/11/01 08:45:16,000000 -06:00
11/11/2001
A diferença entre CURRENT_DATE e CURRENT_TIMESTAMP é que o formato de apresentação de data para
CURRENT_DATE depende da sessão (observe o comando ALTER SESSION anterior), enquanto que
CURRENT_TIMESTAMP não foi afetado pela modificação nesta formatação.
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 região, de acordo com a especificação da data na criação do banco de dados. A tabela
V$Timezone_Names contém uma lista das zonas de tempo por nome.
EXTRACT
Extrai uma determinada informação de tempo (por exemplo ano, mês, dia, segundo, etc.) de um campo do tipo
datetime ou interval. A tabela V$Timezone_Names contém 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 parâmetro <time_zone_value> deve ser um offset (‘[ + | - ] TZH:TZM’). Não é feita conversão de hora,
apenas anexada a especificação de zona de tempo ao timestamp fornecido como parâmetro.
LOCALTIMESTAMP
Retorna a data e hora corrente na zona de tempo da sessão.
Listagem 2.103 – Dbtimezone, Extract, From_Tz e Localtimestamp
SQL> SELECT DBTIMEZONE, CURRENT_TIMESTAMP,
2
EXTRACT(YEAR FROM SYSDATE) ANO, EXTRACT(TIMEZONE_HOUR FROM CURRENT_TIMESTAMP) HORA,
84 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
3
4
5
FROM_TZ(TIMESTAMP '2001-10-05 19:30:25', '+4:00') FROM_TZ,
LOCALTIMESTAMP (8)
FROM DUAL;
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 função Extract pode ser usada em variáveis (no caso usamos as funções SYSDATE
e CURRENT_TIMESTAMP) no formato DATE ou TIMESTAMP. Para que possamos extrair valores como
TIMEZONE_HOUR, o parâmetro deve possuir especificação de zona de tempo; caso contrário receberemos erro
(teste com CURRENT_DATE em vez de CURRENT_TIMESTAMP).
Observe que o resultado da função FROM_TZ não fez nenhuma modificação na informação passada como parâmetro,
e o que muda realmente é o tipo de dado retornado, que passa a ser TIMESTAMP WITH TIME ZONE. O primeiro
parâmetro passado para a função 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’. Poderíamos 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 diferença entre a função Current_Timestamp e a função Localtimestamp pode ser visualizada no exemplo. A
função Current_Timestamp é do tipo timestamp with time zone, enquanto que Localtimestamp é do tipo timestamp.
LAST_DAY
Retorna a data do último dia do mês obtido do parâmetro <data>.
MONTHS_BETWEEN
Retorna o número de meses entre <data1> e <data2>. Se <data1> e <data2> fizerem referência ao mesmo dia do
mês ou ao último dia do mês, o resultado é sempre inteiro. Caso contrário, o Oracle calcula a fração do resultado
baseado em meses de 31 dias e considera a diferença de horas entre as datas.
NEW_TIME
O parâmetro <data1> é fornecido na zona horária <zona1> e será convertido para a data e hora correspondente em <zona2>.
Tabela 2.01 – Valores válidos para Zonas Horárias (Meridianos)
Abreviatura
Descrição
AST, ADT
Atlantic Standard Time ou Atlantic Daylight Time
BST, BDT
Bering Standard Time ou Bering Daylight Time
CST, CDT
Central Standard Time ou Central Daylight Time
EST, EDT
Eastern Standard Time ou Eastern Daylight Time
GMT
Greenwich
HST, HDT
Alaska-Hawaii Standard Time ou Alaska-Hawaii Daylight Time
MST, MDT
Mountain Standard Time ou Mountain Daylight Time
NST
Newfoundland Standard Time
PST, PDT
Pacific Standard Time ou Pacific Daylight Time
YST, YDT
Youkon Standard Time ou Youkon Daylight Time.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
85
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
A lista da Tabela 2.01 contém os valores válidos para <zona1> e <zona2>.
Listagem 2.104 – Last_Day, Months_Between e New_Time
SQL>
2
3
4
5
6
7
8
SELECT LAST_DAY('19/02/99') LASTDAY,
MONTHS_BETWEEN('31/03/99', '31/01/99') “ULTIMO DIA”,
MONTHS_BETWEEN('15/07/99', '15/02/99') “MESMO DIA”,
MONTHS_BETWEEN('16/07/99', '15/02/99') “OUTRO DIA”,
TO_CHAR(NEW_TIME(TO_DATE('10011999 10','DDMMYYYY HH24'),'GMT','BST'),'HH24:MI') BST,
TO_CHAR(NEW_TIME(TO_DATE('10011999 10','DDMMYYYY HH24'),'GMT','EST'),'HH24:MI') EST,
TO_CHAR(NEW_TIME(TO_DATE('10011999 10','DDMMYYYY HH24'),'GMT','NST'),'HH24:MI') NST
FROM DUAL;
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 língua em que o parâmetro <dia
da semana> deve ser fornecido depende do idioma em uso na sessão.
Listagem 2.105 – Next_Day
SQL> SELECT NEXT_DAY('01/01/99', 'SÁBADO'),
2
NEXT_DAY('17/02/99', 'QUARTA-FEIRA')
3
FROM DUAL;
NEXT_DAY NEXT_DAY
-------- -------02/01/99 24/02/99
ROUND
Retorna o parâmetro <data> arredondado para o formato especificado. Caso <formato> não seja informado, haverá
o arredondamento para o dia mais próximo.
Listagem 2.106 – Round
SQL> SELECT ROUND(TO_DATE('01/07/1999', 'DD/MM/YYYY'), 'SYEAR') “ANO”,
2
ROUND(TO_DATE('16/02/1999', 'DD/MM/YYYY'), 'Q') “QUARTO DE ANO”,
3
ROUND(TO_DATE('16/03/1999', 'DD/MM/YYYY'), 'MM') “MÊS”,
4
ROUND(TO_DATE('17/02/1999', 'DD/MM/YYYY'), 'WW') “1. DIA ANO”
5
FROM DUAL;
ANO
QUARTO D MÊS
1. DIA A
-------- -------- -------- -------01/01/00 01/04/99 01/04/99 19/02/99
Observe que a opção WW transformou a data 17/02/1999 em 19/02/1999. Se pegarmos um calendário de 1999
veremos que o dia primeiro de janeiro caiu em uma sexta-feira. Desta forma a sexta-feira mais próxima 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 parâmetro do tipo datetime
with time zone, isto é, determina a data e hora no meridiano de Greenwich.
SYSTIMESTAMP
Retorna a data do sistema, incluindo frações de segundo e a time zone do banco de dados.
86 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
TRUNC
Retorna o parâmetro <data> truncado para o formato especificado. Caso <formato> não seja informado, haverá o
truncamento para o dia mais próximo.
Tabela 2.02 – Formatos válidos para Round e Trunc
Formato
Descrição
CC, SCC
Duas primeiras posições do ano (yyyy) mais um.
SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y
Ano (meio=01/07)
IYYY, IYY, IY, I
Ano (ISO)
Q
Quarto de ano (arredondado a partir do décimo sexto dia do segundo mês do trimestre).
MONTH, MON, MM, RM
Mês (arredondado a partir do décimo sexto dia).
WW
Mesmo dia da semana que o dia de início do ano.
IW
Mesmo dia da semana que o dia de início do ano ISO.
W
Mesmo dia da semana que o dia de início do mês.
DDD, DD, J
Dia (DEFAULT)
DAY, DY, D
Dia de início da semana (Domingo para o território Brazil).
HH, HH12, HH24
Hora
MI
Minuto
TZ_OFFSET
Retorna a time zone offset correspondente ao valor passado no parâmetro baseado na data que o comando é executado.
Listagem 2.107 – Sys_Extract_Utc, SysTimeStamp, TZ_Offset
SQL> SELECT SYS_EXTRACT_UTC (CURRENT_TIMESTAMP) UTC_TTAMP,
2
SYS_EXTRACT_UTC (TIMESTAMP '2001-12-25 19:23:00.00 -06:00') UTC_STR,
3
SYSTIMESTAMP,
4
TZ_OFFSET ('-3:00') TZ_OFF, TZ_OFFSET(DBTIMEZONE)
5
FROM DUAL;
UTC_TTAMP
-------------------11/11/01 17:36:13,00
0000
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 função Sys_Extract_Utc recalcula o parâmetro recebido,
fornecendo o resultado no timestamp de Greenwich. O parâmetro deve ser um timestamp com zona de tempo.
CONVERSÃO
Realizam conversão de tipo.
A sintaxe foi organizada de acordo com a quantidade e tipo dos parâmetros recebidos, porém serão apresentadas
em ordem alfabética.
Os exemplos, preferencialmente usarão constantes para melhor entendimento e a tabela Dual (do dicionário de
dados do Oracle) por conter apenas uma linha.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
87
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Sintaxe 2.24 – Funções de conversão
88 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
ASCIISTR
Recebe um argumento string em qualquer charset e retorna uma string ASCII no charset do banco de dados. O valor
retornado contém somente caracteres que são válidos em SQL e a contrabarra ( \ ).
BIN_TO_NUM
Converte um vetor de bits no seu número equivalente. Cada argumento desta função deve representar um bit
(somente valores 0 e 1 e são permitidos) no vetor.
CAST
Uma conversão de tipo coleção para outro tipo coleção. Podemos converter uma coleção anônima (o resultado de
uma subquery) ou uma coleção identificada (um Varray ou uma Nested Table) em uma outra coleção que seja
compatível. Para que seja aceita a conversão, os elementos de ambas as coleções devem ser de mesmo tipo. Se o
resultado da subquery retornar diversas linhas, devemos indicar isso usando a palavra Multiset. Como esta função
trata de coleções, ela somente será estudada no Capítulo 4.
CHARTOROWID
Converte o valor de <texto> para o formato interno de Rowid.
Cada linha no banco de dados possui um endereço. Este endereço é chamado de Rowid. Ele é composto de quatro
informações: data object number (número associado a cada segmento do banco de dados), block (bloco de dados
do arquivo que contém a linha), row (número da linha dentro do bloco) e file (indica o arquivo – database file –
onde se acha a linha). Este assunto será mais explorado no tópico Administrando o Banco de Dados.
Cada tabela (exceto Index Table) possui uma pseudocoluna chamada Rowid. Ela não é criada pelo DBA, não é
apresentada quando usamos o comando Describe (do SQL*Plus), mas pode ser listada através de um comando Select.
Listagem 2.108 – AsciiStr, Bin_To_Num, CharToRowid
SQL> SELECT ASCIISTR('AÇÃO') AÇÃO, ASCIISTR('MISSÃO') MISSÃO,
2
BIN_TO_NUM(1,1,0,0,1) BIN, CHARTOROWID('AAAADdAABAAAANnAAA')
3
FROM DUAL
4 /
AÇÃO
MISSÃO
BIN CHARTOROWID('AAAAD
------------ ---------- ------- -----------------A\00C7\00C3O MISS\00C3O
25 AAAADdAABAAAANnAAA
No exemplo acima o cedilha maiúsculo corresponde ao valor C7 (ou 199) e A com til corresponde ao valor C3(195). A
contrabarra indica a presença de um valor em hexadecimal na seqüência. A string de bits informada na função
BIN_TO_NUM resultou no valor 25 (2**4 + 2**3 + 2**0). A conversão do texto Rowid para formato interno pode ser útil
na programação, principalmente em linguagens que não possuam variáveis 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 parâmetro 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
89
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
DECOMPOSE
Recebe um argumento string em qualquer tipo de dados e retorna uma string Unicode após decomposição canônica
no mesmo charset da entrada. O parâmetro 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 numérico para o formato de armazenamento INTERVAL DAY TO SECOND. O primeiro parâmetro
deve ser numérico. O segundo parâmetro 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 numérico para o formato de armazenamento INTERVAL YEAR TO MONTH. O primeiro parâmetro
deve ser numérico. O segundo parâmetro pode ser uma string do tipo CHAR, VARCHAR2, NCHAR ou NVARCHAR2
e deve corresponder a um dos seguintes valores: ‘YEAR’, ‘MONTH’ (case sensitive).
Listagem 2.109 – AsciiStr, Bin_To_Num, CharToRowid
SQL> SELECT COMPOSE('A'||UNISTR('\00C7\00C3') ||'O') COMPOSE,
2
CONVERT('á,é, ã, õ, Á', 'us7ascii') CONVERT,
3
HEXTORAW('7D9A8B') HEXTORAW,
4
NUMTODSINTERVAL(17123, 'SECOND') NUMTODS,
5
NUMTOYMINTERVAL(125, 'MONTH') NUMTOYM
6
FROM DUAL
7 /
COMP CONVERT
HEXTOR NUMTODS
NUMTOYM
----------------- ------ -------------------- ------------AÇÃO a,e, ?, ?, A 7D9A8B +000000000 04:45:23. +000000010-05
000000000
No exemplo da Listagem 2.109 podemos observar o uso das funções NUMTODSINTERVAL e NUMTOYMINTERVAL.
No primeiro parâmetro passamos um valor numérico (inteiro ou decimal) e no segundo informamos a unidade do
primeiro parâmetro. 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.
Listagem 2.110 – RawToHex
SQL> CREATE TABLE TESTE (IMAGEM RAW(50));
Tabela criada.
SQL> INSERT INTO TESTE (IMAGEM) VALUES(HEXTORAW('7D9A8B'));
1 linha criada.
SQL> SELECT RAWTOHEX(IMAGEM) FROM TESTE;
RAWTOHEX(IMAGEM)
---------------7D9A8B
90 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
ROWIDTOCHAR, ROWIDTONCHAR
A função RowidToChar converte valores de Rowid para caracteres (ver CharToRowid). O tamanho da string resultante
é sempre de 18 caracteres. A função RowidToNchar converte um valor de Rowid para NVARCHAR2 com comprimento
de 18 caracteres.
Listagem 2.111 – Exemplo de RowidToChar
SQL> SELECT ROWIDTOCHAR(ROWID) “ROWIDTOCHAR”
2
FROM DUAL;
ROWIDTOCHAR
-----------------AAAACsAABAAAATmAAA
TO_CHAR
Esta primeira forma sintática da função TO_CHAR só possui um parâmetro. Seu objetivo é converter valores
NCHAR, NVARCHAR2, CLOB ou NCLOB para o charset do banco de dados.
TO_CHAR
A função To_Char possui duas sintaxes, uma para efetuar a conversão de datas para o formato caracter e outra para
converter o formato numérico para caracter.
As especificações de formato variam de acordo com a conversão desejada. Se o formato não for especificado, será
usado o formato padrão da sessão do usuário. Esse formato é determinado pelos parâmetros da National Language
Support em uso.
Tabela 2.03 – numéricos válidos para To_Char e To_Number
Formato
Descrição
$
Prefixa o valor com o símbolo $.
,
Mostra uma “,” na posição correspondente.
.
Mostra um “.” decimal na posição.
0
Completa o comprimento do formato com zeros (à esquerda ou direita, de acordo com a máscara fornecida).
9
A quantidade de 9’s determina o comprimento. Se o número for positivo é acrescentado um branco à esquerda e, se negativo, o sinal de menos.
B
Retorna brancos à esquerda da parte inteira de um número zero, mesmo que no formato haja zeros.
C
Mostra o símbolo financeiro ISO.
D
Mostra o símbolo de separação decimal default.
E
Notação científica.
FM
Retorna um valor sem zeros à esquerda ou à direita.
G
Mostra o símbolo de separação de milhar default.
L
Mostra o símbolo financeiro local.
MI
Mostra “-” à direita de um valor negativo e branco de um valor positivo.
PR
Mostra um valor negativo entre <> e os positivos entre brancos.
RN
Mostra o número em algarismos romanos (maiúscula).
rn
Mostra o número em algarismos romanos (minúsculas).
S
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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
91
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
continuação
Formato
Descrição
TM
“Text minimum”. Retorna (em formato decimal) o menor número de caracteres possível. O default é TM9 que retorna o número em formato
fixo (a menos que exceda 84 caracteres, neste caso retornado em notação científica).
U
Mostra o símbolo Euro (ou outro dual), associado ao parâmetro NLS_DUAL_CURRENCY.
V
Multiplica o valor por 10n, onde n corresponde ao número de 9’s após v.
X
Retorna o valor hexadecimal do número.
Os formatos numéricos podem ser usados na To_Char com parâmetro numérico, ou na To_Number.
Os formatos de data podem ser usados na To_Char com parâmetro data, ou na To_Date.
Listagem 2.112 – To_Char
SQL> SELECT sysdate,
2
TO_CHAR(SYSDATE, 'DDD-DAY-WW-IW-HH12-Q') “DATA”,
3
TO_CHAR(-1234567.98, 'L099G999G990D00PR') “NÚMERO”
4
FROM DUAL;
SYSDATE DATA
NÚMERO
-------- ---------------------------- -------------------------11/11/01 315-DOMINGO
-45-45-05-4
<Cr$001.234.567,98>
TO_CLOB
Converte o valor passado como parâmetro (que pode ser uma coluna NCLOB ou outro tipo de caracter) para
CLOB. O parâmetro pode ser do tipo CHAR, NCHAR, VARCHAR2, NVARCHAR2, CLOB ou NCLOB.
TO_DATE
Converte <texto> para o formato interno de data. O parâmetro <formato> indica em que formato está o texto. Se
o formato for omitido, o Oracle assumirá que o texto está no formato de data padrão da sessão do usuário.
Tabela 2.04 – Formatos de data válidos para To_Char, To_Date, To_Timestamp e To_Timestmap_Tz
Formato
Descrição
-/,.;:”text”
Inclusão de pontuação no resultado.
AM ou A.M. ou PM ou P.M.
Indicador de meio-dia com ou sem pontuação.
BC ou B.C. AD ou A.D.
Indicadores BC ou AD com ou sem pontuação.
CC, SCC
Adiciona 1 aos dois primeiros dígitos do ano (yyyy) e prefixa datas BC com um sinal negativo.
D
Dia da semana (1-7).
DAY
Nome do dia, completado com brancos até o comprimento de 9 caracteres.
DD
Dia do mês (1-31).
DDD
Dia do ano (1-366).
DY
Nome do dia abreviado (3 caracteres).
E
Nome da era abreviado.
EE
Nome da era por extenso.
FF
Fração de segundo.
HH, HH12
Hora (0-12).
continua
92 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
continuação
Formato
Descrição
HH24
Hora (0-23).
IW
Semana do ano (ISO).
IYYY ou IYY ou IY ou I
Ano ISO.
J
Dia em data juliana. Data inicial para formato de data juliana é 01/01/4712 BC.
MI
Minuto
MM
Mês (numérico).
MON
Nome do mês abreviado (3 caracteres).
MONTH
Nome do mês completado com brancos à direita até o comprimento de 9 caracteres.
Q
Quarto de ano (numérico). Trimestre.
RM
Numeral romano do mês.
RR
Ano. Soma 1 aos dois primeiros dígitos de CC se ano for < 50 e os últimos 2 dígitos do ano corrente forem >=50. Subtrai 1 de
CC se ano >= 50 e os últimos dois dígitos do ano corrente forem < 50.
RRRR
Ano. Aceita 2 ou 4 dígitos. Se ano informado com 2 dígitos, segue as mesmas regras de RR.
SS
Segundo.
SSSSS
Segundos após a meia-noite.
SYYYY
Ano. Prefixa anos BC com um sinal negativo.
TZD
Abreviatura da zona de tempo (fuso horário).
TZH
Hora da zona de tempo (fuso horário).
TZM
Minuto da zona de tempo (fuso horário).
TZR
Nome da zona de tempo (fuso horário).
W
Semana do mês (numérico). Contabilizado da mesma forma que WW em relação ao mês.
WW
A semana começa no primeiro dia no ano e incrementada de 1 a cada 7 dias.
X
Caracter radix local para ser usado como separador da parte fracionária dos segundos. Ex.: ‘HH:MI:SSXFF’.
Y,YYY
Ano com vírgula na posição marcada.
YEAR, SYEAR
Ano por extenso.
YYYY ou YYY ou YY ou Y
Ano.
Os formatos de data possuem as seguintes características adicionais:
♦ Os formatos RR e RRRR levam em consideração o ano atual (por exemplo, 1999) e o valor informado de ano (por
exemplo, to_date(‘ddmmrr’, ‘010149’)) para determinação do século. Se os dois últimos dígitos do ano atual (no
nosso caso, 1999) são inferiores a 50 e o ano informado (no nosso caso, 49) é < 50, o século retornado é o
corrente, e se o ano informado for >= 50, o século retornado é o atual menos 1. Se os dois últimos dígitos do ano
atual (no nosso caso, 1999) são superiores a 49 e o ano informado (no nosso caso, 49) é < 50, o século retornado
é o corrente mais um, e se o ano informado for >= 50, o século retornado é o século 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, porém observe que a lógica seguida seria diferente.
♦ São admitidos dois modificadores: FM (retira brancos à direita e à esquerda e os zeros não significativos do
resultado) e FX (exige validação exata dos caracteres no formato com os informados).
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
93
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
♦ São admitidos três sufixos: TH (acrescenta ao número as letras TH), SP (apresenta o número por extenso) e SPTH
ou THSP (apresenta o ordinal do número por extenso). Todos os três sufixos retornam o valor em inglês.
♦ O parâmetro <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 numéricos, onde <d> indica o separador decimal e <g> o separador de grupo.
Listagem 2.113 – Exemplo de To_Date
SQL> SELECT TO_CHAR(TO_DATE('18 FEBRUARY, 49, 11:00 P.M.',
2
'DD MONTH, RR, HH:MI A.M.',
3
'NLS_DATE_LANGUAGE = AMERICAN'),
4
'DD MONTH, YYYY, HH24:MI',
5
'NLS_DATE_LANGUAGE = ''BRAZILIAN PORTUGUESE''') DATA,
6
TO_CHAR(LOCALTIMESTAMP, 'HH24:MI:SSXFF') TIMESTAMP
7
FROM DUAL;
DATA
TIMESTAMP
------------------------- --------------18 FEVEREIRO, 2049, 23:00 13:37:07,000000
TO_DSINTERVAL
Converte uma string (no formato CHAR, VARCHAR2, NCHAR ou NVARCHAR2) para INTERVAL DAY TO SECOND. O único parâmetro NLS que pode ser utilizado é NLS_NUMERIC_CHARACTERS.
TO_LOB
Essa função converte valores Long ou Long Raw armazenados em colunas do tipo Long para valores Lob. Podemos
aplicar essa função somente a uma coluna Long ou Long Raw e somente na lista de seleção de uma subquery de um
comando INSERT.
Listagem 2.114 – Criação da tabela com Long
SQL> CREATE TABLE LONGA (CD_LONGA
Tabela criada.
NUMBER, TX_LONGA LONG);
SQL> INSERT INTO LONGA
2 SELECT CD_MAT, NM_FUNC ||'-'||NR_CARGO||'-'||NM_SOBRENOME||'-'||CD_MAT
3 FROM FUNC;
33 linhas criadas.
SQL> commit;
Validação completa.
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, porém utilizando o tipo de dados Clob.
Listagem 2.115 – Criação da tabela com Lob
SQL> CREATE TABLE LOB8 (CD_LOB NUMBER, TX_LOB CLOB);
Tabela criada.
SQL> INSERT INTO LOB8
2 SELECT CD_LONGA, TX_LONGA
3 FROM LONGA;
SELECT CD_LONGA, TX_LONGA
*
ERRO na linha 2:
ORA-00997: illegal use of LONG datatype
Fizemos, em seguida, uma tentativa de realizar uma conversão implícita da coluna Long para a coluna Lob e
recebemos o erro reportado na Listagem 2.115.
94 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Listagem 2.116 – Convertendo Long para Lob
SQL> INSERT INTO LOB8
2 SELECT CD_LONGA, TO_LOB(TX_LONGA)
3 FROM LONGA;
33 linhas criadas.
SQL> COMMIT;
Validação completa.
Neste caso, a conversão foi bem-sucedida e toda a tabela foi carregada.
Devemos estudar a possibilidade de estabelecer esta conversão, uma vez que as colunas do tipo Long serão
descontinuadas em uma versão futura do banco de dados (veja o tópico Características a Serem Removidas).
A conversão de colunas Long se dará para colunas do tipo Clob ou Blob. Para a conversão de colunas Long Raw,
devemos usar colunas do tipo Blob.
TO_MULTI_BYTE
Retorna <texto> com todos os seus caracteres single-byte convertidos para o seu correspondente multi-byte. Qualquer
caracter single-byte que não tenha correspondência é incluído na string de saída 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
função é equivalente a TRANSLATE…USING 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 número 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 numérico correspondente. O parâmetro <formato> tem a finalidade de indicar
como o texto está formatado.
Listagem 2.117 – To_Multi_Byte, To_Number e To_DsInterval
SQL> SELECT TO_MULTI_BYTE('TESTE') “MULTI”,
2
TO_NUMBER('R$123.000,00', 'L999G990D00',
3
'NLS_CURRENCY=R$') VALOR,
4
TO_DSINTERVAL('20 10:20:30.219') DSINT
5
FROM DUAL
6 /
MULTI
VALOR DSINT
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
95
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
----- -------- ----------------------------TESTE
123000 +000000020 10:20:30.219000000
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 parâmetro 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 parâmetro 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 são
especificados quando o banco de dados é criado e não 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 própria contrabarra ( \ ) devemos precedê-la com
outra contrabarra.
Listagem 2.118 – To_Timestamp, To_Timestamp_Tz, To_YmInterval
SQL> SELECT TO_TIMESTAMP('12/05/1932 10:32:45.067', 'DD/MM/YYYY HH24:MI:SS.FF') TMST,
2
TO_TIMESTAMP_TZ('12/05/1932 10:32 -3:00', 'DD/MM/YYYY HH24:MI TZH:TZM') TMSTZ,
3
TO_YMINTERVAL('22-10') YM
4
FROM DUAL;
TMST
TMSTZ
YM
--------------------------- ---------------------------------- ------------12/05/32 10:32:45,067000000 12/05/32 10:32:00,000000000 -03:00 +000000022-10
OUTRAS
Neste grupo de funções, veremos algumas funções que não se enquadram na classificação anterior. Tanto a sintaxe
quanto a apresentação das funções serão feitas em ordem alfabética.
Sempre que possível, nos exemplos, usaremos a tabela Dual (do dicionário de dados do Oracle).
BFILENAME
Retorna um locator associado a um arquivo binário presente no ambiente servidor. O objetivo é estabelecer uma
ligação 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Sintaxe 2.25 – Funções Outras
COALESCE
Esta função retorna a primeira expressão não nula da lista. Se todas as expressões forem Null, o resultado será Null.
DECODE
Compara <expressão> a cada valor do parâmetro <compara> e retorna <resultado> se a expressão fornecida for
igual ao parâmetro <compara>. Se toda a lista for pesquisada e <expressão> não for igual a nenhum dos parâmetros
<compara> fornecidos, o resultado da função é o conteúdo do parâmetro <default>, que se não for informado
causará um resultado Null.
DUMP
Retorna um valor VARCHAR2 contendo o tipo de dado, comprimento (em bytes) e a representação interna da expressão.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
97
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
O parâmetro <formato> indica o formato no qual o valor da expressão deve ser apresentado. Os formatos válidos
estão presentes na Tabela 2.05 a seguir.
Tabela 2.05 – Formatos válidos para Dump
Formato
Descrição
8
Retorna o resultado em notação octal.
10
Retorna o resultado em notação decimal.
16
Retorna o resultado em notação hexadecimal.
17
Retorna o resultado como caracteres simples.
Os argumentos <inicio> e <comprimento> podem ser combinados para determinar que parte da representação
interna deve ser apresentada. O default é retornar a representação interna inteira na notação decimal.
Listagem 2.119 – Bfilename, Coalesce, Decode e Dump
SQL> SELECT COALESCE(LENGTH(''), NULL, 235*21) COALESCE,
2
DECODE('&P1', 'F', 'FEMININO',
3
'M', 'MASCULINO',
4
'NÃO IDENTIFICADO') DECODE,
5
DUMP('&P2', 16) DUMP
6
FROM DUAL;
Entre o valor para p1: F
antigo
2:
DECODE('&P1', 'F', 'FEMININO',
novo
2:
DECODE('F', 'F', 'FEMININO',
Entre o valor para p2: abc
antigo
5:
DUMP('&P2', 16) DUMP
novo
5:
DUMP('abc', 16) DUMP
COALESCE DECODE
DUMP
-------- -------- ---------------------4935 FEMININO Typ=96 Len=3: 61,62,63
EMPTY_BLOB OU EMPTY_CLOB
Retorna um locator vazio. Pode ser usado para dar valor inicial a uma variável ou coluna. Empty significa que o
Lob está inicializado mas não preenchido com dados.
Listagem 2.120 – Empty_Blob e Empty_Clob
SQL> CREATE TABLE TESTE_LOB (COL1 BLOB, COL2 CLOB);
Tabela criada.
SQL> INSERT INTO TESTE_LOB
2
VALUES (EMPTY_BLOB(), EMPTY_CLOB());
1 linha criada.
EXISTSNODE
Esta função determina se existe uma estrutura hierárquica (passada como parâmetro) no documento especificado.
O retorno da função será zero se a estrutura não existir e > 0 se for encontrada.
Listagem 2.121 – Exists_Node
SQL> CREATE TABLE TESTE_XML
2 (C_XML
SYS.XMLTYPE,
3
C_URI
SYS.URITYPE);
Tabela criada.
SQL>
2
3
4
INSERT INTO TESTE_XML (C_XML)
VALUES
(SYS.XMLTYPE.CREATEXML('<Endereço>
<Rua>Candelária</Rua>
98 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
5 <Numero>60</Numero>
6 <Andar>7</Andar>
7 <Bairro>Centro</Bairro>
8 <Cidade>Rio de Janeiro</Cidade>
9 <Estado>RJ</Estado>
10 </Endereço>
11 '));
1 linha criada.
SQL> SELECT ROWNUM, EXISTSNODE(C_XML, '/Endereco/Numero') Nó
2
FROM TESTE_XML;
ROWNUM
NÓ
------- ------1
1
No exemplo da Listagem 2.121 criamos uma tabela com uma coluna do tipo SYS.XMLTYPE (verifique este Datatype
no Capítulo 10). Como este tipo de coluna não é um tipo de dado escalar, é um objeto, para incluirmos a informação
precisamos da ajuda do método 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 função Existsnode verifica a existência de uma estrutura. No nosso caso poderíamos ter procurado por qualquer
elemento subordinado a endereço. O único cuidado é que a informação é case sensitive, e desta forma o parâmetro
‘/endereco/numero’ não é encontrado.
O estudo sobre objetos (necessário para que você consiga entender o teste) será realizado no Capítulo 4.
EXTRACT
A função Extract retorna um objeto do tipo XML que contenha a hierarquia pesquisada. Podemos, então, aplicar
um método deste tipo de objeto e visualizar o conteúdo, por exemplo.
Listagem 2.122 – Extract
SQL> SELECT EXTRACT(C_XML, '/Endereco/Numero').GETSTRINGVAL() TEXTO
2
FROM TESTE_XML;
TEXTO
------------------<Numero>60</Numero>
Getstringval é um método do objeto Sys.XmlType.
O estudo sobre objetos (necessário para que você consiga entender o teste) será realizado no Capítulo 4.
GREATEST
Retorna a maior <expressão> da lista de valores. Todas as expressões após a primeira são convertidas para o tipo de
dado da primeira antes de a comparação ser feita. O Oracle não completa as expressões para que fiquem do mesmo
tamanho. Expressões do tipo caracter levarão em consideração o charset do banco de dados.
LEAST
Retorna a menor <expresão> da lista de valores. Todas as expressões após a primeira são convertidas para o tipo de
dado da primeira antes de a comparação ser feita. O Oracle não completa as expressões para que fiquem do mesmo
tamanho. Expressões do tipo caracter levarão em consideração o charset do banco de dados.
NLS_CHARSET _DECL_LEN
Retorna o comprimento da coluna em caracteres no charset fornecido. O parâmetro <tamanho> é fornecido em
bytes. O parâmetro <charset _id> corresponde ao número identificador do charset .
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
99
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
NLS_CHARSET _ID
Retorna o número identificador do charset fornecido pelo parâmetro <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 inválidos causam o retorno de Null.
NLS_CHARSET _NAME
Retorna o nome do charset correspondente ao número identificador fornecido por <charset _id>. Se o identificador
fornecido não tiver correspondência com um charset válido, a função retorna Null.
Listagem 2.123 – Greatest, Least, Nls_Charset…
SQL> SELECT GREATEST('João', 'Januário', 'Joana', 'Jeferson') “MAIOR”,
2
LEAST('João', 'Januário', 'Joana', 'Jeferson') “MENOR”,
3
NLS_CHARSET_DECL_LEN(200, NLS_CHARSET_ID('JA16EUCFIXED')) “DECL_LEN”,
4
NLS_CHARSET_ID('JA16EUC') “ID”,
5
NLS_CHARSET_NAME (2) “NAME”
6
FROM DUAL
7 /
MAIO MENOR
DECL_LEN
ID NAME
---- -------- -------- ------- -----João Januário
100
830 WE8DEC
NULLIF
Esta função compara <expressão1> e <expressão2>. Se forem iguais será retornado Null, e caso contrário será
retornada <expressão1>.
NVL
Se <expressão1> for Null, a função retornará <expressão2>, e caso contrário será retornado o próprio valor de <expressão1>.
Preferencialmente as duas expressões devem ser de mesmo tipo. Caso não sejam, o Oracle converterá <expressão2>
para o tipo de <expressão1>. O tipo de dado retornado será o tipo de <expressão1> (exceto se <expressão1> for de
um dos tipos de dado caracter, pois neste caso o tipo de dado do retorno será Varchar2).
NVL2
Se <expressão1> não for null retornará <expressão2>. Se <expressão1> for null, retornará <expressão3>. O
argumento <expressão1> pode ser de qualquer tipo. Os argumentos <expressão2> e <expressão3> podem ser de
qualquer tipo exceto Long.
Listagem 2.124 – NULLIF, NVL, NVL2
SQL> SELECT NULLIF(120, 154) NULLIF,
2
NVL(NULL, 'RETORNO') NVL,
3
NVL2('EXPRESSÃO1', 'EXPRESSÃO2', 'EXPRESSÃO3') NVL2
4
FROM DUAL;
NULLIF NVL
NVL2
------- ------- ---------120 RETORNO EXPRESSÃO2
SYS_CONNECT_BY_PATH
Válido apenas para queries hierárquicas. Retorna o caminho do valor da coluna a partir do nó raiz. Tanto o parâmetro
<coluna> quanto o parâmetro <texto> podem ser dos tipos CHAR, VARCHAR2, NCHAR e NVARCHAR2.
100 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Listagem 2.125 – SYS_CONNECT_BY_PATH
SQL> SELECT CD_DEPTO, CD_DEPTO_CTB, SYS_CONNECT_BY_PATH (CD_DEPTO, '/') PATH
2
FROM DEPTO
3 CONNECT BY PRIOR CD_DEPTO = CD_DEPTO_CTB
4 START WITH CD_DEPTO = 'A00';
CD_
--A00
B01
C01
D01
D11
D21
E01
E11
E21
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 capítulo.
SYS_CONTEXT
Retorna o valor do atributo informado como parâmetro e associado com o “context namespace”.
A tabela a seguir apresenta os atributos válidos para a função considerando-se o namespace default USERENV.
Podemos criar nossos próprios namespaces usando o package DBMS_SESSION.
O objetivo de um namespace é criarmos uma área associada à sessão do usuário para armazenamento de informações,
que podem vir a ser usadas em aplicações.
Tabela 2.06 – Atributos para Sys_Context
Formato
Descrição
Nls_territory
Retorna o Território.
Nls_currency
Retorna o símbolo financeiro local.
Nls_calendar
Retorna o calendário utilizado para determinação de datas.
Nls_date_format
Retorna o formato corrente para datas.
Nls_date_language
Retorna a linguagem usada para dias da semana, meses e assim por diante (em datas).
Nls_sort
Indica se a ordenação é baseada em ordem lingüística ou binária.
Session_user
Retorna o nome do usuário que está logado.
Current_user
Retorna o nome do usuário da sessão 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
Retorna o ID do schema corrente.
Session_userid
Retorna o ID do usuário conectado.
Ip_address
Obtém o endereço de IP de um cliente se este estiver conectado ao Oracle usando o protocolo TCP-IP.
Current_userid
Retorna o ID do usuário da sessão corrente.
Listagem 2.126 – SYS_CONTEXT
SQL> SELECT SYS_CONTEXT('USERENV', 'NLS_TERRITORY')
2 FROM DUAL;
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
101
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
SYS_CONTEXT('USERENV','NLS_TERRITORY')
-------------------------------------BRAZIL
SYS_DBURIGEN
Esta função recebe como parâmetro 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 referência 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 parâmetro ‘text( )’.
SYS_GUID
Gera e retorna um identificador único global (RAW) composto de 16 bytes.
Listagem 2.127 – SYS_DBURIGEN e SYS_GUID
SQL> SELECT SYS_DBURIGEN(CD_DEPTO) URI,
2
SYS_GUID() GUID
3
FROM DEPTO
4 WHERE CD_DEPTO IN ('A00', 'D11');
URI(URL, SPARE)
----------------------------GUID
----------------------------DBURITYPE('/PUBLIC/DEPTO/ROW[CD_DEPTO=''D11'']/CD_DEPTO', NULL)
8E164AF4A9A54218AA21144834232696
DBURITYPE('/PUBLIC/DEPTO/ROW[CD_DEPTO=''A00'']/CD_DEPTO', NULL)
DF067895682041B9842A20C3DFFC0FF2
SYS_TYPEID
Esta função retorna o typeid do mais específico tipo do parâmetro. Uma vez que esta função está totalmente ligada
à concepção de objetos, somente será estudada no Capítulo 4.
SYS_XMLGEN
Esta função retorna uma instância do tipo SYS.XMLType contendo um documento XML. A <expressão> pode ser
um valor escalar, um tipo definido pelo usuário ou uma instância de um XMLType.
Se <expressão> for escalar o resultado será um elemento XML contendo o valor escalar. Se a expressão for um tipo
do usuário, a função mapeará os atributos do tipo do usuário para elementos XML. Se <expressão> for uma instância
XMLType, a função incluirá o documento em um elemento XML cuja tag default é ROW.
Listagem 2.128 – SYS_XMLGEN
SQL> SELECT SYS_XMLGEN ('TESTE')
2
FROM DUAL;
SYS_XMLGEN('TESTE')()
--------------------XMLTYPE()
Observe que o resultado desta função é um objeto do tipo XMLType e não podemos visualizar diretamente seu
conteúdo. Para isto devemos usar um método que liste seu conteúdo. Veja o próximo exemplo.
Esta função será melhor compreendida depois do estudo sobre objetos no Capítulo 4.
102 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
SYS_XMLAGG
Agrega todos os documentos XML (ou fragmentos) representados por <expressão> e produz um único documento
XML. Ele adiciona um novo elemento com o nome default de ROWSET.
Listagem 2.129 – SYS_XMLAGG
SQL> SELECT SYS_XMLAGG(SYS_XMLGEN('teste')).getClobVal()
2 FROM dual;
SYS_XMLAGG(SYS_XMLGEN('TESTE')).GETCLOBVAL()
-------------------------------------------<?xml version=”1.0"?>
<ROWSET>
<ROW>teste</ROW>
</ROWSET>
UID
Retorna um número inteiro que corresponde e identifica o usuário corrente.
USER
Retorna o usuário corrente com o tipo de dado Varchar2.
Listagem 2.130 – Exemplo de Nvl, Uid e User
SQL> SELECT NVL(NULL, 'VALOR') “NULL”,
2
NVL(123, 456) “COM VALOR”,
3
UID, USER
4
FROM DUAL;
NULL COM VALOR
UID USER
----- --------- ------- -----VALOR
123
67 DESENV
USERENV
Retorna informações sobre a sessão corrente.
Os valores válidos para o parâmetro <opção> são os seguintes:
♦ Isdba – Retorna True se a sessão corrente foi habilitada como DBA. Caso contrário, retorna False.
♦ Language – Retorna a linguagem, território e charset atualmente em uso na sessão.
♦ Terminal – Retorna um identificador do sistema operacional para o terminal em uso na sessão corrente.
♦ Sessionid – Retorna o identificador de auditoria da sessão. Para que este valor seja significativo, o parâmetro de
inicialização do banco de dados Audit_Trail deve estar com o valor True.
♦ Lang – Retorna a abreviação ISO para o nome da linguagem.
♦ Instance – Retorna o número identificador da instância corrente.
♦ Entryid – Retorna o identificador da entrada na trilha de auditoria. Para que este valor seja significativo, o
parâmetro de inicialização do banco de dados Audit_Trail deve estar com o valor True.
♦ Client_Info – Retorna até 64 bytes de informação obtidos da sessão do usuário e gravados pelo pacote
DBMS_APPLICATION_INFO.
VSIZE
Retorna o número de bytes usados para armazenar a representação interna de <expressão>.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
103
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 2.131 – Exemplo de Userenv e Vsize
SQL> SELECT USERENV('LANGUAGE') “NLS_LANGUAGE”,
2
VSIZE('JANUÁRIO') “TAMANHO”
3
FROM DUAL;
NLS_LANGUAGE
TAMANHO
---------------------------------------- ------------------BRAZILIAN PORTUGUESE_BRAZIL.WE8MSWIN1252
8
EXERCÍCIOS
2.41) Deseja-se uma relação contendo matrícula, nome, idade atual e tempo de serviço para aqueles funcionários
que tenham sido admitidos com menos de 21 anos.
2.42) Deseja-se uma relação contendo nome, sobrenome, data e hora do nascimento, mês e ano de admissão em
algarismos romanos e o salário editado (contendo moeda) para todos os funcionários que possuam mais de quatro
vogais em seu sobrenome.
2.43) Deseja-se uma relação contendo nome completo do funcionário (centralizado sob o título Nome), data de
nascimento formatada com hora, minuto e segundo (alinhado à direita sob o título Nascimento), o código do
departamento (alinhado à esquerda e de tal forma que o título Depto seja apresentado).
2.44) Deseja-se uma relação contendo o nome e sobrenome de todos os funcionários, sendo que todas as vogais
devem ser apresentadas em minúsculas e as consoantes em maiúsculas. As informações sobre salário devem ser
criptografadas da seguinte forma: 22 será transformado na letra Z; 0,1 serão transformados na letra A; 2,3 serão
transformados na letra B; 4,5,6 serão transformados na letra C, e os demais números na letra D.
2.45) Deseja-se uma relação contendo nome completo do funcionário usando letras maiúsculas e minúsculas, sexo
por extenso, número de dias entre a data de admissão e o último dia do mês da data corrente e o valor do salário
(se houver definido; caso contrário, 0) formatado. Esta relação deve ser ordenada do menor salário para o maior.
2.46) Deseja-se uma relação com as seguintes informações: linguagem em uso no banco de dados, o conjunto de
caracteres nacionais e o do banco de dados, o endereço da linha do funcionário com matrícula 100, a data de hoje
(com dia, mês e ano por extenso), a data da próxima quinta-feira, o seno, cosseno e tangente do ângulo de 30 graus.
2.47) Deseja-se realizar o enquadramento dos funcionários da empresa em uma faixa salarial. O grupo será dividido
em 10 faixas iguais, sendo o intervalo salarial apreciável entre 1500 e 5000. Determine a faixa de cada funcionário.
2.48) Deseja-se obter o valor numérico e nome da zona de tempo da sessão e do banco de dados.
2.49) Receba um timestamp como parâmetro e sua zona de tempo e retorne este timestamp convertido para o
horário de Greenwich.
FUNDAMENTOS EM: FUNÇÕES ANALÍTICAS
PRÉ-REQUISITOS
♦ Conhecimentos básicos do comando Select.
METODOLOGIA
♦ Apresentação e descrição das funções que efetuam cálculos sobre um conjunto de valores.
TÉCNICA
♦ Apresentação de exemplos que desenvolvam as sintaxes descritas em uma seqüência que analise as opções sintáticas disponíveis, quando possível.
104 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
INTRODUÇÃO
São programas que têm a finalidade de efetuar cálculos sobre um conjunto de linhas. Elas diferem das funções de
agregação no sentido de retornarem múltiplas linhas para cada grupo.
O grupo de linhas é chamado de “window” e é definido pela cláusula “analytic”. A janela determina o intervalo de
linhas para que os cálculos sejam realizados para a “current row”. Esta janela pode ser definida em função de
quantidade de linhas ou em função de um intervalor lógico (por exemplo tempo).
As funções analíticas correspondem à penúltima etapa de execução de uma query (a última corresponde à cláusula
ORDER BY). Desta forma as funções analíticas somente podem ser usadas na cláusula SELECT ou na ORDER BY.
O argumento para estas funções pode ser o nome de uma coluna ou uma expressão (combinação de nomes de
colunas, constantes ou outras funções).
A Tabela 2.07 a seguir relaciona todas as funções analíticas. Você vai observar que diversas funções desta lista já
apareceram, no grupo de funções de agregação. O que as torna analíticas é o uso da palavra chave OVER seguida
das cláusulas que aparecem no início da Sintaxe 2.26.
Tabela 2.07 – Relação de funções analíticas
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 funções com (*) permitem a sintaxe completa da cláusula analítica.
FUNÇÕES SOMENTE ANALÍTICAS
Neste grupo apresentaremos aquelas funções ainda não estudadas no conjunto de funções de agregação. Na Sintaxe
2.26 apresentada abaixo encontramos as novas funções e aquelas já estudadas mas que possuem uma sintaxe diferenciada.
As seguintes cláusulas são encontradas na “analytic_clause”:
♦ 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 cálculo do resultado da função, ou seja, a função é
aplicada a todas as linhas da janela. A palavra ROWS indica, ainda, que a determinação da janela será feita em
unidades físicas (linhas). Não podemos especificar esta cláusula 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 cálculo do resultado da função, ou seja, a função é
aplicada a todas as linhas da janela. A palavra RANGE especifica a janela como um conjunto lógico. Não podemos
especificar esta cláusula a menos que usemos ORDER BY.
♦ Unbounded Preceding – esta opção indica que a “window” começa na primeira linha da partição. Não pode ser
usado como ponto de fim de especificação.
♦ Between … And – com esta cláusula podemos indicar um ponto de início e um ponto de término da janela. A
primeira expressão determina o ponto inicial e a segunda expressão determina o ponto final.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
105
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Sintaxe 2.26 – Funções Analíticas
♦ Current Row – se esta expressão for usada como ponto inicial indica que a “window” começa na linha ou valor
corrente (dependendo da especificação ROW ou RANGE, respectivamente). Neste caso o ponto final não pode
ser <value_expr> PRECEDING. Se especificado como ponto final, indica que a janela termina na linha corrente
ou valor (dependendo da especificação ROW ou RANGE, respectivamente). Neste caso o ponto inicial não pode
ser <value_expr> FOLLOWING.
♦ <value_expr> Preceding – se esta expressão for usada como ponto final, então o ponto inicial também deverá
ser <value_expr> Preceding. Se especificarmos ROWS, <value_expr> é um offset físico, numérico, positivo. Se
<value_expr> for usada como ponto de início deve identificar uma linha antes do ponto final. Se especificarmos
RANGE, <value_expr> corresponde a um offset lógico, numérico e positivo ou um intervalo literal. Somente
poderemos especificar uma expressão na cláusula ORDER BY e se <value_expr> for numérica, a <expressão> da
106 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
cláusula ORDER BY deve ser um NUMBER ou DATE. Se <value_expr> for um intervalo, a <expressão> da cláusula
ORDER BY deve ser do tipo DATE.
♦ Unbounded Following – indica que a janela termina na última linha da partição. Esta é uma especificação de
ponto final e não pode ser usada como ponto de início.
♦ <value_expr> Following – se esta expressão for usada como ponto inicial, então o ponto final também deverá
ser <value_expr> Following. Se especificarmos ROWS, <value_expr> é um offset físico, numérico, positivo. Se
<value_expr> for usada como ponto de início deve identificar uma linha antes do ponto final. Se especificarmos
RANGE, <value_expr> corresponde a um offset lógico, numérico e positivo ou um intervalo literal. Somente
poderemos especificar uma expressão na cláusula ORDER BY e se <value_expr> for numérica, a <expressão> da
cláusula ORDER BY deve ser um NUMBER ou DATE. Se <value_expr> for um intervalo, a <expressão> da cláusula
ORDER BY deve ser do tipo DATE.
♦ Partition By – com esta cláusula podemos particionar o resultado da query em grupos baseados em um ou mais
valores de <value_expr>. Se a cláusula for omitida, haverá somente um grupo. Podemos especificar mais de uma
função analítica na mesma query, cada uma delas contendo cláusulas Partition By próprias.
Se omitirmos o uso da cláusula “windowing”, o default é RANGE BETWEEN UNBOUNDED PRECEDING AND
CURRENT ROW.
Se você removeu as linhas criadas no banco de dados para teste das funções de grupo refaça o exemplo da Listagem
2.60 para que estas linhas sejam restauradas e possamos testar este novo grupo de funções.
FIRST_VALUE
É uma função analítica que retorna o primeiro valor em um conjunto ordenado de valores.
Esta função não pode ser usada por qualquer das outras funções analíticas como parâmetro (na <expressão>), isto
é, não pode ser aninhada.
Listagem 2.132 – First_Value
SQL> SELECT cd_depto, nr_cargo, vl_sal,
2
first_value(nr_cargo) over (order by vl_sal DESC nulls last
4
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) TERCEIRA
5
FROM FUNC
6
WHERE CD_DEPTO = 'A02'
7 /
CD_
NR_CARGO
VL_SAL
TERCEIRA
--- ---------- ---------- ---------A02
21
300
21
A02
45
200
21
A02
65
200
21
A02
32
100
21
A02
8
100
21
A02
32
100
21
A02
21
A02
12
21
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 função First_Value a cada linha.
Neste primeiro exemplo em função da restrição especificada UNBOUNDED PRECEDING e UNBOUNDED FOLLOWING, indicamos que todas as linhas selecionadas fazem parte da janela. Como a ordenação ocorre em função
de salário DESC, o primeiro cargo de cada grupo é o cargo 21, que por este motivo aparece em todos os resultados.
LAG
É uma função analítica 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 posição de cursor, esta função fornece o acesso a uma
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
107
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
linha específica anterior a esta posição. Caso não seja especificado offset, o default é 1. O valor <default> é retornado
se o offset apontar para fora do escopo da “window”. Se este parâmetro não for informado, o default é Null.
Esta função não pode ser usada por qualquer das outras funções analíticas como parâmetro (na <expressão>), isto
é, não pode ser aninhada.
Listagem 2.133 – Lag
SQL> SELECT cd_depto, nr_cargo, vl_sal,
2
LAG(VL_SAL)
3
over (order by NR_CARGO ASC nulls last) ANTERIOR
4
FROM FUNC
5
WHERE CD_DEPTO = 'A02'
6 /
CD_
NR_CARGO
VL_SAL
ANTERIOR
--- ---------- ---------- ---------A02
8
100
A02
12
100
A02
21
300
A02
32
100
300
A02
32
100
100
A02
45
200
100
A02
65
200
200
A02
200
A função LAG não permite a sintaxe completa da cláusula “analytic”, e desta forma, não determinamos a janela.
No exemplo a função traz o salário anterior em relação à ordenação de NR_CARGO, ou seja, para o funcionário
com cargo 45 e salário 200, a função apresentou o salário 100 que corresponde ao salário do funcionário com cargo
32 (imediatamente anterior ao funcionário com cargo 45).
LAST_VALUE
É uma função analítica que retorna o último valor em um conjunto ordenado de valores.
Esta função não pode ser usada por qualquer das outras funções analíticas como parâmetro (na <expressão>), isto
é, não pode ser aninhada.
Listagem 2.134 – Last_Value
SQL> SELECT cd_depto, nr_cargo, vl_sal,
2
LAST_VALUE(NR_CARGO)
3
over (order by VL_SAL ASC nulls last
4
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) LAST_VALUE
5
FROM FUNC
6
WHERE CD_DEPTO = 'A02';
CD_
NR_CARGO
VL_SAL LAST_VALUE
--- ---------- ---------- ---------A02
32
100
32
A02
32
100
8
A02
8
100
45
A02
45
200
65
A02
65
200
21
A02
21
300
A02
12
A02
12
12
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 função retorna o último valor da seqüência, será retornado o segundo valor de cada seqüência.
LEAD
É uma função analítica 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 posição de cursor, esta função fornece o acesso a uma
108 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
linha específica posterior a esta posição. Caso não seja especificado offset, o default é 1. O valor <default> é retornado
se o offset apontar para fora do escopo da “window”. Se este parâmetro não for informado, o default é Null.
Esta função não pode ser usada por qualquer das outras funções analíticas como parâmetro (na <expressão>), isto
é, não pode ser aninhada.
NTILE
É uma função analítica que divide um conjunto ordenado de dados em faixas, de acordo com <expressão> e
associa o número da faixa correspondente a cada linha. As faixas (buckets) são numeradas de 1 até <expressão>,
que deve ser uma constante positiva (para cada partição).
Se <expressão> for maior que o número de linhas as faixas serão preenchidas de uma em uma até a quantidade de
linhas, ficando as demais vazias.
Esta função não pode ser usada por qualquer das outras funções analíticas como parâmetro (na <expressão>), isto
é, não pode ser aninhada.
Listagem 2.135 – Ntile
SQL> SELECT cd_depto, nr_cargo, vl_sal,
2
NTILE(3)
3
over (order by NR_CARGO ASC nulls last) NTILE
4
FROM FUNC
5
WHERE CD_DEPTO = 'A02';
CD_
NR_CARGO
VL_SAL
NTILE
--- ---------- ---------- ---------A02
8
100
1
A02
12
1
A02
21
300
1
A02
32
100
2
A02
32
100
2
A02
45
200
2
A02
65
200
3
A02
3
No exemplo a lista de cargos foi classificada de acordo com a quantidade de faixas recebida como parâmetro e da
ordenação estabelecida. Indicamos a determinação de 3 faixas. Os cargos foram distribuídos 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 função analítica que calcula a razão entre um valor e a soma de um conjunto de valores. Se o parâmetro
<expressão> for null o resultado da função também será null.
O conjunto de valores é determinado por <query_partition_clause>. Caso seja omitido será considerada uma única
partição composta de todas as linhas retornadas pela query.
Esta função não pode ser usada por qualquer das outras funções analíticas como parâmetro (na <expressão>), isto
é, não pode ser aninhada.
Listagem 2.136 – Ratio_to_Report
SQL> SELECT cd_depto, nr_cargo, vl_sal,
2
RATIO_TO_REPORT(VL_SAL)
3
over (PARTITION BY CD_DEPTO) RATIO
4
FROM FUNC
5
WHERE CD_DEPTO IN ('A02', 'A00', 'B01');
CD_
NR_CARGO
VL_SAL
RATIO
--- ---------- ---------- ---------A00
66
5275 ,410505837
A00
58
4650 ,361867704
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
109
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
A00
A02
A02
A02
A02
A02
A02
A02
A02
B01
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 incluímos 3 departamentos para que pudéssemos realizar o particionamento dos dados em relação
a estes departamentos. Isto significa que o valor de salário para os funcionários do departamento A00 foi dividido
por 12850 (5272+4650+2925) para cálculo da razão (Ratio). Observe que, no caso dos funcionários do departamento
A02, os salários foram divididos por 1000 (que corresponde à soma dos salários não nulos), e isto significa que os
Nulls foram ignorados para efeito de cálculo.
ROW_NUMBER
É uma função analítica que associa um número único para cada linha à qual esta é aplicada (cada linha da partição
ou retornada pela query), na ordem especificada pela cláusula Order By, começando com 1.
Esta função não pode ser usada por qualquer das outras funções analíticas como parâmetro (na <expressão>), isto
é, não pode ser aninhada.
Listagem 2.137 – Row_Number
SQL> SELECT cd_depto, nr_cargo, vl_sal,
2
ROW_NUMBER()
3
over (PARTITION BY CD_DEPTO ORDER BY NR_CARGO) ROW_NUMBER
4
FROM FUNC
5
WHERE CD_DEPTO IN ('A02', 'A00', 'B01');
CD_
NR_CARGO
VL_SAL ROW_NUMBER
--- ---------- ---------- ---------A00
58
4650
1
A00
58
2925
2
A00
66
5275
3
A02
8
100
1
A02
12
2
A02
21
300
3
A02
32
100
4
A02
32
100
5
A02
45
200
6
A02
65
200
7
A02
8
B01
61
4125
1
Neste exemplo o particionamento foi, novamente, realizado em relação a departamento, ou seja, temos três grupos,
um para cada departamento. Em cada grupo as linhas foram ordenadas por cargo e receberam um número crescente,
começando em 1 e incremento de 1.
FUNÇÕES DE AGREGAÇÃO COM USO ANALÍTICO
Uma vez que já estudamos as funções de agregação, faremos apenas alguns exemplos de uso destas funções com a
cláusula “analytic”.
Listagem 2.138 – Avg, Count, Max e Min
SQL> SELECT cd_depto,
2
count(*)
3
4
avg(nr_cargo)
5
6
max(nr_cargo)
7
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,
110 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
8
9
10
11
min(nr_cargo) over (ORDER BY NR_CARGO NULLS LAST
RANGE 10 PRECEDING) MIN
FROM FUNC
WHERE CD_DEPTO = 'A02';
CD_ NR_CARGO VL_SAL COUNT
AVG
MAX
MIN
--- -------- ------ ------ ------ ------ -----A02
8
100
2
8
8
8
A02
12
2
10
12
8
A02
21
300
1 13,667
21
12
A02
32
100
2
21
32
32
A02
32
100
2
21
32
32
A02
45
200
1
25
45
45
A02
65
200
1 30,714
65
65
A02
1 30,714
65
Neste exemplo utilizamos diversas alternativas de “window”. Analisemos separadamente:
♦ Count – para esta função 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 função não definimos o fim do intervalo, o que significa, por default, o cargo da linha corrente.
Unbounded Preceding indica a primeira linha como início 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
à expressão (8+12+21+32+32)/5, com resultado 21. Isto significa que a seleção é feita em relação ao valor (todas
as linhas com cargo <=32) e não a posicionamento físico.
♦ Max – para esta função utilizamos posicionamento físico, ou seja, o intervalo será composto de 3 linhas (em
relação à ordenação física) anteriores e a linha atual. Desta “window” é escolhido o maior valor.
♦ Min – para esta função 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.
Listagem 2.139 – Cume_Dist, Dense_Rank, First, Last, Percent_Rank
SQL> SELECT cd_depto, nr_cargo, vl_sal,
2
cume_dist()
over (partition by vl_sal
3
ORDER BY NR_CARGO NULLS LAST) CUME_DIST,
4
dense_rank()
over (partition by vl_sal
5
ORDER BY NR_CARGO DESC NULLS LAST) DENSE_RANK,
6
MAX(NR_CARGO)
KEEP (DENSE_RANK FIRST ORDER BY NR_CARGO ASC NULLS LAST)
7
over (PARTITION BY VL_SAL) FIRST,
8
MIN(NR_CARGO)
KEEP (DENSE_RANK LAST ORDER BY NR_CARGO ASC NULLS LAST)
9
over (PARTITION BY VL_SAL) LAST,
10
PERCENT_RANK ()
OVER (PARTITION BY VL_SAL
11
ORDER BY NR_CARGO DESC NULLS LAST) P_RANK,
12
PERCENTILE_CONT(.5) WITHIN GROUP (ORDER BY NR_CARGO ASC)
13
over (PARTITION BY VL_SAL) P_CONT,
14
PERCENTILE_DISC(.5) WITHIN GROUP (ORDER BY NR_CARGO ASC)
15
over (PARTITION BY VL_SAL) P_DISC,
16
RANK ()
OVER (PARTITION BY VL_SAL
17
ORDER BY NR_CARGO DESC NULLS LAST) RANK
18
FROM FUNC
19
WHERE CD_DEPTO = 'A02';
CD_ NR_CARGO VL_SAL CUME_DIST DENSE_RANK FIRST LAST P_RANK P_CONT P_DISC RANK
--- -------- ------ --------- ---------- ----- ----- ------ ------ ------ ----A02
8
100
,3333
2
8
32
1
32
32
3
A02
32
100
1
1
8
32
0
32
32
1
A02
32
100
1
1
8
32
0
32
32
1
A02
45
200
,5
2
45
65
1
55
45
2
A02
65
200
1
1
45
65
0
55
45
1
A02
21
300
1
1
21
21
0
21
21
1
A02
12
,5
1
12
0
12
12
1
A02
1
2
12
1
12
12
2
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
111
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Neste exemplo também utilizamos diversas funções de grupo. O resultado de cada uma delas deve ser analisado
considerando-se a cláusula analítica empregada.
♦ Cume_Dist – quando esta função é usada analiticamente ela não possui parâmetro, o valor comparado se refere ao
valor da expressão usada na cláusula ORDER BY aplicada à linha corrente. A cláusula Partition determina o universo
analisado. Desta forma, para a primeira partição temos 3 linhas (com salário 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 salário 100. No exemplo existem 4 “universos”: o universo das
linhas com salário 100, o das linhas com salário 200, o das linhas com salário 300 e o das linhas com salário Null.
♦ Dense_Rank – quando esta função é usada analiticamente ela não possui parâmetro. O valor comparado ou classificado
é aquele informado na cláusula ORDER BY aplicado à linha corrente. Considerando-se o universo das linhas com
salário 100 temos que o cargo 8 é o segundo na classificação e 32 é o primeiro, pois utilizamos a expressão DESC.
♦ First – o uso desta função analiticamente levará em consideração um universo de valores específico para cada
linha analisada. Com relação ao grupamento das linhas com salário 100, usamos ordenação por cargo; desta
forma a linha classificada como FIRST para este primeiro grupo foi aquela com cargo 8. Sobre esta linha aplicamos
a função max(nr_cargo). Para que o resultado fique mais “lógico” preencha mais uma coluna da tabela FUNC,
para as linhas com cd_depto = ‘A02’ e utilize esta coluna na função max para que os resultados fiquem diferenciados.
♦ Last – o uso desta função analiticamente levará em consideração um universo de valores específico para cada linha
analisada. Com relação ao grupamento das linhas com salário 100, usamos ordenação por cargo; desta forma as
linhas classificadas como LAST para este primeiro grupo foram aquelas com cargo 32. Sobre esta linha aplicamos
a função min(nr_cargo). Para que o resultado fique mais “lógico” preencha mais uma coluna da tabela FUNC, para
as linhas com cd_depto = ‘A02’ e utilize esta coluna na função min para que os resultados fiquem diferenciados.
♦ Percent_Rank – quando esta função é usada analiticamente ela não possui parâmetro, o valor comparado se
refere ao valor da expressão usada na cláusula ORDER BY aplicada à linha corrente. A cláusula Partition determina
o universo analisado. Desta forma para a primeira partição temos 3 linhas (com salário 100). Uma vez que
ordenamos por cargo descendentemente temos a classificação da seguinte forma: os dois cargos 32 ocupam as
posições 0 e 1, o cargo 8 ocupa a posição 2. Como resultado encontramos o denominador de todas as frações
deste grupo como sendo 2. Para o cargo 8 a razão é 2/2 que produz como resultado 1. Para as linhas com cargo
32 obteremos a primeira classificação, ou seja, 0/2, que produz como resultado zero.
♦ Percentile_Cont – a diferença desta função quando analítica é o particionamento, que produzirá 4 (no nosso
caso) grupos de interresse. Como primeiro passo devemos determinar a linha de interesse, usaremos, para efeito
de análise, um grupo com quantidade par de linhas (o grupo com salário 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 não existe, devemos aplicar
a fórmula 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 – não é feita a interpolação, o valor retornado será o primeiro em relação às linhas que atendem
ao percentual, ou seja, será o valor da linha FRN. Para o primeiro grupo (salário igual a 100), a linha RN é
possível 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 função não realiza interpolação, o resultado corresponde, sempre, à primeira linha,
e no caso deste grupo o cargo retornado para as duas é 45.
♦ Rank – a função Rank dá a posição relativa do valor na lista ordenada. A diferença em relação ao seu uso como
função de agregação é 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 classificação foi dada em função da ordenação descendente.
112 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
EXERCÍCIOS
2.50) Deseja-se saber (somente para os cargos 55) o salário do funcionário com grau de instrução imediatamente
inferior e superior ao seu; o resultado deve vir ordenado pelo nome do funcionário.
2.51) Ainda estudando uma forma de enquadramento salarial o departamento Pessoal deseja dividir o grupo em
três faixas, considerando ordenação decrescente de cargo. Apresente o enquadramento para os funcionários dos
departamentos A00 e D11 e ordene o resultado pelo nome do funcionário.
2.52) Deseja-se saber quanto o salário de cada funcionário representa (percentualmente) em relação ao seu próprio
departamento e em relação à empresa.
2.53) Deseja-se saber para cada funcionário:
a) o salário imediatamente anterior e posterior ao seu.
b) o cargo imediatamente anterior e posterior ao seu.
c) a classificação do salário do funcionário em relação à empresa e a seu departamento.
O resultado deve vir ordenado pelo nome do funcionário.
FUNDAMENTOS EM: REVISÃO DAS OPERAÇÕES RELACIONAIS
PRÉ-REQUISITOS
♦ Noções básicas da teoria relacional. Conhecimentos da sintaxe previamente estudada do comando Select.
METODOLOGIA
♦ Apresentação e descrição das operações da álgebra relacional e sua sintaxe correspondente no Oracle9i.
TÉCNICA
♦ Descrição da ação realizada pela operação da álgebra relacional com desenvolvimento de exemplo correspondente usando SQL do Oracle9i.
INTRODUÇÃO
A Álgebra Relacional possui oito operações (restrição, projeção, união, interseção, diferença, produto cartesiano,
junção e divisão) para operar conjuntos. Neste tópico, trataremos destas operações e como executá-las usando o
SQL do Oracle.
SELEÇÃO OU RESTRIÇÃO
A seleção é uma operação que restringe linhas. Supondo-se a existência de uma tabela F, as tuplas resultantes
seriam representadas por T Æ F [cargo=53]. Isto significa que o resultado T é uma relação que contém apenas as
rows de F que satisfazem à comparação indicada.
Para exemplificação, utilizaremos duas tabelas F e G criadas a partir da tabela Func, como apresentado na Listagem
2.140 a seguir.
Listagem 2.140 – Criação e preenchimento das tabelas F e G
SQL> CREATE TABLE F(MAT, NOME, DEPTO, CARGO, SALARIO)
2
AS SELECT CD_MAT, NM_FUNC, CD_DEPTO, NR_CARGO, VL_SAL
3
FROM FUNC
4
WHERE CD_DEPTO IN ('D11', 'D21')
5
AND NR_CARGO BETWEEN 53 AND 60;
Tabela criada.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
113
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
SQL> CREATE TABLE G(MAT, NOME, DEPTO, CARGO, SALARIO)
2
AS SELECT CD_MAT, NM_FUNC, CD_DEPTO, NR_CARGO, VL_SAL
3
FROM FUNC
4
WHERE CD_DEPTO IN ('D11', 'D21')
5
AND NR_CARGO BETWEEN 50 AND 54;
Tabela criada.
No Oracle, a operação “Seleção ou Restrição” é resolvida pela presença de uma cláusula Where que obtenha apenas
as linhas desejadas.
Listagem 2.141 – Seleção ou restrição
SQL> SELECT * FROM F
2
WHERE CARGO = 53;
MAT
----180
190
230
NOME
-----------MARIA
JAIRO
JOAQUIM
DEP CARGO SALARIO
--- ----- ------D11
53
2134
D11
53
2045
D21
53
2218
Observe que utilizamos o * (asterisco) para obter todas as colunas, uma vez que estamos restringindo apenas as linhas.
PROJEÇÃO
A projeção é uma operação que restringe colunas. Considerando-se a existência de uma tabela F, as tuplas resultantes
seriam representadas por T → F [cargo, depto]. Isto significa que o resultado T é uma relação que contém apenas as
colunas indicadas (cargo e depto). As rows duplicadas que seriam criadas são eliminadas.
No Oracle, esta operação pode ser resolvida utilizando-se a cláusula Distinct aplicada às colunas desejadas.
Listagem 2.142 – Projeção
SQL> SELECT DISTINCT DEPTO, CARGO FROM F;
Neste caso, a operação não estabelece restrição sobre as linhas selecionadas (não é definida nenhuma cláusula Where).
No SQL do Oracle, podemos realizar a combinação destas duas operações ao adicionarmos ao comando SELECT a
cláusula Where, juntamente com a definição das colunas na cláusula Select.
UNIÃO
A operação de união efetua uma soma de conjuntos eliminando as duplicidades. Considerando-se a existência das
duas tabelas F e G, as tuplas resultantes da união seriam representadas por T → F ∪ G. A união só pode ser efetuada
entre relações união-compatíveis.
No SQL do Oracle, os dois conjuntos participantes do processo de união são definidos dinamicamente através de
dois (ou mais) comandos Selects unidos por Union ou Union All.
Para que seja possível a realização do processo, algumas regras devem ser respeitadas:
♦ Todos os Selects envolvidos devem possuir o mesmo número de colunas.
♦ As colunas correspondentes em cada um dos comandos devem ser de mesmo tipo.
♦ A cláusula Order By só se aplica ao resultado geral da união e deve utilizar indicação posicional em vez de expressões.
♦ As demais cláusulas que compõem um comando Select são tratadas individualmente nos comandos a que se aplicam.
♦ A cláusula Union elimina do resultado todas as linhas duplicadas. Esta operação pode realizar sort para garantir
a retirada das duplicatas.
114 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
♦ A cláusula Union All apresenta no resultado todas as linhas produzidas no processo de união, independente de
serem duplicatas ou não.
♦ Todos os operadores (Union, Intersect, etc.) possuem igual precedência.
♦ Em um comando Select composto de diversos operadores (Union, Intersect, etc.), o comando é executado da
esquerda para a direita. Podemos, neste caso, utilizar parênteses para alterar a ordem de execução.
Listagem 2.143 – União
SQL> SELECT NOME, DEPTO, CARGO, SALARIO
2
FROM F
3 UNION
4 SELECT NOME, DEPTO, CARGO, SALARIO
5
FROM G
6
ORDER BY 2, 1;
Neste primeiro exemplo, fizemos a união 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 também
existem em G.
Listagem 2.144 – União com repetição
SQL> SELECT NOME,
2
FROM F
3
WHERE CARGO
4
UNION ALL
5 SELECT NOME,
6
FROM G
7
WHERE CARGO
8
ORDER BY 2,
DEPTO, CARGO, SALARIO
= 53
DEPTO, CARGO, SALARIO
= 53
1;
No exemplo da Listagem 2.144, utilizamos cláusulas 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.
Listagem 2.145 – Uso do Union All
SQL> SELECT NOME,
2
FROM F
3
WHERE CARGO
4
UNION ALL
5 SELECT NOME,
6
FROM G
7
WHERE CARGO
8
UNION
9 SELECT NOME,
10
FROM F
11
WHERE DEPTO
12
ORDER BY 1;
DEPTO, SALARIO, 'ANALISTA PLENO'
= 52
DEPTO, SALARIO, 'ANALISTA SENIOR'
= 53
'DEPARTAMENTO 11', SALARIO, 'ANALISTA PLENO'
= 'D11'
Neste último exemplo de união, foram somados três 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 restrições não houve
necessidade de utilizarmos Union, uma vez que não haveria linhas duplicadas, tornando a operação mais eficiente,
não havendo necessidade de sort.
Este resultado foi unido ao terceiro conjunto, que tinha como restrição 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 funcionários Jairo e Maria estão duplicadas (mesmo nome e mesmo
salário). Isto ocorre porque a avaliação de duplicidade não se dá em relação a uma coluna em particular e sim em
relação 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 possível pois ambas são alfanuméricas, 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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
115
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
INTERSEÇÃO
A operação de interseção restringe o conjunto resultante às tuplas presentes em todos os conjuntos participantes
da operação. Considerando-se a existência de duas tabelas F e G, as tuplas resultantes da interseção seriam
representadas por T → F ∩ G. A interseção só pode ser efetuada entre relações união-compatíveis.
No SQL do Oracle, os dois conjuntos participantes do processo de interseção são definidos dinamicamente através
de dois (ou mais) comandos Selects unidos por Intersect.
As mesmas regras aplicáveis à união são válidas na interseção:
♦ Todos os Selects envolvidos devem possuir o mesmo número de colunas.
♦ As colunas correspondentes em cada um dos comandos devem ser de mesmo tipo.
♦ A cláusula Order By só se aplica ao resultado geral da interseção e deve utilizar indicação posicional em vez de expressões.
♦ As demais cláusulas que compõem um comando Select são tratadas individualmente nos comandos a que se aplicam.
♦ A cláusula Intersect elimina do resultado todas as linhas duplicadas. Esta operação pode realizar sort para garantir
a retirada das duplicadas.
♦ Todos os operadores (Union, Intersect, etc.) têm igual precedência.
♦ Em um comando Select composto de diversos operadores (Union, Intersect, etc.), o comando é executado da
esquerda para a direita. Podemos, neste caso, utilizar parênteses para alterar a ordem de execução.
Listagem 2.146 – Interseção
SQL> INSERT INTO F (MAT, NOME, DEPTO, SALARIO)
2
VALUES
(999, 'ELIZABET', 'D11', 2225);
1 linha criada.
SQL> SELECT NOME, DEPTO, SALARIO FROM F
2 INTERSECT
3 SELECT NOME, DEPTO, SALARIO FROM G;
No exemplo da Listagem 2.146, incluímos uma nova linha na tabela F (com matrícula 999), exatamente igual, em
relação às colunas Nome, Depto e Salario, à linha existente de matrícula 160. Na interseção, só é apresentada uma
linha para a funcionária Elizabet.
DIFERENÇA
A operação de diferença efetua uma subtração de conjuntos eliminando as duplicidades. Considerando-se a existência
das duas tabelas F e G, o resultado T é uma relação que contém as rows de F que não estão presentes em G. As tuplas
da diferença seriam representadas por T → F - G. A diferença só pode ser efetuada entre relações união-compatíveis.
Neste caso, a ordem em que a operação é realizada produz modificações no resultado.
No SQL do Oracle, os dois conjuntos participantes do processo de diferença são definidos dinamicamente através
de dois (ou mais) comandos Selects unidos pelo operador Minus.
As regras já apresentadas na união e na interseção devem ser obedecidas também na diferença.
Listagem 2.147 – Subtração
SQL> SELECT MAT, NOME, DEPTO, SALARIO FROM F
2 MINUS
3 SELECT MAT, NOME, DEPTO, SALARIO FROM G;
Neste primeiro exemplo, foi feita a diferença 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 diferença G - F para verificarmos que o
resultado depende da ordem da operação.
116 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Listagem 2.148 – Diferença
SQL> SELECT MAT, NOME, DEPTO, SALARIO FROM G
2 MINUS
3 SELECT MAT, NOME, DEPTO, SALARIO FROM F;
PRODUTO CARTESIANO
Um produto de conjuntos contém todos os elementos do primeiro conjunto concatenados com todos os elementos
do segundo conjunto. Considerando-se a existência das duas tabelas F e P, o resultado T é uma relação que contém
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 não altera o produto.
Listagem 2.149 – Tabela P
SQL> CREATE TABLE P(DEPTNO, GERENTE)
2
AS SELECT DEPTO.CD_DEPTO, FUNC.NM_FUNC
3
FROM DEPTO, FUNC
4
WHERE DEPTO.CD_GERENTE = FUNC.CD_MAT
5
AND DEPTO.CD_DEPTO IN ('A00', 'D11', 'D21');
Tabela criada.
SQL> SELECT * FROM P;
DEP
--D21
D11
A00
GERENTE
------EVA
IRACY
CRISTINA
No SQL do Oracle, os dois conjuntos participantes do processo de produto são definidos dinamicamente através
da cláusula Select (definindo as colunas a serem apresentadas no resultado) e da cláusula From, indicando as
tabelas a serem operadas.
Listagem 2.150 – Produto cartesiano
SQL> SELECT DEPTNO, GERENTE, MAT, NOME, SALARIO, DEPTO
2
FROM P, F
3
WHERE MAT BETWEEN 150 AND 200
4
ORDER BY DEPTNO;
Observe no resultado da Listagem 2.150 que a tabela P possui três linhas relativas aos departamentos A00, D11 e
D21. Cada uma destas linhas foi concatenada a cada uma das linhas da tabela F que atendesse à restrição de
matrícula entre 150 e 200.
Executando-se o comando da Listagem 2.150 veremos o resultado desta concatenação. Como a tabela P possuía
três linhas e a restrição sobre a tabela F resultou em seis linhas, o produto das duas tabelas gerou 18 linhas (3 x 6).
Observe, porém, que a coluna Depto (da tabela F) indica a que departamento aquele funcionário pertence. Na
mesma linha, estão presentes informações do departamento deptno e do funcionário depto. Quando estas informações
são iguais, significa que houve a concatenação da linha do funcionário com o seu departamento. Quando estas
informações são diferentes, significa que houve a concatenação da linha com um outro departamento qualquer.
Quando estabelecemos uma restrição que determine que linhas da tabela P devem ser concatenadas com que
linhas da tabela F, estamos determinando uma operação de Junção (ou Join).
JUNÇÃO OU JOIN
Uma operação de Join contém todos os elementos do primeiro conjunto concatenados a todos os elementos do
segundo conjunto que satisfaçam à regra de comparação indicada. Considerando-se a existência das duas tabelas
F e P, o resultado T é uma relação que contém as rows em F concatenadas às rows de P que satisfazem a comparação
entre os domínios indicados.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
117
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
As tuplas da junção seriam representadas por T → F [depto=deptno] P. A ordem dos fatores não altera o resultado
da junção.
No SQL do Oracle, os dois conjuntos participantes do processo de Join são definidos dinamicamente através da
cláusula Select (definindo as colunas a serem apresentadas no resultado), da cláusula From, indicando as tabelas a
serem operadas, e da cláusula Where, contendo a relação entre as tabelas.
Listagem 2.151 – Join
SQL> SELECT DEPTNO, GERENTE, MAT, NOME, SALARIO, DEPTO
2
FROM P, F
3
WHERE MAT BETWEEN 180 AND 270
4
AND DEPTNO = DEPTO
5
ORDER BY DEPTNO;
Neste primeiro exemplo da Listagem 2.151, as linhas de F foram concatenadas às linhas de P, porém atendendo à
restrição de que depto = deptno, garantindo que cada departamento seja concatenado exatamente a seus funcionários.
No exemplo da Listagem 2.152 a seguir, desejávamos obter informações sobre os gerentes dos departamentos. Na
tabela P temos o nome do gerente, e na tabela F temos o nome do funcionário. Nada mais natural, portanto, que
realizar um Join entre as tabelas de tal forma que a restrição fosse gerente = nome.
Listagem 2.152 – Join
SQL> SELECT MAT, NOME, SALARIO, DEPTO
2
FROM P, F
3
WHERE NOME = GERENTE;
Observe que não é necessário que façamos a seleção de colunas da tabela P. O que estabelece o produto é a presença
das duas tabelas na cláusula From e o que estabelece a restrição é a presença da cláusula Where determinando a
regra de junção.
Listagem 2.153 – Join
SQL> SELECT G.MAT, G.NOME. G.SALARIO
2
F.MAT, F.NOME. F.SALARIO, F.DEPTO
3
FROM F, P, F G
4
WHERE G.NOME
= GERENTE
5
AND F.DEPTO
= G.DEPTO
6
AND F.SALARIO > G.SALARIO;
Neste exemplo da Listagem 2.153, desejávamos obter informações relativas ao funcionário que tivesse vencimentos
superiores aos do gerente de seu departamento. Desta forma, numa mesma linha precisávamos de informações
referentes ao gerente e ao funcionário. Como ambos estão presentes na mesma tabela, precisamos utilizar alguns
“artifícios” para que não haja erros de sintaxe ao selecionarmos uma mesma coluna duas vezes. Façamos a análise
passo a passo do comando Select desenvolvido.
Iniciaremos a análise pela cláusula From. Nela são referenciadas três tabelas: a tabela P (que contém informações
sobre o departamento), a tabela F (que contém informações sobre o funcionário) e novamente a tabela F, agora
apelidada de G (que contém informações sobre o funcionário gerente). A partir do momento que apelidamos a
tabela F de G, para nós e para o Oracle consideraremos a existência de uma tabela G.
Na cláusula Select, definimos as informações que desejamos visualizar de cada uma das tabelas. Como as colunas
da tabela F e da tabela G são iguais, há necessidade de qualificarmos as informações. Desta forma, desejávamos
obter a matrícula, nome e salário do gerente (g.mat, g.nome e g.salario) e matrícula, nome, salário e departamento
do funcionário (f.mat, f.nome, f.salario e f.depto).
A cláusula Where é o que vai determinar as regras do relacionamento. Precisávamos garantir que o funcionário e
o gerente trabalhassem no mesmo departamento, pois a proposta era obter os funcionários que tivessem salário
superior ao de seu gerente. Assim, restringimos que os departamentos de ambas as tabelas fossem o mesmo (f.depto
= g.depto). Como segunda restrição desejávamos que o salário do funcionário fosse superior ao salário do gerente
118 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
(f.salario > g.salario). Como restrição final, precisávamos garantir que o funcionário gerente (obtido da tabela G)
fosse realmente gerente de um departamento. Esta informação só se acha presente na tabela P (por este motivo ela
foi acrescentada ao Join) e, portanto, igualamos g.nome à coluna Gerente.
Listagem 2.154 – Uso de Natural Join
SQL> SELECT DEPTNO, GERENTE, MAT, NOME, SALARIO, DEPTO
2
FROM P NATURAL JOIN F
3
WHERE MAT BETWEEN 180 AND 270
4
AND DEPTNO = DEPTO
5
ORDER BY DEPTNO;
DEP
--D11
D11
D11
D11
D21
D21
D21
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. Substituímos a vírgula da listagem
anterior pelas palavras Natural Join; outra forma aceita que também produziria os mesmos resultados seria Natural
Inner Join. Em ambos os exemplos utilizamos a condição de igualdade para que tivéssemos mais facilidade de
entendimento. Este tipo de Join é dito eqüijoin, isto é, usando a igualdade. A forma mais comum de junção entre
as duas tabelas é o uso do Inner Join com a condição de igualdade, ou seja, Inner Eqüijoin. Um Inner Join é aquele
em que somente serão selecionadas para o resultado aquelas linhas que existam em ambos os lados da operação.
Para o exemplo em estudo significa que somente aparecerão no resultado aquelas linhas de F em que depto esteja
preenchido com um valor existente em P. Observe que o departamento A00 não apareceu no resultado (não 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 não exista em P ou esteja vazio (NULL), não encontraremos
estas linhas no resultado do Join. Faça um teste desta situação. Esta é a regra do Inner Join.
Listagem 2.155 – Uso de Inner Join com On <condition>
SQL> SELECT DEPTNO, GERENTE, MAT, NOME, SALARIO, DEPTO
2
FROM P INNER JOIN F ON DEPTNO = DEPTO
3
WHERE MAT BETWEEN 180 AND 270
4
ORDER BY DEPTO;
Nesta sintaxe alternativa para o comando da Listagem 2.154 podemos separar as cláusulas relativas à ligação entre as
tabelas no ON <condition> e as demais cláusulas de filtragem na cláusula WHERE. Isto pode ser muito útil, principalmente
quando realizamos um Join envolvendo diversas tabelas e/ou quando a chave para relacionamento é constituída de
mais de uma coluna. Esta sintaxe torna visível as restrições relativas à junção e aquelas relativas a filtragem.
Listagem 2.156 – Uso de Cross Join
SQL> SELECT DEPTNO, GERENTE, MAT, NOME, SALARIO, DEPTO
2
FROM P CROSS JOIN F
3
WHERE MAT BETWEEN 150 AND 200
4
ORDER BY DEPTO;
Este exemplo da Listagem 2.156 produz exatamente o mesmo resultado daquele estudado na Listagem 2.150.
Substituímos a vírgula 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 após a filltragem de matrícula
(entre 150 e 200). Esta sintaxe torna mais clara a intenção do programador no sentido de obter um produto cartesiano.
Isto, certamente, facilita a manutenção posterior de um programa pois indica claramente a intenção do resultado.
DIVISÃO
As tuplas da divisão seriam representadas por T → F [depto : deptno] P. A ordem dos operandos afeta o resultado da operação.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
119
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
No SQL do Oracle não existe um operando específico para a realização desta operação, e portanto não a trataremos
neste livro (a operação pode ser realizada através de cláusulas como Group By, Subselect, etc.).
EXERCÍCIOS
2.54) Deseja-se uma lista contendo o nome do projeto, o nome das atividades e tempo de duração de cada atividade
(fornecido em número de horas). Ordene o resultado por projeto e atividade.
2.55) Deseja-se uma lista contendo o código e nome de cada departamento, nome e sobrenome do gerente, ordenado
por código de departamento.
2.56) Deseja-se uma lista contendo nome, sobrenome, salário e departamento de todos os funcionários que sejam
responsáveis por projeto, porém não sejam gerentes.
2.57) Deseja-se uma lista contendo o nome e departamento do gerente e nome e salário de todos os funcionários
subordinados a ele. Apresente o resultado ordenado por departamento e salário (descendente).
2.58) Deseja-se uma lista contendo o nome do projeto, o nome do departamento responsável e o nome do
funcionário responsável, desde que ele trabalhe no departamento responsável pelo projeto.
2.59) Deseja-se saber quais os departamentos que não possuem funcionários (usar Minus).
2.60) Deseja-se saber quais os departamentos (código e nome) responsáveis por mais de dois projetos e que,
simultaneamente, possuam mais de três funcionários (usar Intersect).
2.61) Deseja-se saber o código e nome do projeto, código e nome da atividade e o tempo de duração 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 término. Se uma atividade começou durante o ano de 1996 e terminou em outro ano, desejamos saber
apenas o tempo da data de início da atividade até dia 31/12/1996. Se uma atividade começou antes de 1996 e
terminou depois de 1996, sua duração será de 01/01 a 31/12, e, finalmente, se uma atividade começou e terminou
em 1996, sua duração será desde a data de início até a data de término.
FUNDAMENTOS EM: DETALHAMENTO DO SQL*PLUS
PRÉ-REQUISITOS
♦ Conhecimentos básicos de SQL*Plus e de SQL.
METODOLOGIA
♦ Apresentação e descrição sintática dos demais comandos de SQL*Plus, que possibilitarão a formatação dos resultados, a definição de variáveis, organização
do ambiente de trabalho, dentre outros comandos.
TÉCNICA
♦ Apresentação de exemplos que desenvolvam os efeitos descritos.
COMANDOS DE FORMATAÇÃO
Os comandos de formatação vão permitir a modificação do layout de apresentação dos comandos executados.
Poderemos estabelecer tamanho para as colunas, título para o relatório, colunas de quebra, cálculos quanto ao
relatório e à quebra.
COLUMN
O comando Column tem a finalidade de formatar uma determinada coluna ou expressão.
120 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Sintaxe 2.27 – Column
Podemos executar este comando sem coluna identificada para que ele apresente a formatação existente em vigor
no SQL*Plus. Se o executarmos informando um nome de coluna ou expressão, ele apresentará a formatação em
vigor para o elemento específico.
Cada uma das opções do comando afetará uma característica da coluna ou expressão, de acordo com a lista a seguir:
♦ Alias – Associa um alias para a coluna (ou expressão), que pode ser utilizado em um comando Break, Compute
ou até mesmo em outro comando Column.
♦ Clear – Desfaz os formatos especificados para a coluna.
♦ Entmap – Quando utilizamos HTML no relatório gerado pelo SQL*Plus, os símbolos <, >, “ e & podem ser substituídos
pelos valores <, >, " e &. A conversão ou não do conteúdo das colunas (ou expressões) que
incluímos em nosso comando Select é determinado pelo valor do parâmetro Entmap dentro do comando Markup
Html. Pode acontecer, porém, de desejarmos que para uma determinada coluna o padrão seja diferente. Neste caso
especificamos o parâmetro Entmap diretamente no comando Column para a coluna cujo padrão desejamos alterar.
♦ Fold (After ou Before) – Associa um carriage return antes (before) ou depois (after) do cabeçalho e coluna em
cada linha. Isto força uma quebra na linha na posição em que o carriage return é colocado. O SQL*Plus não
adiciona um carriage return extra ao final da linha listada.
♦ Format – Determina um formato de edição para as colunas numéricas e um tamanho de coluna para as demais
colunas. O <formato> não pode ser substituído por uma variável; 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
numéricos da função To_Char. Para os formatos alfanuméricos ou de data, podemos especificar An, onde n
indica a largura da coluna.
♦ Heading – Determina o cabeçalho da coluna.
♦ Justify – Determina o alinhamento para o cabeçalho da coluna. Se não especificado, o alinhamento padrão para
colunas numéricas é à direita e para as alfanuméricas à esquerda.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
121
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
♦ Like – Copia os atributos de outra coluna definida anteriormente. A opção Like não recobre as características já
definidas para a coluna, só acrescenta aqueles não definidos.
♦ NewLine – Quebra a linha antes de o valor ser apresentado. Tem o mesmo efeito de Fold_Before.
♦ New_Value – Atribui ao parâmetro <variável> o novo valor desta coluna toda vez que houver mudança de valor.
♦ Print / NoPrint – Apresenta (Print) ou não (NoPrint) a coluna na listagem resultado (cabeçalho e todos os valores).
♦ Null – Indica o <texto> a ser apresentado quando o conteúdo da coluna for indeterminado (Null).
♦ Old_Value – Atribui ao parâmetro <variável> o valor anterior desta coluna toda vez que houver mudança de valor.
♦ On / Off – Habilita ou desabilita os atributos de apresentação para a coluna.
♦ Wrapped – Determina como será feito o controle de quebra quando o conteúdo da coluna for maior que a
largura especificada para ela. A opção Wrapped indica que o texto será cortado na largura especificada e continuará
na próxima 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.
Listagem 2.157 – Comando Col
SQL> SELECT CD_DEPTO, NM_FUNC, VL_SAL, DT_NASC
2
FROM FUNC
3
WHERE CD_MAT BETWEEN 10 AND 50;
CD_
--A00
B01
C01
E01
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 |FUNCIONÁRIO” FOR A11
SALÁRIO FOR L999G990D00
NASC NOPRINT
DEPTO NOME DO
FUNCIONARIO
----- --------------------A00
CRISTINA
B01
MIGUEL
C01
SANDRA
E01
JOAO
SALÁRIO
----------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 formatação das colunas, e
posteriormente reexecutamos o mesmo comando para analisarmos as diferenças.
A opção For garante o tamanho da coluna cd_depto, de tal forma que o cabeçalho aparece por completo. O
cabeçalho da coluna nm_func foi quebrado em duas linhas com o uso do | (pipe) no meio do texto. A coluna vl_sal
recebeu a formatação padrão correspondente ao NLS_Lang em vigor para a sessão. Por fim, a coluna dt_nasc não
foi impressa pois recebeu a opção NoPrint.
Após a execução 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 definições
anteriores até que venhamos a executar um comando COL com a opção Clear para cada uma das colunas, um
comando CLEAR com a opção Columns ou encerremos o SQL*Plus.
Listagem 2.158 – Comando Col
COL CD_DEPTO
HEA DEPTO FOR A5
COL NM_FUNC
HEA “NOME DO |FUNCIONÁRIO” FOR A11
COL VL_SAL
HEA SALÁRIO FOR L999G990D00
COL DT_NASC
HEA NASC NOPRINT
SELECT CD_DEPTO, NM_FUNC, VL_SAL, DT_NASC
FROM FUNC
122 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
WHERE CD_MAT BETWEEN 10 AND 50
/
COL CD_DEPTO CLEAR
COL NM_FUNC CLEAR
COL VL_SAL CLEAR
COL DT_NASC CLEAR
O comando COL é muito utilizado dentro de arquivos de comandos. Veja o exemplo da Listagem 2.158. Após a
execução do comando desejado, desfazemos a formatação de cada coluna, retornando aos valores padrões.
REPHEADER / REPFOOTER
Os comandos RepHeader e RepFooter têm a finalidade de formatar um título geral para o início ou fim do relatório.
Somente serão apresentados na primeira página (RepHeader) ou na última página do relatório (RepFooter).
A utilização de um dos comandos sem parâmetros faz com que o SQL*Plus liste o header ou footer em vigor.
Sintaxe 2.28 – RepHeader / RepFooter
As opções presentes na sintaxe afetam o elemento formatado da seguinte forma:
♦ Page – Muda de página após o header ou antes do footer. Para que este comando gere uma marcação de página
física, devemos ter executado anteriormente o comando Set Newpage 0 (veja em Modificando Variáveis de Sistema).
♦ Col – Estabelece posicionamento na coluna <número> da linha de impressão atual (avança ou recua).
♦ Skip – Pula para o início da próxima linha <número> vezes. Se o parâmetro <número> for omitido, 1 vez é
assumido. Se o parâmetro <número> possuir o valor 0, fará com que haja o posicionamento na linha atual.
♦ Tab – Pula <número> de colunas para a frente ou para trás (se o valor for negativo).
♦ Left / Center / Right – Estabelece o posicionamento dos textos que o seguem à esquerda, centralizados ou à
direita, respectivamente. Os textos são tratados como um único elemento.
♦ Bold – Realiza impressão em negrito. No vídeo, a linha será repetida três vezes.
♦ Format – Utiliza os mesmos formatos válidos para o comando Column. A palavra Format não pode ser abreviada.
♦ <texto> – Corresponde a uma única palavra ou a um conjunto de palavras (se entre aspas).
♦ <variável> – Corresponde a uma variável de substituição criada pelo usuário.
♦ Sql.Pno – Corresponde ao número da página corrente.
♦ Sql.Lno – Corresponde ao número da linha corrente.
♦ Sql.Release – Corresponde à release do Oracle.
♦ Sql.Sqlcode – Corresponde ao valor do último código de erro ocorrido.
♦ Sql.User – Corresponde à indicação do usuário da sessão.
♦ On / Off – Torna o header (ou footer) habilitado ou desabilitado sem afetar sua definição.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
123
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
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 símbolo –
(hífen) foi utilizado ao fim de cada linha para indicar continuação de comando (para o SQL*Plus). A primeira coisa
formatada no header do relatório foi o número da página (Sql.Pno) à esquerda, depois no centro da mesma linha
foi formatado o texto “Relatório de Teste”. A opção Skip 2 posiciona no início da nova linha duas vezes, deixando,
portanto, uma linha em branco. A opção Format se aplica às variáveis numéricas seguintes; portanto formatamos
o número da página e a release do Oracle.
O retângulo preto à esquerda da linha de cabeçalho indica que existe um caracter para quebra de página. No
comando RepFooter, o primeiro texto não apresentou posicionamento; o SQL*Plus assume esquerda. Ao término
do arquivo, os três títulos foram desabilitados.
Listagem 2.159 – Comando RepHeader
SQL>
SQL>
>
>
>
SQL>
SQL>
>
SQL>
2
3
4
SQL>
SQL>
SQL>
SET LINESIZE 50
REPHEADER PAGE LEFT FORMAT 9 SQL.PNO CENTER “Relatório de Teste” SKIP 2 CENTER “Release “ FORMAT 999999999 SQL.RELEASE SKIP 2 CENTER “Usuário “ SQL.USER
TTITLE RIGHT “Pag. “ FORMAT 990 SQL.PNO
REPFOOTER PAGE
“Última Página” SKIP 2 LEFT “do Relatório”
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 títulos a serem apresentados no topo (Ttitle) ou rodapé (Btitle) de cada
página do relatório.
A sintaxe destes dois comandos é semelhante à dos comandos RepHeader e RepFooter, excetuando-se a opção
Page, que não 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 páginas, inclusive nas páginas de header e footer.
124 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Sintaxe 2.29 – Ttitle / Btitle
Figura 2.08 – Exemplo dos comandos RepHeader, RepFooter, Ttitle e Btitle
Listagem 2.160 – Script do relatório da Figura 2.08
SQL>
SQL>
SQL>
>
SQL>
>
SQL>
2
3
SQL>
SQL>
SQL>
SET LINESIZE 50
REPHEADER PAGE CENTER “Relatório de Teste”
TTITLE RIGHT “Pag. “ FORMAT 990 SQL.PNO SKIP 3 CENTER “Título da Página”
REPFOOTER PAGE “Última Página” SKIP 2 LEFT “do Relatório”
SELECT CD_MAT, NM_FUNC, CD_DEPTO
FROM FUNC
WHERE ROWNUM < 5;
REPHEADER OFF
TTITLE OFF
REPFOOTER OFF
BREAK
O comando Break define quais são os elementos de quebra e que ação deve ser tomada quando ocorrer a mudança
de valor (quebra) em cada um deles. Este comando não ordena os dados recebidos do banco de dados. Para que o
resultado seja adequado, no comando Select devemos incluir a cláusula 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 sessão. Um segundo comando desabilita o primeiro;
desta forma, o último comando Break que executarmos passa a determinar as quebras válidas. Não é cumulativo.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
125
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Sintaxe 2.30 – Break
O comando Break executado sem parâmetros apresenta a situação de quebra em vigor.
Os parâmetros disponíveis para determinação de quebra são os seguintes:
♦ On <coluna> / On <expressão> – Determina uma coluna ou uma expressão de quebra.
♦ Row – Possibilita a determinação de uma ação para cada linha.
♦ Report – Possibilita a determinação de uma ação ao fim do relatório.
♦ Skip <número> – Indica quantos saltos de linha devem ser efetuados antes da impressão da próxima linha, uma
vez que houve uma quebra.
♦ Skip Page – Indica que deve ser feita uma mudança de página (com reimpressão dos cabeçalhos existentes)
quando houver uma quebra.
♦ NoDuplicates – Indica que a coluna (ou expressão) de quebra não deve ter seu valor repetido na linha subseqüente
enquanto não for percebida uma nova quebra (é a opção default).
♦ Duplicates – Indica que a coluna (ou expressão) de quebra deve ter seu valor repetido na linha subseqüente.
Listagem 2.161 – Teste com Break
CD_ NR_CARGO NM_FUNC
--- --------- ------A00
58 VICENTE
58 SILVIO
C01
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 impressão de uma linha com novo valor. A opção NoDuplicates é default e indica que não deve
haver repetição de valor para linhas com a coluna de quebra igual. No exemplo, a linha com nome do funcionário
Silvio não 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
funcionário Bruno tem o mesmo cargo da funcionária Iracy; no entanto, o cargo é repetido.
Listagem 2.162 – Script para montagem do relatório anterior
BREAK ON CD_DEPTO SKIP 2 ON NR_CARGO DUP
SELECT CD_DEPTO, NR_CARGO, NM_FUNC
FROM FUNC
WHERE NR_CARGO IN (58, 60, 55)
AND ROWNUM < 9
ORDER BY CD_DEPTO, NR_CARGO
/
126 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
No comando Select apresentado na Listagem 2.162 aparece a pseudocoluna RowNum, que corresponde a uma
numeração seqüencial dada para as linhas selecionadas pela restrição presente na cláusula Where. No caso do
exemplo, utilizamos esta pseudocoluna como restrição para que apenas as oito primeiras linhas que atendessem à
restrição de cargo (58, 60 ou 55) fossem selecionadas. A restrição é feita antes da ordenação.
COMPUTE
O comando Compute efetua um cálculo em relação a um elemento de quebra. Se desejarmos efetuar um cálculo
quando houver quebra da coluna cd_depto, esta coluna deve estar referenciada no comando Break. Se desejarmos
um determinado cálculo ao término do relatório, a palavra Report deve estar mencionada no comando Break e
assim por diante. O cálculo só é efetuado em relação a um elemento presente no comando de quebra.
Sintaxe 2.31 – Compute
Podemos especificar um ou mais cálculos por elemento e, ainda, especificar um label que identifique o tipo de
cálculo efetuado.
Os parâmetros para determinação de cálculos são:
♦ Avg – Calcula a média de valores não incluindo Nulls.
♦ Count – Calcula a quantidade de valores não incluindo Nulls.
♦ Max – Calcula o maior valor não incluindo Nulls.
♦ Min – Calcula o menor valor não incluindo Nulls.
♦ Num – Calcula a quantidade de valores (total).
♦ Std – Calcula o desvio padrão não incluindo Nulls.
♦ Sum – Calcula o somatório de valores não incluindo Nulls.
♦ Var – Calcula a variância não incluindo Nulls.
♦ OF – Indica a coluna em relação à qual será feito o cálculo.
♦ Label – Indica o label referente ao cálculo.
♦ On – Indica em que momento o cálculo deve ser realizado (quebra).
Listagem 2.163 – Relatório exemplo
CD_DE NM_FUNC
----- ------A00
VICENTE
SILVIO
***** ------Média
Soma
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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
127
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Média
Soma
3102,5
6205
3412,75
6825,5
***** ------Média
Soma
------ --------3445
3789,5
13780
15158
O resultado apresentado na Listagem 2.163 foi gerado pelo script da Listagem 2.164.
No script, foi incluído apenas um comando Compute para efetuar o cálculo de somatório e média das colunas
Salário e Projeção, quando da ocorrência de quebra por departamento e ao final do relatório. Poderíamos ter
definido dois comandos Computes para realizar a operação anterior com o mesmo efeito, um para a quebra de
departamento e outro para o término do relatório.
Listagem 2.164 – Script para montagem do relatório anterior
COL CD_DEPTO FOR A5
BREAK ON CD_DEPTO SKIP 2 ON REPORT
COMPUTE SUM LABEL 'Soma' AVG LABEL 'Média' OF VL_SAL PROJECAO ON CD_DEPTO REPORT
SELECT CD_DEPTO, NM_FUNC, VL_SAL, VL_SAL * 1.1 PROJECAO
FROM FUNC
WHERE NR_CARGO IN (58, 60, 55)
AND CD_DEPTO IN ('A00', 'C01')
AND ROWNUM < 5
ORDER BY CD_DEPTO
/
Se criarmos mais de um comando Compute para a mesma indicação de quebra, somente a última é considerada.
As demais são ignoradas. Teste o exemplo da Listagem 2.165.
Listagem 2.165 – Script com Break, Compute e Col
COL CD_DEPTO FOR A11
BREAK ON CD_DEPTO SKIP 2 ON REPORT
COMPUTE SUM LABEL 'Soma' AVG LABEL 'Média' OF VL_SAL PROJECAO ON CD_DEPTO REPORT
COMPUTE SUM LABEL 'Soma Total' AVG LABEL 'Média Total' OF VL_SAL PROJECAO ON REPORT
SELECT
FROM
WHERE
AND
AND
ORDER
/
CD_DEPTO, NM_FUNC, VL_SAL, VL_SAL * 1.1 PROJECAO
FUNC
NR_CARGO IN (58, 60, 55)
CD_DEPTO IN ('A00', 'C01')
ROWNUM < 5
BY CD_DEPTO
CLEAR
O comando Clear tem por finalidade limpar o valor atual da opção especificada.
Sintaxe 2.32 – Clear
As opções do comando Clear podem ser:
128 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
♦ Breaks – Limpa todas as indicações de quebra definidas no comando Break.
♦ Buffer – Limpa o texto do SQL Buffer. Este comando é semelhante ao comando Clear Sql, a menos que tenhamos
utilizado mais de um Buffer (será visto posteriormente).
♦ Columns – Limpa todas as especificações definidas pelo comando Col.
♦ Computes – Limpa todas as especificações definidas pelo comando Compute.
♦ Screen – Limpa a tela do SQL*Plus.
♦ Sql – Limpa o Sql Buffer.
♦ Timing – Limpa todos os controles de tempo definidos.
Listagem 2.166 – Exemplo de Clear
SQL> CLEAR BREAKS COMPUTES
breaks conteúdo removido
computes conteúdo removido
SQL> CLEAR SQL BUFFER
sql conteúdo removido
buffer conteúdo removido
SQL> CLEAR TIMI
SQL>
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.
Sintaxe 2.33 – Spool
Possui os seguintes parâmetros:
♦ Arquivo – Indica o nome do arquivo para o qual está sendo enviado o resultado. A extensão default para o
Windows é LST. De acordo com o sistema operacional este valor poderá variar (LIS). Se desejarmos, poderemos
alterar esta extensão definindo outro valor.
♦ Off – Interrompe a geração do arquivo.
♦ Out – Interrompe a geração do arquivo e o envia para a impressora default do sistema.
Listagem 2.167 – Execução do comando Spool
SQL> SPOOL TESTE.SQL
SQL> SELECT COUNT(*) FROM FUNC;
COUNT(*)
-------32
SQL> SPOOL OFF
Neste arquivo são gerados não só o resultado do(s) comando(s) executado(s), como também as mensagens enviadas,
o texto do comando, enfim, uma reprodução de tudo o que é mostrado no vídeo. Podemos alterar este resultado
através de variáveis de sistema.
Listagem 2.168 – Arquivo Teste.sql
SQL> SELECT COUNT(*) FROM FUNC;
COUNT(*)
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
129
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
-------32
SQL> SPOOL OFF
SHOW
Apresenta informações sobre o elemento especificado.
Sintaxe 2.34 – Show
Dentre os parâmetros do comando Show apresentados na sintaxe, temos alguns ainda não utilizados nos comandos
anteriores. São eles:
♦ <variável> – Apresenta informações sobre a variável de sistema nomeada no comando.
♦ All – Apresenta informações sobre todas as variáveis de sistema.
♦ Parameters – Apresenta informações sobre os parâmetros de inicialização do banco de dados. É uma opção para
uso por DBAs.
♦ SGA – Apresenta a alocação de memória feita para o banco de dados. É uma opção para uso por DBAs.
♦ Errors – Apresenta informações sobre o último comando de PL/SQL compilado ou sobre uma rotina específica
nomeada no comando.
Listagem 2.169 – Teste de Show
SQL> SHOW BTITLE LNO PNO RELEASE SPOOL WRAP LINESIZE REPFOOTER
btitle OFF e é representado pelos primeiros caracteres da próxima instrução
lno 4
pno 1
release 900010101
130 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
spool OFF
wrap: linhas serão passado para a linha seguinte
linesize 60
repfooter OFF e é NULL
SQL>
COMANDOS PARA CONTROLE DE VARIÁVEIS DE USUÁRIO
No SQL*Plus, podemos definir dois tipos de variáveis de usuário, as variáveis de substituição (já utilizadas em
diversos scripts) e as variáveis Bind para interface com rotinas de PL/SQL.
DEFINE
Este comando especifica uma variável de substituição e associa um valor alfanumérico a ela. Quando este comando
é executado sem parâmetros, o nome e valor de todas as variáveis de substituição são apresentados. Quando
informamos o nome de uma variável, apenas seu valor é apresentado.
Sintaxe 2.35 – Define
O valor desta variável permanece no sistema até que modifiquemos seu valor através de outro comando Define,
um comando Accept ou Col com New_Value / Old_Value, ou ainda façamos a destruição da variável com o comando
Undefine ou encerremos o SQL*Plus.
Listagem 2.170 – Define
SQL> define
DEFINE _SQLPLUS_RELEASE = “900010001” (CHAR)
DEFINE _EDITOR
= “Notepad” (CHAR)
DEFINE _O_VERSION
= “Personal Oracle9i Release 9.0.1.1.1 - Production
With the Partitioning option
JServer Release 9.0.1.1.1 - Production” (CHAR)
DEFINE _O_RELEASE
= “900010101” (CHAR)
DEFINE _RC
= “1” (CHAR)
SQL> DEFINE DEP = D21
SQL> DEFINE DEP
DEFINE DEP
= “D21” (CHAR)
SQL> SELECT NM_DEPTO
2
FROM DEPTO
3
WHERE CD_DEPTO = '&DEP';
antigo
3: WHERE CD_DEPTO = '&DEP'
novo
3: WHERE CD_DEPTO = 'D21'
NM_DEPTO
-----------------------------------GERENCIA DE SISTEMAS ADMINISTRATIVOS
UNDEFINE
Destrói a definição de uma determinada variável de substituição.
Sintaxe 2.36 – Undefine
No exemplo da Listagem 2.171, após a destruição da variável “dep”, a execução do comando Select que faz referência
a esta variável solicita ao usuário que forneça um valor para “dep”, pois esta variável não existe.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
131
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 2.171 – Undefine
SQL> UNDEFINE DEP
SQL> SELECT NM_DEPTO
2
FROM DEPTO
3
WHERE CD_DEPTO = '&DEP';
Entre o valor para dep: D11
antigo
3: WHERE CD_DEPTO = '&DEP'
novo
3: WHERE CD_DEPTO = 'D11'
NM_DEPTO
------------------------------GERENCIA DE SISTEMAS COMERCIAIS
VARIABLE
Este comando cria uma variável Bind, que pode ser usada em programas de PL/SQL.
Sintaxe 2.37 – Variable
Os tipos da variável criada correspondem aos tipos válidos em PL/SQL.
Quando utilizamos o comando Variable sem parâmetros, são listadas todas as variáveis Bind criadas no SQL*Plus.
O exemplo da Listagem 2.172 cria duas variáveis Bind: uma do tipo Number e outra de tipo Refcursor. O comando
Begin inicia um trecho de programa PL/SQL (que termina no End;). No momento do Open da variável cursor, o
comando Select é executado e as linhas que atendem à condição estabelecida são selecionadas em uma área de
trabalho endereçada pela variável cursor.
Listagem 2.172 – Variable
SQL> VARIABLE MAT NUMBER
SQL> VARIABLE WCURSOR REFCURSOR
SQL> BEGIN
2
:MAT
:= 10;
3
OPEN :WCURSOR FOR SELECT NM_FUNC, VL_SAL FROM FUNC
4
WHERE CD_MAT BETWEEN :MAT AND :MAT + 30;
5 END;
Procedimento PL/SQL concluído com sucesso.
SQL> PRINT mat wcursor
MAT
---------10
NM_FUNC
VL_SAL
--------------- -----CRISTINA
5275
MIGUEL
4125
SANDRA
3825
132 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Quando executamos o comando Print, são apresentados os valores da variável “mat” e da área apontada pela
variável cursor “wcursor”.
PRINT
Este comando apresenta o valor de uma variável Bind ou de todas as variáveis deste tipo declaradas (se for executado
sem argumentos).
Sintaxe 2.38 – Print
COMANDOS PARA COMUNICAÇÃO COM O USUÁRIO
Os comandos deste tópico apresentam alguma mensagem para o usuário que está executando scripts no SQL*Plus.
Podem ser úteis para tornar a interface mais amigável.
ACCEPT
Este comando cria uma variável de substituição e, opcionalmente, formata uma mensagem para o usuário.
Sintaxe 2.39 – Accept
Quando criamos a variável de substituição com este comando, ela pode ser de tipo Number, Char ou Date, havendo
crítica se o valor informado não for compatível com o tipo definido. Os formatos válidos para uso são os mesmos
do comando Col, e ainda são suportados os formatos SQL de data quando o tipo da variável for Date. Podemos
informar um valor default (para o caso de o usuário não fornecer nenhum), apresentar uma mensagem ou não e
esconder o valor digitado pelo usuário (hide).
Listagem 2.173 – Accept
SQL> ACCEPT MAT NUMBER FOR 999 DEFAULT 10 PROMPT > “INFORME O VALOR DA MATRÍCULA : “
INFORME O VALOR DA MATRÍCULA :
SQL> DEFINE MAT
DEFINE MAT
=
10 (NUMBER)
SQL> ACCEPT DATA DATE FOR 'DD/MM/RRRR' DEFAULT '01/01/1998' > PROMPT “INFORME A DATA DE ADMISSÃO : “
INFORME A DATA DE ADMISSÃO :
SQL> DEFINE DATA
DEFINE DATA
= “01/01/1998” (CHAR)
PROMPT
Envia uma mensagem ou uma linha em branco para a tela do usuário. Pode ser útil para scripts longos, a fim de
informar o passo executado.
Sintaxe 2.40 – Prompt
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
133
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
PAUSE
Este comando envia uma linha em branco ou uma linha com texto para a tela do usuário e aguarda que este tecle
Enter para que o script tenha prosseguimento.
Sintaxe 2.41 – Pause
O exemplo da Listagem 2.174 mostra um script contendo os dois comandos e sua execução.
Listagem 2.174 – Pause
SQL> START PAUSE
SQL> PAUSE “INÍCIO DA EXECUÇÃO”
“INÍCIO DA EXECUÇÃO”
SQL> SELECT NM_FUNC FROM FUNC
2
WHERE CD_MAT = 10;
NM_FUNC
-------CRISTINA
SQL> PROMPT “FIM DE EXECUÇÃO”
“FIM DE EXECUÇÃO”
MODIFICANDO VARIÁVEIS DE SISTEMA
A modificação das variáveis de sistema pode ser feita de duas formas: a primeira, através do comando Set, onde
podemos atribuir um valor para a variável desejada; a segunda, através do menu Opções do SQL*Plus (Definir Opções).
Neste caso, é apresentado um diálogo que permite o acesso a cada variável de sistema com seu valor atual e permite
sua modificação. Este diálogo admite, também, a modificação da área horizontal e tamanho total do buffer de tela.
Figura 2.09 – Diálogo Ambiente
SET
Este comando, que pode ser incluído em um script, modifica o valor de uma das variáveis de sistema.
Sintaxe 2.42 – Set
A Tabela 2.08 a seguir apresenta a lista e significados das variáveis de sistema do SQL*Plus.
134 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Tabela 2.08 – Variáveis de sistema do SQL*Plus
Variável
Descrição
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 execução monitorada pelo DBA. O valor default para texto é “SQL*Plus”.
ARRAY[SIZE] {15|n}
Determina o número de linhas que o SQL*Plus deve obter do banco de dados a cada leitura (Fetch).
AUTO[COMMIT] {OFF | ON | IMM[EDIATE] | n}
Indica se o ORACLE efetiva as modificações pendentes para o database. A opção ON faz com que seja
executado um COMMIT após cada comando SQL ou bloco PL/SQL. A opção IMM funciona de forma
semelhante a ON. A opção n indica que o comando COMMIT deve ser executado após n comandos de
atualização bem-sucedidos.
AUTOP[RINT] {OFF|ON}
Apresenta, automaticamente, o valor das variáveis BIND após a execução de um PL/SQL.
AUTORECOVERY [ON | OFF]
Esta opção pode ser utilizada pelo DBA durante um processo de recuperação do banco de dados.
AUTOT[RACE] {OFF|ON|TRACE[ONLY]}
[EXP[LAIN]] [STAT[ISTICS]]
Apresenta um relatório sobre a execução dos comandos de SQL DML (Select, Insert, Update ou Delete) bemsucedidos. O relatório pode incluir a apresentação de estatísticas e o caminho de execução (Explain). A opção
TraceOnly apresenta o relatório sem apresentar os dados da Query. Se Statistics for solicitado a execução do
comando é realizada, porém sem a apresentação dos resultados. Para que a opção Explain possa ser
executada deve ser criada a tabela Plan_Table para a geração do caminho de acesso.
BLO[CKTERMINATOR] { . |c}
Determina um caracter não-alfanumérico a ser usado para indicar fim de blocos PL/SQL.
CMDS[EP] {;|c|OFF|ON}
Determina um caracter não alfanumérico usado para separar múltiplos comandos de SQL*Plus digitados na
mesma linha. Se usarmos a opção ON, o caracter default será ponto-e-vírgula ( ; ).
COLSEP {_|text}
Determina o texto a ser impresso entre colunas selecionadas (Select). Se o valor tiver brancos ou caracteres
de pontuação, deve ser informado entre aspas simples. O valor default é um único espaço em branco.
COM[PATIBILITY] {V7|V8|NATIVE}
Especifica a versão do banco de dados com a qual estamos nos conectando.
CON[CAT] { . |c|OFF|ON}
Determina o caracter para terminar uma variável de substituição se desejarmos seguir imediatamente a
variável com um caracter que o SQL*Plus deva interpretar como valor, e não como parte do nome da
variável de substituição.
COPYC[OMMIT] {0|n}
Controla o número de linhas após 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 cópia.
COPYTYPECHECK {OFF|ON}
Determina que a verificação de compatibilidade de tipos de dados deve ser suprimida durante uma inclusão
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 variáveis de substituição. ON ou OFF controla se o SQL*Plus
irá ou não pesquisar no texto a procura de variáveis de substituição para substituí-las por valores. Ao
usarmos ON, o valor atribuído é &. Esta opção tem precedência sobre SCAN.
DESCRIBE [DEPTH{1|n|ALL}]
[LINENUM {ON|OFF}] [INDENT{ON|OFF}]
Determina o nível de profundidade para o qual desejamos recursivamente descrever um objeto. Os valores
válidos variam de 1 a 50. Aplicável 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 execução.
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 extensão para o arquivo.
EMB[EDDED] {OFF|ON}
Controla onde cada nova página do relatório começa. OFF força cada relatório a começar no topo de uma
nova página. ON permite que um relatório inicie em qualquer parte da página.
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 variáveis de substituição para indicar que o texto a seguir deve ser
considerado normal e não uma substituição.
FEED[BACK] { 6 | n }
Mostra o número de registros retornados por uma query se forem selecionados mais de n registros (default 6).
continua
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
135
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
continuação
Variável
Descrição
FEED[BACK] { ON | OFF }
Determina o estado da variável FEEDBACK (default ON).
FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL}
Verifica sintaticamente o comando SQL informado com o padrão ANSI/ISO SQL92. Este comando pode ser
executado mesmo que não estejamos conectados ao banco de dados. Ficará acionado através de todas as
conexões que estabelecermos, até que seja desabilitado ou que encerremos (EXIT) o SQL*Plus.
FLUSH {ON | OFF}
Indica se as respostas (outputs) e prompts dos comandos devem ou não ser mostrados no vídeo. Usado para
execução em batch.
HEA[DING] {ON | OFF}
Determina se os cabeçalhos de coluna devem ser apresentados (default ON).
HEADSEP {“|” | ON | OFF}
Determina qual o caracter indicador de quebra de linha para o texto dos cabeçalhos de coluna.
INSTANCE [instance_path | LOCAL]
Permite a modificação da instância para a sessão. Somente podemos definir uma nova instância se não
estivermos conectados a uma determinada instância no momento. Podemos utilizar qualquer identificador
do Oracle Net como instance_path.
LIN[ESIZE] {80 | n}
Indica o número de caracteres por linha (default 80).
LOBOF[FSET] { n | 1}
Determina a posição inicial para apresentação de informações para colunas Clob e Nclob.
LOGSOURCE [pathname]
Especifica a localização dos arquivos de log arquivados. Este comando pode ser utilizado por DBAs durante
um processo de recuperação.
LONG {80|n}
Determina a largura máxima em bytes para apresentação de valores LONG, CLOB e NCLOB e para cópia de
valores LONG. O valor máximo é 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 pedaços em vez do
tamanho total em função de restrições de memória.
MARK[UP] HTML [ON | OFF] [HEAD text]
[BODY text] [TABLE text] [ENTMAP {ON | OFF}]
[SPOOL {ON | OFF}] [PRE[FORMAT] {ON | OFF}]
Indica que o relatório a ser gerado a partir deste momento o será em formato HTML. Veja o tópico
Acionando o SQL*Plus em batch para verificar o detalhamento desta sintaxe.
NEWPAGE { 1 | n | none}
Determina o número de linhas em branco a serem impressas entre o início da página e o primeiro título.
Zero (0) coloca formfeed no topo.
NULL {“” | <texto>}
Indica qual o texto a ser apresentado na coluna quando seu conteúdo, em uma determinada linha, for
indeterminado (Null).
NUMFORMAT {“” | <formato>}
Determina o formato default para apresentação das colunas numéricas.
NUM[WIDTH] {10 | n}
Indica a largura default para apresentação de números.
PAGES[ IZE ] {24 | n}
Indica o número de linhas para cada página do relatório (default 24).
PAU[ SE ] <mensagem>
Mostra a mensagem após o preenchimento da página de tela.
PAU[ SE ] ON | OFF
Indica se o mecanismo de pausa após o preenchimento de uma página deve ser acionado (default OFF).
RECSEP {WR[APPED]|EA[CH]|OFF}
Mostra ou imprime separadores de registros. A variável RECSEPCHAR define o caracter a ser apresentado
para separação de registros. O valor default é um branco. Esta variável indica quando o SQL*Plus deve
efetuar a separação dos registros. Se escolhermos WRAPPED, o SQL*Plus imprime um separador somente
após as linhas quebradas. Se escolhermos EACH, a impressão se dará a cada linha.
RECSEPCHAR {_|c}
Define o caracter separador de registros. O default é um branco.
SERVEROUT[PUT] {OFF|ON} [SIZE n]
[FOR[MAT] {WRA[PPED] |
WOR[D_WRAPPED] | TRU[NCATED]} ]
Controla a apresentação das informações geradas através do pacote DBMS_OUTPUT em stored procedures
ou blocos de PL/SQL. O parâmetro Size determina o número 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, porém em final de palavra. Quando TRUNCATED é
habilitado, cada linha é truncada em LINESIZE caracteres.
continua
136 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
continuação
Variável
Descrição
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 variável de sistema quando esta é modificada
com o comando SET.
SPACE {1 | n}
Indica o número de espaços entre as colunas do relatório. O valor máximo é 10 (default 1).
SQLBL[ANKLINES] {ON|OFF}
Indica se desejamos preservar ou não os brancos dentro de um comando de SQL.
SQLC[ASE] {MIX[ED] | LO[WER] | UP[PER]}
Converte os textos dos comandos SQL e PL/SQL de acordo com a opção escolhida, inclusive os textos
constantes (entre plics). (default MIXED)
SQLCO[NTINUE] { > |text}
Determina o caracter que o SQL*Plus mostra como prompt se quebrarmos uma linha de comando do
SQL*Plus usando o hífen ( - ).
SQLN[UMBER] {OFF|ON}
Determina o prompt para a segunda (e subseqüentes) linha quando estamos efetuando a digitação de
comandos SQL ou PL/SQL. ON indica que o prompt deve ser uma numeração seqüencial. OFF indica que o
valor deve ser SQLPROMPT.
SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
Determina a compatibilidade do SQL*Plus com relação ao comando VARIABLE (por enquanto somente este
comando é afetado). O parâmetro x representa version, o parâmetro y representa release e o parâmetro 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 variáveis de tipo Nchar e Nvarchar2 estarão associadas ao National Character Set em uso (que
determinará se o valor é expresso em bytes ou caracteres).
SQLP[ROMPT] {SQL> | text }
Indica o texto de prompt para o SQL*PLUS.
SQLPRE[FIX] { # |c}
Indica um prefixo. Durante a digitação de um comando de SQL podemos, em uma linha separada prefixada
pelo caracter escolhido, digitar um comando de SQL*Plus, que será executado imediatamente após o
<enter> da linha. Deve ser um caracter não alfanumérico.
SQLT[ERMINATOR] { ; | c | OFF | ON}
Indica qual caracter o SQL*PLUS reconhecerá como fim de linha e execução. OFF indica que não existe caracter
associado, o fim do comando é reconhecido por uma linha inteira em branco. A opção ON retorna ao valor default de;
SUF[FIX] {SQL | text}
Indica a extensão default para arquivos de comandos do SQL*PLUS.
TAB {OFF|ON}
Determina como o SQL*Plus formata espaços no resultado. OFF usa brancos para formatar espaços no resultado.
ON usa o caracter TAB. Esta opção é aplicável apenas a terminais. TABs não são colocados em arquivos.
TERM[OUT] {OFF|ON}
Controla a apresentação dos resultados gerados por comandos executados a partir de um arquivo de
comandos. OFF suprime a apresentação do resultado no vídeo, mas o spool do resultado é gerado. TERMOUT
OFF não afeta a apresentação de comandos interativos.
TI[ME] {OFF|ON}
Controla a apresentação da hora atual. ON mostra a hora corrente antes do prompt.
TIMI[NG] {OFF|ON}
Controla a apresentação de estatísticas de tempo. ON mostra as estatísticas 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. Não 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. Não afeta o resultado para o terminal.
UND[ERLINE] { - | c | ON | OFF}
Determina o caracter usado para sublinhar cabeçalhos de colunas. ON altera o valor para o padrão “-“. <c>
não pode ser um caracter alfanumérico.
VER[ IFY ] {ON | OFF}
Determina se o texto do comando SQL será apresentado antes e após o SQL*PLUS ter efetuado a
substituição do parâmetro pelo valor real (default ON).
WRA[P] {OFF|ON}
Controla se o SQL*PLUS trunca a apresentação de linhas selecionadas se o comprimento a ser apresentado é
muito longo para a largura atual da linha. OFF trunca a linha. ON permite a quebra de linha.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
137
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Na Listagem 2.175 a seguir, testamos a variável de sistema Autotrace. Para que ela possa realizar o relatório previsto,
precisamos criar uma tabela em nosso schema chamada Plan_Table. O script para criação desta tabela se acha no
diretório orawin95\rdbms80\admin\utlxplan.sql. A opção Traceonly do comando indica que o comando de SQL
não deve ser executado, apenas a apresentação do plano de acesso e as estatísticas. Os dois relatórios produzidos
auxiliam o DBA a detectar problemas na performance de comandos de SQL DML.
Listagem 2.175 – Exemplo de Set Autotrace
SQL> @C:\ORACLE\ORA9I\ADMIN\UTLXPLAN
Tabela criada.
SQL> SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS
SQL> SELECT * FROM FUNC
2 WHERE CD_MAT BETWEEN 100 AND 200;
11 linhas selecionadas.
Plano de Execução
--------------------------------------------------------0
SELECT STATEMENT OPTIMIZER=CHOOSE
1
0
TABLE ACCESS (BY INDEX ROWID) OF 'FUNC'
2
1
INDEX (RANGE SCAN) OF 'SYS_C00689' (UNIQUE)
Estatísticas
------------------------------------------0 recursive calls
0 db block gets
13 consistent gets
2 physical reads
Na Listagem 2.176, testamos as variáveis Escape, SqlTerminator, SqlPrompt e Time. A variável Escape pode ser
muito útil quando desejamos incluir o & dentro de um texto sem que ele tenha a função de variável de substituição.
Listagem 2.176 – Exemplo de Set Escape, SqlTerminator e SqlPrompt
SQL> SET ESCAPE “!”
SQL> SET SQLTERMINATOR ?
SQL> SET SQLPROMPT “PROMPT> “
PROMPT> SET TIME ON
16:27:41 PROMPT> TTITLE LEFT “Empresa !& Cia”
16:27:41 PROMPT> SELECT CD_DEPTO, NM_DEPTO
16:27:41
2
FROM DEPTO
16:27:42
3
WHERE CD_DEPTO = 'A00'?
Empresa & Cia
CD_ NM_DEPTO
--- -------------------A00 DIRETORIA DA EMPRESA
Na Listagem 2.177, foram testadas as variáveis Serveroutput e Linesize. Para a variável Serveroutput, os formatos
disponíveis são 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 opções fornecidas.
Listagem 2.177 – Exemplo de Serveroutput, Linesize e Pagesize
SQL> SET SERVEROUTPUT ON SIZE 4000 FORMAT WRA
SQL> SET LINESIZE 40
SQL> SET PAGESIZE 10
SQL> BEGIN
2
FOR I IN 1..2 LOOP
3
DBMS_OUTPUT.PUT_LINE ('Teste de quebra de '||
4
'linha para apresentação do formato Wrapped. '||
5
'Esta opção também pode ser Word_wrapped ou Truncated');
6
END LOOP;
7 END;
8 /
Teste de quebra de linha para apresentaç
ão do formato Wrapped. Esta opção também
pode ser Word_wrapped ou Truncated
Teste de quebra de linha para apresentaç
ão do formato Wrapped. Esta opção também
138 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
pode ser Word_wrapped ou Truncated
Procedimento PL/SQL concluído com sucesso
Se Wrapped é informado, a quebra de linha ocorre a cada Linesize caracteres. Se Word_Wrapped é informado, a
quebra de linha também ocorre, aproximadamente, a cada Linesize caracteres, porém em final de palavra. Se for
utilizado Truncated, cada linha é truncada em Linesize caracteres.
STORE
O comando Store gera um arquivo contendo todas as variáveis de sistema e seus valores defaults para que possamos
gerar um script com aquelas que desejamos alterar.
Quando o SQL*Plus começa 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 diretório default do SQL*Plus contendo atribuições a
variáveis de sistema, títulos, formatação de colunas; enfim, todos os padrões que quisermos estabelecer para nossa
sessão. Toda vez que iniciarmos o SQL*Plus, este arquivo será executado automaticamente.
Sintaxe 2.43 – Store
A Listagem 2.178 mostra um trecho do arquivo gerado pelo comando Store.
Listagem 2.178 – Exemplo de Store Set
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
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 sessão do SQL*Plus com o banco de dados ou encerra uma sessão com o banco de dados.
Sintaxe 2.44 – Connect / Disconnect
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
139
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
PASSWORD, EXECUTE, HOST E REMARK
O comando Password permite que o usuário do SQL*Plus modifique a password de seu username no Oracle. Host
serve para enviarmos um comando para o sistema operacional onde o SQL*Plus estiver executando, Remark, para
colocarmos comentários dentro de um arquivo de comandos (deve ser colocado no início da linha) e Execute, para
iniciarmos a execução de um comando de PL/SQL.
Sintaxe 2.45 – Password, Execute, Host e Remark
A Listagem 2.179 apresenta exemplos dos comandos Password, Execute e Remark.
Listagem 2.179 – Exemplo de Password
SQL> REM TESTE
SQL> VARIABLE MAT NUMBER
SQL> EXECUTE :MAT := 10;
Procedimento PL/SQL concluído com sucesso.
SQL> password
Alterando senha para DESENV
Senha antiga: ******
Nova senha: ******
Redigite a nova senha: ******
Senha alterada
COPY
Copia os dados de uma query para uma tabela em um banco de dados local ou remoto.
Sintaxe 2.46 – Copy
O parâmetro <user> é da forma: <username>[ / <password> ] @<espec.do banco de dados>.
TIMING
Registra dados de tempo para um determinado intervalo. O parâmetro <texto> corresponde ao nome do timer
criado. Se executado sem parâmetros, lista a quantidade de timers ativos. A opção Show mostra o valor acumulado
para o timer corrente e a opção Stop interrompe a contagem para o timer ativo.
Sintaxe 2.47 – Timing
WHENEVER OSERROR / SQLERROR
Com este comando, podemos determinar que ação 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 informação para
140 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
o sistema operacional. Este tipo de procedimento é interessante quando colocamos a execução do SQL*Plus em
um arquivo de comandos do sistema operacional. O encerramento com um valor permite que o script tome uma
ação associada a cada valor retornado.
Sintaxe 2.48 – Whenever
ATTRIBUTE
Este comando especifica atributos de apresentação (display) para um determinado atributo de uma coluna Object Type.
Sintaxe 2.49 – Attribute
Os formatos válidos são os mesmos do comando Column.
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
diretório <Oracle_Home>\sqlplus\admin\help.
Sintaxe 2.50 – Help
ACIONANDO O SQL*PLUS EM BATCH
Como já vimos anteriormente (ver Exit), podemos executar o SQL*Plus em um arquivo de comandos para favorecer
a execução de scripts em batch. Esta prática é muito utilizada em ambientes Unix.
Na sintaxe 2.51, são apresentadas as seguintes opções:
♦ – s[ilent] – Indica que a execução será em batch. Não é aberta janela para o SQL*Plus.
♦ <logon> – Indica o logon do usuário (username, password, string de conexão, etc.), / (barra) ou /Nolog. A / (barra)
estabelece conexão no usuário default (Ops$<username do sistema operacional>). A opção /Nolog aciona o SQL*Plus
mas não estabelece conexão. Supõe-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 não estiver local, todo o
caminho (diretório) deve ser informado. Adicionalmente podemos passar os parâmetros necessários à execução
do script (veja o comando start e @).
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
141
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Sintaxe 2.51 – SqlPlus
♦ - (menos) – Mostra a sintaxe do SQL*Plus e retorna ao sistema operacional.
♦ -? – Mostra a versão corrente do SQL*Plus e retorna ao sistema operacional. Não deve haver espaço entre o sinal
de menos e a interrogação.
♦ -Markup – com esta opção podemos gerar as saídas dos relatórios em formato HTML se habilitarmos a opção
HTML (esta mesma ação pode ser obtida com o comando SET MARKUP HTML ON). O Sql*Plus gera páginas
completas contidas nas tags <html> e <body>. A opção Spool OFF gera saída HTML para ser incluída em uma
página Web, porém sem a inclusão das tags <html> e <body>. A opção PRE ON indica que o resultado do comando
de sql será incluído entre as tags <pre> e </pre>. O texto ao lado da opção Head será incluído no arquivo de saída
entre as tags <head> e </head>. O texto associado à opção Body permite a especificação de parâmetros para a tag
Body. O texto ao lado de Table permite a especificação de atributos para a tabela tais como BORDER, CELLPADDING,
CELLSPACING e WIDTH. Por default o valor de Width é 90% e Border 1. A opção Entmap se receber o valor OFF
manterá os valores de <, > e “ encontrados nos dados lidos do banco de dados intactos, isto é, considerará que as
informações são pertencentes a textos em HTML. Caso esta opção receba o valor ON, os textos serão traduzidos,
onde < será substituído por <, > será substituído por > e “será substuído por &qt;.
Listagem 2.180 – Exemplo de Markup
sqlplus -s -m “html on head '<title>teste de html</title>' body BGCOLOR=#ff0000 entmap off spool on” desenv/desenv
@arqhtm
spool teste.htm
Select cd_depto, nm_func
from func
where cd_depto = 'A00';
spool off
exit
Na Listagem 2.180 encontramos inicialmente a linha de comando do SQL*Plus para execução de um arquivo de
nome arqhtm.sql e saída para arquivo em formato HTML.
O segundo grupo de comandos presente na listagem corresponde ao conteúdo do arquivo arqhtm.sql. Na Listagem
2.181 a seguir apresentamos o resultado gerado.
Listagem 2.181 – Resultado da execução acima
<html>
<head>
<title>teste de html</title>
<meta name=”generator” content=”SQL*Plus 9.0.1">
</head>
<body BGCOLOR=#ff0000>
<p>
<table border=”1" width=”90%”>
<tr>
<th>
CD_
</th>
142 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
<th>
NM_FUNC
</th>
</tr>
<tr>
<td>
A00
</td>
<td>
CRISTINA
</td>
</tr>
<tr>
<td>
A00
</td>
<td>
VICENTE
</td>
</tr>
<tr>
<td>
A00
</td>
<td>
SILVIO
</td>
</tr>
</table>
<p>
</body>
</html>
O MENU DO SQL*PLUS
O menu do SQL*Plus apresenta cinco submenus: Arquivo, Editar, Procurar, Opções e Ajuda.
ARQUIVO
Temos as opções 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 execução.
EDITAR
Realiza as operações básicas de copiar e colar, aciona o editor ou define um novo editor.
PROCURAR
Faz pesquisa de um texto na tela do SQL*Plus.
OPÇÕES
Apresenta o diálogo Ambiente com a lista de variáveis de sistema e seus valores defaults para modificação.
AJUDA
Apresenta informações sobre a versão do SQL*Plus.
EXERCÍCIOS
2.62) Sabendo-se que os códigos de departamento são subdivididos em depto (letra) e centro de custo (número),
deseja-se uma lista organizada por centro de custo contendo nome e sobrenome do funcionário, código do
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
143
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
departamento, salário e cargo. Deve ser apresentada uma única coluna para nome e sobrenome, salário deve ser
editado, deve ser feita uma separação de página para cada centro de custo. Deseja-se uma totalização dos salários,
numeração de página e o mês vigente no cabeçalho.
2.63) Gere um arquivo a ser utilizado para carga de dados em outro ambiente contendo as seguintes informações:
matrícula, nome e sobrenome (única coluna), salário, cargo, grau de instrução e data de nascimento. As informações
devem ser apresentadas alinhadas por coluna e separadas por vírgula. Faça um script para criação deste arquivo
(usar Spool). O arquivo gerado deve ter o nome de carga.sql.
2.64) Montar uma lista dos aniversariantes por mês, contendo para cada mês (apresentado por extenso em português) o
nome, idade e departamento do funcionário, ordenada por número de mês. Não deve haver repetição do nome do mês.
A página deve ser mudada quando ocorrer a mudança do mês.
2.65) Crie um relatório que forneça a média salarial, o maior salário e o menor salário do departamento informado
como parâmetro. O usuário poderá informar o departamento em letras maiúsculas ou minúsculas e sem aspas. A
solicitação do parâmetro deve ser formatada e deve ser enviada mensagem antes do início da execução.
2.66) Crie um relatório com as seguintes características:
♦ Capa: “Capa do Relatório – dd/mm/yyyy”
♦ Número de página em todas as folhas (direita).
♦ Título do relatório: Primeiro Relatório Exercício (centralizado).
♦ Apresentar a versão do Oracle em todas as páginas (esquerda).
♦ Datar todas as páginas (esquerda).
♦ Quebrar por Departamento e colocar o nome do departamento no título de cada página.
♦ No rodapé de cada página, devem constar também o nome do departamento, além do título “Confidencial”(centralizado).
♦ Apresentar matrícula, data de admissão (dd/mm/yyyy), salário (formatado).
♦ Deve ser apresentado um total salarial e uma média por departamento no final do relatório. Deseja-se, também,
a quantidade de funcionários por departamento no final do relatório.
♦ Ordenar o relatório por departamento e salário descendente.
2.67) Criar um arquivo a ser usado toda vez que abrirmos o SQL*Plus com as seguintes características:
♦ O tamanho de cada linha deve estar limitado a 70 caracteres.
♦ Deve ser apresentada mensagem indicativa da quantidade de linhas selecionadas para qualquer número de
linhas selecionadas.
♦ A indicação de ausência de valor deve ser feita com o texto “<null>“.
♦ A largura-padrão para colunas numéricas deve ser 10 caracteres.
♦ O tamanho de uma página padrão deve ser de 20 linhas.
♦ O prompt apresentado à esquerda do vídeo deve ser “Plus> “, incluindo a hora.
♦ O sufixo dos arquivos de trabalho deve ser “.Txt”.
♦ As mensagens recebidas de programas PL/SQL devem ser habilitadas com área de armazenamento de 10.000 bytes.
2.68) Crie um relatório com as seguintes características:
♦ Capa: “Capa do Relatório”
♦ Número de página em todas as folhas (direita).
♦ Título do relatório: Relação de Funcionários e Projetos (centralizado).
144 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
♦ Apresentar a versão do Oracle em todas as páginas (esquerda).
♦ Datar todas as páginas (esquerda).
♦ Quebrar por Projeto e colocar o nome do Projeto no título de cada página
♦ No rodapé de cada página, devem constar também o nome do departamento, além do título “Confidencial”(centralizado).
♦ Apresentar nome do responsável (nome e sobrenome – alinhados à esquerda) e data de admissão (dd/mm/yyyy
– centralizado), nome do funcionário (nome e sobrenome – centralizado) e salário (formatado).
♦ Deve ser apresentado um total salarial e uma média por projeto no final do relatório. Deseja-se, também, a
quantidade de funcionários por projeto e no final do relatório.
♦ Ordenar o relatório por projeto, responsável e salário (descendente).
2.69) Repita a geração anterior, porém em formato HTML.
FUNDAMENTOS EM: CONSULTAS COMPLEXAS
PRÉ-REQUISITOS
♦ Conhecimentos e entendimento da sintaxe previamente descrita de SQL e SQL*Plus.
METODOLOGIA
♦ Apresentação e descrição sintática de cláusulas mais complexas utilizadas nos comandos Select, Insert, Update e Delete, tais como Outer Join, Subselect
Correlacionado, Teste de existência, Hierarquia, Views, utilização de subquery na cláusula From, Merge, Insert com All e When, uso de Select na cláusula Select.
TÉCNICA
♦ Apresentação 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 têm
correspondência com alguma linha na tabela B.
Listagem 2.182 – Preparando Outer Join
SQL> SELECT MAT, NOME, DEPTO, CARGO, SALARIO, GERENTE, DEPTNO
2
FROM F, P
3
WHERE DEPTO = DEPTNO;
Execute o comando da Listagem 2.182 e observe que, quando estabelecemos um Join da tabela F com a tabela P
que contém linhas referentes aos departamentos A00, D11 e D21, a linha referente ao departamento A00 não
aparece no resultado.
Esta situação ocorre porque na cláusula Where estabelecemos a restrição 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 informação que estabelece a ligação existe em ambas as tabelas, é
chamado de Inner Join e já foi estudado por nós anteriormente. Trata-se da forma mais usual de ligação 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 não seja encontrada a ligação com a outra tabela.
Listagem 2.183 – Outer Join
SQL> SELECT MAT, NOME, DEPTO, CARGO, SALARIO, GERENTE, DEPTNO
2
FROM F, P
3
WHERE DEPTO (+) = DEPTNO;
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
145
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Quando executamos o comando da Listagem 2.183, vemos aparecer a linha contendo os dados da tabela de
departamento (P), mesmo não havendo correspondência com nenhuma linha da tabela de funcionários (F).
A indicação de Outer Join é feita com o símbolo (+) ao lado das colunas que estabelecem a relação na cláusula
Where. Caso o relacionamento fosse estabelecido com duas colunas, ambas receberiam a indicação.
A indicação de Outer Join é colocada à direita das colunas que representam a linha que pode estar ausente no resultado.
No exemplo da Listagem 2.183, colocamos o símbolo (+) ao lado de Depto, coluna da tabela F, indicando que
poderiam haver linhas da outra tabela (no caso P) que não tivessem correspondência com F, ou seja, os dados
relativos a F ficariam ausentes no resultado.
Listagem 2.184 – Outer Join
SQL> SELECT NM_DEPTO, NM_FUNC NM_GERENTE
2
FROM FUNC, DEPTO
3
WHERE FUNC.CD_MAT (+) = DEPTO.CD_GERENTE;
No exemplo da Listagem 2.184, listamos cada departamento (tabela Depto) e o nome do gerente correspondente
(tabela Func), porém sabíamos que havia departamentos sem indicação do gerente. Para conseguirmos realizar o
Join, precisamos informar ao Oracle que poderiam haver valores de cd_gerente que não teriam correspondência
na coluna cd_mat da tabela Func.
Como restrição, temos que o indicador só pode ser colocado em um dos lados do sinal de igualdade.
Listagem 2.185 – Outer Join
SQL> SELECT NM_DEPTO, NM_FUNC NM_GERENTE
2
FROM FUNC RIGHT OUTER JOIN DEPTO ON FUNC.CD_MAT = DEPTO.CD_GERENTE
3 /
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 cláusula OUTER JOIN) serão trazidas mesmo que não haja correspondência
com linhas em Func (lado esquerdo da cláusula OUTER JOIN). A utilização explícita da sintaxe RIGHT OUTER
JOIN torna o comando SELECT mais claro para quem o estiver lendo. A recomendação da Oracle é de que passemos
a usar esta sintaxe no lugar da outra (+).
Listagem 2.186 – Outer Join
SQL> SELECT NM_DEPTO, NM_FUNC NM_GERENTE
2
FROM FUNC FULL OUTER JOIN DEPTO ON DEPTO.CD_GERENTE = FUNC.CD_MAT;
NM_DEPTO
---------------------------------------DIRETORIA DA EMPRESA
ASSESSORIA
CENTRO DE INFORMACAO
GERENCIA DE SISTEMAS COMERCIAIS
GERENCIA DE SISTEMAS ADMINISTRATIVOS
DIRETORIA DE SUPORTE/PRODUCAO
OPERACAO
SUPORTE DE SOFTWARE
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 estético (observe . . .).
A sintaxe Full Outer Join permite que sejam trazidas linhas da tabela Func que não possuem correspondência em
Depto e linhas de Depto que não possuem correspondência em Func, além, é claro, daquelas que se relacionam. Esta
é uma vantagem sobre a sintaxe anterior (+), que não permite o uso do sinal (+) em ambos os lados da operação.
146 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
EXISTS
Exists é um predicado, e portanto deve ser usado sob condição. Não pode ser usado em nível de Select e nem
independentemente das cláusulas Where, Start With, Connect By ou Having.
Este predicado tem a finalidade de verificar se a condição estabelecida em um subselect existe ou não. Não é feita
comparação de valor, o retorno é True ou False. Tão logo a condição seja verificada, a busca é interrompida.
Listagem 2.187 – Exists
SQL> SET ECHO ON
SQL> ACCEPT DEP PROMPT “INFORME O DEPTO A SER REMOVIDO: “
INFORME O DEPTO A SER REMOVIDO: D11
SQL> DELETE FROM DEPTO
2
WHERE CD_DEPTO = '&DEP'
3
AND NOT EXISTS (SELECT 0 FROM FUNC
4
WHERE CD_DEPTO = '&DEP')
5 /
antigo
2: WHERE CD_DEPTO = '&DEP'
novo
2: WHERE CD_DEPTO = 'D11'
antigo
4:
WHERE CD_DEPTO = '&DEP')
novo
4:
WHERE CD_DEPTO = 'D11')
0 linhas deletadas.
SQL> UNDEFINE DEP
No exemplo da Listagem 2.187, desejava-se remover um determinado departamento, desde que não houvesse
funcionários associados. Observe que no subselect associado à cláusula Exists não houve necessidade de se obter
nenhuma coluna em especial (Select 0). O objetivo era apenas determinar se existiam ou não linhas na tabela Func
relativas ao departamento fornecido.
Listagem 2.188 – Exists
SQL> INSERT INTO G (MAT, NOME, DEPTO, CARGO, SALARIO)
2 SELECT CD_MAT, NM_FUNC, CD_DEPTO, NR_CARGO, VL_SAL
3
FROM FUNC
4
WHERE CD_DEPTO IN ('A00', 'B01')
5
AND NOT EXISTS (SELECT 0 FROM G
6
WHERE DEPTO IN ('A00', 'B01'));
4 linhas criadas.
SQL> /
0 linhas criadas.
No exemplo da Listagem 2.188, o objetivo era incluir linhas na tabela G, desde que os departamentos referenciados
(A00 e B01) não existissem em sua massa de dados. Isto garantiria que duas execuções não duplicariam os dados da
tabela. Observe que numa segunda execução do mesmo comando nenhuma linha foi incluída.
HIERARQUIA
As cláusulas Start With e Connect By utilizadas em um comando Select permitem que façamos a leitura organizada
de uma hierarquia. Como restrição, temos que a relação deve ocorrer entre colunas de uma mesma tabela.
Uma hierarquia é definida por um auto-relacionamento em diversos níveis. Suponhamos que tivéssemos uma
tabela contendo peças fabricadas por uma determinada empresa. Cada uma das peças é composta de outras peças,
que também podem ser compostas por outras peças, e assim por diante.
Listagem 2.189 – Criação da Tabela Peças
SQL> CREATE TABLE PEÇAS
2 (NM_PEÇA
VARCHAR2(30),
3
VL_PEÇA
NUMBER(8,2),
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
147
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
4
CD_PEÇA
NUMBER(5),
5
CD_PEÇA_PAI
NUMBER(5),
6
IN_PEÇA_ELEMENTAR NUMBER(1),
7
PRIMARY KEY (CD_PEÇA)
8 );
Tabela criada.
SQL> ALTER TABLE PEÇAS ADD CONSTRAINT AUTOREL
2
FOREIGN KEY (CD_PEÇA_PAI) REFERENCES PEÇAS;
Tabela alterada.
Na Listagem 2.189, criamos uma tabela capaz de armazenar as peças fabricadas pela empresa. Além da restrição da
primary key, criamos um relacionamento que garantirá que uma determinada peça esteja associada à peça-pai da
qual é componente.
Suponhamos, agora, que desejamos cadastrar as seguintes peças apresentadas no esquema da Figura 2.10.
Figura 2.10 – Esquema-exemplo
No esquema, a peça 10000 é composta de três peças (11000, 12000 e 13000); a peça 11000 é, por sua vez, composta
de duas outras peças (11100 e 11200). A peça 11200 é composta das peças 11210 e 11220. Desta forma, geramos
um conjunto hierárquico em que cada peça-filha identifica qual a peça-pai da qual é componente.
Para refletirmos estas informações na tabela Peças do banco de dados, foram cadastradas as linhas de dados do
esquema, algumas das quais apresentadas na Listagem 2.190.
Listagem 2.190 – Inclusão na tabela Peças
SQL> INSERT INTO PEÇAS
2
(NM_PEÇA, VL_PEÇA, CD_PEÇA, CD_PEÇA_PAI, IN_PEÇA_ELEMENTAR)
3 VALUES
4
('PEÇA 11100', 111, 11100, 11000, 0);
1 linha criada.
SQL> INSERT INTO PEÇAS
2
(NM_PEÇA, VL_PEÇA, CD_PEÇA, CD_PEÇA_PAI, IN_PEÇA_ELEMENTAR)
3 VALUES
4
('PEÇA 11200', 112, 11200, 11000, 0);
1 linha criada.
SQL> INSERT INTO PEÇAS
2
(NM_PEÇA, VL_PEÇA, CD_PEÇA, CD_PEÇA_PAI, IN_PEÇA_ELEMENTAR)
3 VALUES
4
('PEÇA 11210', 11.21, 11210, 11200, 1);
1 linha criada.
Com a tabela preparada, poderemos utilizar o comando Select para obter as linhas organizadas segundo a hierarquia.
Listagem 2.191 – Connect By
SQL> SELECT NM_PEÇA FROM PEÇAS
2
CONNECT BY PRIOR CD_PEÇA = CD_PEÇA_PAI
3
START WITH CD_PEÇA_PAI IS NULL;
NM_PEÇA
148 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
---------PEÇA 10000
PEÇA 11000
PEÇA 11100
PEÇA 11200
PEÇA 11210
PEÇA 11220
PEÇA 12000
PEÇA 13000
PEÇA 13100
PEÇA 13200
Observe a ordem em que as linhas são apresentadas: a peça 10000 aparece em primeiro lugar, seguida da primeira
peça-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 nível (filhos diretos de 10000) com a peça 12000 que,
como não tem filhos, faz com que a lista prossiga no mesmo nível com a peça 13000, que possui as peças-filhas
13100 e 13200. Esta é a ordem em que o Oracle pesquisa cada ocorrência na tabela. Poderíamos entender como um
processo recursivo que só se encerra quando chega ao último nível da hierarquia.
As cláusulas Start With e Connect By têm 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, não sabe quantas árvores diferentes e independentes existem na tabela. Esta cláusula limita a lista aos ramos
que desejamos listar. Se não informarmos esta cláusula, o Oracle lerá cada linha da tabela Peças e a considerará
início (topo) de hierarquia, tentando gerar uma árvore hierárquica 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 princípio, uma vez que cd_peça_pai
contém o valor da peça-pai da relação; na verdade, este valor funciona como um “ponteiro” para a coluna que
realmente representa a coluna-pai da relação (a coluna filha aponta para a coluna-pai – o inverso não seria
possível, pois existem diversos filhos).
Listagem 2.192 – Consulta a Peças
SQL> COL NM_PEÇA FOR A15
SQL> SELECT CD_PEÇA, NM_PEÇA, VL_PEÇA, CD_PEÇA_PAI
2
FROM PEÇAS WHERE ROWNUM < 5;
CD_PEÇA
--------10000
11000
11100
11200
NM_PEÇA
---------PEÇA 10000
PEÇA 11000
PEÇA 11100
PEÇA 11200
VL_PEÇA CD_PEÇA_PAI
------- ----------10000
1100
10000
111
11000
112
11000
Quando trabalhamos com estas cláusulas, ainda temos como recurso adicional a possibilidade de identificar o
nível hierárquico da linha listada utilizando a pseudocoluna Level (esta pseudocoluna nos Selects que não usam a
cláusula Connect By retorna zero).
Listagem 2.193 – Connect By sem Level
SQL> SELECT LEVEL, NM_PEÇA FROM PEÇAS
2 CONNECT BY PRIOR CD_PEÇA = CD_PEÇA_PAI
3
START WITH CD_PEÇA_PAI IS NULL;
LEVEL
----1
2
3
3
4
4
NM_PEÇA
---------PEÇA 10000
PEÇA 11000
PEÇA 11100
PEÇA 11200
PEÇA 11210
PEÇA 11220
Já que contamos com esta informação adicional, podemos utilizá-la para estabelecer uma endentação no resultado,
como mostra a Listagem 2.194.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
149
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 2.194 – Connect By com Level
SQL> SELECT RPAD(' ', LEVEL*4 -4)|| NM_PEÇA PEÇA
2
FROM PEÇAS
3 CONNECT BY PRIOR CD_PEÇA = CD_PEÇA_PAI
4
START WITH CD_PEÇA_PAI IS NULL
5 /
PEÇA
---------------------PEÇA 10000
PEÇA 11000
PEÇA 11100
PEÇA 11200
PEÇA 11210
PEÇA 11220
PEÇA 12000
PEÇA 13000
PEÇA 13100
PEÇA 13200
Com este resultado, temos uma boa visibilidade da hierarquia.
Listagem 2.195 – Connect By com Siblings
SQL> SELECT RPAD(' ', LEVEL*4 -4)|| NM_PEÇA PEÇA
2
FROM PEÇAS
3 CONNECT BY PRIOR CD_PEÇA = CD_PEÇA_PAI
4
START WITH CD_PEÇA_PAI IS NULL
5 ORDER SIBLINGS BY 1 DESC;
PEÇA
---------------------PEÇA 10000
PEÇA 13000
PEÇA 13200
PEÇA 13100
PEÇA 12000
PEÇA 11000
PEÇA 11200
PEÇA 11220
PEÇA 11210
PEÇA 11100
Compare este resultado com o anterior. Observe que a hierarquia não foi quebrada, porém a ordem dos elementos
subordinados foi invertida. A cláusula SIBLINGS associada à cláusula ORDER BY permite que controlemos a ordem
com que os ramos serão apresentados.
SUBSELECTS CORRELACIONADOS
Nos subselects estudados até agora, não havia relação entre a query principal e a query do subselect. A execução do
subselect acontecia independente da query principal, gerando um resultado que seria utilizado para estabelecer a
restrição nos dados da query principal.
Suponhamos, porém, que desejássemos obter uma informação relativa à linha lida na query principal. Por exemplo, se
desejássemos saber quais os funcionários que ganham mais que a média salarial de todos os funcionários do mesmo
departamento. Observe que para atender a esta consulta precisaríamos ler o funcionário, obter o código do departamento,
calcular a média salarial e retornar ao funcionário original para verificar se ele se enquadra na condição estabelecida.
Um subselect correlacionado indica ao Oracle a necessidade de realizar estas operações.
Listagem 2.196 – Correlação
SQL> SELECT NM_FUNC, VL_SAL FROM FUNC F
2
WHERE VL_SAL > (SELECT AVG(VL_SAL) FROM FUNC
3
WHERE CD_DEPTO = F.CD_DEPTO);
150 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
A correlação é estabelecida quando no subselect restringimos a pesquisa a uma informação vinda da query externa.
No exemplo da Listagem 2.196, limitamos o cálculo da média ao departamento (F.cd_depto) obtido da query
externa, que possui uma tabela Func apelidada de F.
Aparentemente, neste exemplo, a correlação necessita de um apelido na query externa. Veja, porém, o exemplo da
Listagem 2.197.
Listagem 2.197 – Subselect correlacionado
SQL> SELECT CD_MAT, NM_SOBRENOME, VL_SAL, CD_GERENTE
2
FROM FUNC, DEPTO
3
WHERE FUNC.CD_DEPTO = DEPTO.CD_DEPTO
4
AND VL_SAL > (SELECT VL_SAL FROM FUNC
5
WHERE CD_MAT = CD_GERENTE);
não há linhas selecionadas
Na Listagem 2.197, desejávamos obter quais os funcionários que ganhavam mais que seu respectivo gerente.
O Join da query externa garante que na linha lida haverá dados de um funcionário qualquer e o código do gerente
do departamento em que este funcionário trabalha. Na subquery foi feita uma consulta à tabela Func para obtenção
do salário do funcionário cuja matrícula correspondesse ao código do gerente obtido na linha da query externa.
Não houve necessidade de qualificação.
A qualificação só é necessária 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 desejássemos obter departamentos que não possuam funcionários. Observe que a cláusula Exists foi utilizada juntamente com a correlação na Listagem 2.198.
Listagem 2.198 – Not Exists junto com correlação
SQL> SELECT CD_DEPTO, NM_DEPTO
2
FROM DEPTO
3
WHERE NOT EXISTS (SELECT * FROM FUNC
4
WHERE FUNC.CD_DEPTO = DEPTO.CD_DEPTO);
CD_ NM_DEPTO
--- --------------------D01 DIRETORIA DE SISTEMAS
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 informações dos funcionários e dos departamentos respectivos.
O comando Create View pertence à parte da linguagem que define objetos no banco de dados, chamada de DDL,
porém inciaremos sua utilização neste item a fim de introduzirmos o próximo tópico. A criação de views associadas
a objetos será vista no Capítulo 4.
Listagem 2.199 – Criação da view Funcionário
SQL> CREATE VIEW FUNCIONARIO (NOME, DEPTO, SALARIO, CARGO, NASC, INST)
2
AS SELECT NM_FUNC||' '||NM_SOBRENOME, NM_DEPTO, VL_SAL, NR_CARGO,
3
TO_CHAR(DT_NASC, 'DD/MM/YYYY HH24:MI'), NR_GIT
4
FROM FUNC, DEPTO
5
WHERE FUNC.CD_DEPTO = DEPTO.CD_DEPTO
6 /
View criada.
SQL> DESC FUNCIONARIO
Nome
Nulo?
Tipo
----------------------------------------- -------- -----------NOME
VARCHAR2(25)
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
151
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
DEPTO
SALARIO
CARGO
NASC
INST
VARCHAR2(40)
NUMBER(9,2)
NUMBER(3)
VARCHAR2(16)
NUMBER(2)
Observe que a view contém a possibilidade de alterarmos o nome das colunas para nomes mais amigáveis e são
visualizadas, pelo usuário, como tabelas. Na verdade, não são tabelas capazes de armazenar dados. Fazem referência
a uma ou mais tabelas, outras views ou uma combinação de tabelas e views. Correspondem a um comando Select
armazenado na base de dados, que é obtido quando realizamos uma operação de DML fazendo referência à view.
Listagem 2.200 – Criação da view FuncD11
SQL> CREATE VIEW FUNCD11 (NOME, DEPTO, SALARIO, CARGO, NASC, INST)
2
AS SELECT NM_FUNC||' '||NM_SOBRENOME, NM_DEPTO, VL_SAL, NR_CARGO,
3
TO_CHAR(DT_NASC, 'DD/MM/YYYY HH24:MI'), NR_GIT
4
FROM FUNC, DEPTO
5
WHERE FUNC.CD_DEPTO = DEPTO.CD_DEPTO
6
AND FUNC.CD_DEPTO = 'D11';
View criada.
Na Listagem 2.200 criamos a view FuncD11, semelhante à view Funcionário, incluindo a restrição de que só
devem ser selecionados os funcionários do departamento D11.
As views possuem uma grande utilização em um banco de dados: podemos armazenar queries complexas que
sejam muito utilizadas, podemos armazenar queries que contenham restrições permitindo o acesso apenas às
views no lugar das tabelas básicas (restrições de linhas e/ou colunas), podemos armazenar queries que contenham
cálculos, colunas constantes que decodifiquem a forma real como a informação está armazenada.
Quando realizamos uma consulta utilizando na cláusula From o nome da view, o Oracle junta as restrições existentes
nos dois Selects e realiza a consulta à tabela básica (pois é nela que estão armazenados os dados).
Listagem 2.201 – Consultando com a view FuncD11
SQL> SELECT NOME, DEPTO, SALARIO, NASC FROM FUNCD11
2
WHERE CARGO = 55;
NOME
------------------------IRACY SOUZA
BRUNO AZEVEDO
DAVI BARBOSA
JOANA LUZ
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 restrição de que apenas o cargo 55 fosse
selecionado. Na base de dados existem nove linhas com cargo 55, porém apenas quatro foram listadas. Isto acontece
porque duas restrições foram estabelecidas na busca: cargo igual a 55 e código 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 referência à cláusula Select quanto à cláusula 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.
Listagem 2.202 – Atualizando com a view FuncD11
SQL> UPDATE FUNCD11
2
SET SALARIO = SALARIO * 1.1
3
WHERE INST = 17;
3 linhas atualizadas.
No exemplo da Listagem 2.203, estaremos criando uma view que obtenha apenas os gerentes cadastrados na
tabela Func.
152 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Utilizamos a cláusula With Check Option para garantir que a restrição estabelecida para leituras (nr_cargo >= 60 )
também seja verificada nas inclusões, alterações e exclusões. Caso esta opção não tivesse sido estabelecida,
poderíamos ter efetuado a inclusão na view (na tabela Func, na verdade), porém não obteríamos a linha criada
quando efetuássemos uma consulta usando a view.
Listagem 2.203 – Cláusula With Check Option
SQL> CREATE VIEW GERENTES
2
(MAT, NOME, SOBRENOME, DEPTO, CARGO, INSTR, NASC) AS
3
SELECT CD_MAT, NM_FUNC, NM_SOBRENOME, CD_DEPTO,
4
NR_CARGO, NR_GIT, DT_NASC
5
FROM FUNC WHERE NR_CARGO >= 60
6
WITH CHECK OPTION;
View criada.
SQL> INSERT INTO GERENTES VALUES
2
(11, 'TESTE', 'TESTE', 'D01', 55, 20, '12/01/65')
3 /
INSERT INTO GERENTES VALUES
*
ERRO na linha 1:
ORA-01402: violação da cláusula where da view WITH CHECK OPTION
Se desejarmos impedir que sejam feitas atualizações utilizando a view, podemos dispor da cláusula With Read Only
em substituição a With Check Option.
Listagem 2.204 – Cláusula With Read Only
SQL> DROP VIEW GERENTES;
View eliminada.
SQL> CREATE VIEW GERENTES
2
(MAT, NOME, SOBRENOME, DEPTO, CARGO, INSTR, NASC) AS
3
SELECT CD_MAT, NM_FUNC, NM_SOBRENOME, CD_DEPTO,
4
NR_CARGO, NR_GIT, DT_NASC
5
FROM FUNC WHERE NR_CARGO >= 60
6
WITH READ ONLY;
View criada.
SQL> INSERT INTO GERENTES VALUES
2
(11, 'TESTE', 'TESTE', 'D01', 55, 20, '12/01/65');
INSERT INTO GERENTES VALUES
*
ERRO na linha 1:
ORA-01733: coluna virtual não permitida aqui
Neste caso, qualquer tentativa de atualização (Insert, Update ou Delete) através da view resulta em erro.
USO DE SUBQUERY NA CLÁUSULA FROM
A cláusula From admite a utilização de uma subquery. Seu funcionamento será idêntico ao de uma view, porém
sem haver necessidade de armazenamento da query no banco de dados. A tempo de execução, a sintaxe de cada
uma das queries será unida para estabelecer a obtenção das linhas adequadas.
EM SELECTS
Veremos aqui a utilização subquery na cláusula From de um comando Select.
Listagem 2.205 – Subquery na cláusula From de Select
SQL> SELECT CD_DEPTO, (SAL_DEPTO / SAL_EMP) * 100 “%PART.DEPTO”,
2
SAL_DEPTO, SAL_EMP
3
FROM (SELECT SUM(VL_SAL) SAL_DEPTO, CD_DEPTO FROM FUNC
4
GROUP BY CD_DEPTO) D,
5
(SELECT SUM(VL_SAL) SAL_EMP FROM FUNC) E;
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
153
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Neste exemplo, utilizamos um Join de duas subqueries. A primeira obtém o total salarial por departamento, a
segunda, o total salarial de toda a empresa. Na query principal estabelecemos um Join com o resultado das duas
subqueries, de tal forma que a soma salarial por departamento foi dividida pelo total da empresa, obtendo-se então
um percentual da participação de cada departamento na empresa.
Observe este outro exemplo da Listagem 2.206.
Listagem 2.206 – Subquery na cláusula From
SQL> SELECT CD_MAT, NM_FUNC, VL_SAL
2
FROM FUNC, (SELECT MAX(VL_SAL) MAXIMO FROM FUNC)
3
WHERE VL_SAL = MAXIMO;
CD_MAT NM_FUNC
VL_SAL
--------- --------------- -----10 CRISTINA
5275
SQL> SELECT CD_MAT, NM_FUNC, VL_SAL, MINIMO
2
FROM FUNC, (SELECT MIN(VL_SAL) MINIMO FROM FUNC)
3
WHERE VL_SAL = MINIMO;
CD_MAT NM_FUNC
VL_SAL
MINIMO
--------- --------------- ------ --------290 JOAO
1534
1534
As subqueries na cláusula From são bastante utilizadas, principalmente quando a subquery realiza uma agregação.
Listagem 2.207 – Nomeando a subquery
SQL> WITH QMAX AS (SELECT MAX(VL_SAL) MAXIMO FROM FUNC)
2 SELECT CD_MAT, NM_FUNC, VL_SAL
3
FROM FUNC, QMAX
4
WHERE VL_SAL = MAXIMO;
CD_MAT NM_FUNC
VL_SAL
--------- ---------------- -----10 CRISTINA
5275
SQL> WITH QMIN AS (SELECT MIN(VL_SAL) MINIMO, AVG(VL_SAL) MEDIA FROM FUNC)
2 SELECT MEDIA FROM QMIN;
MEDIA
---------2730,35938
O comando de SQL apresenta uma outra forma de utilizarmos subquery na cláusula FROM, porém de uma maneira
mais clara. Com a cláusula 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 exemplificação, repetiremos as condições da view Gerentes, porém relacionada diretamente no
lugar do nome da tabela básica.
Listagem 2.208 – Subquery com Update
SQL> UPDATE (SELECT CD_MAT, NM_FUNC, NM_SOBRENOME, CD_DEPTO,
2
NR_CARGO, NR_GIT, DT_NASC FROM FUNC
3
WHERE NR_CARGO >= 60 WITH CHECK OPTION)
4
SET NR_GIT = NR_GIT + 1
5
WHERE CD_DEPTO IN ('B01', 'D21');
1 linha atualizada.
Até mesmo a cláusula With Check Option pode ser utilizada para garantir que a verificação seja realizada. Observe
que, com a seleção de apenas algumas colunas da tabela Func, somente estas podem ser atualizadas.
154 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
EM INSERTS
Na Listagem 2.209, utilizamos a mesma query do exemplo anterior, porém violamos a restrição de cargo >= 60. Observe
que a mensagem de erro é exatamente a mesma de quando fizemos uma tentativa de inclusão incorreta com a view.
Listagem 2.209 – Subquery em Insert
SQL> INSERT INTO (SELECT CD_MAT, NM_FUNC, NM_SOBRENOME,
2
CD_DEPTO,NR_CARGO, NR_GIT, DT_NASC
3
FROM FUNC
4
WHERE NR_CARGO >= 60 WITH CHECK OPTION)
5
VALUES (12, 'TESTE', 'TESTE', 'D11', 55, 21, '14/04/1970')
6 /
INSERT INTO (SELECT CD_MAT, NM_FUNC, NM_SOBRENOME,
*
ERRO na linha 1:
ORA-01402: violação da cláusula where da view WITH CHECK OPTION
EM DELETES
Na Listagem 2.210, tentamos fazer referência a uma coluna da tabela Func que não estava presente no Select usado
na cláusula From.
Listagem 2.210 – Subquery em Delete
SQL> DELETE FROM (SELECT CD_MAT FROM FUNC
2
WHERE CD_MAT NOT IN (SELECT CD_GERENTE FROM DEPTO
3
WHERE CD_GERENTE IS NOT NULL))
4
WHERE CD_MAT >= 210
5
AND NR_GIT = 20;
AND NR_GIT = 20;
*
ERRO na linha 5:
ORA-00904: nome inválido de coluna
A mensagem de erro indica que somente podemos mencionar na cláusula Where do comando Delete colunas
presentes no Select da subquery.
O COMANDO MERGE
O comando tem a função de obter linhas de uma determinada tabela para atualizar ou incluir linhas em outra tabela.
Como restrição temos que não podemos atualizar múltiplas vezes a mesma linha da tabela destino em um mesmo
comando Merge.
As cláusulas presentes nesse comando são:
♦ Into – determina a tabela destino onde faremos a inclusão ou atualização.
♦ Using – determina o dado (origem) que será incluído ou atualizado.
♦ When Matched / Not Matched – determina a condição a ser avaliada para inclusão ou atualização. Quando a
condição for verdadeira ocorrerá a atualização; caso contrário será realizada a inclusão.
Listagem 2.211 – Merge
SQL> MERGE INTO FUNC F
2
USING (SELECT EMPNO, ENAME, HIREDATE, SAL FROM SCOTT.EMP
3
WHERE ROWNUM < 11)
4
ON (F.CD_MAT = EMPNO)
5
WHEN MATCHED THEN UPDATE SET VL_SAL = VL_SAL + .10 * SAL
6
WHEN NOT MATCHED THEN INSERT (F.CD_MAT, F.NM_FUNC, F.DT_NASC, F.VL_SAL)
7
VALUES (EMPNO, ENAME, HIREDATE, SAL);
10 linhas intercaladas.
Analisemos o exemplo da Listagem 2.211; a operação de Merge será realizada sobre a tabela Func. A cláusula Using
determina a origem dos dados, que pode ser uma outra tabela (neste caso não há necessidade do parêntese), um
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
155
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
view ou, como usamos, uma subquery. A tabela Func foi apelidada de F para que pudesse ser qualificada no
comando Insert. Isto foi necessário pois usamos a mesma coluna VL_SAL tanto no trecho relativo ao Update
quanto relativo ao Insert, o que causou um erro de ambigüidade. No exemplo da Listagem 2.212, usamos o mesmo
exemplo, mas como não fizemos a inclusão na coluna VL_SAL, não tivemos necessidade de qualificação.
Listagem 2.212 – Merge
SQL> MERGE INTO FUNC
2
USING (SELECT EMPNO, ENAME, HIREDATE, SAL FROM SCOTT.EMP
3
WHERE ROWNUM < 11) X
4
ON (CD_MAT = X.EMPNO)
5
WHEN MATCHED THEN UPDATE SET VL_SAL = VL_SAL + .10 * SAL
6
WHEN NOT MATCHED THEN INSERT (CD_MAT, NM_FUNC, DT_NASC)
7
VALUES (EMPNO, ENAME, HIREDATE);
10 linhas intercaladas.
No nosso caso as colunas das tabelas envolvidas não possuem qualquer semelhança; porém havendo necessidade
podemos apelidar a subquery e usar este apelido como qualificador das colunas similares, como fizemos no exemplo
da Listagem 2.212.
INCLUSÃO SIMULTÂNEA EM DIVERSAS TABELAS
As cláusulas All e When do comando Insert permitem que façamos a inclusão simutânea, em um único comando
Insert, de dados em diversas tabelas. As cláusulas possuem o seguinte significado.
♦ All <cláusula Insert Into> – indica que o Oracle fará uma inclusão incondicional. Será incluída uma linha para
cada cláusula Insert definida para cada linha retornada pela subquery.
♦ When – indica que será feita uma filtragem. Podemos incluir até 127 cláusulas When. Elas indicarão qual dos
inserts será realizado.
♦ All When – todas as cláusulas When serão verificadas e para cada uma delas em que a condição for verdadeira a
linha será incluída.
♦ First When – as cláusulas When serão verificadas na ordem estabelecida no comando e quando a primeira for
verdadeira a linha será incluída e as demais descartadas.
Listagem 2.213 – Insert All
SQL> INSERT ALL
2
INTO FUNC (CD_MAT, NM_FUNC, CD_DEPTO) VALUES (11, 'TESTE ALL', 'D12')
3
INTO DEPTO (CD_DEPTO, NM_DEPTO)
4
SELECT 'D12', 'NOVO DEPTO' FROM DUAL;
INSERT ALL
*
ERRO na linha 1:
ORA-02291: restrição de integridade (DESENV.SYS_C002817) violada - chave-pai
não localizada
Neste exemplo observamos que, apesar de as duas inclusões serem realizadas pelo mesmo comando, elas são
tratadas separadamente no banco de dados. No exemplo tentamos incluir um funcionário com um departamento
ainda inexistente, incluído no mesmo comando, porém na linha seguinte. Isto não foi possível. Porém, quando
invertemos a operação obtivemos sucesso (veja o exemplo da Listagem 2.214).
Listagem 2.214 – Insert All
SQL> INSERT ALL
2
INTO DEPTO (CD_DEPTO, NM_DEPTO) VALUES ('D12', 'NOVO DEPTO')
3
INTO FUNC (CD_MAT, NM_FUNC, CD_DEPTO)
4
SELECT 11, 'TESTE ALL', 'D12' FROM DUAL;
2 linhas criadas.
A sintaxe do comando exige que se viermos a determinar mais de uma tabela, utilizemos a cláusula Values para
todas as tabelas, exceto para a última, que deverá, obrigatoriamente, vir acompanhada de um comando Select.
156 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Como somente desejávamos que uma linha fosse incluída em Func, usamos, como artifício, o uso de constantes de
leitura da tabela Dual (que possui somente uma linha).
Listagem 2.215 – Insert com All When
SQL> INSERT ALL
2
WHEN EXTRACT (DAY FROM SYSDATE) < 15 THEN
3
INTO FUNC(CD_MAT, NM_FUNC) VALUES
4
WHEN EXTRACT (DAY FROM SYSDATE) BETWEEN 16 AND
5
INTO FUNC(CD_MAT, NM_FUNC) VALUES
6
ELSE
7
INTO FUNC(CD_MAT, NM_FUNC) SELECT
1 linha criada.
(12, 'TESTE WHEN')
20 THEN
(13, 'TESTE WHEN')
14, 'TESTE WHEN' FROM DUAL;
Neste exemplo da Listagem 2.215 utilizamos a cláusula When em conjunto com a cláusula All. Esta combinação
faz com que todas as condições sejam analisadas e se mais de uma for verdadeira mais de um Insert será realizado.
Verifique a sintaxe completa no Capítulo 10.
Listagem 2.216 – Insert com First When
SQL> INSERT FIRST
2
WHEN EXTRACT
3
4
WHEN EXTRACT
5
6
ELSE
7
1 linha criada.
(DAY
INTO
(DAY
INTO
FROM SYSDATE) < 15 THEN
FUNC(CD_MAT, NM_FUNC) VALUES (15, 'TESTE WHEN')
FROM SYSDATE) BETWEEN 16 AND 20 THEN
FUNC(CD_MAT, NM_FUNC) VALUES (16, 'TESTE WHEN')
INTO FUNC(CD_MAT, NM_FUNC) SELECT 17, 'TESTE WHEN' FROM DUAL;
SQL> SELECT CD_MAT, NM_FUNC FROM FUNC
2
WHERE CD_MAT BETWEEN 11 AND 17;
CD_MAT
---------11
13
16
NM_FUNC
---------TESTE ALL
TESTE WHEN
TESTE WHEN
Quando usamos First com When as condições são analisadas em ordem e a primeira atendida é executada, sendo
as demais descartadas. O uso da subquery é obrigatória, veja sintaxe no Capítulo 10.
USOS INCOMUNS DO COMANDO SELECT
Neste tópico estudaremos o uso do comando Select dentro da cláusula Values do comando Insert e da própria
cláusula Select do comando Select.
Listagem 2.217 – Select na cláusula Values
SQL> INSERT INTO FUNC (CD_MAT, NM_FUNC)
2
VALUES ((SELECT MAX(CD_MAT) + 1 FROM FUNC), 'TESTE SELECT');
1 linha criada.
No exemplo da Listagem 2.217 obtivemos o maior valor de matrícula da própria tabela Func para que a inclusão
não corresse o risco de receber erro de duplicidade. Nesta sintaxe temos de garantir que o comando Select retorne
apenas uma linha.
Listagem 2.218 – Select na cláusula Select
SQL> SELECT (SELECT MAX(CD_MAT) FROM FUNC) MAIOR,
2
(SELECT MIN(VL_SAL) FROM FUNC WHERE CD_DEPTO = 'D11') SAL
3
FROM DUAL;
MAIOR
SAL
---------- ---------7845
1827
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
157
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Neste exemplo usamos um comando Select como expressão dentro da própria cláusula Select. Esta montagem é
similar ao uso do Select na cláusula From, com a desvantagem de que o retorno de cada comando Select embutido
deverá conter apenas uma linha.
Listagem 2.219 – Select na cláusula Select
SQL> SELECT (SELECT MAX(CD_MAT) FROM FUNC) MAIOR,
2
(SELECT MIN(VL_SAL) FROM FUNC WHERE CD_DEPTO = 'D11') SAL,
3
(SELECT CD_DEPTO FROM DEPTO)
4
FROM DUAL;
(SELECT CD_DEPTO FROM DEPTO)
*
ERRO na linha 3:
ORA-01427: a subconsulta de uma única linha retorna mais de uma linha
Neste exemplo tentamos obter mais de uma linha de um dos comandos Selects embutidos e recebemos erro.
USO DE CASE NO SELECT
O uso de uma expressão envolvendo a cláusula Case permite uma estrutura do tipo IF..THEN …ELSE dentro de um
comando de SQL sem que tenhamos de usar uma rotina.
Listagem 2.220 – Select com Case
SQL> SELECT CASE IN_SEXO WHEN 'F' THEN 'Sra.'
2
WHEN 'M' THEN 'Sr.'
3
ELSE ' ' END,
4
NM_FUNC||' '||NM_SOBRENOME FROM FUNC
5
WHERE CD_DEPTO = 'A00';
CASE
---Sra.
Sr.
Sr.
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 conteúdo retornamos
informações diferentes linha a linha. Esta sintaxe é similar ao uso do DECODE; no entanto, podemos usar uma
segunda forma sintática que elimina a necessidade da comparação e na qual podemos definir diversas condições
diferentes. Veja a sintaxe completa no Capítulo 10, pois você precisará dela para fazer os exercícios.
EXERCÍCIOS
2.70) Deseja-se uma lista com todos os gerentes e seus respectivos funcionários, contendo nome e sobrenome do
gerente, código e nome do departamento, nome e sobrenome do funcionário. Todos os departamentos devem ser
apresentados (mesmo que não haja gerentes ou funcionários) e todos os funcionários devem ser apresentados
(mesmo que estejam sem departamento).
2.71) Deseja-se remover todas as atividades que não estejam em uso.
2.72) Deseja-se uma lista contendo nome, matrícula, cargo e salário dos funcionários que possuam o maior salário
da empresa e daqueles que possuam o menor salário da empresa.
2.73) Deseja-se uma relação hierárquica de todos os departamentos da empresa (código e nome), considerando-se que
os departamentos estão subordinados aos seus respectivos departamentos contábeis. A relação deve apresentar endentação
de três espaços para identificar subordinação. O departamento no mais alto nível da hierarquia não possui indicação de
departamento contábil (Null). Apresente o caminho da hierarquia. Ordene o resultado pelo nome do departamento.
2.74) Deseja-se uma lista contendo nome, sobrenome, matrícula, ramal, código e nome do departamento, código
e nome do projeto de todos os funcionários que sejam responsáveis por projeto e, simultaneamente, gerentes.
158 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
2.75) Deseja-se uma lista contendo nome, sobrenome, matrícula, ramal, código e nome do departamento, código
e nome do projeto de todos os gerentes que sejam responsáveis por projeto não pertencentes ao seu departamento.
2.76) Produza uma lista contendo nome, sobrenome, cargo e salário de todos os funcionários do sexo feminino
que ganhem mais que todos os funcionários do sexo masculino.
2.77) Produza uma lista contendo nome, sobrenome e salário de todos os funcionários que possuam mais de cinco
anos de casa e que recebam menos que a média dos funcionários com o mesmo cargo.
2.78) Deseja-se obter a média de idade, maior e menor salário e média salarial dos funcionários do sexo feminino,
grupando por grau de instrução e cargo (somente dos cargos com mais de duas funcionárias).
2.79) Determine a quantidade de funcionários por departamento separados por sexo.
2.80) Deseja-se uma lista das atividades que estejam associadas a mais de dois departamentos.
2.81) Atualize o salário dos funcionários com mais de cinco anos de casa (exceto os gerentes) para que ganhem salário
semelhante ao do funcionário com maior cargo do seu próprio departamento (usar um único comando UPDATE).
2.82) Criar uma view sobre a tabela de funcionários que selecione apenas os funcionários com salário superior a R$
2.000,00. Garanta que a atualização através desta view somente possa incluir ou alterar funcionários cujo salário
seja superior a R$ 2.000,00.
2.83) Incluir dados na tabela Depto provenientes da tabela Dept do usuário Scott, prefixando os departamentos
com “D”. Caso exista um departamento com o mesmo código, apenas atualize o nome; caso contrário, inclua o
novo departamento. O valor do departamento contábil para todos os novos departamentos é D01.
2.84) Em mais um estudo salarial, o departamento Pessoal solicitou a relação de funcionários com a indicação de
sexo (por extenso) e uma classificação dos funcionários por idade, da seguinte forma: funcionários 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 funcionário.
2.85) Deseja-se saber o total salarial por cargo, sexo e departamento. Apresente uma amostragem contendo 30%
do total de funcionários da empresa.
FUNDAMENTOS EM: O DICIONÁRIO DE DADOS DO ORACLE
PRÉ-REQUISITOS
♦ Conhecimentos e entendimento da sintaxe previamente descrita de SQL e SQL*Plus.
METODOLOGIA
♦ Apresentação e descrição das views do dicionário de dados, associadas a objetos do usuário.
TÉCNICA
♦ Descrição e comentários sobre a informação contida na(s) tabela(s) mapeada(s) pelas views. Adicionalmente, algumas consultas serão realizadas para melhor
entendimento da informação armazenada.
INTRODUÇÃO
O banco de dados Oracle possui um conjunto de tabelas especiais para registrar informações de todos os objetos
criados no banco. A este conjunto de tabelas chamamos Dicionário de Dados.
As tabelas do dicionário estão criadas no usuário SYS e possuem nomes utilizados internamente pelos softwares da
Oracle. Porém, foram criadas views para que pudéssemos consultar as informações cadastradas.
Estas views estão divididas em três grandes grupos: User_, All_ e DBA_.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
159
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
As views prefixadas com User estão associadas a objetos do usuário; desta forma, ficam disponibilizadas as
informações dos objetos criados no schema do usuário.
As views prefixadas com All estão associadas a objetos a que o usuário tenha autorização, sejam do seu schema ou
de outros schemas.
As views prefixadas com DBA possuem informações sobre todos os objetos do banco de dados.
Neste tópico veremos algumas views User que permitirão a obtenção de diversas informações sobre os objetos do
usuário. Existem muitas outras views User com informações sobre privilégios, auditoria, clusters, dependências,
filas de jobs, roles, comentários, histogramas, etc.
Aquelas associadas a rotinas de PL/SQL serão vistas no próximo capítulo; as demais podem ser consultadas
diretamente no SQL*Plus e no manual Oracle9i Server Reference.
USER_OBJECTS
Esta view contém informações de todos os objetos do usuário, sejam tabelas, views, índices, sinônimos, etc.
Listagem 2.221 – Descrição resumida da User_Objects
SQL> DESC SYS.USER_OBJECTS
Nome
Nulo?
----------------------------------------- -------OBJECT_NAME
SUBOBJECT_NAME
OBJECT_ID
DATA_OBJECT_ID
OBJECT_TYPE
Tipo
------------VARCHAR2(128)
VARCHAR2(30)
NUMBER
NUMBER
VARCHAR2(18)
Através da coluna Object_Type podemos identificar qual o tipo de objeto listado. Obtemos também informações
sobre a data e hora de criação, indicação de subobjeto (tabelas particionadas, por exemplo).
Listagem 2.222 – Consulta à Sys.User_Objects
SQL>
SQL>
SQL>
SQL>
2
3
4
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
160 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
No seu banco de dados você encontrará mais objetos além destes apresentados na listagem. Retiramos algumas
linhas do resultado para que não ficasse muito longo.
Observe no exemplo que a tabela Ativ não tem indicação do Data_Object_Id. Isto ocorre porque ela é uma Index
Table; desta forma, os dados não estão armazenados “exatamente” na tabela e sim no índice correspondente
chamado Sys_Iot_Top_32223, uma vez que a tabela Ativ tem identificação do objeto de 32223.
A tabela Hst_Promo também não tem indicação do Data_Object_Id. Neste caso, isso se deve ao fato de o tipo da
tabela ser Partition: os dados estão armazenados nas partições (Anos80, Anos2000, etc.) que são consideradas
subobjetos da tabela.
Se você executou todos os exemplos, certamente, neste momento, verá listada uma tabela com o nome de Teste_Lob
(no meu caso, com Object_Id de 32242). Esta tabela possui duas colunas (uma com tipo Clob e outra com tipo
Blob). Estes tipos de dados são armazenados externamente à linha da tabela, como poderemos ver pelos objetos
SYS_LOB0000032242C00001$$ e SYS_LOB0000032242C00002$$ presentes na lista de objetos e com tipo LOB.
Finalmente, observamos também a presença de diversos índices, gerados em função das PKs das tabelas Func,
Depto, etc. Estes índices recebem nomes padrões de SYS_C99999 quando não especificamos seu nome a tempo de
criação do objeto.
USER_TABLES
Esta view contém a descrição das tabelas criadas no schema do usuário que realiza a consulta.
Listagem 2.223 – Descrição resumida User_Tables
SQL> DESC SYS.USER_TABLES
Nome
Nulo?
----------------------------------------- -------TABLE_NAME
NOT NULL
TABLESPACE_NAME
CLUSTER_NAME
IOT_NAME
Tipo
------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
Esta view apresenta informações estáticas sobre a tabela, tais como o tablespace onde ela está alocada, o tamanho
de uma extensão, quantidade máxima de extensões, percentual de crescimento da extensão, etc., e, ainda, uma
série de informações dinâmicas, tais como o número de linhas, o número de blocos alocados, o tamanho médio de
cada linha e diversas outras. Estas informações são alimentadas pelo comando Analyze, que armazena informações
estatísticas sobre os objetos do banco de dados a fim de dar ao Otimizador maiores condições de definir qual o
melhor caminho para estabelecer acesso aos dados quando executamos os comandos de DML (ver o tópico
Administrando o Banco de Dados).
USER_TAB_COLUMNS
Esta view contém a descrição das colunas de todas as tabelas, views e clusters do schema do usuário.
Listagem 2.224 – Descrição resumida User_Tab_Columns
SQL> DESC SYS.USER_TAB_COLUMNS
Nome
----------------------------------------TABLE_NAME
COLUMN_NAME
DATA_TYPE
DATA_TYPE_MOD
DATA_TYPE_OWNER
DATA_LENGTH
Nulo?
-------NOT NULL
NOT NULL
Tipo
------------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(106)
VARCHAR2(3)
VARCHAR2(30)
NOT NULL NUMBER
Com esta view, podemos obter informações sobre as colunas de uma determinada tabela, view ou cluster. Da
mesma forma que na User_Tables, encontramos informações estáticas tais como o tipo da coluna, tamanho, indicação
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
161
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
de null e valor default, dentre outras, e, ainda, informações dinâmicas como o número de valores distintos, o
número de nulls encontrados, o maior valor e o menor, etc.
Estas informações também são alimentadas pelo comando Analyze com finalidade de otimização.
Listagem 2.225 – Consulta à User_Tab_Columns
SQL>
SQL>
SQL>
SQL>
2
3
COL TABLE_NAME FOR A10
COL COLUMN_NAME FOR A12
COL DATA_TYPE FOR A10
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME IN ('FUNC', 'DEPTO', 'HST_PROMO');
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, informações sobre as diversas partições de uma tabela particionada. Estas partições podem
ser armazenadas em localizações diferentes e possuir características físicas diferentes daquelas das tabelas.
Listagem 2.226 – Descrição resumida User_Tab_Partitions
SQL> DESC SYS.USER_TAB_PARTITIONS
Nome
Nulo?
----------------------------------------- -------TABLE_NAME
COMPOSITE
PARTITION_NAME
SUBPARTITION_COUNT
HIGH_VALUE
HIGH_VALUE_LENGTH
PARTITION_POSITION
Tipo
-----------VARCHAR2(30)
VARCHAR2(3)
VARCHAR2(30)
NUMBER
LONG
NUMBER
NUMBER
Observe que as informações físicas são semelhantes àquelas das tabelas.
USER_INDEXES
Esta view contém informações sobre os índices das tabelas. São informações estáticas (nome, tipo, tabela, tipo da
tabela, unicidade, localização, tamanho, etc.) e dinâmicas (número de níveis, chaves distintas, número de linhas)
preenchidas quando executamos o comando Analyze.
Listagem 2.227 – Descrição resumida User_Indexes
SQL> DESC SYS.USER_INDEXES
Nome
----------------------------------------INDEX_NAME
INDEX_TYPE
TABLE_OWNER
TABLE_NAME
TABLE_TYPE
UNIQUENESS
COMPRESSION
PREFIX_LENGTH
TABLESPACE_NAME
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)
162 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
A listagem a seguir apresenta uma consulta sobre a view User_Indexes em que podemos observar os tipos de
índices criados para garantir a unicidade da linha (SYS_C99999), o índice referente à Index Table, que na verdade
conterá todos os dados da tabela (SYS_IOT_TOP_9999), e os índices para acesso aos grandes objetos Lobs
(SYS_IL0000009999C09999$$, identificando o objeto e a coluna a que se refere).
Listagem 2.228 – Consulta à User_Indexes
SQL>
SQL>
SQL>
2
3
4
COL INDEX_NAME FOR A24
COL INDEX_TYPE FOR A21
SELECT INDEX_NAME, INDEX_TYPE,
TABLE_NAME, TABLE_TYPE, UNIQUENESS
FROM USER_INDEXES
/
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
PEÇAS
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 presença 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 estão armazenados na linha do
índice. Não existe para esta tabela nenhum outro índice além do índice da PK, pois os dados são armazenados
juntamente com a chave do índice, obedecendo à organização estabelecida para este índice (asc, desc). Esta tabela
não possui um Rowid (faça um teste e comprove).
USER_IND_COLUMNS
Esta view contém informações sobre as colunas que são chaves dos índices: nome, tabela, tamanho e posicionamento
no índice.
Listagem 2.229 – Descrição User_Ind_Columns
SQL> DESC SYS.USER_IND_COLUMNS
Nome
Nulo?
----------------------------------------- -------INDEX_NAME
TABLE_NAME
COLUMN_NAME
COLUMN_POSITION
COLUMN_LENGTH
CHAR_LENGTH
DESCEND
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
NUMBER
NUMBER
NUMBER
VARCHAR2(4)
USER_IND_PARTITIONS
Nesta view, encontramos informações sobre as partições de índices.
Listagem 2.230 – Descrição resumida da User_Ind_Partitions
SQL> DESC SYS.USER_IND_PARTITIONS
Nome
Nulo?
----------------------------------------- -------INDEX_NAME
COMPOSITE
PARTITION_NAME
SUBPARTITION_COUNT
HIGH_VALUE
Tipo
-----------VARCHAR2(30)
VARCHAR2(3)
VARCHAR2(30)
NUMBER
LONG
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
163
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
HIGH_VALUE_LENGTH
PARTITION_POSITION
STATUS
TABLESPACE_NAME
PCT_FREE
INI_TRANS
MAX_TRANS
INITIAL_EXTENT
NUMBER
NUMBER
VARCHAR2(8)
VARCHAR2(30)
NUMBER
NUMBER
NUMBER
NUMBER
USER_CONSTRAINTS
Esta view contém informações sobre as regras de integridade de uma determinada tabela. Sejam elas restrições
sobre colunas ou relacionamentos.
Listagem 2.231 – Descrição resumida da User_Constraints
SQL> DESC SYS.USER_CONSTRAINTS
Nome
----------------------------------------OWNER
CONSTRAINT_NAME
CONSTRAINT_TYPE
TABLE_NAME
SEARCH_CONDITION
R_OWNER
R_CONSTRAINT_NAME
DELETE_RULE
STATUS
DEFERRABLE
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
Contém informações sobre as colunas existentes nas definições das constraints.
Listagem 2.232 – Descrição resumida da User_Cons_Columns
SQL> DESC SYS.USER_CONS_COLUMNS
Nome
----------------------------------------OWNER
CONSTRAINT_NAME
TABLE_NAME
COLUMN_NAME
POSITION
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
NUMBER
USER_SEQUENCES
Descrição das seqüências criadas no schema do usuário.
Listagem 2.233 – Descrição resumida da User_Sequences
SQL> DESC SYS.USER_SEQUENCES
Nome
----------------------------------------SEQUENCE_NAME
MIN_VALUE
MAX_VALUE
INCREMENT_BY
CYCLE_FLAG
ORDER_FLAG
CACHE_SIZE
LAST_NUMBER
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 sinônimos criados no schema do usuário dos objetos presentes em seu schema ou em outros.
164 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Listagem 2.234 – Descrição User_Synonyms
SQL> DESC SYS.USER_SYNONYMS
Nome
----------------------------------------SYNONYM_NAME
TABLE_OWNER
TABLE_NAME
DB_LINK
Nulo?
Tipo
-------- -----------NOT NULL VARCHAR2(30)
VARCHAR2(30)
NOT NULL VARCHAR2(30)
VARCHAR2(128)
USER_USERS
Contém informações sobre os usuários do banco de dados.
Listagem 2.235 – Descrição resumida da User_Users
SQL> DESC SYS.USER_USERS
Nome
----------------------------------------USERNAME
USER_ID
ACCOUNT_STATUS
LOCK_DATE
EXPIRY_DATE
DEFAULT_TABLESPACE
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.
Listagem 2.236 – Descrição resumida da User_Views
SQL> DESC SYS.USER_VIEWS
Nome
Nulo?
----------------------------------------- -------VIEW_NAME
NOT NULL
TEXT_LENGTH
TEXT
TYPE_TEXT_LENGTH
TYPE_TEXT
OID_TEXT_LENGTH
OID_TEXT
Tipo
-----------VARCHAR2(30)
NUMBER
LONG
NUMBER
VARCHAR2(4000)
NUMBER
VARCHAR2(4000)
USER_UPDATABLE_COLUMNS
Nesta view, são apresentadas as colunas das tabelas e views indicando se as mesmas podem ser incluídas, modificadas
ou removidas.
Listagem 2.237 – Descrição User_Updatable_Columns
SQL> DESC SYS.USER_UPDATABLE_COLUMNS
Nome
----------------------------------------OWNER
TABLE_NAME
COLUMN_NAME
UPDATABLE
INSERTABLE
DELETABLE
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(3)
VARCHAR2(3)
VARCHAR2(3)
Para avaliarmos a utilização destas informações, criamos uma view de nome Atualiza, contendo um Join entre a
tabela Funcionário e a tabela Departamento.
Listagem 2.238 – Criação da View Atualiza
SQL> CREATE VIEW ATUALIZA AS
2
SELECT F.CD_MAT, F.CD_DEPTO, F.VL_SAL, F.NM_FUNC,
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
165
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
3
D.NM_DEPTO
4
FROM FUNC F, DEPTO D
5
WHERE F.CD_DEPTO = D.CD_DEPTO
6
AND F.CD_DEPTO IN ('A00', 'B01')
7
WITH CHECK OPTION;
View criada.
Ao selecionarmos informações da view User_Updatable_Columns, observaremos que Atualiza aparece sob a coluna
Table_Name e possui indicações de quais colunas podemos atualizar.
Listagem 2.239 – Consulta à User_Updatable_Columns
SQL> SELECT TABLE_NAME, COLUMN_NAME, UPDATABLE, INSERTABLE, DELETABLE
2
FROM USER_UPDATABLE_COLUMNS
3
WHERE TABLE_NAME IN ('DEPTO', 'ATUALIZA')
4 /
TABLE_NAME
---------ATUALIZA
ATUALIZA
ATUALIZA
ATUALIZA
ATUALIZA
DEPTO
DEPTO
DEPTO
DEPTO
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 usuário.
Listagem 2.240 – Descrição resumida da User_Types
SQL> DESC SYS.USER_TYPES
Nome
----------------------------------------TYPE_NAME
TYPE_OID
TYPECODE
ATTRIBUTES
METHODS
PREDEFINED
INCOMPLETE
FINAL
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 usuário.
Listagem 2.241 – Descrição resumida da User_Type_Attrs
SQL> DESC SYS.USER_TYPE_ATTRS
Nome
----------------------------------------TYPE_NAME
ATTR_NAME
ATTR_TYPE_MOD
ATTR_TYPE_OWNER
ATTR_TYPE_NAME
LENGTH
PRECISION
Nulo?
-------NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(7)
VARCHAR2(30)
VARCHAR2(30)
NUMBER
NUMBER
USER_TYPE_METHODS
Descreve os métodos associados aos tipos criados no schema do usuário.
166 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Listagem 2.242 – Descrição resumida da User_Type_Methods
SQL> DESC SYS.USER_TYPE_METHODS
Nome
----------------------------------------TYPE_NAME
METHOD_NAME
METHOD_NO
METHOD_TYPE
PARAMETERS
RESULTS
FINAL
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 relação entre a tabela nested e a tabela na qual ela está contida.
Listagem 2.243 – Descrição User_Nested_Tables
SQL> DESC SYS.USER_NESTED_TABLES
Nome
Nulo?
----------------------------------------- -------TABLE_NAME
TABLE_TYPE_OWNER
TABLE_TYPE_NAME
PARENT_TABLE_NAME
PARENT_TABLE_COLUMN
STORAGE_SPEC
RETURN_TYPE
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(4000)
VARCHAR2(30)
VARCHAR2(20)
USER_OBJECT_TABLES
Descreve as características de uma tabela Objeto. Contém informações de armazenamento estáticas e informações
geradas pelo Analyze relativas à utilização.
Listagem 2.244 – Descrição resumida da User_Object_Tables
SQL> DESC SYS.USER_OBJECT_TABLES
Nome
Nulo?
----------------------------------------- -------TABLE_NAME
NOT NULL
TABLESPACE_NAME
CLUSTER_NAME
IOT_NAME
PCT_FREE
PCT_USED
INI_TRANS
MAX_TRANS
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(30)
NUMBER
NUMBER
NUMBER
NUMBER
USER_LOBS
Contém informações 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.
Listagem 2.245 – Descrição resumida da User_Lobs
SQL> DESC SYS.USER_LOBS
Nome
Nulo?
----------------------------------------- -------TABLE_NAME
COLUMN_NAME
SEGMENT_NAME
INDEX_NAME
CHUNK
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 não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
167
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Listagem 2.246 – Consulta à User_Lobs
SQL> SELECT TABLE_NAME, COLUMN_NAME, SEGMENT_NAME, INDEX_NAME
2
FROM USER_LOBS;
TABLE_NAME
---------LOB8
TESTE
TESTE_LOB
TESTE_LOB
TESTE_XML
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 parâmetros associados a cada método dos tipos definidos.
Listagem 2.247 – Descrição resumida User_Method_Params
SQL> DESC SYS.USER_METHOD_PARAMS
Nome
----------------------------------------TYPE_NAME
METHOD_NAME
METHOD_NO
PARAM_NAME
PARAM_NO
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 descrição dos resultados dos tipos definidos.
Listagem 2.248 – Descrição User_Method_Results
SQL> DESC SYS.USER_METHOD_RESULTS
Nome
----------------------------------------TYPE_NAME
METHOD_NAME
METHOD_NO
RESULT_TYPE_MOD
RESULT_TYPE_OWNER
RESULT_TYPE_NAME
CHARACTER_SET_NAME
Nulo?
-------NOT NULL
NOT NULL
NOT NULL
Tipo
-----------VARCHAR2(30)
VARCHAR2(30)
NUMBER
VARCHAR2(7)
VARCHAR2(30)
VARCHAR2(30)
VARCHAR2(44)
EXERCÍCIOS
2.86) Deseja-se uma lista de todas as tabelas do usuário contendo a quantidade de colunas, a quantidade de
relacionamentos e a quantidade de índices desta tabela.
2.87) Deseja-se obter, para cada restrição de integridade, a tabela associada, a tabela correspondente (no caso de
relacionamento), o nome da restrição, o texto da restrição ordenado por tabela associada e nome da restrição.
2.88) Determinar, para cada tabela particionada, seu nome, o nome de cada partição e as regras do particionamento.
2.89) Deseja-se informações sobre as views criadas no schema do usuário, contendo nome, texto associado, colunas
que podem ser atualizadas.
FUNDAMENTOS EM: USO DA DATA CONTROL LANGUAGE
PRÉ-REQUISITOS
♦ Conhecimentos e entendimento da sintaxe previamente descrita de SQL e SQL*Plus.
168 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
METODOLOGIA
♦ Apresentação e descrição dos métodos para controle das alterações efetuadas com os comandos da Data Manipulation Language e, ainda, apresentação da
sintaxe necessária para modificação das características da sessão a fim de que se adaptem aos formatos nacionais.
TÉCNICA
♦ Apresentação conceitual e prática com exemplos específicos de cada um dos comandos.
COMANDOS PARA CONTROLE DA TRANSAÇÃO
Sabemos que um software de banco de dados deve ser capaz de garantir a integridade física e lógica da base de
dados, independente do número de usuários simultâneos que estejam atualizando ou consultando dados.
Para isso, o software utiliza mecanismos que permitam a concorrência. Os comandos tratados neste capítulo
mostram como estes comandos funcionam e o que significam para o desenvolvimento de aplicativos.
TRANSACTION
Transação é um conceito que determina um intervalo de tempo durante o qual várias modificações podem ser
realizadas para o banco de dados, e ao término do qual estas modificações são efetivadas ou desmanchadas em
conjunto. Não é possível efetivar parte dos comandos da transação. A transação é tratada como uma unidade,
como se fosse um único comando.
Suponhamos uma transação de transferência de uma conta corrente para outra. Esta transação envolve pelo menos
duas operações de atualização. 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 operações pode ser considerado uma transação porque ele não pode ser desmembrado em operações
separadas. O dinheiro não pode ser subtraído da conta do cliente-origem sem que o cliente-destino tenha os
créditos adicionados e nem vice-versa. A operação toda é uma única unidade, uma transação.
COMMIT
O Oracle possui dois comandos para que indiquemos ao banco de dados o momento em que concluímos a transação
da aplicação. A indicação de que a transação deve ser efetivada é feita com o comando Commit e a de que a
transação deve ser desmanchada é feita com o comando Rollback.
Até que uma transação seja encerrada e efetivada com o uso do comando Commit, nenhuma das alterações feitas
por ela sobre a base de dados fica visível por qualquer outra sessão que estabeleça conexão com o banco de dados,
qualquer que seja o usuário conectado.
Isto significa que as linhas modificadas por uma transação ficam bloqueadas, impedidas de uso por qualquer
usuário do banco de dados, até que a transação seja concluída. Esse mecanismo de bloqueio chama-se Lock. Ele
torna as transações independentes, uma vez que, estando o acesso para atualização impedido, não corremos o
risco de tomar decisões em relação a modificações ainda pendentes, não efetivadas.
Após a execução do Commit e conseqüente efetivação da transação, podemos estar seguros de que as modificações
foram refletidas no banco de dados e não mais poderão ser desfeitas.
Uma transação inicia quando o primeiro comando de SQL DML é encontrado no programa ou após um Commit
ou Rollback.
Uma transação termina quando:
♦ Executamos um Commit ou Rollback.
♦ Um comando de DDL é executado. Quando executamos um dos comandos de DDL (alguns serão vistos no
tópico Administrando o Banco de Dados), o Oracle executa um Commit implícito antes de iniciar a execução
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
169
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
do comando. Isto encerra a transação que estava em andamento anteriormente e inicia uma outra contendo o
comando de DDL.
♦ Um comando de DDL é concluído. Após a execução do comando de DDL, o Oracle implicitamente executa um
Commit. Isto encerra a transação que continha o comando. Observe que não podemos desfazer um comando
de DDL com Rollback. Após solicitarmos sua execução, a transação em uso é fechada, abre-se uma outra, faz-se
a execução do comando, a transação é encerrada e é aberta outra. Quando novamente temos acesso à informação,
a transação do comando já foi concluída.
♦ O usuário se desconecta do Oracle. Se o término da transação foi normal, isto é, não ocorreram erros, o Oracle
efetiva os comandos da última transação (Commit). Se o término foi anormal, com erros, o Oracle desmancha
todos os comandos relativos à última transação (Rollback).
Para transações terminadas normalmente em um programa Oracle Precompiler (Pro*C, Pro*Cobol, etc.), não há efetivação da transação; o
compilador não monta um comando de Commit. Neste caso o Oracle fará um Rollback. Quando trabalhamos com aplicativos ou utilitários da
Oracle, este padrão de término é estabelecido, ou seja, para término normal Commit.
É recomendação da Oracle que o usuário explicitamente informe ao banco de dados qual a ação desejada também para a última transação da
aplicação, antes de encerrar a conexão com o banco de dados.
Como recomendação adicional, temos que um programa que altere o conteúdo de uma ou mais linhas em uma ou mais tabelas deve periodicamente
fixar estas modificações (Commit). Isto deve ocorrer pois cada uma das linhas modificadas fica bloqueada, impedida de ser atualizada por outra
aplicação (Locked). Desta forma, quanto mais linhas Locked uma aplicação mantiver, menor a possibilidade de concorrência e maior a necessidade
de controle por parte do Oracle e, portanto, maior gasto de CPU.
Listagem 2.249 – Commit
SQL> UPDATE FUNC SET VL_SAL = VL_SAL * 1.1 WHERE CD_MAT = 150;
1 linha atualizada.
SQL> COMMIT WORK;
Validação completa.
Inicialmente, a modificação foi realizada apenas para a transação que solicitou o comando. Após a execução do
Commit, todos os usuários têm acesso à informação modificada. A palavra Work é mantida para compatibilidade
com o SQL padrão. Os comandos Commit e Commit Work são equivalentes.
Para avaliarmos o impacto do comando abriremos duas sessões do SQL*Plus simultaneamente, lado a lado, utilizando
o mesmo usuário (Desenv).
Listagem 2.250 – Consistência de leitura
SQL> SELECT VL_SAL FROM FUNC
2
WHERE CD_MAT = 140;
VL_SAL
-----2842
SQL> UPDATE FUNC
2
SET VL_SAL = VL_SAL * 1.1
3
WHERE CD_MAT = 140;
1 linha atualizada.
SQL> SELECT VL_SAL FROM FUNC
2
WHERE CD_MAT = 140;
170 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
VL_SAL
-----2842
SQL> SELECT VL_SAL FROM FUNC
2
WHERE CD_MAT = 140;
VL_SAL
-----3126,2
Na sessão da esquerda, consultamos o valor do salário antes e após a modificação e visualizamos o novo valor
mesmo sem executarmos o comando Commit. Na sessão da direita, visualizamos apenas o salário sem modificação.
A leitura é permitida, porém o valor apresentado é sempre aquele de antes da modificação.
Listagem 2.251 – Consistência de leitura
SQL> COMMIT;
Validação completa.
SQL> SELECT VL_SAL FROM FUNC
2
WHERE CD_MAT = 140;
VL_SAL
-----3126,2
SQL> SELECT VL_SAL FROM FUNC
2
WHERE CD_MAT = 140;
VL_SAL
-----3126,2
Neste ponto, executamos o comando Commit para a sessão da esquerda. Na sessão da direita, a leitura já trouxe a
nova informação.
Listagem 2.252 – Mecanismo de Lock
12:14:07 SQL> SELECT VL_SAL
12:15:29
2
FROM FUNC
12:15:29
3
WHERE CD_MAT = 160;
VL_SAL
-----2447,5
12:15:31 SQL> UPDATE FUNC
12:15:52
2
SET VL_SAL = VL_SAL * 1.1
12:15:53
3
WHERE CD_MAT = 160;
1 linha atualizada.
12:17:06 SQL> UPDATE FUNC
12:17:22
2
SET VL_SAL = VL_SAL * 1.1
12:17:22
3
WHERE CD_MAT = 160;
Na sessão da esquerda, repetimos a operação de atualização sem executar um comando Commit. Na sessão da
direita, tentamos realizar uma atualização na mesma linha de matrícula 160. A sessão ficou bloqueada, na fila para
atualização. Não é liberada até que o usuário que possui o controle da linha realize um Commit ou Rollback,
desbloqueando a linha.
Com estes exemplos, podemos tirar algumas conclusões:
♦ Uma leitura nunca é interrompida por um processo de atualização, ela sempre prossegue.
♦ Uma leitura não bloqueia os dados. Não 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 início da consulta e vê todas as modificações feitas por sua própria transação.
♦ Após um comando Commit, todos os bloqueios (Locks) são liberados.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
171
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
O comando Commit possui sintaxe específica para forçar ou comentar a execução de transações distribuídas, que não serão vistas neste material.
SAVEPOINT
Savepoints são utilizados junto com o comando Rollback. Têm a finalidade de marcar um ponto intermediário na transação.
Savepoints podem ser úteis quando temos uma transação 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 modificações realizadas pelo programa e, então, executá-lo novamente com
as correções necessárias.
Quando ocorre um Rollback para Savepoint, todas as modificações ocorridas após o Savepoint são desmanchadas e
todos os locks adquiridos após este ponto também são liberados. A transação, porém, não é efetivada. Todas as modificações
ocorridas antes do Savepoint continuam Lockeds sem efetivação, aguardando que o usuário realize um Commit.
Listagem 2.253 – Savepoint
SQL> SELECT VL_SAL FROM FUNC
2
WHERE NM_FUNC IN ('DAVI', 'DANIEL');
VL_SAL
-----2774
1918
SQL> UPDATE FUNC
2
SET VL_SAL = 4000 WHERE NM_FUNC = 'DANIEL';
1 linha atualizada.
SQL> SAVEPOINT DANIEL_SAL;
Ponto de salvamento criado.
SQL> UPDATE FUNC
2
SET VL_SAL = 3500 WHERE NM_FUNC = 'DAVI';
1 linha atualizada.
SQL> SAVEPOINT DAVI_SAL;
Ponto de salvamento criado.
Na Listagem 2.253 foram feitas modificações em dois funcionários, Davi e Daniel. Marcamos dois pontos de
controle: um após atualizarmos o salário de Daniel e outro após atualizarmos o salário de Davi.
Listagem 2.254 – Rollback to Savepoint
SQL> SELECT VL_SAL FROM FUNC
2
WHERE NM_FUNC IN ('DAVI', 'DANIEL');
VL_SAL
-----3500
4000
SQL> ROLLBACK TO SAVEPOINT DANIEL_SAL;
Rollback completo.
SQL> SELECT VL_SAL FROM FUNC
2
WHERE NM_FUNC IN ('DAVI', 'DANIEL');
VL_SAL
-----2774
4000
SQL> UPDATE FUNC SET VL_SAL = 4000 WHERE NM_FUNC = 'DAVI';
1 linha atualizada.
172 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
Na Listagem 2.254, comprovamos que o salário de ambos os funcionários foi modificado. Realizamos, então, um
comando Rollback para um dos pontos intermediários. O salário de Davi foi desmanchado, mas o de Daniel não,
pois o Savepoint foi marcado após a ocorrência da modificação no salário de Daniel. Desta forma, todas as
modificações ocorridas após o Savepoint Daniel_Sal foram desmanchadas.
Realizamos uma consulta para verificar esta ocorrência e comprovamos o resultado.
Neste ponto, refizemos a atualização no salário do funcionário Davi.
Listagem 2.255 – Rollback
SQL> SELECT VL_SAL FROM FUNC
2
WHERE NM_FUNC IN ('DAVI', 'DANIEL');
VL_SAL
-----4000
4000
SQL> ROLLBACK;
Rollback completo.
SQL> SELECT VL_SAL FROM FUNC
2
WHERE NM_FUNC IN ('DAVI', 'DANIEL');
VL_SAL
-----2774
1918
Continuando o exemplo, listamos os valores do salário dos dois funcionários e comprovamos estarem iguais.
Resolvemos, então, desfazer toda a transação e executamos um comando Rollback. Observe pelo Select apresentado
posteriormente que a transação ainda estava pendente. Caso o comando Rollback To Savepoint houvesse efetivado
o salário de Daniel, não conseguiríamos desmanchar a modificação neste momento.
Somente o comando Commit efetiva uma transação.
ROLLBACK
O comando Rollback tem a finalidade de concluir uma transação desmanchando todas as modificações efetuadas
desde o último Savepoint ou Commit.
Listagem 2.256 – Rollback
SQL> UPDATE FUNC SET NR_GIT = 1;
32 linhas atualizadas.
SQL> ROLLBACK;
Rollback completo.
SQL> SELECT COUNT(*) FROM FUNC
2
WHERE NR_GIT = 1;
COUNT(*)
-------0
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 não existem linhas com grau de
instrução 1 na base de dados.
READ CONSISTENCY
Nos comandos acima, testamos o funcionamento do modelo de consistência do Oracle. Veremos, a seguir, suas
regras de funcionamento.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
173
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Read Consistency é o modelo de consistência suportado pelo Oracle. Possui as seguintes características:
♦ As leituras de dados não esperam por gravações destes mesmos dados.
Esta característica foi comprovada nos exemplos acima. Quando alteramos uma informação no banco de dados, as
linhas afetadas ficam bloqueadas e não podem ser modificadas por outra transação. A leitura, porém, não é impedida
de agir. Podemos continuar a leitura, mesmo que a linha a ser lida esteja bloqueada. A informação obtida não
mostra a modificação e sim a imagem que o dado tinha antes da modificação.
♦ Todos os dados lidos por uma operação de consulta não são alterados durante sua execução.
Esta frase pode parecer confusa a princípio. As listagens abaixo mostrarão uma seqüência de comandos para que o
texto seja esclarecido. A fim de que você acompanhe os exemplos, abra duas sessões do SQL*Plus lado a lado, A e B.
Listagem 2.257 – Consistência de leitura – A
09:58:09 SQL> create table teste_rc
10:00:16
2 (atual
timestamp);
Tabela criada.
10:01:59 SQL> insert into teste_rc values (current_timestamp);
1 linha criada.
10:02:16 SQL> commit;
Validação completa.
10:19:05 SQL> update teste_rc set atual = current_timestamp;
1 linha atualizada.
10:24:09 SQL> select * from teste_rc;
ATUAL
-----------------------16/11/01 10:05:33,000000
A Listagem 2.257 apresenta uma transação 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.
Listagem 2.258 – Consistência de leitura – B
10:24:39 SQL> SELECT *
10:25:03
2
FROM teste_rc;
ATUAL
-----------------------16/11/01 10:05:33,000000
10:25:05 SQL> select a.cd_mat, b.nm_func, current_timestamp time
10:25:05
2
from func a, func b
10:25:05
3 union
10:25:06
4 select 999, 'teste', atual from teste_rc
10:25:06
5 /
CD_MAT
---------10
10
10
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 transação B. A leitura foi iniciada às 10:25:03, ou seja, após a
transação A atualizar os dados (sem Commit). O que constatamos é que a visualização da informação corresponde
ao que realmente está valendo no banco de dados. O que o usuário B consegue ler é o que está, com certeza,
valendo. Se o usuário A desistir de atualizar (fazendo um Rollback), as decisões tomadas pelo usuário B em relação
à informação lida não são afetadas. Caso o usuário A venha a efetivar a transação, a leitura realizada pelo usuário
B já não corresponderá mais à informação presente no banco de dados; no entanto, esta atualização feita pelo
usuário A foi realizada após a leitura feita pelo usuário B independentemente de a diferença de tempo ser um
174 ✦00CURSO COMPLETO
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
CAPÍTULO 2 – SQL E SQL*PLUS
segundo, uma hora ou um dia. O que importa é que a atualização foi feita após a leitura. Iniciamos uma leitura
mais demorada (pois é um produto cartesiano de 32* 32) às 10:25:05.
Listagem 2.259 – Consistência de leitura
10:25:06 SQL> commit;
Validação completa.
10:25:08 SQL>
Retornamos à transação A e efetuamos um Commit. Esta operação foi disparada às 10:25:06 (após o início da
leitura na transação A) e concluiu retornando uma resposta às 10:25:08. Enquanto isso, a transação B estava
processando a leitura.
Listagem 2.260 – Consistência de leitura
CD_MAT
---------10
10
10
10
10
10
10
10
. . . .
340
340
999
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
16/11/01 10:25:07,000000 -02:00
16/11/01 10:25:07,000000 -02:00
16/11/01 10:05:33,000000 -02:00
993 linhas selecionadas.
10:25:32 SQL>
Nesta listagem, verificamos que o processo de leitura apresentou a última linha às 10:25:32, porém a informação
referente ao dado atualizado na tabela teste_rc não foi atualizada; vemos o timestamp de inclusão, 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 informações obtidas do banco de dados são
referentes ao exato momento em que a leitura foi iniciada e não do momento em que a linha específica foi obtida.
Desta forma, a informação é consistente; vemos todos os dados relativos ao mesmo momento de tempo, como se
fosse uma foto instantânea dos dados selecionados, mesmo que a informação lida requeira tempo de acesso maior
e não seja obtida instantaneamente.
O exemplo não pretende comprovar a execução deste processo, pois que o tempo decorrido pode ter sido derivado de outros fatores e não apenas
da leitura dos dados. A intenção é simplesmente favorecer o entendimento.
O SEGMENTO DE ROLLBACK
Cada base de dados contém um ou mais segmentos de rollback. Esta área tem a finalidade de registrar as modificações
feitas por cada transação, e que podem ser desmanchadas.
Essa área é utilizada para rollback das transações, Read Consistency e Recovery.
O segmento de rollback registra diversas informações, dentre as quais:
♦ Identificador da transação.
♦ Descrição da informação como ela existia antes da modificação.
CURSO COMPLETO00✦
Para uso pessoal. Este material não pode ser utilizado em Salas de Aula e para ministrar treinamentos.
175
ORACLE 9I PARA DESENVOLVEDORES CURSO COMPLETO – PARTE I: FUNDAMENTOS
Cada modificação que realizamos sobre um dado é registrada no segmento de rollback, porém não é registrada a
modificação e sim a imagem anterior do dado. A modificação desejada é realizada diretamente na área de memória
que contém a informação (o buffer de dados do database).
Sendo assim, quando efetuamos uma leitura e a informação ainda não foi efetivada no database (Commit), o Oracle
obtém todas as linhas não modificadas dos blocos de dados em memória e todas as informações modificadas diretamente
do segmento de rollback em memória. O segmento de rollback registra o dado antes da alteração. Por este motivo, ele
é utilizado para rollback e pelo mecanismo de consistência de leitura, pois contém a imagem original do dado.
Uma instância do banco de dados não pode ser ativada, isto é, o banco de dados não inicia se não tiver acesso a
pelo menos um segmento de rollback.
Todo o controle das modificações é feito com a ajuda do segmento de rollback.
SET TRANSACTION READ ONLY
Já discutimos anteriormente o mecanismo de consistência do Oracle. Este mecanismo garante que o resultado de
um comando seja consistente. Pode ser necessário, porém, que ampliemos esta consistência com referência a
diversos
Download