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 &lt;, &gt;, &quot; e &amp;. 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 &lt;, > será substituído por &gt; 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