Você está na página 1de 124

Desenvolvido por Daniel Silva Nunes

ndice Introduo..........................................................................................................................1 Viso geral da Oracle....................................................................................................1 O que o BD Oracle 10g XE........................................................................................1 1 Etapa..............................................................................................................................2 Instalao do Oracle 10g XE........................................................................................2 Apresentao das ferramentas do Banco......................................................................3 Ferramentas SQL*Plus.................................................................................................3 Criao e excluso de usurios.....................................................................................4 Edio de senhas dos usurios......................................................................................7 Privilgios.....................................................................................................................8 2 Etapa............................................................................................................................10 Tipos de dados............................................................................................................10 Criao e manipulao de tabelas...............................................................................12 Relacionamento de tabelas..........................................................................................17 Tipos de Constraints. .................................................................................................17 Manipulao de dados com SQL................................................................................26 Commit e Rollback.....................................................................................................32 Rotulando campos das tabelas.................................................................................33 Concatenando colunas................................................................................................36 3 Etapa............................................................................................................................37 Criao e execuo de scripts SQL.............................................................................37 Operadores lgicos em SQL.......................................................................................41 Funes de ordenao.................................................................................................54 SELECT com mais de uma tabela..............................................................................59 Funes do Oracle 10g XE.........................................................................................67 4 Etapa............................................................................................................................83 Conceito de PL/SQL...................................................................................................83 Function......................................................................................................................83 Procedure....................................................................................................................85 Sequence.....................................................................................................................88 Trigger.........................................................................................................................89 View............................................................................................................................92 Index...........................................................................................................................94 5 Etapa............................................................................................................................97 Oracle Application Express........................................................................................97 Servios do Oracle 10g.............................................................................................108 Backup lgico ..........................................................................................................111 Backup fsico............................................................................................................115 ndice de Figuras Figura 1.1: Assistente de Instalao............................................................................2 Figura 1.2: Menu Iniciar...............................................................................................3 Figura 1.3: SQL*Plus....................................................................................................4 Figura 1.4: Show User..................................................................................................5 Figura 1.5: Create User Fatec.......................................................................................6 Figura 1.6: Drop User Fatec..........................................................................................7 Figura 1.7: Alter User Fatec..........................................................................................8 Figura 2.1: Create Table Teste....................................................................................13 Figura 2.2: Desc Teste 1.............................................................................................14 Figura 2.3: Desc Teste 2.............................................................................................15

Figura 2.4: Alter Table Teste......................................................................................16 Figura 2.5: Alter Table Teste Drop Column...............................................................17 Figura 2.6: Alter Table Teste Add Constraint............................................................19 Figura 2.7: Create Table Aluno..................................................................................20 Figura 2.8: Create Table Nota_Aluno.........................................................................22 Figura 2.9: Alter Table Aluno Add Constraint...........................................................24 Figura 2.10: Alter Table Aluno Drop Constraint........................................................25 Figura 2.11: Insert Into Cidades..................................................................................27 Figura 2.12: Select Cidades 1.....................................................................................27 Figura 2.13: Column Format.......................................................................................28 Figura 2.14: Select Cidades 2.....................................................................................29 Figura 2.15: Update Cidades.......................................................................................30 Figura 2.16: Select Cidades 3.....................................................................................30 Figura 2.17: Delete Cidades........................................................................................31 Figura 2.18: Select Cidades 4.....................................................................................31 Figura 2.19: Select Cidades aps Delete.....................................................................32 Figura 2.20: Rollback..................................................................................................33 Figura 2.21: Select Cidades 5.....................................................................................34 Figura 2.22: Select com Rtulo..................................................................................35 Figura 2.23: Select com Rtulo 2...............................................................................35 Figura 2.24: Concatenando Campos...........................................................................36 Figura 2.25: Concatenando Campos 2........................................................................37 Figura 3.1: Iniciando Script........................................................................................38 Figura 3.2: Executando Script.....................................................................................39 Figura 3.3: Select Cidades 6.......................................................................................40 Figura 3.4: Diretrio do Script....................................................................................40 Figura 3.5: Select Cidades Codigo 7...........................................................................44 Figura 3.6: Operador Lgico Diferente ..................................................................45 Figura 3.7: Oprador Lgico Maior..........................................................................45 Figura 3.8: Operador Lgico Menor.......................................................................46 Figura 3.9: Operador Lgico Maior ou Igual..........................................................47 Figura 3.10: Operador Lgico Menor ou Igual.......................................................47 Figura 3.11: Operador Lgico And.........................................................................48 Figura 3.12: Operador Lgico Or............................................................................48 Figura 3.13: Operador Lgico Between..................................................................49 Figura 3.14: Operador Lgico In.............................................................................50 Figura 3.15: Operador Lgico %Like.....................................................................51 Figura 3.16: Operador Lgico Like%.....................................................................51 Figura 3.17: Operador Lgico %Like%..................................................................52 Figura 3.18: Operador Lgico Not In......................................................................53 Figura 3.19: Operador Lgico Not Like..................................................................53 Figura 3.20: Funo Order By.................................................................................54 Figura 3.21: Select com Order By..............................................................................55 Figura 3.22: Select com Order By Desc.....................................................................56 Figura 3.23: Select com Order By Desc 2..................................................................57 Figura 3.24: Select com Order By Desc 3..................................................................58 Figura 3.25: Select com Order By Desc 4..................................................................58 Figura 3.26: Select com Order By Desc 5..................................................................59 Figura 3.27: Select Vendas.........................................................................................63 Figura 3.28: Select Vendedores..................................................................................63 Figura 3.29: Select com Join.......................................................................................64 Figura 3.30: Select Vendas 2......................................................................................65

Figura 3.31: Select com Join 2....................................................................................66 Figura 3.32: Select com Outer Join.............................................................................67 Figura 3.33: Funo SQRT.........................................................................................68 Figura 3.34: Funo ROUND.....................................................................................69 Figura 3.35: Funo TRUNC......................................................................................69 Figura 3.36: Funo TRUNC 2...................................................................................70 Figura 3.37: Funo POWER.....................................................................................71 Figura 3.38: Funo UPPER.......................................................................................71 Figura 3.39: Funo LOWER.....................................................................................72 Figura 3.40: Funo REPLACE.................................................................................73 Figura 3.41: Funo NVL...........................................................................................74 Figura 3.42: Funo TO_CHAR.................................................................................75 Figura 3.43: Funo SYSDATE.................................................................................75 Figura 3.44: Funo LAST_DAY...............................................................................76 Figura 3.45: Funo ADD_MONTHS........................................................................77 Figura 3.46: Funo DECODE...................................................................................77 Figura 3.47: Funo DECODE 2................................................................................78 Figura 3.48: Funo AVG...........................................................................................79 Figura 3.49: Funo MAX..........................................................................................79 Figura 3.50: Funo MIN...........................................................................................80 Figura 3.51: Funo SUM...........................................................................................80 Figura 3.52: Funo COUNT.....................................................................................81 Figura 3.53: Funo COD_VENDEDOR...................................................................82 Figura 3.54: Funo COUNT DISTINCT..................................................................82 Figura 4.1: Create Function........................................................................................84 Figura 4.2: Executando Function................................................................................85 Figura 4.3: Create Procedure......................................................................................86 Figura 4.4: Executando Procedure..............................................................................87 Figura 4.5: Verificando resultado da Procedure.........................................................87 Figura 4.6: Criando Sequence.....................................................................................89 Figura 4.7: Criando Trigger........................................................................................90 Figura 4.8: Inserindo Registro....................................................................................91 Figura 4.9: Verificando Vendas..................................................................................92 Figura 4.10: Criando View.........................................................................................93 Figura 4.11: Visualizando View.................................................................................94 Figura 4.12: Campo Nome da Tabela Vendedores.....................................................95 Figura 4.13: Criando Index.........................................................................................96 Figura 4.14: Funcionalidade do Index........................................................................96 Figura 5.1: Menu Ir para a Home Page do Banco de Dados.......................................97 Figura 5.2: Opes do Application Express...............................................................98 Figura 5.3: Informaes de armazenamento do Application Express........................98 Figura 5.4: Usurios do Banco de Dados....................................................................99 Figura 5.5: Tela Criar Usurio do Banco de Dados....................................................99 Figura 5.6: Tela Alterar Minha Senha......................................................................100 Figura 5.7: Tela Browser de Objetos........................................................................101 Figura 5.8: Tela Criar Tabela....................................................................................102 Figura 5.9: Tela Chave Primria...............................................................................102 Figura 5.10: Tela Restries.....................................................................................103 Figura 5.11: Tela Confirmar.....................................................................................103 Figura 5.12: Visualizao da Estrutura da Tabela Oracle.........................................104 Figura 5.13: Visualizao dos Objetos.....................................................................104 Figura 5.14: Tela Comandos SQL............................................................................105

Figura 5.15: Visualizao dos Dados na Tabela Oracle...........................................106 Figura 5.16: Tela Gerar DLL....................................................................................107 Figura 5.17: Scripts SQL..........................................................................................107 Figura 5.18: Servios................................................................................................108 Figura 5.19: Interrompendo Banco de Dados...........................................................109 Figura 5.20: Erro gerado...........................................................................................110 Figura 5.21: Erro gerado 2........................................................................................110 Figura 5.22: Iniciando Banco de Dados....................................................................111 Figura 5.23: Exportao Lgica................................................................................112 Figura 5.24: Diretrio dos Arquivos Lgicos Exportados........................................113 Figura 5.25: Excluso de usurio..............................................................................114 Figura 5.26: Importao Lgica................................................................................115 Figura 5.27: Select Aps Importao........................................................................115 Figura 5.28: Exportao Fsica.................................................................................116 Figura 5.29: Diretrio dos Arquivos Fsicos Exportados.........................................117 Figura 5.30: Diretrio dos Arquivos Fsicos Exportados 2......................................118 Figura 5.31: Importao Fsica.................................................................................118 ndice de Tabelas Tabela 1.1: Permisses..................................................................................................9 Tabela 2.1: Tipos de Dados........................................................................................12 Tabela 2.2: Tabela Cidades.........................................................................................26 Tabela 2.3: Cidade 2...................................................................................................29 Tabela 3.1: Cidade 3...................................................................................................38 Tabela 3.2: Operadores Lgicos.................................................................................42 Tabela 3.3: Cidade 4...................................................................................................42 Tabela 3.4: Cidade 5...................................................................................................42 Tabela 3.5: Cidade 6...................................................................................................42 Tabela 3.6: Cidade 7...................................................................................................43 Tabela 3.7: Cidade 8...................................................................................................43 Tabela 3.8: Tabela Vendas..........................................................................................59 Tabela 3.9: Tabela Vendedores...................................................................................60 Tabela 3.10: Venda 1..................................................................................................60 Tabela 3.11: Venda 2..................................................................................................60 Tabela 3.12: Venda 3..................................................................................................60 Tabela 3.13: Venda 4..................................................................................................61 Tabela 3.14: Venda 5..................................................................................................61 Tabela 3.15: Vendedor 1.............................................................................................61 Tabela 3.16: Vendedor 2.............................................................................................61 Tabela 3.17: Vendedor 3.............................................................................................62 Tabela 3.18: Vendedor 4.............................................................................................62 Tabela 3.19: Vendedor 5.............................................................................................62 Tabela 3.20: Vendedor 6.............................................................................................73 Tabela 4.1: Venda 6....................................................................................................91 Tabela 5.1: Tabela Oracle.........................................................................................101

Introduo Viso geral da Oracle.

H quase trinta anos, Larry Ellison vislumbrou uma oportunidade que outras companhias no haviam percebido, quando encontrou uma descrio de um prottipo funcional de um banco de dados relacional e descobriu que nenhuma empresa tinha se empenhado em comercializar essa tecnologia. Ellison e os co-fundadores da Oracle, Bob Miner e Ed Oates, perceberam que havia um tremendo potencial de negcios no modelo de banco de dados relacional, mas no se deram conta de que mudariam a face da computao empresarial para sempre. Hoje a Oracle (Nasdaq: ORCL) continua frente de seu tempo. A tecnologia Oracle pode ser encontrada em quase todos os setores do mundo inteiro e nos escritrios de 98 das empresas citadas na lista Fortune 100. A Oracle a primeira empresa de software a desenvolver e empregar software empresarial totalmente habilitado para Internet em toda a sua linha de produtos: banco de dados, aplicativos empresariais e ferramentas para desenvolvimento de aplicativos e suporte a decises. A Oracle o principal fornecedor de software para gerenciamento de informaes e a segunda maior empresa de software independente do mundo. A Oracle uma empresa inovadora. Foi uma das primeiras a tornar seus aplicativos empresariais disponveis atravs da Internet -- atualmente, esse conceito predominante. Agora, a Oracle est comprometida em garantir que todo o seu software seja projetado para trabalhar em conjunto a abordagem de sute e outras empresas, analistas e a imprensa vem reconhecendo que ela est certa. O que estamos preparando para o futuro? Continuaremos a inovar e liderar o mercado nos preocupando sempre em resolver os problemas dos nossos clientes. www. oracle.com/global/br/corporate/story.html O que o BD Oracle 10g XE.

O BD Oracle 10g Express Edition a verso gratuita do BD da Oracle. Esse um BD relacional, ou seja, baseado no conceito de tabelas para armazenamento de dados. Foi desenvolvido visando a comunidade acadmica, j que os estudantes da rea de tecnologia no tinham acesso s verses licenciadas desse banco, pois as mesmas so muito caras para as pessoas em comum e at mesmo para pequenas empresas. Frente a esse fato, os profissionais que sabiam trabalhar com esse banco estavam cada vez mais escassos. Por esse motivo a Oracle lanou sua verso gratuita do seu BD, para que mais pessoas tivessem acesso ele e conhecessem essa magnfica ferramenta. O BD possui suporte ao PL/SQL, verso otimizada da linguagem SQL, que utilizada para a comunicao com o BD, desenvolvida pela Oracle e que tambm ser apresentada no decorrer do curso. O Oracle 10g Express Edition conta ainda com o mesmo suporte oferecido pela sua verso comercial, para quem desenvolve softwares, integrao com as linguagens Java, C++, PHP, VB.NET, C, entre outros.

1 Etapa
Instalao do Oracle 10g XE. Nesse curso utilizaremos a verso do Oracle XE para Windows. A Oracle tambm possui a verso para Linux desse BD para aqueles que preferem esse SO. Para quem desejar baixar o Oracle XE, basta acessar o endereo abaixo: http://www.oracle.com/technology/software/products/database/xe/index.html Caso voc ainda no tenha se cadastrado no site da Oracle, o cadastro ser requerido e voc pode faz-lo pois totalmente grtis. Com o software devidamente baixado em seu microcomputador, basta dar um duplo clique sobre ele para iniciar a instalao. Como padro no Windows, depois que a janela do instalador estiver aberta, basta clicar em Prximo at chegar na seguinte tela:

Figura 1.1: Assistente de Instalao Nessa etapa dever ser informada a senha do usurio System, que o usurio padro do Oracle XE. Dica: escolha seu primeiro nome (opcional). Feito isso, clique em prximo e na tela que seguinte clique em instalar. Aps instalado ser exibida a janela de confirmao da instalao. Desmarque a opo Acionar a homepage do Banco de Dados e clique em Finalizar.

Apresentao das ferramentas do Banco.

Aps a concluso da instalao, acesse o menu Iniciar, exiba todos os programas e procure a pasta Oracle Database 10g Express Edition.

Figura 1.2: Menu Iniciar Pode-se visualizar 8 opes: 1. Diretrio Obter Ajuda: nesse diretrio temos mais 4 opes de ajuda online, que no sero aqui discutidas. 2. Executar linha de comandos SQL: essa opo abre o SQL*Plus, que ser muito utilizada nesse curso. 3. Fazer Backup do Banco de Dados: opo para backup do banco, que ser discutida mais adiante aqui no curso. 4. Iniciar Banco de Dados: caso o banco no esteja iniciado essa opo d um start no banco. 5. Interromper Banco de Dados: essa opo encerra todos os servios do banco de dados que estiverem sendo executados no computador. 6. Ir para a Home Page de Banco de Dados: essa opo abre uma tela para gerenciamento do BD no navegador padro do computador. 7. Obter ajuda: outra opo de ajuda online, que aqui no ser discutida. 8. Restaurar Banco de Dados: caso haja um arquivo de backup essa opo utilizada para restaurar esse arquivo. Ferramentas SQL*Plus. Para iniciar, iniciaremos a opo Executar linha de comandos SQL. Dever aparecer a seguinte tela: 3

Figura 1.3: SQL*Plus Essa a tela inicial do SQL*Plus. Ser esse ambiente que usaremos no decorrer de grande parte do tutorial. Nessa tela digite conn; e pressione a tecla Enter. O comando conn; serve para o usurio conectar-se ao BD. Criao e excluso de usurios.

Como estamos acessando o BD pela primeira vez aps a instalao, o nico usurio existente o system. Portanto digite system assim que o SQL*Plus solicitar e pressione Enter. Aps isso o SQL*Plus solicitar a senha. Informe a senha que voc cadastrou no momento da instalao do BD. Podemos ainda visualizar qual usurio est conectado ao banco. Para isso utilizamos o seguinte comando: show user; Aps digitar esse comando pressione Enter. A tela dever estar como abaixo:

Figura 1.4: Show User No aconselhvel usar o usurio padro do Oracle, pois o mesmo pode realizar toda e qualquer ao dentro do banco de dados, e isso muito perigoso, pois somente o administrador do BD deve possuir tais privilgios. Portanto aprenderemos a seguir como criar usurios no BD. Para criarmos usurios no Oracle utilizamos o seguinte comando: create user [login] identified by [senha]; Onde [login] o nome do usurio e [senha] ser o cdigo de acesso dele ao banco. Como em geral, recomenda-se no usar caracteres especiais para login e senha. Vamos aos testes! A partir desse ponto exercitaremos a criao de usurios. Suponha que voc o administrados do banco de dados de uma organizao e, portanto, voc o responsvel pela criao de usurios. Cadastre alguns usurios (5 ao menos) no Oracle, mas ateno aos logins e senhas, pois utilizaremos esses usurios para exerccios posteriores ( recomendvel que tais informaes sejam anotadas em algum lugar de sua preferncia). Sempre que um usurio criado corretamente dever ser exibida a mensagem de confirmao, como no exemplo a seguir:

Figura 1.5: Create User Fatec Suponha que voc est cadastrando usurios que foram recentemente contratados pela empresa onde voc trabalha. Como so funcionrios novos na empresa, consequentemente eles no possuam usurio e senha de acesso ao sistema, por isso voc ficou encarregado de realizar essa tarefa. Mas vamos supor uma outra situao: a empresa onde voc trabalha demitiu alguns funcionrios. Lgicamente voc precisar excluir esse usurios do banco de dados. Desse modo, veremos a seguir o comando que nos possibilita a excluso de usurios do BD. Para excluirmos usurios no Oracle utilizamos o seguinte comando: drop user [login] cascade; Onde o [login] o nome do usurio que deseja-se deletar. A palavra CASCADE no fim do comando significa "em cascata" e opcional. Quando criamos objetos dentro do banco de dados (tabelas, funes, etc.), estes objetos ficam na rea do usurio que os criou e se este for deletado seus objetos sero deletados tambm. Para que essa excluso "em cascata" ocorra, o comando CASCADE deve estar presente ao final do comando DROP USER. Caso o comando CASCADE no esteja no fim da linha de comando ser exibida na tela uma mensagem de erro da Oracle. Esse comando s ser dispensvel caso o usurio em questo no tenha criado nenhum objeto no BD. Aps a excluso de um usurio dever aparecer na tela uma mensagem tal qual a ilustrao a seguir:

Figura 1.6: Drop User Fatec Edio de senhas dos usurios.

Outra funo muita usada por um administrador de banco de dados a alterao de senhas dos usurios. Normalmente nas empresas em geral o usurio cadastrado com uma senha padro, mas que pode posteriormente ser alterada, segundo a solicitao do mesmo. Veremos agora como fazer para alterar a senha de um usurio. Para alterarmos as senhas dos usurios no Oracle utilizamos o seguinte comando: alter user [login] identified by [nova senha]; Onde [login] o nome do usurio que deseja-se alterar e [nova senha] o novo cdigo de acesso do usurio ao banco. Vale lembrar que caracteres especiais so dispensveis! Assim que um usurio alterado, a tela dever estar parecida com a que segue:

Figura 1.7: Alter User Fatec importante ressaltar que toda alterao de senha deve ser anotada em um local aonde o administrador do banco de dados poder consultar posteriormente, pois casos em que o usurio esquece a senha no so raros.

Privilgios.

Como j foi comentado anteriormente, o usurio padro (System) do Oracle pode executar qualquer ao dentro do banco. Por isso demos incio aos tpicos de criao, excluso e alterao de usurios dentro do banco de dados. Mas isso de nada adiantaria se esses usurios tivessem as mesmas permisses do usurio System. Por isso neste tpico, aprenderemos como adicionar ou remover permisses de um usurio. Mas antes disso interessante conhecer os tipos de permisses e suas caractersticas. Privilgio CONNECT Descrio Permite que o usurio conecte-se ao banco de dados e execute aes bsicas nele. Conceda este privilgio ao usurio ou aplicao que necessite acessar o banco de dados. CONNECT inclui o privilgio CREATE SESSION, que permite somente acesso ao banco. Permite que um usurio administre todos os objetos do banco de dados, inclusive os demais usurios, mas no inclui os privilgios necessrios para iniciar ou parar o banco de dados, start up e shut down, respectivamente. DBA inclui o privilgio de sistema com WITH ADMIN OPTION, que significa: com opo de administrao. Permite que o usurio crie objetos (tabelas, funes, etc). Conceda este privilgio apenas aos usurios que desenvolvem no banco de dados. RESOURCE inclui os seguintes privilgios do sistema: CREATE CLUSTER, CREATE INDEXTYPE, CREATE 8

DBA

RESOURCE

OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, e CREATE TYPE . Tabela 1.1: Permisses Agora que j conhecemos as permisses, vamos fazer alguns testes. Conectese ao banco com o usurio SYSTEM, caso no esteja. Crie um usurio com o seu nome, a senha ficar por sua conta. Quando desejamos adicionar/alterar a permisso de usurios, utilizamos o comando GRANT (conceder). A sintaxe desse comando muito simples, como pode-se notar a seguir: grant [privilgio] to [usurio]; possvel conceder mais de um privilgio a um usurio numa mesma linha de comando. Para isso necessrio separar os privilgios com uma vrgula. Ex: grant [privilgio1, privilgio2] to [usurio]; H tambm a possibilidade de conceder um ou mais privilgios a um ou mais usurios, bastando somente separar o nome dos usurios com uma vrgula, tal qual demonstramos no exemplo anterior. Ex: grant [privilgio1, privilgio2] to [usurio1, usurio2]; Um usurio que no possui o privilgio de DBA pode conceder permisses a outros usurios, porm ele s pode conceder as permisses que ele possui. E ele s poder fazer isso se quando esse usurio recebeu a permisso foi especificado no comando grant a opo WITH ADMIN OPTION. Para melhor entendimento, segue a sintaxe do comando: grant [resource] to [usurio1] with admin option; No exemplo acima o usurio poder conceder o privilgio resource a qualquer outro usurio, pois est especificado na ltima parte do comando a opo with admin option. Agora que sabemos como conceder privilgios usurios, vamos conhecer o comando para tirar privilgios. O comando que nos possibilita esse ao o REVOKE (revogar). A sintaxe desse comando no possui segredos, como pode ser observado a seguir: 9

revoke [privilgio] from [usurio]; Assim como no comando grant podemos revogar mais de um privilgio de um ou mais usurios na mesma linha de comando. Ex: revoke [privilgio1, privilgio2] from [usurio]; ou revoke [privilgio1] from [usurio1, usurio2]; Ou ainda podemos revogar mais de uma permisso de mais de um usurio no mesmo comando, fazendo uma juno dos dois comandos demonstrados anteriormente: revoke [privilgio1, privilgio2] from [usurio1, usurio2]; Um usurio que no tem o privilgio DBA pode tirar privilgio de outro usurio, mas somente se o primeiro estiver habilitado para conceder esse privilgio, o que o obriga a possuir tal privilgio. Para acabar com qualquer confuso, vamos aos testes! Faremos vrios testes com diferentes usurios e permisses para ver na prtica o que cada privilgio concede ao usurio. Logo aps faremos vrios testes para tirar as permisses dos usurios e ver quem pode o qu.

2 Etapa
Tipos de dados. Para todo administrador do banco de dados ou desenvolvedor de sistemas em geral extremamente importante saber quais os tipos de dados que sero armazenados. Isso porque quanto melhor especficas forem essas informaes melhor ser o rendimento do banco de dados. Vamos analisar juntos: se eu necessito de um campo para armazenar o CPF de um cliente, no faz sentido algum eu definir esse campo para que o mesmo receba letras. Esse foi um exemplo banal, mas que perfeitamente adequado nossa realidade. Quando criamos uma tabela no banco e definimos as colunas e as propriedades das colunas consumimos recursos tanto do banco de dados quanto do sistema, por isso espaos desperdiados, campos inteis, etc, so extremamente prejudiciais ao desempenho do sistema. Frente a esses fatos importante saber os tipos de dados que podemos armazenar na tabelas. 10

A seguir observamos uma tabela com os tipos de dados suportados Oracle XE: Tipo de dados NUMBER Descrio

pelo

Armazena nmeros reais com sinal (negativos e positivos), tem preciso de 1 a 38 no que se refere casas decimais. aconselhvel utiliz-lo quando os valores numricos possam ser utilizados para clculos. Ex: NUMBER(12,2) onde o valor 12 referese a quantidade mxima de nmeros antes das vrgula e o valor 2 refere-se a quantidade de casas decimais aps a vrgula. Para campos de texto, cujo comprimento fixo, determinado por n, cujo tamanho mximo de 2000 caracteres. Ex: CHAR(5) Para campos de texto de comprimento varivel com tamanho mximo dimensionado por N, cujo maior valor possvel 4000 caracteres. Recomenda-se o uso deste campo sobre o char. Ex: VARCHAR2(50) Assim como os campos do tipo varchar2, os campos do tipo nvarchar2 tambm armazenam textos de comprimentos variveis, porm h casos onde na presena de caracteres especiais o varchar2 poder aparecer desconfigurado. Em casos com esse se o nvarchar2 for utilizado esse erro no acontecer. Ex: a palavra pendncia pode ser exibida como pend?encia se for do tipo varchar2, o que no ocorre se ela for do tipo nvarchar2. Utilizado em campos do tipo data e hora. Utilizado em campos do tipo data e hora, incluindo valores de milissegundos . Para compos que armazenaro dados binrios (sons, imagens, vdeos, etc.) de tamanho varivel at um limite mximo de 4GB Para campos de textos de tamanho varivel com um tamanho mximo de 4GB, muito til para textos longos. 11

CHAR

VARCHAR2

NVARCHAR2

DATE TIMESTAMP BLOB (binary large object)

CLOB (character large object)

BINARY_FLOAT

Nmero de ponto flutuante, com cumprimento ao IEEE-754, de preciso simples. Necessita de menos memria e utiliza aritmtica de mquina nativa - o que proporciona alto desempenho para sistemas de computao intensiva. Pode ser comparado ao infinitivo ou ao NaN (Not a Number). Apresenta o armazenamento da preciso binria, que pode gerar erros ao realizar arredondamento. Semelhante ao BINARY_FLOAT, porm com preciso dupla. Ainda assim armazenado com preciso binria no deve ser utilizado em sistemas com necessidades financeiras de arredondamento. Alto desempenho pois utiliza a aritmtica de mquina nativa. Tabela 2.1: Tipos de Dados

BINARY_DOUBLE

Agora que j conhecemos os tipo de dados suportados pelo Oracle 10g Express Edition, vamos partir para o prximo passo. Criao e manipulao de tabelas.

Quando falamos de banco de dados relacional automaticamente estamos nos remetendo ao conceito de tabelas para armazenagem da massa de dados. No detalharemos aqui o conceito de tabelas, tuplas, etc, pois no esse o objetivo do curso. Nosso foco a partir daqui ser a criao, manipulao e manuteno de tabelas. A sintaxe para criao de tabelas a seguinte: create table [nome da tabela] ( [nome do campo 1] [tipo] [valor padro] [nulo?], [nome do campo 2] [tipo] [valor padro] [nulo?], . . . [nome do campo n] [tipo] [valor padro] [nulo?] ); [Nome da tabela] onde deve ser informado o nome de identificao da tabela, [nome do campo 1], [nome do campo 2], etc, so os nomes que sero atribudos s colunas; [tipo] o tipo de dados que cada coluna armazenar (os tipos possveis foram mostrados na ltima tabela deste documento); [nulo?] onde devemos informar se a tabela poder conter valores nulos (vazios) ou no. Observemos a seguir o bloco de comandos da criao da nossa primeira tabela:

12

create table teste ( codigo varchar2(10) nome varchar2(50) sexo char(1) default 'M' dt_nasc date idade number );

not null, not null, not null, null, null

Aps a digitao desse bloco de cdigo devemos pressionar a tecla Enter para confirmar a criao da nossa tabela 'TESTE'. Se no houver nenhum erro no cdigo, sua tela dever estar semelhante tela a seguir:

Figura 2.1: Create Table Teste Aps criarmos uma tabela, podemos visualizar sua estrutura utilizando o comando DESCRIBE, ou DESC, tanto faz. A sintaxe desse comando a seguinte: desc [nome da tabela]; Vamos fazer um teste: digite no SQL*Plus o comando: desc teste; Nos exibida a seguinte tela:

13

Figura 2.2: Desc Teste 1 Por se tratar de um comando extremamente simples, dispensaremos explicaes sobre ele. Aps a criao de uma tabela, comum alterarmos as propriedades de seus campos, embora o ideal que no seja necessrio a alterao da estrutura da tabela. Mas por vezes somos obrigados a isso, seja por alteraes na legislao do pas, alterao na regra de negcio da empresa, ou por qualquer outro motivo. Perante essa situao, vamos conhecer os comando para que seja possvel adicionar, remover e alterar as propriedades de um campo. Primeiramente veremos como alterar um campo em uma tabela. Utilizaremos a tabela criada anteriormente para esses exerccios. Segue a sintaxe do comando para alterao das propriedades do campo: alter table [nome da tabela] modify [nome do campo] [tipo]; Onde [nome da tabela] o nome de identificao da tabela no banco, [nome do campo] o campo que ser alterado e [tipo] a alterao que faremos nele. Podemos, alm de modificar o tipo do campo, modificar tambm seu valor padro e se poder ser nulo ou no. Vamos supor que nossa inteno seja alterar o campo cdigo. Atualmente ele est com o tipo varchar2(10) e ns iremos alter-lo para number. Para realizarmos essa alterao utilizamos o cdigo que segue: alter table teste modify codigo number; Aps a digitao do cdigo anterior, pressionamos a tecla Enter e nos dever ser exibida uma tela semelhante essa: 14

Figura 2.3: Desc Teste 2 No exemplo anterior alteramos apenas o tipo de dado que o campo armazenar, mas perfeitamente possvel alterar o valor padro desse campo assim como se ele poder ou no ser nulo. Faa teste nos demais campos antes de prosseguir. Dando sequencia aos nossos testes, veremos agora como adicionar um campo em uma tabela. A sintaxe para adio de campos em uma tabela a seguinte: alter table [nome da tabela] add ([nome do campo] [tipo] [nulo?]); Onde [nome da tabela] o nome de identificao da tabela, [nome do campo] o campo que ser adicionado, [tipo] o tipo de dados que o campo armazenar e [nulo?] a propriedade que indica se o campo poder ser nulo ou no. Vale lembrar que podemos ainda definir o valor padro do campo. Vamos supor que na tabela testes devemos criar um campo chamado rg, para armazenar o nmero desse documento dos indivduos que sero cadastrados. Para realizamos essa alterao utilizamos o comando a seguir: alter table teste add (rg varchar2(12) null); Ao digitar o comando acima, pressione Enter para confirmar a alterao. Agora utilize o comando desc para ver como ficou a estrutura da sua tabela. Ela deve estar parecida com a tabela ilustrada na sequencia:

15

Figura 2.4: Alter Table Teste Agora que j sabemos como alterar as propriedades de um campo e como adicionar campos em uma tabela, vamos aprender a apagar campos de uma tabela. A sintaxe desse comando a seguinte: alter table [nome da tabela] drop column [nome do campo]; Onde [nome da tabela] o nome de identificao da tabela e [nome do campo] o campo que ser excludo. Vamos apagar a coluna que acabamos de criar: rg. Digite o cdigo: alter table teste drop column rg; Aps a digitao do cdigo anterior, sua tela do SQL*Plus dever estar parecida com a tela seguinte:

16

Figura 2.5: Alter Table Teste Drop Column MUITO CUIDADO AO EXCLUIR UM CAMPO, POIS TODOS OS REGISTROS QUE ESTIVEREM GRAVADOS NELE SERO AUTOMATICAMENTE EXCLUDOS SEM AVISO PRVIO!!! Agora que j sabemos como alterar, incluir e excluir campos de uma tabela, vamos exercitar os conhecimentos at aqui adquiridos. Faa testes e veja pense em diferentes situaes que possam ser aplicados os conceitos at aqui discutidos. Relacionamento de tabelas.

Por mais tabelas que um banco de dados tenha, elas nunca podero ser independentes umas das outras. Em banco de dados, vemos que as tabelas relacionam-se entre si, por meio de campos que ns definimos. A esses campos chamamos de chaves primrias e chaves estrangeiras. No explicaremos aqui o conceito de chave primria e estrangeira pois no o objetivo do curso. Partiremos do princpio que todos sabem, ao menos na teoria, o que uma chave primria e o que uma chave estrangeira. A seguir comearemos a discutir como tratar esses campos dentro do Oracle 10g Express Edition.

Tipos de Constraints.

A partir daqui trataremos de um assunto de extrema importncia. Constraints so restries que colocamos para determinados campos das tabelas do BD. Antes de definirmos os campos que recebero essas restries, precisamos primeiro analisar cuidadosamente a regra de negcio envolvida, pois uma restrio errada pode complicar toda programao futura. Vamos estudar trs tipos de constraints: primary ker, foreign key e check. Comearemos pela primary key. 17

Uma contraint do tipo primary key (chave primria), deve ser atribuda ao(s) campo(s) que dever possuir valores nicos dentro da tabela. Para conhecermos a sintaxe desse comando utilizaremos a tabela que temos trabalhado at aqui, ou seja, a tabela teste. Observe que na tabela teste temos cinco campos: codigo, nome, sexo, dt_nasc e idade. O campo cdigo foi colocado de propsito para que viesse a ser nossa chave primria. O campos CPF tambm poderia ser definido como chave primria, j que no existe CPFs com nmeros iguais, mas para facilitar utilizaremos o campo cdigo. A sintaxe desse comando a seguinte: alter table [tabela] add constraint [nome da constraint] primary key ([campo]); Onde [tabela] o nome da tabela que ser alterada, [nome da contraint] o nome que daremos nossa restrio e [campo] o nome do campo que possuir essa restrio. Agora que j conhecemos a sintaxe, podemos fazer o teste na tabela teste. Ento digite no SQL*Plus o seguinte cdigo: alter table teste add constraint cp_teste primary key (codigo); Aqui demos o nome de cp_teste constraint. Demos esse nome pelo seguinte motivo: cp so as iniciais de Chave Primria. sempre bom estabelecer um padro para criao de objetos dentro do banco de dados. Por isso utilizamos cp para sabermos que uma chave primria, e logo em seguida, complementado o nome da nossa contraint, utilizamos o nome da tabela a qual pertence a constraint. E para melhor visualizao separamos esse nome composto com o underline. Confirme o comando anteriormente digitado pressionando a tecla Enter. Sua tela do SQL*Plus dever estar semelhante a tela seguinte:

18

Figura 2.6: Alter Table Teste Add Constraint Podemos ainda criar uma chave primria composta por mais de um campo. No nosso caso isso no ser necessrio, mas como isso muito comum acontecer em um sistema, vamos aprender a sintaxe para criao de uma chave primria composta que muito parecida com a sintaxe que vimos anteriormente. Para que no fique nenhuma dvida, mostraremos a seguir como fazer uma chave primria composta:

alter table teste add constraint [nome da constraint] primary key ([campo1, campo2]);

Como pode ser observado, apenas a ltima parte do comando sofre alterao. Quando criamos uma chave primria composta devemos apenas separar os campos que faro parte dela com uma vrgula. At aqui vimos como criar uma chave primria em uma tabela que j existia no BD. Vamos agora ver como criar uma chave primria no momento de criao de uma tabela. A sintaxe para criao de uma chave primria no momento da criao da tabela segue: create table [tabela] ( [campo1] [tipo] [default] [nulo?], [campo2] [tipo] [default] [nulo?], . . . [campoN] [tipo] [nulo?], constraint [nome da constraint] PRIMARY KEY ([Campo]) );

19

Na verdade a nica coisa que devemos fazer para criar uma restrio no momento da criao da tabela fazer a juno dos dois comandos. Embora no haja segredos, vamos testar. Para isso vamos criar a tabela aluno. Abaixo segue o cdigo para criao da tabela aluno: create table aluno ( codigo number(5) not null, nome varchar2(50) not null, curso number(5) not null, sexo char(1) not null, constraint cp_aluno primary key (codigo) );

Confirme o comando pressionado Enter. No exemplo que vimos criamos uma chave primria simples, mas se desejssemos criar uma composta deveramos apenas informar os campos que a receberiam, separando-os com vrgula. Sua tela do SQL*Plus dever estar parecida com a seguinte:

Figura 2.7: Create Table Aluno Agora que sabemos como criar constraint do tipo chave primria, vamos aprender a criar constraint do tipo chave estrangeira. Uma chave estrangeira um campo que possuo em uma tabela e esse mesmo campo chave primria em outra tabela. Vamos inverter a ordem que seguimos no aprendizado de chave primria. Veremos primeiramente como criar uma chave estrangeira no momento da criao de uma tabela. Segue a sintaxe:

20

create table [tabela] ( [campo1] [tipo] [nulo?], [campo1] [tipo] [nulo?], . . . [campoN] [tipo] [nulo?], [campoE] [tipo] [nulo?], constraint [nome da constraint] foreign key ([campoE]) references [tabelaE]([campoE]) ); Onde [nome da constraint] o nome que daremos nossa chave estrangeira, [campoE] o campo que chave primria na [tabelaE] e que nessa tabela que criamos ser chave estrangeira. A diferena principal do cdigo de criao de chave estrangeira para chave primria que na chave estrangeira temos que especificar o nome da tabela em que esse campo chave primria e o nome desse campo na outra tabela, por meio do comando references. Vamos testar! Vamos agora criar a tabela nota_modulo. Essa tabela registrar a nota final dos alunos por mdulo. Como apenas uma tabela que usaremos para estudo ela ser o mais simples possvel. Possuir apenas trs campos: cod_modulo, cod_aluno e nota_final. create table nota_modulo ( cod_modulo number(5) not null, cod_aluno number(5) not null, nota_final number(2,2) not null, constraint ce_nota_modulo-aluno foreign key (cod_aluno) references aluno (codigo) ); Confirme o comando pressionando Enter. Sua tela do SQL*Plus dever estar parecida com a seguinte:

21

Figura 2.8: Create Table Nota_Aluno Na tabela que acabamos de criar o indicamos que o campo cod_aluno chave estrangeira do campo codigo que est na tabela aluno. Note que chave primria e estrangeira no necessitam ter o mesmo nome, porm necessrio que elas armazenem o mesmo tipo de dados. Definimos o nome da constraint chave estrangeira seguindo o mesmo padro que usamos na definio da constraint chave primria. Usamos o prefixo 'ce' como sigla de Chave Estrangeira e separamos com underline esse prefixo do nome da tabela em que se encontra essa constraint. Mesmo que a princpio parea complicado, futuramente isso nos auxiliar muito, basta apenas nos acostumarmos com determinados padres. Lembrando que seguir padres um bom hbito de programao, pois quando o sistema comea a ganhar volume esses padres facilitam a vida de qualquer desenvolvedor. No nosso caso criamos uma tabela com apenas uma chave estrangeira; mas e se quisssemos criar uma tabela com vrias constraints do tipo chave estrangeira? Muito simples, basta separar as constraints com vrgulas. Na sequencia exibida a sintaxe para esse caso: create table [tabela] ( [campo1] [tipo] [nulo?], [campo1] [tipo] [nulo?], . . . [campoN] [tipo] [nulo?], [campoE1] [tipo] [nulo?], [campoE2] [tipo] [nulo?], constraint [nome da constraint 1] foreign key ([campoE1]) references [tabelaE1] ([campoE1]),

22

constraint [nome da constraint 2] foreign key ([campoE2]) references [tabelaE2] ([campoE2]) );

Desse modo podemos criar quantas chaves estrangeiras forem necessrias no momento da criao das tabelas. At o momento vimos como criar chaves estrangeiras no momento da criao das tabelas. Vamos ver agora como criar chaves estrangeiras para tabelas que j existem. Bem, na verdade no h segredo nenhum, a nica coisa que temos que fazer usar o comando de criao de chave estrangeira dentro do comando alter table. Segue a sintaxe: alter table [tabelaX] add (constraint [nome da constraint] foreign key ([campoY]) references [tabelaY] ([campoY])); Usando esses comandos podemos criar chaves estrangeiras sem maiores problemas. Para finalizar essa parte de nossos estudos sobre contraints falta-nos conhecer o ltimo tipo de constraint que estudaremos aqui: constraint check. Mas, afinal de contas, para que serve a restrio check? Essa constraint serve para limitar as informaes que o usurio pode inserir em determinado campo. Para entendermos melhor, nada como vermos a aplicao na prtica. Usaremos a tabela aluno para entendermos melhor esse conceito. Nessa tabela temos o campo sexo. Esse campo est definido como tipo char(1), ou seja, s armazenar um caracter. Definimos esse campo dessa maneira para que nele seja informado 'M' ou 'F'. Mas e se o usurio errar na hora da digitao, e em vez de 'M' ou 'F' colocar uma outra letra qualquer, ou at mesmo um nmero? Se esse campo no possuir nenhuma restrio ele aceitar o que o usurio inserir. Como um erro perfeitamente possvel acontecer (e acredite, mais frequente do que se imagina) necessrio colocarmos uma restrio no campo sexo, para que o mesmo aceite apenas as letras 'M' ou 'F'. Vamos conhecer e entender a sintaxe do comando que adiciona check's: alter table [tabela] add (constraint [nome da constraint] check ([campo] [condio])); Onde [tabela] a tabela que possui o campo que receber a constraint, [nome da constraint] o nome que usaremos para identificar a constraint no banco de dados, [campo] o campo que receber a restrio e [condio] o que pode ou no ser inserido no campo. Vejamos na prtica!

23

Vamos adicionar uma restrio do tipo check no campo sexo da tabela aluno. A seguir o comando: alter table aluno add (constraint ck_sexo check (sexo in ('M', 'F'))); Confirme o comando pressionando Enter. Sua tela do SQL*Plus dever estar parecida com a seguinte:

Figura 2.9: Alter Table Aluno Add Constraint Vimos como com o comando anterior como adicionar uma constraint do tipo check em uma tabela j existente, mas como nos outros tipo de constraints possvel inserir a restrio no momento da criao da tabela. E, assim como nos outros tipos de constraints, extremamente simples fazer isso. Segue a sintaxe create table [tabela] ( [campo1] [tipo] [nulo?], [campo1] [tipo] [nulo?], . . . [campoN] [tipo] [nulo?], constraint [nome da constraint] check ([campo] [condio]) );

Seguindo a sintaxe do comando anterior podemos, sem maiores dificuldades, criar uma restrio do tipo check no momento da criao da tabela. At aqui aprendemos a criar restries no banco de dados Oracle 10g XE. 24

Veremos agora como apagar essas restries. Caso a restrio seja criada de maneira errada, ou mesmo que muda alguma situao e haja a necessidade de apagar uma restrio usamos um comando muito simples, o qual a sintaxe a que segue: alter table [tabela] drop constraint [nome da constraint]; Onde [tabela] o nome da tabela que possui a constraint e constraint] a restrio em si. Vamos testar! Apagaremos a restrio do tipo check que criamos anteriormente na tabela aluno. A seguir o comando: alter table aluno drop constraint ck_sexo_aluno; Confirme o comando pressionando Enter. Sua tela do SQL*Plus dever estar parecida com a seguinte: [nome da

Figura 2.10: Alter Table Aluno Drop Constraint Finalizamos aqui nosso aprendizado sobre contraints. Sempre fique atento essas restries, pois so fundamentais para qualquer profissional que deseja trabalhar com o banco de dados Oracle, independente da verso do mesmo.

25

Manipulao de dados com SQL

At o momento vimos como formatar e organizar tabelas e campos. Mas at o momento no trabalhamos com dados, ou seja, com as informaes que precisaremos gerenciar. Pra incio de nossos estudos veremos como inserir dados em uma tabela. Para essa tarefa criaremos a tabela cidades com as seguintes especificaes: Tabela: cidades CAMPO codigo nome estado pais_regiao TIPO number varchar2 char TAMANHO 5 30 2 NULO No No No Sim

varchar2 20 Tabela 2.2: Tabela Cidades

Aps a criao dessa tabela, vamos inserir os dados. A sintaxe para insero de dados na tabela a seguinte: insert into [tabela] ([campo1, campo2,..., campoN]) values ([valor1, valor2,..., valorN]); Onde [tabela] o nome da tabela que receber os dados [campo1], [campo2], etc, so os nomes das colunas que recebero valores e [valor1], [valor2], etc, so as informaes que inseriremos. Sempre que formos inserir nmeros reais, no lugar da vrgula devemos colocar o ponto, pois a configurao de nmeros reais do Oracle 10g XE segue o padro dos Estados Unidos. E quando formos inserir dados do tipo de texto ou data, devemos colocar os valores entre aspas simples. Vamos agora inserir valores na tabela que acabamos de criar. Digite a seguinte linha de comando: insert into cidades (codigo, nome, estado, pais_regiao) values (1, Ourinhos, SP, Sudeste); Aps digitar o comando acima confirme pressionando a tecla Enter. Note que os dados que preenchero os campos do tipo char e varchar2 esto entre aspas simples. Sua tela do SQL*Plus dever estar como a seguinte:

26

Figura 2.11: Insert Into Cidades Para visualizarmos os dados inseridos utilizaremos o comando mais simples em SQL. Digite no SQL*Plus o comando a seguir: select * from cidades; Aps digitar esse comando confirme pressionando a tecla Enter. Sua tela dever estar semelhante a seguinte:

Figura 2.12: Select Cidades 1 Note uma peculiaridade: foi reservado um espao muito pequeno para o campo estado, fazendo com que o nome do mesmo no aparea inteiro.

27

interessante que visualizemos o nome dos campos completos, assim como os dados contidos nos mesmos. Para isso vamos aprender um comando muito simples, mas que muito interessante e til nesses casos. Por se tratar de um comando simples, no vamos analisar a sua sintaxe, mas veremos como ele funciona diretamente na prtica. Digite no SQL*Plus o seguinte comando: column estado format a8; O nmero 8 o espao que ser reservado para a exibio da coluna estado. Confirme o comando pressionando a tecla Enter. Neste momento no percebida nenhuma alterao; ento digite novamente o comando SQL que digitamos para visualizar os dados da tabela.

Figura 2.13: Column Format Sua tela do SQL*Plus dever estar como a seguinte: Agora que j sabemos inserir dados na tabela e como formatar o tamanho das colunas para melhor visualiz-las, vamos aprender a atualizar dados que j esto inseridos. Para isso vamos inserir mais uma linha de dados na tabela cidades. Insira os dados exibidos a seguir: Tabela: cidades CAMPO codigo nome VALOR 2 Assis

28

estado

SP

pais_regiao Sudeste Tabela 2.3: Cidade 2 Aps a insero desses dados, digite um comando SQL de forma que todos os dados da tabela cidades sejam visualizados. Sua tela do SQL*Plus dever estar semelhante a seguinte:

Figura 2.14: Select Cidades 2 Vamos agora alterar a ltima linha inserida. Vamos supor que a cidade Assis no era para ser cadastrada com o cdigo nmero 2, em vez disso deveria ser cadastrada com o cdigo nmero 5. Em vez de apagar toda a linha, alteraremos apenas o campo necessrio. Para isso vamos usar o comando update. Ento digite no SQL*Plus o comando a seguir: update cidades set codigo = 5 where codigo = 2; Aps a digitao desse comando pressione a tecla Enter para confirmar. Se a operao for realizada com sucesso, sua tela do SQL*Plus dever estar parecida com a seguinte:

29

Figura 2.15: Update Cidades Agora digite um comando SQL que possibilite visualizar todos os registros da tabela cidades. Sua tela do SQL*Plus dever estar semelhante a seguinte:

Figura 2.16: Select Cidades 3 Note que apenas a coluna cdigo teve seu valor alterado. Se desejssemos alterar mais de um campo num nico comando update, apenas teramos que informar os campos a serem atualizados, separando-os com uma vrgula. A seguir a sintaxe para podermos entender melhor: update [tabela] set [campo1] = [valor1], [campo2] = [valor2], ... , [campoN] = [valorN] where [campoX] = [condioX]; Por fim, aprenderemos agora a excluir linhas das tabelas do banco de dados. 30

Para isso utilizamos o comando delete. Vamos ento apagar a linha da cidade Assis da nossa tabela cidades. Para tal, utilizaremos o seguinte comando: delete from cidades where codigo = 5; Aps a digitao do cdigo anterior, pressione a tecla Enter. Sua tela do SQL*Plus dever estar como a seguinte:

Figura 2.17: Delete Cidades Digite um comando SQL que possibilite visualizar todos os registros da tabela cidades.

Figura 2.18: Select Cidades 4 Sua tela do SQL*Plus dever estar assim: 31

Finalizamos assim nosso aprendizado sobre insero, atualizao e excluso de dados no banco de dados. Commit e Rollback.

Em toda insero, alterao ou excluso de dados, necessrio confirmar a operao realizada. Para tal, utilizamos o comando commit. O comando commit confirma todas as transaes realizadas no banco de dados. Assim como temos o comando commit confirmar todas as modificaes no banco de dados, temos tambm o comando rollback, que cancela todas as modificaes realizadas na sesso atual do banco de dados. Ou seja, se iniciarmos uma sesso e nessa sesso fizermos vrias alteraes nos dados e sairmos da sesso sem dar um commit tudo o que realizamos ser perdido. J o comando rollback quando informado por ns, cancela todas as alteraes realizadas aps o ltimo commit. Vamos testar! Exclua o registro da cidade Ourinhos na tabela cidades. Digite um comando select que lhe permita ver todos os dados da tabela cidades. Sua tela do SQL*Plus dever estar assim:

Figura 2.19: Select Cidades aps Delete Aps a confirmao da excluso digite no seu SQL*Plus: rollback; Digite um comando select que lhe permita ver todos os dados da tabela cidades. Sua tela do SQL*Plus dever estar assim: 32

Figura 2.20: Rollback Note que o rollback desfez a modificao que havia sido realizada anteriormente. Sempre que qualquer alterao for realizada no banco de dados, deve-se confirmar com o comando commit, para garantir que essa alterao foi salva. Para utilizar o comando commit basta digit-lo como aparece a seguir sempre que se realizar alguma alterao no banco: commit; Embora sejam muito simples, commit e rollback so indispensveis, e us-los um timo hbito para todo profissional que trabalha com banco de dados. Rotulando campos das tabelas.

A partir de agora, veremos como rotular campos. Rotular campos nada mais que mudar o nome dos campos para melhor visualiz-los. Mas, na verdade, o campo no tem seu nome alterado, apenas exibido um nome diferente quando executamos um comando select, ou seja, a estrutura da tabela dentro do banco de dados permanece a mesma. Vamos testar! No nosso teste continuaremos utilizando a tabela cidades. Note que quando efetuamos um comando select, a coluna pais_regiao aparece exatamente o nome dela na ntegra. Vamos mudar esse nome (somente para efeito de visualizao). Para rotularmos campos muito simples. Antes de vermos isso, veremos como fazer o comando select que vinhamos fazendo at o momento de forma diferente. Digite na tela do SQL*Plus o seguinte comando:

33

select codigo, nome, estado, pais_regiao from cidades; Sua tela do SQL*Plus dever estar semelhante a seguinte:

Figura 2.21: Select Cidades 5 Veja que o resultado que obtivemos o mesmo resultado do comando quando usamos o asterisco. Isso porque em vez de usar o asterisco, que indica que queremos trazer o resultado de todos os campos, escolhemos digitar o nome dos campos. J que fizemos isso, digitaremos novamente o comando anterior, mas dessa vez com uma diferena que est destacada: select codigo, nome, estado, pais_regiao as regiao from cidades; Observe a diferena! No topo da coluna temos o nome regiao no lugar de pais_regiao:

34

Figura 2.22: Select com Rtulo Se desejarmos colocar um rtulo com duas ou mais palavras, temos que utilizar as palavras entre aspas duplas. Vamos um exemplo. Vamos colocar um rtulo no campo nome. O rtulo ser NOME DA CIDADE. Ento digite o seguinte comando: select codigo, nome as NOME DA CIDADE, estado, pais_regiao from cidades; Sua tela do SQL*Plus dever estar parecida com a seguinte:

Figura 2.23: Select com Rtulo 2

35

Finalizamos assim nosso estudo sobre rtulos de campos das tabelas do banco de dados. Concatenando colunas.

A partir desse ponto, conheceremos um outro recurso que facilita a visualizao de dados no SQL*Plus: a concatenao de colunas. Concatenar nada mais que unir duas colunas, para que os dados sejam melhor visualizados, seja por capricho do desenvolvedor, seja por necessidade. Utilizaremos para essa fase de nosso aprendizado a tabela cidades. Nessa tabela vamos concatenar os campos nome, estado e pais_regiao. Alm de concatenarmos esses campos, vamos colocar um rtulo que servir para todos eles. Quando desejamos realizar uma concatenao devemos usar o smbolo pipe duas vezes consecutivas (||). Vejamos na prtica! Digite no SQL*Plus o cdigo a seguir: select codigo, nome || estado || pais_regiao as local from cidades; Sua tela dever estar como a seguinte:

Figura 2.24: Concatenando Campos Como mencionamos anteriormente, a concatenao utilizada para melhor visualizar as informaes. Mas no ltimo exemplo tudo o que conseguimos foi fazer uma tremenda confuso entre os campos. Ainda possvel colocar entre os campos textos que o desenvolvedor achar necessrio, e esses textos devem estar entre aspas simples. Para que tudo isso no fique muito abstrato, vamos sair da teoria e vamos prtica! Observe com ateno a parte do cdigo que est em destaque. Digite no SQL*Plus o seguinte comando SQL:

36

select codigo, nome ||', '|| estado ||' - Regiao: '|| pais_regiao as local from cidades; O resultado na sua tela do SQL*Plus dever estar semelhante seguinte:

Figura 2.25: Concatenando Campos 2 Assim fica bem melhor! Com relao concatenao no h mais nada a estudar, pois esse assunto muito simples. Mesmo sendo simples, til em determinadas situaes, portanto no menospreze esse tpico, pois ele pode te auxiliar posteriormente.

3 Etapa
Criao e execuo de scripts SQL. A partir daqui iniciaremos nossos estudos sobre scripts SQL's. Analisemos a seguinte situao: imaginemos que estamos inserindo dados por meio do SQL*Plus, utilizando o comando j conhecido insert. E vamos pensar grande! E se estivssemos cadastrando uma carga de dados de 20 clientes e no 16 cadastro acabasse a energia ou acontecesse algum incidente que forasse o desligamento de nosso computador. Seria uma tragdia, pois no teramos tempo suficiente para executar o comando commit e perderamos todo o nosso trabalho. Para que isso no ocorra podemos criar scripts SQL's e salv-los em um diretrio qualquer de nosso computador. Vamos entender melhor. No nosso exemplo utilizaremos o comando insert. Continuaremos usando a tabela cidades. Portanto vamos inserir uma nova cidade na nossa tabela. Segue a tabela dos dados que vamos inserir: Tabela: cidades CAMPO VALOR 37

codigo nome estado

3 Florianoplois SC

pais_regiao Sul Tabela 3.1: Cidade 3 Por enquanto no insira as informaes, pois realizaremos essa tarefa de forma diferente, utilizando o comando dentro de um script SQL. Para criarmos o script digite no seu SQL*Plus o seguinte cdigo: edit C:\insert.sql; Vamos entender: a palavra edit indica que iniciaremos um novo script; C:\ o diretrio escolhido onde o script ser salvo; insert.sql o nome que demos ao nosso script. Vale ressaltar que todo script que criarmos dever ter a exteso .sql. Ento, aps digitar o cdigo anterior confirme pressionando o Enter. O resultado dever ser o seguinte:

Figura 3.1: Iniciando Script Assim que pressionarmos Enter ser aberta uma janela do Bloco de Notas. Confirme clicando na opo Sim. Agora na janela do Bloco de Notas digite o comando para insero dos dados que esto na tabela anteriormente informada, tal como seria feito no SQL*Plus. Aps digitar o comando insert salve o seu arquivo .sql.

38

Feito isso feche a janela do Bloco de Notas. Automaticamente voltamos janela do SQL*Plus. At o momento no inserimos nada na tabela cidades, apenas criamos o script. Agora faremos o seguinte: carregaremos o script criado. Digite a seguinte linha de comando no SQL*Plus: start C:\insert.sql; Veja que exibida a mensagem de confirmao de incluso do registro:

Figura 3.2: Executando Script Digite o comando SQL que possibilite a visualizao de todos os registros da tabela cidades. O resultado dever estar parecido com o que segue:

39

Figura 3.3: Select Cidades 6 Qualquer comando SQL pode ser gravado num script, tudo vai depender da necessidade do desenvolvedor. Vamos agora visualizar o diretrio onde salvamos nosso script. V at o diretrio que voc escolheu e encontre o arquivo .sql. Exemplo:

Figura 3.4: Diretrio do Script

40

Encerramos assim nosso aprendizado sobre criao e execuo de scrips SQL. Mais um assunto simples e que extremamente importante! Operadores lgicos em SQL.

A partir desse tpico, conheceremos os operadores lgicos da linguagem SQL. Vale lembrar que SQL no uma linguagem de programao, e sim uma linguagem de busca que padro nos diversos bancos de dados existentes. Porm, mais adiante, veremos a PL/SQL, essa sim uma linguagem de programao da Oracle baseada em SQL. Portanto aprender o bsico de SQL fundamental para que posteriormente no tenhamos maiores dificuldades em PL/SQL. A seguir, temos uma tabela com os operadores lgicos que abordaremos nesse curso: Operador lgico = Nome igual Descrio Esse o operador bsico de qualquer linguagem de programao ou de consulta. Sua representao, deiferente de algumas linguagens de programao, simplesmente o sinal de 'igual'. Aqui temos o sinal de 'diferena'. reprensentado pela juno do sinal de 'maior' e 'menor'. O sinal de 'maior', assim como o de 'igual', representado apenas pelo seu smbolo. Assim como o sinal de 'maior' e 'igual', o sinal de 'menor' tambm representado pelo seu smbolo.

<> > < >= <= AND OR

diferente maior menor

'Maior ou igual' tambm segue o modelo que vimos at o maior ou momento, ou seja, a juno do sinal de 'maior' com o sinal de igual 'igual' (sempre nessa ordem). menor ou 'Menor ou igual' tambm no foge regra. Ele a juno dos igual smbolos de 'menor' e 'igual' (sempre nessa ordem). e ou O operador and um dos mais utilizados em consultas SQL's. Utilizamo-os quando trabalhamos com mais de uma clusula de comparao. Como o prprio nome diz, o operador or nos permite comparar uma ou mais colunas com um ou mais valores. Usamos o between quando queremos retornar um intervalo de valores, ento informamos o valor mnimo e o valor mximo como parmetros. O between retornar inclusive os parmetros informados, caso os mesmos existam no campo que estivermos trabalhando. Usamos o in quando queremos comparar o valor de uma coluna com vrios valores.

BETWEEN

entre

IN LIKE

em

A palavra like em ingls possui algumas tradues. No nosso parecido contexto pode ser traduzida como 'parecido'. Utilizamos esse operador quando queremos informar uma 41

sequencia de caracteres especificos. Na teoria complicado entendermos como funciona o like, que normalmente utilizado em conjunto com o smbolo %, mas na prtica veremos que ele bem mais simples do que parece. NOT O operador not utilizado sempre em conjunto com outro operador lgico (normalmente com o in ou like). Ou seja, no usamos ele quando queremos obter o resultado contrrio de determinda operador. Tabela 3.2: Operadores Lgicos

Vejamos na prtica algumas situaes em que podemos utilizar os operadores descritos acima. Para isso, vamos inseri na nossa tabela cidades mais alguns registros. A seguir a tabela dos dados que devemos inserir (se optar salve os comando de insero em scrips SQL):

Tabela: cidades CAMPO codigo nome estado VALOR 4 So Paulo SP

pais_regiao Sudeste Tabela 3.3: Cidade 4 Tabela: cidades CAMPO codigo nome estado VALOR 5 Belo Horizonte MG

pais_regiao Sudeste Tabela 3.4: Cidade 5 Tabela: cidades CAMPO codigo nome estado VALOR 6 Goiania GO

pais_regiao Centro-oeste Tabela 3.5: Cidade 6 Tabela: cidades 42

CAMPO codigo nome estado

VALOR 7 Recife PE

pais_regiao Nordeste Tabela 3.6: Cidade 7 Tabela: cidades CAMPO codigo nome estado VALOR 8 Assis SP

pais_regiao Sudeste Tabela 3.7: Cidade 8 Aps a insero, digite um comando SQL de forma que seja possvel visualizar todos os dados da tabela cidades. Se houver algum erro fique na liberdade de corrigi-lo. Vamos imaginar que no sabemos a qual cidade est atribudo o cdigo 7. Vamos ento elaborar um comando SQL para retornar esse resultado. Digite no SQL*Plus o comando seguinte: select * from cidades where codigo = 7; Aps digitar o comando anterior pressione Enter para confirmar. Sua tela do SQL*Plus dever estar como a seguinte:

43

Figura 3.5: Select Cidades Codigo 7 Neste exemplo vimos como utilizar o operador lgico 'igual'. No nosso prximo exemplo, utilizaremos o operador lgico 'diferente'. Vamos imaginar que queremos visualizar todas as cidades, menos as da regio Sudeste. Para isso digite o comando abaixo: select * from cidades where pais_regiao <> 'Sudeste'; Note que quando vamos fazer comparao com campos de texto, assim como para inser-los, necessitamos informar o texto entre aspas simples. Confirme pressionando Enter. Sua tela dever estar semelhante a seguinte:

44

Figura 3.6: Operador Lgico Diferente Vamos a mais testes! Agora veremos a funcionalidade do operador 'maior', que diga-se de passagem, no tem nenhum segredo. Vamos fazer uma consulta que retorne apenas os cdigos maiores que 6. Segue o cdigo: select * from cidades where codigo > 6; Aps pressionar o Enter, voc ter na tela o seguinte resultado:

Figura 3.7: Oprador Lgico Maior No nosso prximo exemplo vamos ver o resultado do mesmo comando anteriormente digitado, porm no lugar do sinal 'maior' utilizaremos o 'menor': 45

select * from cidades where codigo < 6; Observe sua tela, ela deve estar semelhante seguinte:

Figura 3.8: Operador Lgico Menor Veja que tanto na utilizao dos sinais 'maior' e 'menor', o valor que comparado (no nosso caso o nmero 6) no exibido. Para que ele seja exibido, devemos utilizar o sinal de 'maior' ou 'menor' juntamente com o sinal de 'igual'. Segue os exemplos para os dois casos: select * from cidades where codigo >= 6; select * from cidades where codigo <= 6; Em seguida as telas que devero ser exibidas, respectivamente:

46

Figura 3.9: Operador Lgico Maior ou Igual

Figura 3.10: Operador Lgico Menor ou Igual No nosso prximo exemplo, veremos a funcionalidade do and. Sem mais delongas, vamos a um exemplo. Digamos que nossa inteno seja retornar no SQL*Plus as cidades que pertencem a regio sudeste e que possui o cdigo maior que 4. Para isso, podemos executar um comando SQL como o seguinte: select * from cidades where pais_regiao = 'Sudeste' and codigo > 4; O resultado dever estar parecido com o seguinte:

47

Figura 3.11: Operador Lgico And Vejamos agora o funcionamento do operador or. Vamos usar o mesmo exemplo anterior, mas substituiremos o and pelo or e o 4 pelo 7. Digete no seu SQL*Plus: select * from cidades where pais_regiao = 'Sudeste' or codigo > 7; O resultado dever ser o seguinte:

Figura 3.12: Operador Lgico Or Vamos agora conhecer o between. Como j foi dito, precisamos informar um valor inicial e um final para que o between traga todos os valores que ele encontrar que estiverem entre os valores informados. Ento faamos um comando SQL de tal forma que ele nos retorne as cidades que possuem cdigos entre 3 e 5. 48

Segue o comando a ser digitado: select * from cidades where codigo between 3 and 5; Observe o resultado:

Figura 3.13: Operador Lgico Between Note que os valores 3 e 5 (os que usamos como parmetros) tambm so exibidos. Dando sequencia aos nossos estudos, veremos agora como funciona o operador in. Ele, na verdade, tem a mesma funcionalidade do operador 'igual', porm, diferentemente do 'igual', no in podemos comparar vrios valores ao mesmo tempo. Para entendermos melhor, vamos ao exemplo. Vamos supor que nossa necessidade seja buscar cidades de cdigo aleatrios. Para isso faremos uso do in. Segue o comando SQL que nos permite realizar essa busca: select * from cidades where codigo in (1, 3, 6, 8, 5); Observe:

49

Figura 3.14: Operador Lgico In Veja que o select que elaboramos nos retornou os cdigos que informamos dentro do parnteses do in. Vale ressaltar que os valores sempre devero estar entre parnteses na utilizao do in. O prximo tpico que abordaremos faz referncia ao operador like. Toda vez que utilizarmos o like, devemos informar uma sequencia de caracteres. Podemos, ainda, utilizar o smbolo % antes ou depois dessa sequencia, ou ainda antes e depois. Quando colocamos o % antes dos caracteres indicamos que no importa o que h antes dos caracteres informados. Quando colocamos depois da sequencia de caracteres, informamos que no importa o que vem depois, e quando colocamos o % antes e depois, indicamos que esses caracteres podem estar entre qualquer palavra ou texto. Vejamos na prtica! Primeiramente vamos ver um exemplo do uso do like com o smbolo % antes da sequencia de caracteres. Vamos supor que queremos trazer todas as cidades que ficam em regies terminadas com 'este'. Para isso podemos digitar o seguinte comando: select * from cidades where pais_regiao like '%este'; Veja:

50

Figura 3.15: Operador Lgico %Like Vamos a outro exemplo! Dessa vez vamos utilizar o like para retornar os estados que comeam com a letra 's'. Ento digite o seguinte comando: select * from cidades where estado like 'S%'; Observe o resultado:

Figura 3.16: Operador Lgico Like% E por ltimo, veremos como utilizar o like entre os smbolos de %.

51

Para esse exemplo, vamos buscar as cidades que possuem a letra 'e'. Quando utilizamos o like entre %, no importa se o que buscamos encontra-se no incio, meio ou fim da palavra. Digite o comando que segue: select * from cidades where nome like '%e%'; O resultado dever ser semelhante ao seguinte:

Figura 3.17: Operador Lgico %Like% Para finalizarmos essa parte do estudo, vermos, por fim, o operador not. Nos exemplos que vamos usar, uniremos ele ao in e ao like. Primeiramente vejamos o not com o in. Vamos utilizar o mesmo exemplo que utilizamos quando estudamo o in. Digite o comando a seguir: select * from cidades where codigo not in (1, 3, 6, 8, 5); Eis o resultado:

52

Figura 3.18: Operador Lgico Not In Compare o resultado do in com o resultado do not in. fcil perceber que a adio do not fez com que o in retornasse exatamente o contrrio do que retornou quando o mesmo no sofreu alterao do not. A mesma coisa acontece com o like. Por isso no exemplo seguinte usaremos o mesmo exemplo que usamos no ltimo like que vimos, s que dessa vez utilizando o not like: select * from cidades where nome not like '%e%'; Observe o resultado:

Figura 3.19: Operador Lgico Not Like

53

Dessa forma finalizamos essa parte de nosso estudo. A princpio a utilidade desses operadores pode parecer pouco necessria. Mas no se deixe enganar, pois esse conhecimento e o domnio do mesmo bsico para qualquer profissional que desejar trabalhar com banco de dados, especificamente o Oracle. Funes de ordenao.

Neste tpico veremos como ordenar os dados em um comando select. Vale lembrar que esses dados podem ter a ordem alterada apenas na visualizao, ou seja, no banco de dados eles continuam na mesma ordem em que foram gravados. Usaremos duas funes de ordenao: order by e order by desc. A funo order by serve para ordenar determinados dados de uma coluna em ordem alfabtica ou numrica. Podemos realizar a ordenao utilizando uma ou mais colunas, sendo que o Oracle ordenar a primeira, depois a segunda e assim sucessivamente. Vejamos na prtica! Digite um comando select de modo que sejam exibidas todos os registros da tabela cidades. Nesse momento, vamos ordenar as cidades por ordem alfabtica. Digite o seguinte comando: select * from cidades order by nome; Note que a parte em destaque onde informamos o order by. Aps o order by devemos informar a coluna que ser a base da nossa ordenao. Pressione o Enter para ver o resultado. O resultado dever estar parecido com o seguinte:

Figura 3.20: Funo Order By

54

Vamos agora refazer o ltimo comando que digitamos. Modificaremos a coluna base de ordenao, que ser a coluna estado, e no exibiremos o cdigo da cidade. Digite no SQL*Plus (ou em um script SQL, se preferir) o seguinte comando: select nome, estado, pais_regiao from cidades order by estado; Visualize o resultado; ele dever estar parecido com o exibido a seguir:

Figura 3.21: Select com Order By Por fim, vamos realizar mais um teste com o comando order by. Dessa vez vamos usar duas colunas base para nossa ordenao, a coluna estado e a coluna nome, respectivamente nessa ordem. Digite o comando seguinte: select nome, estado, pais_regiao from cidades order by estado, nome; Observe o resultado. Veja que as ltimas trs linhas ficaram em ordem diferente com relao ao ltimo select que tnhamos realizado, isso porque quando informamos a coluna nome aps a coluna estado, passamos para o Oracle a funo de ordenar a coluna estado e aps a ordenao desta estar concluda, ordenar a coluna nome. Isso acontece sem que a coluna estado seja desordenada. Se colocssemos um terceira coluna para ordenao a mesma seria ordenada aps as duas primeiras e a ordenao dela respeitaria suas duas antecessoras. Agora vamos ver a funcionalidade da funo order by desc. No h muito o que explicar sobre o order by desc, uma vez que ele o order by invertido. Por isso o desc, que pode ser entendido como decrescente. Embora o conceito seja simples, h algumas diferenas com relao a aplicao do order by desc, nada complicado, mas que vale a pena a gente ver. 55

Utilizaremos os mesmos exemplos que utilizamos no order by para que fique mais fcil visualizar a diferena entre eles. Ento digite o primeiro exemplo usado no order by, porm dessa vez usando o order by desc: select * from cidades order by nome desc; Observe que a palavra desc no fica logo em seguida ao order by, mas sim aps o campo que queremos que seja ordenado de forma decrescente. Veja o resultado:

Figura 3.22: Select com Order By Desc Agora vamos utilizar o segundo exemplo que fizemos no order by. Digite no SQL*Plus o seguinte comando: select nome, estado, pais_regiao from cidades order by estado desc; O resultado dever estar semelhante ao seguinte:

56

Figura 3.23: Select com Order By Desc 2 Quando trabalhamos com mais de uma coluna base no order by desc, temos que tomar cuidado com um aspecto: se quisermos que todas as colunas base fiquem na ordem decrescente temos que colocar a palavra desc aps cada um delas. Vamos analisar trs situaes. A primeira ser elaborar uma consulta que nos retorne o nome da cidade, a qual estado pertence e em qual regio do pas esse estado est, tudo isso ordenando por estado e pelo nome da cidade, respectivamente. O estado deve estar ordenado de forma decrescente. Para realizarmos tal tarefa, utilizamos um comando SQL da seguinte maneira: select nome, estado, pais_regiao from cidades order by estado desc, nome; Observe o resultado:

57

Figura 3.24: Select com Order By Desc 3 A segunda situao idntica a primeira, porm em vez de ordenarmos a coluna estado de forma decrescente, ordenaremos a coluna nome. Ento digite o seguinte cdigo SQL: select nome, estado, pais_regiao from cidades order by estado, nome desc; Veja e compare a diferena entre esse e o ltimo comando SQL que realizamos:

Figura 3.25: Select com Order By Desc 4 Nossa ltima situao ser idntica as duas primeiras, mas dessa vez ordenaremos nossas duas colunas bases de forma decrescente. Para tal digite o cdigo: 58

select nome, estado, pais_regiao from cidades order by estado desc , nome desc; Veja o que acontece:

Figura 3.26: Select com Order By Desc 5 Dessa forma podemos finalizar nossos estudos sobre ordenao de colunas no Oracle 10g. Lembrando que as mesmas so ordenadas apenas para efeito de visualizao, pois na estrutura do banco elas permanecem intactas.

SELECT com mais de uma tabela.

Como vimos no incio desse documento, um banco de dados um lugar onde armazenamos diversas informaes, e essas ficam armazenadas em tabelas. Como j vimos tambm, as tabelas relacionam-se entre si. Logo, realizar selects envolvendo mais de uma tabela uma tarefa comum e necessrio. Por esses motivos vamos comear a estudar esse assunto. Antes de comearmos a fazer testes e estudos de situaes, vamos criar duas tabelas e inserir alguns dados nas mesmas. Segue as especificaes das tabelas: Tabela: vendas CAMPO codigo cod_vendedor data valor_total TIPO number number date number 5,2 Tabela 3.8: Tabela Vendas TAMANHO 5 5 NULO No No No No

59

Tabela: vendedores CAMPO cod_vendedor nome sexo data_nasc cpf TIPO number varchar2 char date number 11 Tabela 3.9: Tabela Vendedores TAMANHO 5 50 1 NULO No No No Sim Sim

So duas tabelas bem enxutas, pois se fossemos analisar mais a fundo ambas teriam mais colunas. Antes de mais nada, vamos inserir alguns dados para que possamos trabalhar com eles. Insira na tabela vendas: Tabela: vendas CAMPO codigo cod_vendedor data VALOR 1 3 01/04/10

valor_total 465,00 Tabela 3.10: Venda 1 Tabela: vendas CAMPO codigo cod_vendedor data VALOR 2 2 31/03/10

valor_total 210,00 Tabela 3.11: Venda 2 Tabela: vendas CAMPO codigo cod_vendedor data VALOR 3 2 05/04/10

valor_total 90,00 Tabela 3.12: Venda 3

Tabela: vendas 60

CAMPO codigo cod_vendedor data

VALOR 4 1 10/04/10

valor_total 760,00 Tabela 3.13: Venda 4 Tabela: vendas CAMPO codigo cod_vendedor data VALOR 5 1 15/04/10

valor_total 175,00 Tabela 3.14: Venda 5 Agora insira na tabela vendedores: Tabela: vendedores CAMPO cod_vendedor nome sexo data_nasc VALOR 1 Zezao M 02/07/75

cpf 19837651294 Tabela 3.15: Vendedor 1 Tabela: vendedores CAMPO cod_vendedor nome sexo data_nasc VALOR 2 Amelia F 17/09/79

cpf 19847125943 Tabela 3.16: Vendedor 2 Tabela: vendedores CAMPO cod_vendedor nome VALOR 3 Mika 61

sexo data_nasc

F 25/11/82

cpf 47669387993 Tabela 3.17: Vendedor 3 Tabela: vendedores CAMPO cod_vendedor nome sexo data_nasc VALOR 4 Guigo M 28/01/69

cpf 93840956571 Tabela 3.18: Vendedor 4 Tabela: vendedores CAMPO cod_vendedor nome sexo data_nasc VALOR 5 Mel F 10/06/85

cpf 92845840662 Tabela 3.19: Vendedor 5 Aps realizar a insero da massa de dados execute um comando SQL de forma que seja possvel visualizar todos os registros da tabela vendas. O resultado dever ser parecido com o que segue:

62

Figura 3.27: Select Vendas Em seguida execute um comando para retornar todos os registros da tabela vendedores. O resultado dever ser semelhante ao seguinte:

Figura 3.28: Select Vendedores Observe o campo cpf. Ele est sendo exibido em forma de nmero hexadecimal. No se preocupe com isso pois quando o valor numrico muito extenso o SQL*Plus o trata dessa forma, e no caso de campos numricos a funo column format no eficiente. Internamente no banco os nmeros esto gravados tal qual as informaes que passamos para ele. Se usarmos ferramentas mais potentes de consulta ao banco de dados Oracle, veremos que os dados esto cadastrados corretamente. Agora que j temos os dados inseridos, imaginemos o seguinte caso: necessitamos saber o nome dos vendedores que fizeram vendas no ms de abril. Ora, o nome dos vendedores est na tabela corretores e as vendas esto cadastradas na tabela vendas. Logo temos que associar essas duas tabelas pelo campo que elas tem em comum: cod_vendedor. A essa associao damos o nome de join. Porm como elaborar 63

um comando select com duas tabelas que possuem o determinado campo com o mesmo nome? A resposta para essa questo simples: damos apelidos s tabelas, para que o banco de dados saiba qual campo de determinada tabela, mesmo se houver outro campo com o mesmo nome na tabela que fizer parte do relacionamento. Vejamos isso na prtica! Para a soluo do problema acima podemos elaborar um comando SQL semelhante ao seguinte: 1 2 3 4 select z.nome from vendas x, vendedores z where x.cod_vendedor = z.cod_vendedor and x.data between '01/04/2010' and '30/04/2010';

O resultado dever ser o seguinte:

Figura 3.29: Select com Join Lhe parece complicado?

64

Figura 3.30: Select Vendas 2 Ento vamos entender o que fizemos, mas antes disso execute novamente um comando select que nos possibilite visualizar todos os registros da tabela vendas de modo que o resultado seja parecido com o seguinte: Veja que em abril temos uma venda do vendedor de cdigo 3 (Mika), uma venda do vendedor de cdigo 2 (Amelia) e duas vendas do vendedor de cdigo 1 (Zezao). Ou seja, o select com relacionamento entre duas tabelas que realizamos est correto. Mas to importante quanto ele estar correto entendermos o que fizemos. Na linha 1 informamos qual o campo que estamos buscando; porm h uma peculiaridade: informamos, antes do campos, os caracteres z., que o apelido dado tabela vendedores. Podemos utilizar qualquer sequncia de caracteres como apelido para tabelas, mas aconselhvel que esses apelidos sejam o mais curto possvel. Quando digitamos o comando da linha 1, j devemos ter em mente a tabela que possui esse campo e o apelido que daremos tabela. Na linha 2 informamos quais tabelas vo se relacionar, e na frente de cada uma delas informamos qual ser o apelido, separando o apelido do nome da tabela apenas com um espao. Ressaltando que, quando vamos definir o apelido da tabela, esse apelido sempre deve ser informado aps o nome da tabela; quando vamos informar o campo devemos colocar o apelido junto ao nome do campo, separando eles com um ponto. Na linha 3 temos o ponto-chave de nosso select. Amarramos a tabela vendedores com a tabela vendas, ou seja, informamos que s dever aparecer na nossa consulta os nomes dos vendedores cujo cdigo existir na tabela vendas. Note que informamos que o campo cod_vendedor da tabela vendedores (representada pela letra z) deve ser igual ao campo cod_vendedor da tabela vendas (representada pela letra x). Dessa forma nosso select no retornar os vendedores que no possuem o seu cdigo na tabela vendas. Por fim, na linha 4, temos a ltima clusula da nossa consulta,que deve trazer as vendas do ms de abril. Informamos que a data da venda (que fica gravada na tabela vendas) deve estar entre o primeiro e o ltimo dia de abril.

65

A nica forma de aprendermos esse conceito praticando. Portanto no hesite em fazer testes diversos. Aqui abordamos um exemplo extremamente simples, mas h selects que relacionam muitas tabelas, dependendo da complexidade da consulta. Uma vez que voc souber como relacionar duas tabelas em um comando SQL, voc saber relacionar cinco, dez, vinte tabelas se for o caso, tudo vai depender muito da sua interpretao do problema e da lgica que utilizar. Vamos propor um segundo caso: imaginemos que gostaramos de visualizar o nome de todos os vendedores e a data em que os mesmos realizaram as vendas (vendas que foram realizadas no ms de abril). Ora, para realizar esse comando muito simples, pois j temos a lgica elaborada no ltimo comando SQL que desenvolvemos. O nico trabalho que teremos ser informar que o campo data da tabela vendas dever ser exibido. Para tal, basta executarmos o seguinte comando SQL:

1 2 3 4

select z.nome, x.data from vendas x, vendedores z where x.cod_vendedor = z.cod_vendedor and x.data between '01/04/2010' and '30/04/2010';

Note que apenas adicionamos o campo data que est na tabela vendas linha 1. Lembrando que antes de informarmos o campo colocamos a letra x seguida de um ponto para identificar que esse campo pertence a tabela vendas, que nesse caso representada pela letra anteriormente mencionada. O resultado dever ser o seguinte:

Figura 3.31: Select com Join 2 Vamos pensar numa terceira situao. Digamos que queremos que apaream todos os vendedores, independente se estes realizaram vendas ou no. Ou seja, 66

queremos retornar todos os corretores cadastrados e tambm a data em que estes fizeram realizaram vendas, mas tambm queremos trazer os corretores que no realizaram vendas, tudo em um nico comando SQL. Parece meio complicado, uma vez que o ltimo select que elaboramos est relacionando duas tabelas, comparando valores entre elas e os retornando. Nesse caso queremos que haja essa comparao, mas que tambm sejam exibidos os valores que no se encaixam nessa amarrao. Para tal, conheceremos o recurso outer join, que na verdade muito simples. Apenas temos que colocar um sinal de adio entre parnteses na frente do campo que for a chave estrangeira do relacionamento (no nosso caso, o campo cod_vendedor da tabela vendas) Tudo isso na clusula where, exatamente onde ocorre a amarrao. Para acabarmos com toda essa enrolao e confuso de ideias, veremos o comando na prtica. Observe: 1 2 3 select z.nome, x.data from vendas x, vendedores z where x.cod_vendedor (+) = z.cod_vendedor;

Resultado:

Figura 3.32: Select com Outer Join Veja que colocamos o (+) na frente do campo x.cod_vendedor, para indicar que o select deve buscar tambm os valores do campo z.cod_vendedor, mesmo que estes no existam em x.cod_vendedor. Finalizamos assim o estudo do conceito de relacionamento entre tabelas em um comando SQL. Aqui apresentamos a teoria, em sala exploraremos muito mais esse recurso. Funes do Oracle 10g XE

A partir daqui, conheceremos vrias funes que o Oracle 10g possui. Veremos uma pequena descrio de cada uma delas e sua aplicabilidade. 67

Podemos separar as funes em seis grupos: 1. Funes numricas; 2. Funes de manipulao de caracteres; 3. Funes condicionais; 4. Funes de manipulao de datas; 5. Funes de converso. 6. Funes de grupo. Vamos estudar cada uma delas. Funes numricas: Funes numricas so aquelas que nos auxiliam quando estamos trabalhando com clculos matemticos. Obviamente essas funes so aplicveis em campos do tipo number. Vamos conhecer algumas: sqrt: esta funo retorna a raiz quadrada de determinado valor. Digite no SQL*plus o seguinte cdigo: select sqrt(49) from dual; O resultado dever ser o seguinte:

Figura 3.33: Funo SQRT S para no ficar dvidas, a tabela dual uma tabela que j vem configurada no Oracle 10g XE. Portanto quando queremos retornar no select um valor especfico informamos que esse valor deve vir da tabela dual. round: esta funo arredonda um valor informado ou armazenado no banco de dados. Digite no SQL*plus: select round(5.79) from dual; 68

Observe:

Figura 3.34: Funo ROUND trunc: funo que desconsidera valores decimais e que nos permite exibir o primeiro dia do ms ou do ano de determinada data, conforme desejarmos. Digite o seguinte comando: select trunc(15.9) from dual; Veja o resultado:

Figura 3.35: Funo TRUNC

69

Agora digite: select trunc(data, 'mm') from vendas; Vamos entender o ltimo comando select: informamos que queremos retornar o compo data da tabela vendas. Mas quando informamos a funo trunc, dizemos que dever ser retornado o primeiro dia do ms do valor que o campo data possui, por isso aps o mesmo colocamos uma vrgula e a mscara mm. Para melhor entendimento, visualize o resultado:

Figura 3.36: Funo TRUNC 2 power: funo que eleva um determinado valor a uma determinada potncia. Digite: select power(9, 2) from dual; Veja:

70

Figura 3.37: Funo POWER - Funes de manipulao de caracteres; upper: esta funo transforma todas as letras de uma coluna em maisculas. Digite no seu SQL*Plus: select upper(nome) from cidades; Observe o resultado:

Figura 3.38: Funo UPPER Repare que o nome das cidades so exibidos em caixa alta. lower: funo capaz de transformar todas as letras de uma coluna em minsculas. Usemos o exemplo anterior. Digite no seu SQL*Plus: 71

select lower(nome) from cidades;

Figura 3.39: Funo LOWER Todas as palavras so exibidas em caixa baixa. replace: funo que substitui a ocorrncia de um ou vrios caracteres por outros informados. Digite: select replace('pato', 'p', 'r') from dual; Observe o resultado:

72

Figura 3.40: Funo REPLACE Veja que nesse comando informamos que a letra P dever ser substituda pela letra R. Para nosso exemplo, informamos a palavra pato, mas como utilizamos o comando replace foi-nos retornado a palavra rato. nvl: funo que insere determinado dado quando o campo consultado estiver nulo. Para entendermos essa funo vamos inserir mais um registro na tablea vendedores. Dessa vez informaremos apenas os campos obrigatrios, ou seja, o valor de data_nasc e de cpf devero ser nulos. Segue a tabela para nos auxiliar: Tabela: vendedores CAMPO cod_vendedor nome sexo data_nasc cpf Tabela 3.20: Vendedor 6 Agora digite o seguinte comando: select vendedores; cod_vendedor, nome, sexo, data_nasc, nvl(cpf, 0) from VALOR 6 Sergio M

73

Note que informamos o comando nvl para o campo cpf. Ento quando o campo cpf for nulo, ser exibida os caracteres que escolhemos, no nosso caso, 0. Ressaltamos aqui que, sempre que usarmos a funo nvl, o valor que informarmos dever ser coerente ao tipo de dados que o campo armazena. Veja o resultado:

Figura 3.41: Funo NVL - Funes de converso; to_date: converte um certo valor do tipo caracter para o tipo data e hora. Segue a sintaxe: select to_date([campo] [hora], 'dd/mm/yyyy hh24:mi:ss') from [tabela]; Note que informamos aps o campo a mscara 'dd/mm/yyyy hh24:mi:ss'. Isso far com que a data e o horrio apaream conforme especificado. to_char: converte nmeros e datas para o tipo de dados caracter. Sintaxe a seguir: select to_char([campo]) from [tabela]; to_number: converte um certo valor do tipo caracter para o tipo nmero. Digite: select to_char(1500.25, '999G999D00') from dual; Veja o resultado: 74

Figura 3.42: Funo TO_CHAR Nesse exemplo usamos uma mscara para nmeros. A letra G indica separador de milhar e a letra D indica separador de decimais. - Funes de manipulao de datas; sysdate: esta funo retorna a data atual do sistema, no qual est instalado o banco de dados Oracle. Digite: select sysdate from dual; Veja o resultado:

Figura 3.43: Funo SYSDATE

75

last_day: esta funo retorna o ltimo dia do ms, de acordo com a data informada. Digite no SQL*Plus: select last_day('15/02/2012') from dual; Observe que o resultado 29/02/12. Isso porque o ano de 2012 ser bissexto, caso contrrio o ltimo dia do ms de fevereiro seria 28. Resultado:

Figura 3.44: Funo LAST_DAY add_months: adiciona a quantidade de meses indicada a uma determinada data. Caso o ms da data do resultado no possuir o dia informado, retornado o ltimo dia do ms. Digite: select add_months('31/01/2010', 3) from dual; O nmero 3 aps a virgula informa a quantidade de ms que queremos adicionar data informada. Veja o resultado do nosso select:

76

Figura 3.45: Funo ADD_MONTHS - Funes condicionais. decode: esta funo exibe ou no uma determinada informao de acordo com o valor armazenado no campo. Vejamos um exemplo: select estado, decode(estado, 'SP', 'So Paulo') from cidades; O comando decode que usamos no exemplo procura todas as ocorrncias SP e substitui por So Paulo. Veja o resultado:

Figura 3.46: Funo DECODE Podemos ainda informar mais valores no comando decode. Observe:

77

select estado, decode(estado, 'SP', 'So Paulo', 'MG', 'Minas Gerais') from cidades; Resultado:

Figura 3.47: Funo DECODE 2 - Funes de grupo. As funes de grupo atuam em um conjunto de registros e retornam um determinado valor correspondente a cada subconjunto selecionado. Os grupos so formados de acordo com a consulta, e em certos casos, faz-se o uso da clusula group by. Avg: funo que calcula a mdia aritmtica de um determinado conjunto de registros. Digite: select avg(valor_total) from vendas; O select que acabamos de digitar retorna a mdia de todas as vendas cadastradas na tabela vendas. Veja o resultado:

78

Figura 3.48: Funo AVG max: funo capaz de retornar o maior valor armazenado em um campo. aplicvel a qualquer tipo de dado. Digite: select max(valor_total) from vendas; No select que elaboramos buscamos o maior valor de uma vendas cadastrada em vendas. Veja o resultado:

Figura 3.49: Funo MAX min: funo que retorna o menor valor armazenado em um campo. Assim como a funo max, aplicvel a qualquer tipo de dado. Digite o seguinte cdigo: 79

select min(valor_total) from vendas; Agora buscamos na tabela vendas o menor valor registrado em uma venda. Observe:

Figura 3.50: Funo MIN sum: esta funo retorna a soma dos valores contidos em uma coluna especificada. Vamos ver: select sum(valor_total) from vendas; Veja:

Figura 3.51: Funo SUM

80

count: funo que retorna a quantidade de registros encontrados em uma tabela ou campo especificado. Vamos ver quantas vendas esto cadastrada na tabela vendas: select count(codigo) from vendas; Veja, o resultado o total de vendas que temos cadastrado:

Figura 3.52: Funo COUNT distinct: a funo distinct retorna os valores valores apenas uma vez, mesmo que esse valor aparea vrias vezes na coluna em que estamos realizando a busca. Podemos usamos a funo distinct em conjunto com a funo count. Vamos ver dois exemplos. No primeiro vamos elaborar um comando que retorne o cdigo dos vendedores que j realizaram alguma venda. Digite no SQL*Plus: select distinct(cod_vendedores) from vendas; Veja o resultado:

81

Figura 3.53: Funo COD_VENDEDOR No nosso segundo exemplo vamos elaborar um comando SQL que nos retorne a quantidade de vendedores que realizaram vendas. Digite: select count(distinct(cod_vendedores)) from vendas; Observe o resultado:

Figura 3.54: Funo COUNT DISTINCT Note que a quantidade de vendas 5, porm a quantidade de vendedores que efetuaram vendas 3. Isso significa que h vendedores que realizaram mais de uma venda. Finalizamos por aqui nosso estudo sobre funes do Oracle 10g XE.

82

4 Etapa
Conceito de PL/SQL At aqui vimos a como criar, manipular e gerenciar um banco de dados com a SQL. A partir desse ponto comearemos a estudar assuntos que faro uso da linguagem de programao PL/SQL, que nos auxiliar a manipulao dos dados em blocos de comandos, dispostos de forma lgica. PL significa Procedural Language (Linguagem Procedural). uma linguagem estruturada em blocos e cada bloco pode conter indeterminado sub-blocos. A reunio de comandos da PL/SQL capaz de processar uma srie de atividades como consultas, clculos, incluses, alteraes, atualizaes, etc., retornando ou no informaes ao usurio. Function.

Veremos aqui como criar e trabalhar com functions (funes). Funes so rotinas que retornam algum valor, sejam eles consultados ou calculados. Vejamos como elas funcionam! Elaboraremos uma funo para calcular os juros das vendas. A taxa ser de 5%. Digite: create or replace function calcula_juros (cod_venda in number) return number is v_vlr_total v_vlr_final begin select valor_total into v_vlr_total from vendas where codigo = cod_venda; v_vlr_final := v_vlr_total + (v_vlr_total * 0.05); return (v_vlr_final); end; / Vamos entender a sintaxe de uma funo em PL/SQL! Na cor verde temos o cabealho da funo. Usamos o create or replace function como comando de criao da funo (se a mesma j tiver sido criada anteriormente, ao indicarmos replace ela ser recarregada). Em seguida, entre parnteses, informamos o parmetro de entrada que receber um valor externo para que number(5.2); number(5.2);

83

esse valor seja utilizado. Posteriormente informamos o tipo de dado que dever ser retornado, no nosso exemplo, number. Na cor azul temos a declarao de variveis. Nesse ponto no h segredos, pois para realizar tal tarefa fazemos tal como na criao de tabelas. Aqui informamos o nome das variveis e o tipo de dados das mesmas. Em vermelho indicamos o incio e o fim do nosso bloco de dados. Na cor preta temos a manipulao dos dados. Fizemos um comando SQL para buscar os valores do campo valor_total da tabela vendas. Note que antes do from utilizamos a clusula into. Sempre que utilizamos um comando select dentro de um bloco de comandos PL/SQL devemos informar a clusula into e informar a varivel (que tem que ser declarada) que receber o valor que o select retornar. Por fim, na clusula where comparamos um determinado campo da tabela ao parmetro de entrada que definimos no cabealho da funo. Em seguida temos o clculo do total da venda mais a taxa de juros. Observe a sintaxe do sinal recebe (:=). Por fim, na cor rosa, temos o comando return, que indica o que deve ser retornado. Se no houver erros de sintaxe na funo, sua tela dever estar assim:

Figura 4.1: Create Function At esse ponto apenas criamos a funo. Vamos ver como utiliz-la. Digite: select calcula_juros(4) from dual; Note que utilizamos um comando select para chamar a funo, e informamos, entre parnteses, o cdigo da venda que queremos que seja calculado os juros. O resultado dever ser o seguinte:

84

Figura 4.2: Executando Function Veja que o resultado calculado foi 798. A venda de cdigo 4 tinha o valor original de 760,00. Cinco por cento desse valor 38,00, somando isso ao valor inicial, temos 798. Isso comprova que a funo que elaboramos est correta. Funes so muito teis quando h de se realizar clculos, porm podem ser aplicadas em qualquer situao, pois podem tambm retornar dados do tipo char ou varchar2. Tudo depende da interpretao do desenvolvedor para os mais diversos casos. Se desejarmos excluir uma funo podemos digitar um comando SQL, tal qual nos indica a sintaxe: drop function [nome da funo];

Procedure.

Nesse tpico veremos como criar e trabalhar com procedures (procedimentos). Procedimentos so muito semelhantes funes, pois tambm so capazes de armazenar vrios blocos de comandos em PL/SQL. A principal diferena entre um procedimento e uma funo que a funo sempre retornar um valor, enquanto um procedimento no retorna valor algum. Vamos elaborar um procedimento que insira registros na nossa tabela vendas. J vimos como fazer isso em SQL, agora vamos colocar esse comando SQL dentro de um bloco PL/SQL. Ento digite: create or replace procedure insere_vendas (cod in number, vendedor in number, dt_venda in date, total in number) is begin

85

insert into vendas (codigo, cod_vendedor, data, valor_total) values (cod, vendedor, dt_venda, total); end; / Aqui criamos um procedimento extremamente simples, com uma nica finalidade, que inserir registros na tabela vendas. Na cor verde temos o cabealho do nosso procedimento. Assim como na funo, informamos quais sero os parmetros de entrada e o tipo de valor que eles recebero. Em vermelho temos a declarao de incio e fim do nosso procedimento. Note que no fim colocamos o comando end seguido do nome que demos ao procedimento. E na cor preta temos o nosso bloco de cdigos, que composto apenas por um simples comando insert. Se no houver erros de sintaxe no procedimento, sua tela dever estar assim:

Figura 4.3: Create Procedure At esse ponto apenas criamos o procedimento, porm ainda no fizemos uso dele. Ento, para execut-lo, digite: exec insere_vendas (6, 4, '23/04/2010', 490.00); Para executarmos um procedimento fazemos uso do comando exec. Aps o comando exec, informamos o nome do procedimento e passamos os parmetros que o mesmo dever receber. Aps executar um procedimento, sua tela do SQL*Plus dever estar parecida com a seguinte: 86

Figura 4.4: Executando Procedure Agora, para confirmarmos, digite um comando SQL que nos possibilite ver todos os registros da tabela vendas: Resultado:

Figura 4.5: Verificando resultado da Procedure Note que a venda de cdigo 6 foi inserida, provando que nosso procedimento est funcionando. Se desejarmos excluir um procedimento basta usarmos o comando drop, tal como a sintaxe a seguir: drop procedure [nome do procedimento];

87

Sequence.

Neste tpico veremos como criar e trabalhar com sequences (sequncias). Sequncias so utilizadas para gerar valores numricos que devero preencher algum campo. Elas so muito teis na gerao de chaves primrias, j que uma das moires controvrsias do Oracle no possuir campos do tipo auto-increment. Vejamos como criar uma sequncia. Digite: create sequence vendas_seq increment by 1 start with 7 nomaxvalue nominvalue nocycle noorder nocache; Vamos entender a estrutura da sequncia! Na cor verde temos o cabealho da tabela, onde informamos o nome da nossa sequncia. Na cor azul informamos o intervalo de incremento da sequncia. No nosso caso informamos o valor 1, ento a sequncia aumentar uma unidade a cada vez que for utilizada. Em vermelho informamos qual ser o valor inicial dessa sequncia, no nosso caso iniciar com o valor 7, pois o maior valor da chave primria da tabela vendas 6. Em rosa informamos que no haver valor mximo para a nossa sequncia. Em preto informamos que no haver valor mnimo para a nossa sequncia (caso o mesma fosse decrescente). Em roxo informamos que o cdigo no realizar ciclos. Em azul claro informamos que os cdigos no sero ordenados. Em cinza informamos que os dados no devero ser armazenados em cache. Se sua sequncia estiver correta, sua tela dever estar parecida com a seguinte:

88

Figura 4.6: Criando Sequence No executaremos nossa sequncia agora pois como ela insere chavesprimrias na tabela vendas, precisamos inserir um registro na mesma para vermos o funcionamento da mesma, e esse registro s inseriremos quando estudarmos o prximo tpico desse material. Para apagar uma sequncia, basta utilizar o comando drop, como exemplificado na sintaxe a seguir: drop sequence [nome da sequncia];

Trigger.

O conceito de triggers (gatilhos) um dos mais importantes de nosso estudo! muito utilizado na linguagem PL/SQL, muito til para os mais diversos casos. O nome gatilho no por acaso, pois so blocos de cdigos que so disparados em determinado momento escolhido pelo desenvolvedor. Um gatilho pode ter todo tipo de manipulao de dados. Ele pode ser acionado antes (before) ou depois (after) de determinada ocorrncia, seja essa ocorrncia uma incluso, excluso ou atualizao. Imaginemos o seguinte: at o momento, quando vamos inserir um registro em qualquer tabela, temos que informar manualmente o valor da chave-primria. Em tabelas com poucos registros isso no tarefa difcil, mas imagine uma tabela com milhares de registros. Seria necessrio consultarmos o valor mximo da chave-primria dessa tabela toda vez que fossemos inserir um registro. Seria um trabalho desnecessrio! No exemplo que ser mostrado aqui vamos fazer um gatilho que acione a sequncia que criamos anteriormente. Ou seja, cada vez que inserirmos um registro na tabela vendas no precisaremos informar o valor da chave-primria, pois teremos uma sequncia que gerar esses valores e um gatilho que acionar essa sequncia no momento da incluso. Ento digite:

89

create or replace trigger trg_vendas_cp before insert on vendas for each row begin select vendas_seq.nextval into :new.codigo from dual; end; / Vamos entender! Na cor verde temos o cabealho do nosso gatilho, que contem o nome do gatilho (trg_vendas_cp). Em azul indicamos o momento em que o gatilho deve ser disparado, a tabela que ser alterada por ele, e informamos for each row, que significa que os comandos afetaro qualquer campo da tabela informada. Se desejssemos especificar um campo deveramos informar o comando table columns e o nome das colunas que seriam alteradas. No nosso caso no ser necessrio, pois especificamos a coluna dentro do nosso bloco de comandos. Em vermelho temos o incio e o fim do nosso bloco de comandos. Em preto temos um cdigo SQL que ainda no conhecemos. Portanto cabe aqui uma breve explicao sobre ele. Fizemos uso de um comando select, obviamente para selecionar um valor. Em seguida informamos que o select dever buscar esse valor em um sequncia (no nosso caso vendas_seq); logo aps informamos, com a funo nextval, que dever ser retornado o prximo valor da sequncia. Informamos o comando :new pois estaremos aqui inserindo um novo registro na tabela; o into indica que esse valor dever ser inserido em algum lugar, e aps o into informamos o nome da coluna que esse valor dever ser inserido, no nosso caso a coluna codigo. Por fim, informamos a tabela padro do Oracle: dual, pois esse prximo nmero da sequncia no existe cadastrado no banco de dados e por isso devemos informar a tabela dual.

Figura 4.7: Criando Trigger Agora vamos testar!

90

Insira um novo registro na tabela vendas, mas no informe o valor do campo codigo. Segue sugesto:

Tabela: vendas CAMPO codigo cod_vendedor data 5 26/04/10 VALOR

valor_total 320,00 Tabela 4.1: Venda 6

Figura 4.8: Inserindo Registro Agora elabore um comando select que exiba todos os registros da tabela vendas. O resultado dever ser semelhante ao seguinte:

91

Figura 4.9: Verificando Vendas Para apagar um gatilho, basta utilizar o comando drop, como exemplificado na sintaxe a seguir: drop sequence [nome do gatilho];

View

Neste tpico, estudaremos o conceito e a aplicabilidade de views (vises) no banco de dados Oracle. Uma viso parecida com uma tabela, pois possui colunas onde possvel realizar consultas. considerada uma mscara sobreposta a uma ou mais estruturas de dados, normalmente tabelas. So usadas para que o usurio tenha acesso a determinadas informaes, e as mesmas, quando acessadas de uma viso, no podem ser alteradas, apenas consultadas. Vamos construir uma viso! Na nossa viso, faremos uma consulta na tabela vendedores, e retornaremos o cdigo e o nome de cada vendedor. Portanto, digite: create or replace view vendedor_vw as select cod_vendedor, nome from vendedores; Vamos entender o que fizemos! Como percebido, uma viso possui uma estrutura extremamente simples! Na cor verde temos o cabealho da viso, onde informamos o nome da viso. Na cor preta temos a consulta que essa viso retornar.

92

E s! Uma viso composta apenas por essas duas partes. claro que, observando esse exemplo, podemos imaginar que esse um recurso desnecessrio, intil. Mas imagine uma consulta de cem, cento e cinquenta linhas! muito melhor usarmos uma consulta desse tamanho salvo em uma viso. Se sua viso for criada corretamente, sua tela do SQL*Plus dever estar semelhante a seguinte:

Figura 4.10: Criando View At esse ponto apenas criamos a viso, mas ainda no fizemos uso da mesma. Ento, vejamos agora como executar uma viso. Digite: select * from vendedor_vw; Veja que quando efetuamos o comando select indicando a viso que criamos como se possussemos uma tabela no banco de dados com o nome vendedor_vw, onde ficariam armazenados os cdigos e os nomes dos vendedores. O resultado dever estar parecido com o seguinte:

93

Figura 4.11: Visualizando View Se desejar apagar uma viso, basta utilizar o comando drop: drop view [nome da viso];

Index

At aqui vimos muitos assuntos de extrema importncia dentro do banco de dados Oracle 10g XE. Aprenderemos agora o conceito e como trabalhar com index (ndice) no banco de dados. ndices so objetos do banco de dados e so usados para localizar de forma rpida determinados registros em uma tabela. So geralmente utilizados quando a tabela comea passa a armazenar uma quantidade muito grande de registros. Toda chaveprimria pode ser considerada um ndice, pois possuem valores nicos em uma tabela e por meio desses valores conseguimos chegar um determinado registro especfico. Porm, pode haver casos em que a massa de dados de uma coluna seja realmente muito grande, e nesses casos a criao de um ndice essencial para facilitar a localizao dos dados necessrios. Aqui no perceberemos as reais vantagens dos ndices, pois nossa massa de dados no grande o suficiente. Mas mesmo assim veremos como trabalhar com eles. Vamos criar um ndice na tabela vendedores. Esse ndice ser o campo nome. Mas antes de cri-lo digite um comando select que retorne todos os registros apenas do campo nome (que em breve ser nosso ndice) e observe o resultado:

94

Figura 4.12: Campo Nome da Tabela Vendedores Agora digite: create unique index vendedor_nome on vendedores (nome); Vamos entender as partes que compem a criao de um ndice! Em verde temos o comando de criao do ndice. A opo unique opcional, mas se for definido que o ndice ser nico a coluna referida no poder conter valores repetidos. No nosso caso, como se trata apenas de um teste, poderemos preservar a opo unique, mas se fosse um caso real, jamais poderamos deixar um ndice que composto por um campo que registra nomes de funcionrios com a opo unique declarada, pois pode duas pessoas podem perfeitamente ter o mesmo nome, embora no seja comum. Se no quisssemos que nosso ndice fosse nico bastaria apenas no informar a a palavra unique. Em preto temos a definio do nome do ndice. Em vermelho temos a indicao da tabela que vai receber esse ndice. E por fim, em azul, indicamos o campo que ser o ndice. Se seu cdigo no possuir erros de sintaxe, sua tela dever estar semelhante tela seguinte:

95

Figura 4.13: Criando Index Assim como fizemos antes de criarmos o ndice, elabore um comando select que retorne todos os registros apenas do campo nome.

Figura 4.14: Funcionalidade do Index Observe que os nomes esto agora aparecendo em ordem alfabtica. Com a criao do ndice esses campos aparecem de forma organizada alfabeticamente, porm eles continuam guardados na ordem fsica em que foram gravados. Caso queira excluir um ndice, basta utilizar o comando drop, como na sintaxe: drop index [nome do ndice];

96

5 Etapa
Oracle Application Express A partir daqui veremos como trabalhar com o Oracle Application Express. Assim como o banco de dados Oracle tem vrias verses, a ferramenta Application tambm tem, variando de verso para verso. O Application Express possui muitos recursos que no sero discutidos nesse material, pois tais recursos so para administradores de banco de dados j experientes, o que no o nosso caso. Mas veremos recursos muito interessantes e que nos sero muito teis. Acesse o Application Express no menu: Iniciar - Todos os programas Oracle Database 10g Express Edition - Ir para a Home Page de Banco de Dados (esse o caminho ser seguido caso esteja usando o Windows XP). Veja:

Figura 5.1: Menu Ir para a Home Page do Banco de Dados Em seu navegador padro de internet ser aberta uma pgina da Oracle, onde na parte esquerda da tela h a solicitao de usurio e senha e na parte direita h links sobre informaes e fruns do banco de dados. Informe seu usurio e senha e clique em Login. Ser aberta a pgina inicial do Oracle Application Express. H nessa pgina as seguintes opes:

97

Figura 5.2: Opes do Application Express Vamos analisar essas opes: Administrao: esta a opo que nos permite criar e administrar os usurios do banco de dados, gerenciar a memria utilizada pelo banco e o espao fsico de armazenamento. Browser de Objetos: essa opo serve para gerenciar os objetos do banco de dados. Por meio dela podemos criar usurios, tabelas, procedimentos, gatilhos, ndices, etc. SQL: esta opo nos possibilita acessar o SQL*Plus por meio de uma pgina HTML. Utilitrios: nesta opo esto os utilitrios para realizao de importao/exportao da base de dados do Oracle 10g XE; possui tambm relatrios sobre os objetos do banco. Application Builder: por meio dessa opo podemos criar mini aplicativos para a web e listagens para a exibio dos dados. Em cada uma dessas opes temos vrias outras. Vamos aqui conhecer os mais utilizados. Vamos praticar! Vejamos a utilizao do espao fsico de nossos dados at o momento. Na opo Administrao procure o menu Armazenamento e nesse menu clique em Utilizao do Espao de Armazenamento. Sero exibidas algumas informaes, tais como podemos ver a seguir:

Figura 5.3: Informaes de armazenamento do Application Express

98

bem provvel que os valores do seu banco de dados estejam diferente dos valores do exemplo, mas isso no tem a mnima importncia. Para voltar pgina inicial, basta clicar no link Incio. Vejamos agora as propriedades dos usurios do banco de dados. V at o menu Usurios do BD, que est na opo Administrao e clique em Gerenciar Usurios. Ser exibida uma tela com todos os usurios atualmente cadastrados no banco. Veja o exemplo:

Figura 5.4: Usurios do Banco de Dados Nesta pgina podemos conceder ou revogar permisses dos usurios. Podemos, ainda, criar o apagar usurios. Voltando pgina inicial, v novamente na opo Administrao, menu Usurios do BD e clique em Criar Usurio. Feito isso, aparecer a tela de criao de usurio. Veja:

Figura 5.5: Tela Criar Usurio do Banco de Dados No quadro que est abaixo do quadro de criao de usurios est o quadro de privilgios. Nesse momento no criaremos nenhum novo usurio. Sendo assim, podemos retornar pgina inicial.

99

Vimos no incio do curso como alterar a senha de um usurio por meio do comando alter user. Vamos ver agora como fazer isso no Application Express. Para isso basta clicarmos em Alterar Minha Senha na opo Administrao. Ser aberta a seguinte tela:

Figura 5.6: Tela Alterar Minha Senha O processo de modificao de senha idntico a qualquer outro que j utilizamos no cotidiano. Assim que informamos a nova senha, basta clicar em Aplicar Alteraes para que a nova senha tenha validade, caso contrrio basta clicar em Cancelar. Voltemos pgina inicial. Vamos ver agora alguns recursos da opo Browser de Objetos. Nesta opo podemos administrar os objetos do banco de dados. Clique na opo Browser de Objetos e abra o menu Criar. Note as opes que esto contidas nesse menu. possvel observar que tudo o que foi criado no SQL*Plus pode ser criado por esse menu. Vamos criar uma tabela pelo Oracle Application Express. Para isso, clique na opo Tabela, que est no menu Criar. Surgir uma tela semelhante seguir:

100

Figura 5.7: Tela Browser de Objetos Veja que h um campo para especificarmos o nome da tabela. Abaixo temos campos onde deveremos informar o nome das colunas, o tipo de dados e a preciso (tamanho) dessas colunas; se trabalharmos com campos do tipo number tambm aparecer a caixa de texto Escala, que serve para informarmos a quantidade de algarismos que esse nmero possuir aps a vrgula. Temos tambm uma caixa de seleo para informarmos se o campos podero ser nulos ou no. E, por fim, temos a opo mover, caso surja o desejo de mudar a ordem dos campos dentro da tabela. Ento vamos criar uma tabela com as informaes a seguir: Tabela: oracle CAMPO codigo descricao data_inicial data_final TIPO number varchar2 date date Tabela 5.1: Tabela Oracle TAMANHO 10 200 NULO No Sim No No

101

Figura 5.8: Tela Criar Tabela Aps informarmos esses dados clique no boto Prximo. Nosso prximo passo definir a chave-primria. Nesse exemplo no utilizaremos uma sequncia para gerar a chave-primria. Ento selecione a opo No preenchido e no altere o campo Nome de Restrio de Chave Primria. Escolha a coluna codigo para ser nossa chave-primria e clique no boto Prximo.

Figura 5.9: Tela Chave Primria Nossa tabela no possuir chave-estrangeira, portanto e no preciso modificar nada na tela atual, basta clicar no boto Prximo. Ela tambm no possuir nenhuma constraint alm da chave-primria, portanto clique em Finalizar.

102

Figura 5.10: Tela Restries Aps isso o Application Express solicita outra confirmao. Portanto, basta clicar em Criar.

Figura 5.11: Tela Confirmar Aps a criao da tabela, ser uma tela como a seguinte:

103

Figura 5.12: Visualizao da Estrutura da Tabela Oracle Notamos, no quadro que exibido, as informaes da tabela, que acabamos de criar. Veja que no lado esquerdo da tela temos listado os nomes de todas as tabelas que esto no banco atualmente. Para vermos as propriedades dessas tabelas basta acess-las clicando sobre a tabela desejada. Clique no boto Incio para retornarmos pgina inicial. Ainda na opo Browser de Objetos, v ao menu Procurar e nesse menu escolha a opo Triggers. Nos exibida uma tela em que notamos, no lado esquerdo dela, a seguinte coluna:

Figura 5.13: Visualizao dos Objetos Mesmo que sua coluna de opes esteja diferente no h problema algum. O importante que aparea na sua coluna o gatilho trg_vendas_cp, que foi o que criamos no nosso contexto. Clique sobre o gatilho trg_vendas_cp. As informaes pertinentes esse gatilho sero abertas na tela. Assim como procedemos com o gatilho, podemos proceder com qualquer outro objeto do banco de dados. Volte pgina inicial. 104

Conheceremos agora, outra opo do Application Express. Na sua tela inicial, clique na opo SQL. Primeiramente vamos escolher o menu Comandos SQL. Veja que ele possui apenas uma opo: Informar Comando. Portanto abra essa opo. Ser exibida uma tela semelhante seguinte:

Figura 5.14: Tela Comandos SQL Essa tela basicamente a tela do SQL*Plus, porm com uma aparncia bem melhor. Melhor do que falar testar! Digite: select * from vendedores; Aps digitar o comando anterior, pressione o boto Executar que est no canto superior direito da tela. Observe o resultado:

105

Figura 5.15: Visualizao dos Dados na Tabela Oracle Atente para o campo CPF! Lembra que quando executamos essa consulta no SQL*Plus ele retornava com o formato de nmero hexadecimal? Na ocasio foi mencionado que era porque o nmero armazenado na coluna era muito extenso e o SQL*Plus no suportava o tamanho, por isso ele exibia como hexadecimal, porm no banco estava gravado como decimal, assim como tnhamos informado na ocasio da insero dos dados. Vemos aqui a prova do que foi falado, pois os nmeros so exibidos tal qual informamo na insero. Qualquer comando SQL pode ser executado nessa tela, assim como fizemos no SQL*Plus. Volte pgina inicial. Conheceremos agora um pouco da opo Utilitrios. Veremos como trabalhar com o aplicativo que executa a Engenharia Reversa, que nada mais do que extrair do banco de dados os comandos utilizados na construo das estruturas de nossos objetos (tabelas, vises, gatilhos, etc.). Na opo Utilitrios, clique em Gerar DDL. Ser aberta a tela:

106

Figura 5.16: Tela Gerar DLL Essa pgina que foi aberta nos exibe um resumo dos objetos existentes no banco. S sero exibidos os objetos que foram criados pelo usurio atualmente conectado ao banco de dados. Podemos obter qualquer comando de criao dos objetos. Peguemos um como exemplo. Clique no boto Criar Script >. Mantenha o esquema de seu usurio como est e clique em Prximo >. Vamos gerar um script de uma tabela. Portanto, na tela atual, selecione a opo Tabela e clique novamente no boto Prximo >. Na tela que segue exibida uma lista com o nome de todas as tabelas que foram criadas pelo usurio atual. Selecione a tabela vendas e mude a opo Sada para Salvar Como Arquivo de Script. Agora clique em Gerar DDL. Informe o nome do script. Sugesto: script_teste. Informe a descrio (opcional). Clique em Criar Script. Logo em seguida o Oracle Application Express exibe uma mensagem de confirmao de gravao do nosso script. Veja:

Figura 5.17: Scripts SQL Veja que abaixo da mensagem exibida h um link do nosso script de criao de tabela. Com isso o script fica salvo no banco e s o usurio que o criou ter acesso ele. Para visualizar o cdigo de um script, basta clicar sobre ele. Aqui no estudaremos o Application Builder, mas apenas para saber o que : o Application Builder a opo onde podemos realizar pequenas programaes, seja com dados que esto em um arquivo de planilha, ou, pode-se tambm, ger-las manualmente. para isso que serve o Application Builder.

107

Servios do Oracle 10g.

At o momento utilizamos dois aplicativos vm no pacote Oracle 10g Express Edition: SQL*Plus e Oracle Application Express. Para fazermos uso desses dois aplicativos, antes de mais nada, temos que informar usurio e senha. Mas isso s possvel porque, ao informarmos usurio e senha, o banco de dados j estava no ar, ou seja, j tinha sido inciado. Do contrrio o comando conn, que utilizamos no SQL*Plus de nada adiantaria, assim como clicar no boto Login do Application Express. Na instalao do banco de dados Oracle 10g XE, adicionado lista de processos do Windows cinco servios, que podem ser configurados para iniciarem automaticamente ou manualmente. Por padro ele iniciam automaticamente. Mas vejamos como configur-los! V at o Painel de Controle do Windows e clique abra a opo Ferramentas Administrativas. Em seguida abra a opo Servios. Organize os arquivos por ordem alfabtica e procure por cinco arquivos que comeam com a palavra Oracle. Veja:

Figura 5.18: Servios Desses servios, dois merecem destaque: OracleServiceXE OracleXETNSListener. O OracleServiceXE o servio que representa o banco de dados em dentro do Windows. O OracleXETNSListener o aplicativo que fica em execuo para que processos possam ser executados. Como mencionado, o padro de inicializao do Oracle 10g XE inicializao automtica. Mas vamos pensar em dois casos: e si, os a

1. interessante deixar o banco de dados iniciar juntamente com o sistema operacional, pois assim no precisaremos inici-lo toda vez que ligarmos nosso computador.

108

2. Porm, quando o banco iniciado juntamente ao sistema operacional, a inicializao fica obviamente mais lenta, pois h mais coisas a serem carregadas. Imagine que vamos usar o computador para outra tarefa qualquer que no utilize o Oracle 10g XE. Deix-lo iniciado desperdcio de recurso de hardware. Portanto vamos ver como configurar isso! Abra o arquivo OracleXETNSListener. Veja que na tela que nos exibida h a opo Tipo de inicializao. Atualmente est como Automtico, mas podemos perfeitamente deix-la como Manual. Se deixarmos Desativado no haver como iniciar o banco de dados em hiptese alguma. Tudo vai depender da sua escolha com base na sua necessidade. No momento vamos deixar essa opo como Automtico. Feche o Painel de Controle. Clique agora na opo Interromper Banco de Dados, que est em Iniciar Todos os programas Oracle Database 10g Express Edition. Observe o que ocorre:

Figura 5.19: Interrompendo Banco de Dados Aps ser exibida a informao de que o banco foi finalizado com xito, feche a janela. Tente agora conectar ao banco de dados pelo SQL*Plus. Sua tela dever estar como a seguinte:

109

Figura 5.20: Erro gerado Tente agora pelo Application Express. Dever ser informado um erro do seguinte tipo:

Figura 5.21: Erro gerado 2 Isso ocorre porque o banco de dados no est no ar. Agora vamos iniciar o Oracle 10g XE. Clique na opo Iniciar Banco de Dados, que est em Iniciar Todos os programas Oracle Database 10g Express Edition. Surgir a seguinte tela:

110

Figura 5.22: Iniciando Banco de Dados Aps inciado tanto o SQL*Plus quanto o Application Express funcionaro normalmente. Veremos a seguir como realizar cpias de segurana do banco de dado Oracle 10g Express Edition. Vamos conhecer dois tipo de backup's: lgico e fsico. Backup lgico

Exportao. Exportao o processo que l os registros do banco de dados e os grava em um arquivo. Para realizar esse tipo de backup vamos utilizar o comando exp. Esse comando aciona um utilitrio de exportao do Oracle, o export. esse utilitrio que l as informaes e as grava em um arquivo binrio conhecido como Arquivo dump de exportao. Vejamos a sintaxe do comando exp: exp [usurio]/[senha] owner=[usurio] file=[arquivo.dmp] grants=y rows=y indexes=y triggers=y constraints=y compress=y log=[arquivo.log]; Onde [usurio] o usurio que acessar essas informaes no banco de dados; [senha] a senha do usurio em questo. Quando informamos o comando owner indicamos quem o dono desses objetos em questo. Indicamos em [arquivo.dmp] o nome do arquivo que armazenar os dados exportados. O comando grants=y especifica que os privilgios do funcionrio tambm devero ser exportados. Em rows=y indicamos que os registros das tabelas tambm devem ser exportados, caso especificssemos rows=n apenas as estruturas das tabelas seriam exportadas. Ao informarmos indexes=y, triggers=y e contraints=y indicamos que os ndices, os gatilhos e as restries tambm 111

devero ser exportadas. Em compress=y indicamos que os dados exportados devero ser compactados. E, por fim, log=[arquivo.log] indica a criao de um arquivo de texto, onde so registradas todas as aes feitas no momento da exportao. Nesse momento vamos realizar o backup lgico de nosso banco de dados. O comando que iremos informar no digitado no SQL*Plus, e sim no prompt de comando do Windows. Portanto feche o SQL*Plus e abra o prompt de comando. Digite o seguinte comando na raiz da unidade C:\ (lembrando que o nome do usurio e senha devero ser o que foi criado por voc): exp daniel/daniel owner=daniel file=backup.dmp grants=y rows=y indexes=y triggers=y constraints=y compress=y log=backup.log Pressione o Enter apenas aps a digitao completa do comando. Dever ser exibida a seguinte seguinte mensagem:

Figura 5.23: Exportao Lgica Aps ser exibida a mensagem anterior, feche o prompt de comando e visualize o local que voc escolheu para salvar os arquivos. Veja que os dois arquivos que especificamos (backup.log e backup.dmp) foram criados. Veja:

112

Figura 5.24: Diretrio dos Arquivos Lgicos Exportados Importao. Agora que exportamos nossos dados com sucesso, vamos ver como importlos. Imaginemos que nosso servidor de dados foi atacado por vrus e sofreu uma avaria irreversvel. Como deve acontecer, havia uma cpia atualizada de nosso banco de dados em uma mdia de armazenamento. Para simular esse teste apague o seu usurio e inclua no comando a opo cascade. Ao excluir o seu usurio dever ser exibida uma tela semelhante seguinte:

113

Figura 5.25: Excluso de usurio Confirme a exluso com o comando commit. Agora criaremos esse usurio novamente, com o mesmo nome e os mesmo privilgios. Para essa tarefa use o usurio system do seu banco de dados. Aps a criao do usurio com seus respectivos privilgios, feche o SQL*Plus. Inicie novamente o prompt de comando e digite o seguinte cdigo para realizar a importao: imp daniel/daniel file=backup.dmp constraints=y fromuser=daniel touser=daniel indexes=y rows=y grants=y

O comando de importao semelhante ao de exportao. Vamos analis-lo: primeiramente informamos que queremos importar um arquivo por meio do comando imp. Em seguida informamos o por meio de qual usurio e senha iremos realizar a importao. Depois informamos o nome do arquivo dump. Tambm informamos que queremos importar os ndices, os registros, os privilgios e as restries. Por ltimo indicamos o dono dessas informaes, ou seja, o usurio que executou a exportao e para finalizar dizemos qual usurio que receber os dados. Se o processo for executado sem erros, dever ser exibida a seguinte mensagem:

114

Figura 5.26: Importao Lgica Agora vamos verificar se os dados foram realmente importados. Feche o prompt de comando e abra o SQL*Plus. Aps se conectar executa um comando SQL qualquer para ver se os dados realmente foram importados. Exemplo:

Figura 5.27: Select Aps Importao Backup fsico

Exportao. Para realizar o backup fsico no encontraremos dificuldades. Ele bem mais simples que o backup lgico, pois o Oracle 10g XE possui uma ferramenta especfica para realizar esse tipo de backup. O backup fsico tem esse nome porque ele copia todos os arquivos que fazem parte do banco de dados, ou seja, no possvel filtrar objetos ou informaes que sero armazenados. Dessa forma, quando realizamos esse tipo de backup, gravamos todos os objetos e informaes de todos os usurios. 115

O backup fsico pode ser realizado quando o banco de dados no est iniciado, coisa que no possvel fazer no backup lgico. Temos dois tipos de backup fsico: backup off-line e backup on-line. Backup off-line: conhecido tambm como backup frio (cold backup). Ele realizado quando o banco de dados no est iniciado. Backup on-line: conhecido tambm como backup quente (hot backup). Ele realizado quando o banco de dados est iniciado. Independente da situao do banco de dados (se foi iniciado ou no), o processo para realizar o backup fsico o mesmo. Vamos ento exportar nossa base de dados. Clique na opo Fazer Backup do Banco de Dados que est no menu: Iniciar Todos os programas Oracle Database 10g Express Edition. Ser exibida uma mensagem de aviso. Pressione Y para confirmar e em seguida pressione Enter. O processo de exportao dos dados iniciar. Espere at que sua tela esteja parecida com a seguinte:

Figura 5.28: Exportao Fsica Assim que sua tela ficar como a mostrada anteriormente, basta pressionar qualquer tecla para finalizar o processo de exportao. Assim que o backup finalizado, criada uma pasta com os arquivos que foram exportados. Vamos localizar essa pasta! No Windows Explorer, localize o diretrio: C:\oraclexe\app\oracle\flash_recovery_area\XE\AUTOBACKUP Veja o exemplo do arquivo de backup:

116

Figura 5.29: Diretrio dos Arquivos Fsicos Exportados Veja que foi criada um pasta com a data atual. Abra essa pasta e veja que nosso arquivo de backup est dentro dela. Aps verificar o arquivo, volte ao seguinte diretrio: C:\oraclexe\app\oracle\flash_recovery_area\XE Nesse diretrio h a pasta BACKUPSET. Nessa pasta temos o seguinte contedo:

117

Figura 5.30: Diretrio dos Arquivos Fsicos Exportados 2


Dentro dessa pasta, exemplificada anteriormente, temos o arquivo que armazena todos os arquivos de dados, que so todas as informaes armazenadas na estrutura do banco de dados. Importao. Para realizar a importao dos dados muito simples, pois o Oracle 10g XE oferece uma ferramenta para isso. Vamos importar nossa base de dados. Clique na opo Restaurar Banco de Dados que est no menu: Iniciar Todos os programas Oracle Database 10g Express Edition. Aparecer uma mensagem aviso. Pressione Y para confirmar e em seguida pressione Enter. Ser inciado o processo de importao dos dados do nosso backup. Aps a concluso, sua tela dever estar parecida com a seguinte:

118

Figura 5.31: Importao Fsica Pressione qualquer tecla para finalizar o processo. Vale lembrar que se os arquivos de backup forem gravados em uma mdia de armazenamento, eles tero que ser colocados na mesma pasta, ou seja, no mesmo caminho em que estavam quando foram exportados, pois o Oracle ir busc-lo nas pastas padres de backups fsicos. Finalizamos, assim, nosso curso de Banco de Dados Oracle 10g Express Edition.

Espero que todos tenham aproveitado ao mximo esse curso. Se permanecer qualquer dvida, no hesite nunca em perguntar, pois no h pergunta que seja idiota; o idiota no fazer perguntas e permanecer com dvidas! Sucesso todos e que Deus nos abenoe!!! DANIEL SILVA NUNES (Analista de Sistemas Jr.)

119

Você também pode gostar