42207430 Tutorial Oracle

download 42207430 Tutorial Oracle

of 50

Transcript of 42207430 Tutorial Oracle

  • 8/8/2019 42207430 Tutorial Oracle

    1/50

    O r a c l e

    ndice

    1 aula: Conceitos

    1. Banco de Dados Relacional

    2. Banco de Dados Cliente Servidor

    3. Estrutura de Segurana

    3.1. DBA Default (System/Manager)

    3.2. Usurio Papel Privilgio

    4. Organizao dos Dados

    4.1. rea de Dados

    4.2. Meta Data

    5. Linguagem SQL

    5.1. Breve Histrico5.2. DML (Data Manipulation Language)Linguagem de Manipulao de Dados

    5.3. DDL (Data Definition Language)Linguagem de Definio de Dados

    2 aula: DDL

    1. Criar Usurio

    2. Criar Papel

    3. Conceder Privilgio4. Criar Tabelas (PL/SQL ou NAVIGATOR)

    5. Criar View

    6. Criar Chave Estrangeira

    7. Criar ndices

    8. Criar Sequncia

    9. Criar Sinnimo

    10. Acessar e Visualizar as Estruturas (Tabelas)

    3 aula: Estrutura C/S e Aprofundamento PL/SQL

    1. Procedures

    2. Funes

    3. Trigger

    4. Package

    5. Utilizar Objetos

    6. Controle de Transao(Commit / Rollback)

    1

  • 8/8/2019 42207430 Tutorial Oracle

    2/50

    O r a c l e

    4 aula: Conexo / Exportao / Importao

    1. SQL Net - Conceito

    2. SQL Net Criar Alias (Link)

    3. Conexo ODBC Criar Alias

    4. Conexo BDE(Borland) - Criar Alias

    5. Exportar Banco de Dados(Projeto) - Personal Oracle

    6. Importar Banco de Dados - Server

    7. Executar Script

    8. Recriar Sequncia no Servidor

    5 aula: Projeto Front-End

    1. Criar Conexo (Table / View )

    2. Utilizar Procedure / Function

    2

  • 8/8/2019 42207430 Tutorial Oracle

    3/50

    O r a c l e

    ARQUITETURA CLIENTE/SERVIDOR

    Exemplo simples de Arquitetura Cliente/Servidor baseada em Rede

    BANCOS DE DADOS BASEADOS NA ARQUITETURA CLIENTE/SERVIDOR:

    Uma simples rede (LAN), como a exemplificada acima, suficiente para comportar um bancode dados relacional (DBMS) de tecnologia Cliente/Servidor (C/S) como por exemplo o Oracle.

    Em linhas gerais, esta tecnologia tem como caracterstica principal a diviso de tarefas entreo cliente, a estao de trabalho que ordena atravs das aplicaes o acesso aos bancos de dados,e o servidor, que executa tarefas, tais como: atualizaes, delees, procura de dados e todas asoutras tarefas prprias do gerenciamento de banco de dados, porm, sob as ordens da estao detrabalho (Cliente).

    A vantagem evidente: dividindo o processamento em dois sistemas, temos de sada adiminuio do trfego de dados na rede. Com isto, o desempenho aumenta pois evitaremos deprocessar os dados, fazendo-os transitar pela rede, entre a estao de trabalho e o servidor, pelomenos duas vezes. Ao invs disso, armazenamos os dados variveis do processo em algunsparmetros e os enviamos ao servidor. Estes ao chegarem so recepcionados pelo Oracle que osenvia para Stored Procedure, que ento inicia o processamento desejado at seu final de dentro doservidor, limitando-se a avisar a estao de trabalho o trmino do processo, com sucesso ou no.

    Porm, nem tudo so flores, existem tambm as desvantagens e a principal delas o fato dasestaes de trabalho (Clientes) se localizarem em pontos geogrficos distantes do servidor.Embora este problema possa hoje ser minimizado pela adoo das arquiteturas de

    processamento distribudo, por outro lado no sem um considervel investimento em equipamentos,aplicativos auxiliares e a contratao de especialistas. Este investimento acompanhado de despesasde manuteno constantes embora no signifique propriamente um retorno aos custos de umcomputador de grande porte, porm um gasto significativo e que dependendo do tamanho e dacomplexidade da rede podemos at alcanar os custos de um grande porte.

    3

    PC-Cliente PC-Cliente

    PC-Cliente PC-Cliente Impressora

    Servidor

    PC-Cliente

  • 8/8/2019 42207430 Tutorial Oracle

    4/50

    O r a c l e

    - VANTAGENS DA TECNOLOGIA CLIENTE/SERVIDOR:

    1- SEPARAO DAS TAREFAS DE SOLICITAO E PROCESSO.

    A primeira efetuada pela estao de trabalho e a ltima feita no servidor, ou seja: as tarefasde tratar e manipular os dados. Como j dissemos o trfego na Rede diminui sensivelmente, pois s entregue os dados necessrios solicitados pela pesquisa do cliente, e estes depois de tratados soatualizados ao final da transao no servidor. Ao contrrio dos Sistemas de Bancos de Dados sem atecnologia Cliente/Servidor, que disponibiliza todo o banco de dados, indiferente a necessidadequando da solicitao pelo Cliente. A tecnologia Cliente/Servidor antes de tudo umaincrementadora de performance sem igual.

    2- INDEPENDNCIA DA ESTAO DE TRABALHO.

    Os usurios no ficam restritos a um tipo de sistema ou plataforma.

    3- PRESERVAO DA INTEGRIDADE DOS DADOS

    Mesmo quando so efetuados Back-ups em tempo real ou at a encriptao dos dados.Nestes casos o DBMS, ultiliza o espelhamento dos dados enquanto eles so acessados, gravandosempre a ltima fotografia dos dados antes da cpia de segurana.

    4- PROCESSAMENTO DE TRANSAES.

    A grande vantagem deste mtodo e guardar durante um certo tempo tempo as modificaesefetuadas no Banco de Dados. Podendo, recuper-las em caso de queda de energia ou mesmoquando o usurio do Banco desiste da modificao.

    - DESVANTAGENS:

    1- A maior delas o aumento do custo administrativo e a contratao de pessoalespecializado para dar suporte e manter o Banco de Dados sempre ativo. Nasce o profissionalAdministrador de Bancos de Dados (DBA).

    2- O aumento do custo de hardware, tambm significativo, pois parte integrante destatecnologia Cliente/Servidor, exige a distribuio do processamento, quando a rede for grande.

    3- Quando da utilizao do Processamento Distribudo a complexidade aumenta, o nmero deequipamentos diversos tambm aumenta, e nem sempre podemos encontrar profissionais nomercado com um conhecimento to diversificado

    4

  • 8/8/2019 42207430 Tutorial Oracle

    5/50

    O r a c l e

    UTILITRIOS ORACLE:

    O AMBIENTE:

    Para manipular e acessar as estruturas de Bancos de Dados Relacionais criadas no Oracle, oproduto possui um ambiente completo para estas atividades.

    A base para este trabalho a linguagem SQL, que atravs desta sintax, cria, modifica emanipula as estruturas de dados, tendo como componentes bsicos do ambiente:

    SQL (Structured Language Query):Linguagem bsica e padro, extremamentesimples e muito prxima da lngua inglesa falada de maneira simples e comum, faz a maior emais expressiva parte do trabalho de criao e manuteno de estruturas de dados. Pormsua limitao no ser procedural, ou seja, no permite agrupar as palavras chaves sob aforma de programas executveis. uma linguagem puramente interativa de construo esubmisso de comandos individuais, embora os comandos sejam macro comandos muito

    poderosos.

    SQL*PLUS: o ambiente que permite tornar procedural os comandos individuais doSQL. Este ambiente composto, como veremos a seguir de um editor de textos, que permitereunir grupos de frases SQL, que podem ser gravadas sob a forma de arquivo e entoexecutadas.

    ORACLE NAVIGATOR:Conjunto de recursos por intermdio telas(forms), onde odesenvilvedor do Baco de Dados, cria, altera e exclui objetos. uma tendncia no que dizrespeito a manuteno de objetos e no elaborar das estruturas.

    PL/SQL: a linguagem procedural do SQL do ORACLE, composta essencialmentede todos os comandos SQL padro e mais um grupo adicional que permite utilizar o SQL deforma procedural.

    Ao ser acionado com um duplo click, o editor ativado solicitando para sua operao aidentificao do usurio e seu cdigo de acesso, seguido do drive lgico, que no caso do usoStand Alone, foi convencionado 2: Caso estivermos trabalhando em uma rede local o drive lgicoseria por exemplo o X:, mais as informaes da localizao fsica do Banco de Dados.

    5

  • 8/8/2019 42207430 Tutorial Oracle

    6/50

    O r a c l eRealizada a identificao com sucesso, o editor liberado para uso, mostrando o prompt

    SQL> a espera de qualquer comando vlido para a execuo. A seguir mostramos a relacaracterstica do editor e o ambiente que permite o trabalho com o SQL de forma procedural.

    BREVE INTROO A UTILIZAO DO SQL PLUS E A LINGUAGEM SQL

    1. Janela de Conexo Scott / Tiger

    2. Select * From User_Objects;

    3. Select * From User_ObjectsWhere Object_Type = TABLE;

    4. Describe (ver Estrutura)

    Describe DEPT

    5. Select * FromDEPT;

    6. Select * From Emp;

    7. Relacionamento

    Select d.dname, e.ename From dept d, emp e whered. Deptno = e. Deptno;

    8. Agrupar

    Select deptno, min (sal), max (sal), sum (sal)

    from emp group by deptno;

    6

  • 8/8/2019 42207430 Tutorial Oracle

    7/50

    O r a c l e

    Select JOB, sum (sal) from emp group by JOB

    9. Insert

    Insert into dept values(35, Estoque, Madureira);

    10. UpdateUpdate dept set loc = Centro where deptno = 35;

    11. Delete

    Delete from dept where dnome = Estoque

    12. Commit

    13. Rollback

    14. Connect (System/Manager)

    15. Disconnect

    PASSOS BSICOS PARA UTILIZAO DO ORACLE

    1. Conectar como DBA System Manager (Criar Usurio)

    1.1. Create user AlunoX Identified by A123;

    1.2. Grant connect to AlunoX;

    2. Conectar com usurio Scott / Tiger (Dar Privilgio)

    2.1. Grant Select on Dept to AlunoX;

    2.2. Connect AlunoX / A123;

    2.3. Select * From Scott.Dept;

    3. Conectar como System/Manager (Criar Papel e Dar Privilgio ao mesmo)

    3.1. Create Role PapelAlunoX;

    3.2. Connect Scott /Tiger;

    3.3. Grant Insert, Delete, Update on Dept to PapelAlunoX;

    3.4. Grant Select on Emp to PapelAlunoX;

    4. Conectar como DBA System / Manager (Atribuir Papel ao Usurio)

    4.1. Grant PapelAlunoX to AlunoX;

    5. Conectar como Usurio Scott /Tiger (Criar Sinnimo)

    7

  • 8/8/2019 42207430 Tutorial Oracle

    8/50

    O r a c l e

    5.1. Create Public Synonym Empregado for Scott.Emp;

    5.2. Select * From Empregados;

    6. Tpicos Diversos

    6.1. Ver qual usurio conectado

    Select user from Dual;

    6.1.1. Dar Privilgio Usurio de Criar Tabelas e Derivados

    6.1.2. Grant Resource to AlunoX; (Conecatodo como System)

    6.1.3. Connect AlunoX / A123;

    8

  • 8/8/2019 42207430 Tutorial Oracle

    9/50

    O r a c l e

    ORACLE NAVIGATOR

    IMPLEMENTAO DA ESTRUTURA BASEADO EM INTERFACE VISUAL

    -Personal Oracle

    N que identifica o Banco de Dados Local. Suas subdivises so: Projects e Local Database, ondeProjects corresponde ao n onde agrupamos para efeito de transferncia(exportar para um ServidorOracle) um projeto de banco de dados. E Local Database, corresponde ao n que agrupa todos osobjetos de um banco de dados. a partir destes elementos, que teremos acesso as diversasinterfaces para desenvolvimento facilitado(codificao abreviada).

    Database ConectionAgrupa os links possveis para gerenciadores que externos ao ambiente local.

    9

  • 8/8/2019 42207430 Tutorial Oracle

    10/50

    O r a c l e

    Objeto User

    10

  • 8/8/2019 42207430 Tutorial Oracle

    11/50

    O r a c l e

    Nota: Acionado a partir do click do boto direito do mause, quando sobre este n.

    Aba General

    Propriedade Name - dentificador do usurioPropriedade New - password(iniciado por caracter Alpha sequido de Alpha-Numrico)

    Aba Role/Privilege

    Define os privilgios de acesso e manipulao atribuidos ao usurio

    11

  • 8/8/2019 42207430 Tutorial Oracle

    12/50

  • 8/8/2019 42207430 Tutorial Oracle

    13/50

    O r a c l e

    Objeto Table

    Nota: Acionado a partir do click do boto direito do mause, quando sobre este n. De formabastante prtica, temos uma viso de todo a estrutura da tabela.A sintaxe necessria para execuo via script ou cdigo entrado pelo SQL Plus, segue:

    Aba General

    Name - Nome da tabela a ser criadaOwner Usurio a quem pertence

    Aba Object Privilege Definio dos privilgios

    Aba Design

    Column Name - Nome do campoType Acionando o combo apresentado um lista para escolhaSize Define-se o tamanho do campoScale Quando tipo number, indica quantas casas decimais sero reservadasDefault Valor entrado como default quando do no preenchimento

    13

  • 8/8/2019 42207430 Tutorial Oracle

    14/50

    O r a c l e

    Aba Design(continuao)

    Can Be Null ?- Quando assinalado, o campo aceitar valor nuloUnique ? - Quando assinalado, cria restrio para valores duplicados nesta colunaPrimary Key - Indica que o(s) campo(s) faz(em) parte da chave primriaForeign Key - Cria restrio, indicando o campo como chave estrangeira, referenciado

    um campo chave em outra tabelaCheck Condition - Atribuio de uma condio para validao do valor entrado no campo

    -------------------------------------------------------Script das Tabelas doProjeto-----------------------------------------

    CREATE TABLE CLIENTES (CODIGO NUMBER(10, 0) NOT NULL,NOME VARCHAR2(50) NOT NULL,DATA DATE NOT NULL,STATUS NUMBER(1, 0) DEFAULT '1' NOT NULL,CREDITO NUMBER(12, 2),HISTORICO LONG,TIPO VARCHAR2(1) DEFAULT 'J' NOT NULL,CGC VARCHAR2(14) NOT NULL )

    CREATE TABLE CLIENTESFOTO (CODIGO NUMBER(10, 0) NOT NULL,

    FOTO LONG RAW)

    14

  • 8/8/2019 42207430 Tutorial Oracle

    15/50

    O r a c l e

    CREATE TABLE PRODUTOS (CODIGO NUMBER(10, 0) NOT NULL,DESCRICAO VARCHAR2(25) NOT NULL,SALDO NUMBER(10, 0),

    PRECOVENDA NUMBER(13, 2))CREATE TABLE ITENS (

    NUMEROPED NUMBER(10, 0) NOT NULL,CODPRODUTO NUMBER(10, 0) NOT NULL,QUANTIDADE NUMBER(10, 0) NOT NULL,PRECOVENDA NUMBER(13, 2) NOT NULL)

    CREATE TABLE PEDIDOS (NUMERO NUMBER(10, 0) NOT NULL,CODCLIENTE NUMBER(10, 0) NOT NULL,DATAPED DATE NOT NULL

    CREATE TABLE VENDASCLI_TEMP (CODIGO NUMBER(10,0),NOME VARCHAR2(50),TOTVENDAS NUMBER(13, 2))

    Criar Indices/Chave Primria

    CREATE INDEX IDEXNOME ON CLIENTES (NOME)

    CREATE UNIQUE INDEX PK_CLIENTES ON CLIENTES (CODIGO)

    CREATE UNIQUE INDEX PK_CLIENTESFOTO ON CLIENTESFOTO (CODIGO)

    CREATE UNIQUE INDEX UK_CLIENTESCGC ON CLIENTES (CGC)

    CREATE UNIQUE INDEX PK_ITENS ON ITENS (NUMEROPED, CODPRODUTO)

    CREATE INDEX IDXDATACLI ON PEDIDO (DATAPED, CODCLIENTE)

    CREATE UNIQUE INDEX PK_PEDIDO ON PEDIDO (NUMERO)

    CREATE INDEX IDXDESCRICAO ON PRODUTOS (DESCRICAO)

    CREATE UNIQUE INDEX PK_PRODUTOS ON PRODUTOS (CODIGO)

    Criar Sequncias

    Create Sequence Seq_Clientes;

    Create Sequence Seq_Produtos;

    Create Sequence Seq_Pedidos start with 1 increment by 2;

    15

  • 8/8/2019 42207430 Tutorial Oracle

    16/50

    O r a c l e

    Alterao na Estrutura de Tabelas / Constraint / Chave Estrangeira

    Alter Table Clientes Modify (Nome char (42));

    Alter Table Clientes Add Constraint Ck_Clientescredito Check (Credito

  • 8/8/2019 42207430 Tutorial Oracle

    17/50

    O r a c l e

    Objeto View

    Nota: Acionado a partir do click do boto direito do mause, quando sobre este n. Uma Viewconceitualmente se aplica para minimizar o acesso aos dados de uma tabela ou acomposio de um join.

    Create View View_Clientesfoto AsSelect Clientes.Nome, Clientes.FotoFrom Clientes Where Clientes.Status = 1

    Create View View_Itensdescricao AsSelect Produtos.Descricao,Itens.Quantidade,Itens.PrecovendaFrom Itens,Produtos

    Where Itens.Codproduto = Produtos.Codigo

    Create View View_Pedidosdata AsSelect Clientes.Nome, Pedido.Dataped, Pedido.NumeroFrom Aulamanha.Clientes, Aulamanha.PedidoWhere Clientes.Codigo = Pedido.Codcliente And Pedido.Dataped >= Sysdate - 150

    Create View View_VendaMesAno AsSelect Trunc(Pedidos.DataPed, 'Month') As MesAno,

    Sum(Itens.Quantidade * Itens.PrecoVenda) As TotalFrom Itens, PedidosWhere Pedidos.Numero = Itens.NumeroPed

    Group By Trunc(Pedidos.DataPed, 'Month')

    17

  • 8/8/2019 42207430 Tutorial Oracle

    18/50

    O r a c l e

    ObjetoProcedure

    CREATE PROCEDURE PROCINCCLIENTE (Parnome Clientes.Nome%Type,Pardata Clientes.Data%Type,Parstatus Clientes.Status%Type,Parcredito Clientes.Credito%Type,Parhistorico Clientes.Historico%Type,Parfoto Clientes.Foto%Type,Partipo Clientes.Tipo%Type,Parcgc Clientes.Cgc%Type) Is

    BEGINInsert Into Clientes Values (Seq_Clientes.Nextval,

    Pardata,Parnome,Parstatus,Parcredito,Parhistorico,Parfoto,Partipo,Parcgc );

    END;

    18

  • 8/8/2019 42207430 Tutorial Oracle

    19/50

    O r a c l e

    CREATE PROCEDURE PROCALTCLIENTE (Parcodigo Clientes.Codigo%Type,Parnome Clientes.Nome%Type,Pardata Clientes.Data%Type,

    Parstatus Clientes.Status%Type,Parcredito Clientes.Credito%Type,Parhistorico Clientes.Historico%Type,Parfoto Clientes.Foto%Type,Partipo Clientes.Tipo%Type,Parcgc Clientes.Cgc%Type ) Is

    BEGINUpdate Clientes Set

    Clientes.Nome = Parnome,Clientes.Data = Pardata,Clientes.Status = Status,Clientes.Credito = Parcredito,

    Clientes.Historico = Parhistorico,Clientes.Foto = Parfoto,Clientes.Tipo = Partipo,Clientes.Cgc = Parcgc

    Where Clientes.Codigo = Parcodigo;END;

    CREATE PROCEDURE PROCEXCCLIENTE (Parcodigo Clientes.Codigo%Type) IS

    BEGINDelete Clientes

    Where Codigo = Parcodigo;END;

    19

  • 8/8/2019 42207430 Tutorial Oracle

    20/50

    O r a c l e

    Criar Procedure com Cursor

    CREATE PROCEDURE Proccursorregistro(Pardata In Pedidos.Dataped%Type) AsRegistro Pedidos%Rowtype;

    Cursor Cursorregistros IsSelect * From PedidosWhere Pedidos.Dataped >= Pardata;

    BeginOpen Cursorregistro;Loop

    Fetch Cursorregistro Into Registro;Exit When Cursorregistro%Notfound;

    End Loop;Close Cursorregistro;

    End;

    CREATE PROCEDURE PROCVENDASCLI(Pardata Pedido.Dataped%Type,Parvalor Itens.Precovenda%Type) As

    CursorCursorvendascli IsSelect Clientes.Nome, Sum(Itens.Quantidade * Itens.Precovenda) As TotalFrom Clientes,Itens,PedidoWhere Clientes.Codigo = Pedido.Codcliente And

    Pedido.Numero = Itens.Numeroped AndPedido.Dataped >= Pardata

    Group By Clientes.NomeHaving Sum(Itens.Quantidade * Itens.Precovenda) >= ParvalorOrder By Clientes.Nome;

    Varnome Clientes.Nome%Type;Vartotal Itens.Precovenda%Type;

    BEGINDelete Vendascli;Open Cursorvendascli;If Sql%Notfound Then

    Raise_Application_Error(-20000,'No H Vendas Neste Perodo.');End If;

    Loop Fetch Cursorvendascli Into Varnome,Vartotal;Exit When Cursorvendascli%Notfound;Insert Into Vendascli Values (Varnome, Vartotal);

    End Loop;Close Cursorvendascli;

    End;

    Testando no SQL-PlusSQL> Set ServerOutput on;SQL> Execute ProcCursor1(1);

    20

  • 8/8/2019 42207430 Tutorial Oracle

    21/50

  • 8/8/2019 42207430 Tutorial Oracle

    22/50

    O r a c l e

    Objeto Trigger

    CREATE TRIGGER TRIG_AJUSTAPRECOVENDA

    BEFORE INSERT OR UPDATE ON ITENS FOR EACH ROWDECLARE

    VarprecocompraProdutos.PrecoCompra%Type;

    BEGINSelect Produtos.PrecoCompra Into VarprecocompraFrom Produtos Where Produtos.Codigo = :Novo.Codproduto;If :Novo.Precovenda < (Varprecocompra * 1.17) Then

    :Novo.PrecoVenda := (Varprecocompra * 1.17);End If;

    END;

    22

  • 8/8/2019 42207430 Tutorial Oracle

    23/50

    O r a c l e

    CREATE TRIGGER TRIG_INCITEMBEFORE INSERT ON ITENS FOR EACH ROWDECLARE

    Varsaldo produtos.saldo%type;

    VarDescricao produtos.descricao%type;BEGIN--ComentrioSelect Produtos.Saldo,Produtos.Descricao Into Varsaldo,VardescricaoFrom Produtos Where Produtos.Codigo = :Novo.Codproduto;If Varsaldo >= :Novo.Quantidade Then

    Update Produtos SetProdutos.Saldo = Produtos.Saldo - :Novo.QuantidadeWhere Produtos.Codigo = :Novo.Codproduto;

    ElseRaise_Application_Error( -20000, 'Ini O Saldo Do Produto ' ||

    Vardescricao || ' De: ' ||

    To_Char(Varsaldo) || ' NoAtendendo O Solicitado. Fim' );End If;

    END;

    23

  • 8/8/2019 42207430 Tutorial Oracle

    24/50

    O r a c l e

    CREATE TRIGGER TRIG_ALTITEMBEFORE UPDATE ON ITENS FOR EACH ROWDECLARE

    Varsaldo produtos.saldo%type;VarDescricao produtos.descricao%type;BEGIN

    --ComentrioUpdate Produtos SetProdutos.Saldo = Produtos.Saldo + :Anterior.QuantidadeWhere Produtos.Codigo = :Anterior.Codproduto;Select Produtos.Saldo,Produtos.Descricao Into Varsaldo,VardescricaoFrom Produtos Where Produtos.Codigo = :Novo.Codproduto;If Varsaldo >= :Novo.Quantidade Then

    Update Produtos SetProdutos.Saldo = Produtos.Saldo - :Novo.Quantidade

    Where Produtos.Codigo = :Novo.Codproduto;ElseRaise_Application_Error(-20000, 'Ini O Saldo Do Produto ' ||

    Vardescricao || ' De: ' ||To_Char(Varsaldo) || ' NoAtendendo O Solicitado. Fim');

    End If;END;

    24

  • 8/8/2019 42207430 Tutorial Oracle

    25/50

    O r a c l e

    CREATE TRIGGER TRIG_EXCITEMBEFORE DELETE ON ITENS FOR EACH ROWBEGIN

    Update Produtos SetProdutos.Saldo=Produtos.Saldo + :Anterior.QuantidadeWhere Produtos.Codigo = :Anterior.Codproduto;

    END;

    25

  • 8/8/2019 42207430 Tutorial Oracle

    26/50

    O r a c l e

    Criar Conexo (Alias) no SQL Net e Drive ODBC32

    1. Indicar Add Database Alias, clicando no boto OK.

    2. Atribuir um nome para o Alias(Database Alias) clicando em OK.

    3. Indicar tipo de conexo (TCP/IP), clicando em OK.

    26

  • 8/8/2019 42207430 Tutorial Oracle

    27/50

    O r a c l e

    4. Indicar em TCP/IP Host Name, o n do servidor, clicando em OK.

    5. Ao final ser apresentado um resumo dos parmetros.

    27

  • 8/8/2019 42207430 Tutorial Oracle

    28/50

    O r a c l e

    Criar Conexo (Alias) no ODBC 32

    6. Acessar ODBC 32 e clicar em Add

    7.

    Indicar o Drive especfico (indicado na imagem), clicando em Concluir.

    28

  • 8/8/2019 42207430 Tutorial Oracle

    29/50

    O r a c l e

    8. Finalizando, indique Data Source Name, Description, User Name e Connect String.

    Indicando neste ltimo parmetro, 2:(para Banco Dados Local) ou o nome do Alias

    criado no SQLNet(AlunoX_SQLNet) para uma conexo com o Servidor Oracle.

    9. Criar um Objeto Projeto, anexar os objetos ao mesmo e export-lo.

    10. No lado do servidor Importar o Projeto.

    11. Recriar as Sequncias.

    29

  • 8/8/2019 42207430 Tutorial Oracle

    30/50

    O r a c l e

    PL/SQL

    DIFERENA ENTRE SQL E PL/SQL

    Como j sabemos, a SQL ( Structured Query Language ), uma linguagem interativa que tempor objetivo pesquisar, recuperar e formatar dados de forma simples, atravs de relatrios em tela ouimpressora, usando frases simples tiradas do vocabulrio corrente.

    Em funo dessa limitao a Oracle desenvolveu uma linguagem procedural, baseada noSQL interativo, incrementando vrias facilidades encontradas nas linguagens procedurais, tais como,declarao de variveis, rotinas de controle de fluxo e cursores, que uniu o poder das estruturasprocedurais como o Basic e o Pascal, com a simplicidade do SQL, permitindo que vrias frases SQL,pudessem ao mesmo tempo serem processadas, tornando o SQL procedural ou PL/SQL (ProceduralLanguage SQL).

    Na verdade no. O PL/SQL uma linguagem complementar, ela sozinha no tem muito

    poder, porm ligada a uma linguagem visual como Delphi, Visual Basic entre outras voltadas paraEventos, constituem uma ferramenta de alta performance. Podemos com as duas construiraplicaes fantsticas.

    Pois a interao entre as duas que transforma a arquitetura Client/Server em realidade, ouseja, A linguagem visual apresenta os dados na tela, dispara as ordens as procedures do Banco deDados que por sua vez faz o trabalho mais duro, o de realizar pesquisas, processos, alteraes edelees, sem gerar trfego em rede e sem a necessidade de complexos algortimos.

    Na realidade temos duas linguagens PL/SQL, a primeira, que ser nosso objeto de estudo,tem por objetivo ser a extenso inteligente de uma linguagem no Oracle Visual. A outra linguagemPL/SQL, que no abordaremos neste curso, faz parte integrante das ferramentas Oracle dedesenvolvimento de aplicaes visuais, reunidas em um produto chamado Designer 2000, que

    composto pelo Forms, Reports e Graphics, alm do prprio Designer 2000, que o Modelador deDados e gerador de aplicaes.

    ESTRUTURA DA LINGUAGEM

    CARACTERES SUPORTADOS Todo alfabeto maisculo e minsculo Algarismos de 0 a 9 Smbolos especiais: ( ) + - * / < > = ! ~ ; : @ % , # & $ _ | { } ? [ ] .

    OPERADORES ARITMTICOS+ Adio - Subtrao* Multiplicao / Diviso** Exponenciao

    OPERAES RELACIONAIS< > Diferente > Maior^ = Diferente < Menor! = Diferente > = Maior Igual= Igual < = Menor Igual

    30

  • 8/8/2019 42207430 Tutorial Oracle

    31/50

    O r a c l e

    OUTROS SMBOLOS

    ( ) Separadores de lista Ex.: AND MODELO IN(SANTA CECILIA,SO PAULO,SP); Final de declarao Ex.: COMMIT WORK;

    . Separador de item Ex.: CLIENTES.CODIGO Engloba uma string Ex.: DIGIDATA: = Atribuio Ex.: NOME : = DIGIDATA| | Concatenao Ex.: Codigo Cliente: | | CLIENTES.CODIGO- - Comentrio na mesma linha Ex.: Begin - - Inicio da execuo /* e */ Delimitadores de comentrios abrangendo vrias linhas ( incio e fim de comentrio ).

    VARIVEIS Seus nomes devem iniciar sempre com uma letra de ( A Z ) Podem ser seguidas de uma ou mais letras, nmeros ou caracteres dos especiais $, # ou _ Devem Ter no mximo 30 caracteres No podem conter espaos em branco No podem ser palavras reservadas do PL/SQL, como commit, if, raise, etc...

    TIPOS DE DADOS

    CHAR - Tipos de dados alfanumricos

    VARCHAR2 - Tipo alfanumrico com comprimento de 32.768 a 32.767 bytes

    NUMBER - Preciso de at 38 caracteres e ponto flutuante

    DATE - Armazena valores de data de comprimento fixoBOOLEAN - Contm Status TRUE e FALSE

    LONG - Longo inteiro

    ROWID - Identificador de linha

    COMPONENTES DA LINGUAGEM

    ESTRUTURAS DE CONTROLE

    IF

    If Var1 > 10 thenVar2 = Var1 + 20 ;

    End If;

    If Not ( Var1 < = 10 ) thenVar2 = Var1 + 20 ;

    End If;

    31

  • 8/8/2019 42207430 Tutorial Oracle

    32/50

    O r a c l e

    If Var1 > 10 thenIf Var2 < Var1 then

    Var2 = Var1 + 20 ;End If;

    End If;If Var1 > 10 then

    Var2 = Var1 + 20 ;Else

    Var2 = Var1 * Var1 ;End If;

    If Var1 > 10 thenVar2 = Var1 + 20 ;

    ElseIf Var1 between 7 and 8 then

    Var2 = 2 * Var1;ElseVar2 = Var1 * Var1 ;

    End If;End If;

    If Var1 > 10 thenVar2 = Var1 + 20 ;

    ElseIf Var1 between 7 and 8 thenVar2 = 2 * Var1 ;

    Else

    Var2 = Var1 * Var1;End If;

    LOOP

    Contador : = 1 ;

    LoopContador : = Contador + 1 ;If Contador > 100 then

    Exit;

    End If ;End Loop;

    Contador : = 1 ;

    Loop

    Contador : = Contador + 1 ;Exit when Contador > 100 ;

    End Loop;

    Contador : = 1 ;

    32

  • 8/8/2019 42207430 Tutorial Oracle

    33/50

    O r a c l e

    While Contador < = 100 LoopContador : = Contador + 1 ;

    End Loop ;

    FOR

    ForContadorin 1 . . 3 LoopInsert into tabela values ( Ainda em Loop , Contador ) ;

    End Loop ;

    If Contador > = 90 thenNull ; - - Construo conhecida como Nula ou Ausncia de Valor

    ElseInsert into tabela values ( Ainda em Loop , Contador ) ;

    End If;

    33

  • 8/8/2019 42207430 Tutorial Oracle

    34/50

    O r a c l e

    GERANDO VALORES DE CHAVES PRIMRIAS

    O Oracle pode gerar automaticamente um novo valor para uma chave primria de um campocom SEQUNCIA ( Sequence ). Um Sequence um objeto Oracle com estrutura de dados

    independente.Ou seja, ele constri o prximo valor da chave primria referente a uma seqncia( Sequence ), atravs do comando INSERT, acompanhado das expresses NEXTVAL e CURRVAL.

    Seqncia . NEXTVAL Gera o prximo valor disponvel dentro da seqncia.Sequncia . CURRVAL Faz referncia ao mais recente valor gerado na seqncia dentro damesma sesso.Nota: Antes de gerar a chave primria verifique se o objeto foi criado como Sequence. Lembre-se tambm quepara usar CURRVAL, necessrio Ter usado antes o NEXTVAL.

    Exemplo:

    Para criar o Departamento Treinamento automaticamente nas regies 1 e 2 o procedimento abaixoexemplifica:

    SQL> INSERT INTO DEPTO ( COD, NOME, COD_REGIAO )VALUES ( COD.NEXTVAL, TREINAMENTO, 1 ) ;

    SQL> INSERT INTO S_DEPT ( ID, NAME, REGION_ID)VALUES ( COD.NEXTVAL, TREINAMENTO, 2 ) ;

    COMANDOS TEIS

    SQL > DESCRIBE USER_OBJECTS ;

    Name Null? Type _______________ ____ ____ OBJECT_NAME VARCHAR2(28)OBJECT_ID NUMBEROBJECT_TYPE VARCHAR2(13)CREATED DATELAST_DDL_TIME DATETIMESTAMP VARCHAR2(75)STATUS VARCHAR2(7)

    Apresentar os nomes das tabelas para um determinado OWNER.

    SQL > SELECT Object_Name FROM User_Objects WHERE Object_Type = TABLE

    Digite a seguinte linha :SQL > SELECT * FROM User_Objects WHERE Object_Type = 'SEQUENCE';

    34

  • 8/8/2019 42207430 Tutorial Oracle

    35/50

  • 8/8/2019 42207430 Tutorial Oracle

    36/50

    O r a c l e

    CURSORES

    Cursores so trechos alocados de memria destinados a processar as declaraes SELECT.Podem ser definidos pelo prprio PL/SQL, chamados de Cursores Implcitos, ou podem ser

    definidos manualmente, so os chamados de Cursores Explcitos.

    Cursores Explcitos

    Esta tcnica exige que o cursor seja declarado manualmente na seo DECLARE, e deveconter somente declaraes SELECT. Para a sua utilizao os seguintes passos devem serobservados:

    Declarar o Cursor Abrir o Cursor ( Preparar para sua utilizao ) Open Buscar os dados Fetch Liberar memria aps o uso ( Fechar o Cursor ) Close

    Nota: O Cursor sempre definido na Seo DECLARE e aberto aps o BEGIN. O nmero devariveis que recebem dados na declarao FETCH deve ser igual ao nmero de campos definidosna declarao SELECT, quando da declarao do cursor. O sucesso ou insucesso do cursor determinado pelo teste %FOUND% ou %NOTFOUND%. Este teste deve ser feito antes que o cursorseja fechado.

    ATRIBUTO DESCRIO

    %ISOPEN Atributo do tipo Boolean, (True/False), sendo True quando o cursor est aberto%NOTFOUND Atributo do tipo Boolean, (True/False), sendo True quando o ltimo FETCH noretornou linha.

    %FOUND Atributo do tipo Boolean, (True/False), sendo True quando o ltimo FETCHretorna linha.

    %ROWCOUNT Atributo numrico, que retorna o nmero da linha retornada.

    CURSORES IMPLCITOS

    Manipulado pelo prprio PL/SQL, sem a declarao na seo DECLARE. Caracterizado pelouso da declarao SELECT a qual o PL/SQL manipula a definio do cursor implicitamente e os

    seguintes aspectos devem ser levados em considerao:

    Deve haver um INTO com cada cursor implcito. Assim como os cursores explcitos, as variveis recebem dados com a palavra chave INTO Os cursores implcitos esperam que apenas uma linha seja retornada. Voc deve examinar

    algumas excees mais comuns, discutidas na tabela abaixo.

    36

  • 8/8/2019 42207430 Tutorial Oracle

    37/50

  • 8/8/2019 42207430 Tutorial Oracle

    38/50

    O r a c l e

    Create or Replace PACKAGE BODY ATUALIZA_SALARIO isPROCEDURE RECEBE_DEPT ( pdept in number, sal number ) IS

    Salario_valido boolean ;Begin

    Salario_valido := ver_salario( pdept, sal ) ;If Salario_valido = TRUE then

    Update FUNCIONARIO set SALARIO = SALARIO * ( 1 + (sal/salario))Where coddept = pdept ;

    End If ;End;

    End;

    Function Ver_Salario( Deptno in number, vsal number ) return boolean is

    Begin SELECT MAX(SALARIO) INTO G_Salario FROM FuncionarioWhere coddept = deptno ;If G_Salario > vsal then

    Return ( TRUE ) ;Else

    Return ( FALSE ) ;End If ;

    End ; /

    TRIGGER

    TRIGGER(GATILHO) Procedure executada ( disparada ) conforme o acontecimento oacontecimento de um evento, conforme a lista abaixo relacionada.

    BEFORE INSERT Dispara uma vez antes de uma transao INSERTBEFORE INSERT FOR EACH ROW Dispara antes de cada novo registro criado.AFTER INSERT Dispara uma vez depois de uma transao INSERTAFTER INSERT FOR EACH ROW Dispara depois de cada novo registro criado.BEFORE UPDATE Dispara uma vez antes de uma transao UPDATEBEFORE UPDATE FOR EACH ROW Dispara antes de cada novo registro alterado.AFTER UPDATE Dispara uma vez depois de uma transao UPDATE

    AFTER UPDATE FOR EACH ROW Dispara depois de cada novo registro alterado.BEFORE DELETE Dispara uma vez antes de uma transao DELETEBEFORE DELETE FOR EACH ROW Dispara antes de cada novo registro apagado.AFTER DELETE Dispara uma vez depois de uma transao DELETEAFTER DELETE FOR EACH ROW Dispara depois de cada novo registro apagado.

    SET SERVEROUTPUTON

    Este comando habilita o Package DBMS_OUTPUT, que atravs da Procedure PUT_LINE,enviar as mensagens aps uma Transao efetuada com sucesso. Este Package, bem como asProcedures, so do prprio Oracle, criados quando da sua instalao.

    38

  • 8/8/2019 42207430 Tutorial Oracle

    39/50

    O r a c l e

    Linguagem SQL

    Instruo SELECTInstrui o programa principal do banco de dados para retornar a informao como um conjunto deregistros.

    Sintaxe

    SELECT [predicado { * | tabela.* | [tabela.]campo1 [AS alias1][, [tabela.]campo2 [AS alias2] [, ...]]}

    FROM expressotabela [, ...] [IN bancodedadosexterno][WHERE... ][GROUP BY... ][HAVING... ][ORDER BY... ]

    A instruo SELECT tem as partes abaixo:

    Parte Descriopredicado Um dos seguintes predicados: ALL, DISTINCT, DISTINCTROW ou TOP.

    Voc usa o predicado para restringir o nmero de registros que retornam. Senenhum for especificado, o padro ser ALL.

    * Especifica que todos os campos da tabela ou tabelas especificadas soselecionados.

    tabela O nome da tabela que contm os campos dos quais os registros soselecionados.campo1, campo2 Os nomes dos campos dos quais os dados sero recuperados. Se vocincluir

    mais de um campo, eles sero recuperados na ordem listada.alias1, alias2 Os nomes que sero usados como ttulos de colunas em vez dos nomes

    originais das colunas na tabela.expressotabela O nome da tabela ou tabelas contendo os dados que voc querrecuperar.bancodedadosexterno O Nome do banco de dados que contm as tabelas em expressotabelase no

    estiver no banco de dados atual.

    Comentrios

    Para executar esta operao, o programa principal de banco de dados procura a tabela outabelas especificadas, extrai as colunas escolhidas, seleciona as linhas que satisfazem o critrio eclassifica ou agrupa as linhas resultantes na ordem especificada.

    A instruo SELECT no muda os dados no banco de dados.

    SELECT normalmente a primeira palavra em uma instruo SQL. A maior parte dasinstrues SQL so instrues SELECT.

    39

  • 8/8/2019 42207430 Tutorial Oracle

    40/50

    O r a c l e

    A sintaxe mnima da instruo SELECT :SELECT campos FROM tabela

    Voc pode usar um asterisco (*) para selecionar todos os campos na tabela. O exemplo

    abaixo seleciona todos os campos na tabela Funcionrios:SELECT * FROM Funcionrios;

    Se o nome de um campo estiver includo em mais de uma tabela na clusula FROM, preceda-o com o nome da tabela e o operador . (ponto). No exemplo abaixo, o campo Departamento est nastabelas Funcionrios e Supervisores. A instruo SQL seleciona Departamento da tabelaFuncionrios e NomeSupv da tabela Supervisores:

    SELECT Funcionrios.Departamento, Supervisores.NomeSupvFROM Funcionrios , SupervisoresWHERE Funcionrios.Departamento = Supervisores.Departamento;

    Ao criar um objeto Recordset, o programa principal de banco de dados do Jet usa o nome docampo da tabela como o nome do objeto Field no objeto Recordset. Se voc quiser um nome decampo diferente ou um nome que no esteja implcito na expresso usada para gerar o campo, use apalavra reservada AS. O exemplo abaixo usa o ttulo Nasc para nomear o objeto Field retornado noobjeto Recordset resultante:

    SELECT DataNasc AS Nasc FROM Funcionrios;

    Sempre que voc usar funes aggregate ou consultas que retornem nomes de objetos Fieldambguos ou duplicados, voc precisar usar a clusula AS para fornecer um nome alternativo parao objeto Field. O exemplo abaixo usa o ttulo Contagem para nomear o objeto Field retornado noobjeto Recordset resultante:

    SELECT COUNT(FuncionrioID) AS Contagem FROM Funcionrios;

    Voc pode usar outras clusulas na instruo SELECT para restringir e organizarposteriormente os seus dados retornados.

    Clusula GROUP BY

    GROUP BY opcional. Valores de resumo so omitidos se no houver qualquer funoaggregate SQL na instruo SELECT. Os valores Null nos campos GROUP BY so agrupados e noomitidos. No entanto, os valores Null no so avaliados em qualquer funo aggregate SQL. Use aclusula WHERE para excluir linhas que voc no quer agrupadas e use a clusula HAVING parafiltrar os registros aps eles terem sido agrupados.

    A no ser que contenha dados Memo ou OLE Object, um campo na lista de campos GROUPBY pode fazer referncia a qualquer campo em qualquer tabela listada na clusula FROM. Mesmoque o campo no esteja includo na instruo SELECT, fornecida a instruo SELECT, inclua pelomenos uma funo SQL. O programa principal de banco de dados do Jet no pode agrupar camposMemo ou OLE Objects.

    Todos os campos na lista de campos SELECT devem ser includos na clusula GROUP BYou includos como argumentos em uma funo aggregate SQL.

    40

  • 8/8/2019 42207430 Tutorial Oracle

    41/50

    O r a c l e

    Clusula HAVING

    HAVING opcional. HAVING semelhante a WHERE, que determina quais registros soselecionados. Depois que os registros so agrupados com GROUP BY, HAVING determina quais

    registros so exibidos:SELECT CategoriaID, Sum(UnidadesNoEstoque) FROM ProdutosGROUP BY CategoriaIDHAVING Sum(UnidadesNoEstoque) > 100 AND LIKE "BOS*";

    Uma clusula HAVING pode conter at 40 expresses vinculadas por operadores lgicos,como And ou Or.

    Clusula ORDER BY

    ORDER BY opcional. Entretanto, se voc quiser exibir seus dados na ordem classificada,

    voc deve utilizar ORDER BY. O padro ordem de classificao ascendente (A a Z, 0 a 9). Os doisexemplos abaixo classificam os nomes dos funcionrios pelo sobrenome.

    SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome;

    SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome ASC;

    Para classificar em ordem descendente (Z a A, 9 a 0), adicione a palavra reservada DESC aofinal de cada campo que voc quiser classificar em ordem descendente. O exemplo abaixo selecionasalrios e os classifica em ordem descendente

    SELECT Sobrenome, Salrio FROM Funcionrios ORDER BY Salrio DESC, Sobrenome;

    Se voc especificar um campo que contm dados Memo ou OLE Objects na clusula ORDERBY, um erro ocorrer. O programa principal de banco de dados do Jet no classifica campos destetipo. ORDER BY normalmente o ltimo item em uma instruo SQL.

    Voc pode incluir campos adicionais na clusula ORDER BY. Os registros so classificadosprimeiro pelo primeiro campo listado depois de ORDER BY. Os registros que tiverem valores iguaisnaquele campo so classificados pelo valor no segundo campo listado e assim por diante.

    Exemplo da instruo SELECT, clusula FROM

    Esse exemplo seleciona os campos "Sobrenome" e "Nome" de todos os registros da tabela"Funcionrios".

    SELECT Sobrenome, Nome FROM Funcionrios

    Esse exemplo seleciona todos os campos da tabela "Funcionrios".

    SELECT Funcionrios.* FROM Funcionrios;

    41

  • 8/8/2019 42207430 Tutorial Oracle

    42/50

    O r a c l e

    Esse exemplo conta o nmero de registros que tm uma entrada no campo "CdigoPostal" enomeia o campo retornado como "Tcp".

    SELECT Count(CdigoPostal) AS Tcp FROM Clientes;

    Esse exemplo mostra qual seria o salrio se cada funcionrio recebesse um aumento de 10porcento. No altera o valor original dos salrios.

    SELECT Sobrenome, Salrio AS Atual, Salrio * 1.1 AS Proposto FROM Funcionrios;

    Esse exemplo coloca o ttulo Nome no topo da coluna "Sobrenome". O ttulo Salrio exibidono topo da coluna "Salrio".

    SELECT Sobrenome AS Nome, Salrio FROM Funcionrios;

    Esse exemplo mostra o nmero de funcionrios e os salrios mdio e mximo.

    SELECT Count(*) AS [Total de Funcionrios], Avg(Salrio)AS [Salrio Mdio], Max(Salrio) AS [Salrio Mximo]FROM Funcionrios;

    Para cada registro, mostra Sobrenome e Salrio no primeiro e ltimo campos. A seqncia decaracteres "tem um salrio de" retornada como o campo do meio de cada registro.

    SELECT Sobrenome, 'tem um salrio de', Salrio FROM Funcionrios;

    Exemplo de clusula GROUP BY

    Esse exemplo cria uma lista de nomes de departamentos nicos e o nmero de funcionriosem cada um destes departamentos.

    SELECT Departamento, Count([Departamento]) AS Tbc FROM FuncionriosGROUP BY Departamento;

    Para cada ttulo de funo nico, calcula o nmero de funcionrios do departamento deVendas que tm este ttulo.

    SELECT Ttulo, Count(Ttulo) AS Tbc FROM FuncionriosWHERE Departamento = 'Vendas' GROUP BY Ttulo;

    Esse exemplo calcula o nmero de itens em estoque para cada combinao de nmero e cordo item.

    SELECT Item, Sum(Unidades) AS Tbc FROM ItensEmEstoqueGROUP BY Item, Cor;

    42

  • 8/8/2019 42207430 Tutorial Oracle

    43/50

    O r a c l e

    Exemplo de clusula HAVING

    Esse exemplo seleciona os ttulos de cargos do departamento de Produo atribudos a maisde 50 funcionrios.

    SELECT Ttulo, Count(Ttulo)FROM FuncionriosWHERE Departamento = 'Produo'GROUP BY Ttulo HAVING Count(Ttulo) > 50;

    Esse exemplo seleciona os departamentos que tenham mais de 100 funcionrios.

    SELECT Departamento, Count([Departamento])FROM FuncionriosGROUP BY Departamento HAVING Count(Departamento) > 100;

    Exemplo de clusula ORDER BY

    As instrues SQL mostradas abaixo usam a clusula ORDER BY para classificar os registrosem ordem alfabtica e depois por categoria.

    Esse exemplo ordena os registros pelo sobrenome, em ordem descendente (Z-A).

    SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome DESC;

    Esse exemplo ordena, primeiro, por categoria ID e depois por nome do produto.

    SELECT CategoriaID, ProdutoNome, PreoUnit FROM ProdutosORDER BY CategoriaID, NomeProduto;

    43

  • 8/8/2019 42207430 Tutorial Oracle

    44/50

    O r a c l e

    Instruo INSERT INTO

    Adiciona um ou vrios registros a uma tabela. Isto referido como consulta anexao.

    Sintaxe

    INSERT INTO destino [IN bancodedadosexterno] [(campo1[, campo2[, ...]])]SELECT [origem.]campo1[, campo2[, ...]FROM expressodetabela

    Consulta anexao de um nico registro:

    INSERT INTO destino [(campo1[, campo2[, ...]])]VALUES (valor1[, valor2[, ...])

    A instruo INSERT INTO tem as partes abaixo:

    Parte Descriodestino O nome da tabela ou consulta em que os registros devem seranexados.bancodedadosexterno O caminho para um banco de dados externo. Para uma descrio do

    caminho, consulte a clusula IN.origem O nome da tabela ou consulta de onde os dados devem ser copiados.campo1, campo2 Os nomes dos campos aos quais os dados devem ser anexados, se

    estiverem aps um argumento destino ou os nomes dos campos dos quaisse deve obter os dados, se estiverem aps um argumento origem.

    expressodetabela O nome da tabela ou tabelas das quais registros so inseridos. Esteargumento pode ser um nico nome de tabela ou uma combinaoresultante de uma operao INNER JOIN, LEFT JOIN ou RIGHT JOINou de uma consulta gravada.

    valor1, valor2 Os valores para inserir em campos especficos do novo registro. Cada valor inserido no campo que corresponde posio do valor na lista: Valor1 inserido no campo1 do novo registro, valor2 no campo2 e assim pordiante. Voc deve separar os valores com uma vrgula e colocar oscampos de textos entre aspas (" ").

    Comentrios

    Voc pode usar a instruo INSERT INTO para adicionar um nico registro a uma tabelausando a sintaxe de consulta anexao de um nico registro como mostrado acima. Neste caso, seucdigo especifica o nome e o valor de cada campo do registro. Voc precisa especificar cada um doscampos do registro para os quais um valor deve ser designado e um valor para este campo. Quandovoc no especifica cada campo, o valor padro ou Null inserido nas colunas omitidas. Os registrosso adicionados no final da tabela.

    Voc tambm pode usar INSERT INTO para anexar um conjunto de registros de outra tabelaou consulta usando a clusula SELECT ... FROM como mostrado acima na sintaxe consultaanexao de vrios registros. Neste caso, a clusula SELECT especifica os campos paraacrescentar tabela destino especificada.

    44

  • 8/8/2019 42207430 Tutorial Oracle

    45/50

    O r a c l e

    A tabela de origem ou de destino pode especificar uma tabela ou uma consulta. Se umaconsulta for especificada, o programa principal de banco de dados do Microsoft anexa a qualquer e atodas as tabelas especificadas pela consulta.

    INSERT INTO opcional, mas quando includa, precede a instruo SELECT.Se sua tabela de destino contm uma chave primria, voc deve acrescentar valores nicos,

    no Null ao campo ou campos da chave primria. Caso contrrio, o programa principal de banco dedados do Jet no anexar os registros.

    Se voc anexar registros a uma tabela com um campo Counter e quiser numerar novamenteos registros anexados, no inclua o campo Counter em sua consulta. Inclua o campo Counter naconsulta se quiser manter os valores originais do campo.

    Use a clusula IN para anexar registros a uma tabela de outro banco de dados. Para acharquais registros sero anexados, antes de voc executar a consulta anexao, primeiro execute e

    veja os resultados de uma consulta seleo que use o mesmo critrio de seleo.

    Uma operao de consulta anexao copia os registros de uma ou mais tabelas em outra. Astabelas que contm os registros que voc anexa no so afetadas pela operao de consultaanexao.

    Em lugar de acrescentar registros existentes de outra tabela, voc pode especificar o valor decada campo em um nico registro novo usando a clusula VALUES. Se voc omitir a lista de campo,a clusula VALUES deve incluir um valor para cada campo na tabela; caso contrrio, um erroocorrer em INSERT. Use uma instruo adicional INSERT INTO com uma clusula VALUES paracada registro adicional que voc quiser criar.

    Exemplo de instruo INSERT INTO

    Esse exemplo seleciona todos os registros de uma tabela hipottica "Novos Clientes" e osadiciona tabela "Clientes" (quando no so designadas colunas individuais, os nomes das colunasdas tabelas SELECT devem corresponder exatamente aos da tabela INSERT INTO).

    INSERT INTO Clientes SELECT [Novos Clientes].*FROM [Novos Clientes];

    Esse exemplo cria um novo registro na tabela "Funcionrios"

    INSERT INTO Funcionrios (Nome,Sobrenome, Ttulo)VALUES ("Andr", "Pereira", "Estagirio");

    Esse exemplo seleciona todos os estagirios de uma tabela hipottica "Estagirios" que foramcontratados h mais de 30 dias e adiciona seus registros tabela "Funcionrios".

    INSERT INTO Funcionrios SELECT Estagirios.*FROM Estagirios WHERE DataContrato < Now() - 30;

    45

  • 8/8/2019 42207430 Tutorial Oracle

    46/50

  • 8/8/2019 42207430 Tutorial Oracle

    47/50

    O r a c l e

    Instruo DELETE

    Cria uma consulta excluso que remove registros de uma ou mais tabelas listadas na clusula FROMque satisfaz a clusula WHERE.

    Sintaxe

    DELETE [tabela.*]FROM tabelaWHERE critrio

    A instruo DELETE tem as partes abaixo:

    Parte Descriotabela.* O nome opcional da tabela da qual os registros so excludos.tabela O nome da tabela da qual os registros so excludos.critrio Uma expresso que determina qual registro deve ser excludo.

    Comentrios

    DELETE especialmente til quando voc quer excluir muitos registros. Para eliminar umatabela inteira do banco de dados, voc pode usar o mtodo Execute com uma instruo DROP.

    Entretanto, se voc eliminar a tabela, a estrutura perdida. Por outro lado, quando voc usaDELETE, apenas os dados so excludos. A estrutura da tabela e todas as propriedades da tabela,como atributos de campo e ndices, permanecem intactos.

    Voc pode usar DELETE para remover registros de tabelas que esto em uma relao umpor vrios com outras tabelas. Operaes de excluso em cascata fazem com que os registros dastabelas que esto no lado "vrios" da relao sejam excludos quando os registros correspondentesdo lado "um" da relao so excludos na consulta. Por exemplo, nas relaes entre as tabelasClientes e Pedidos, a tabela Clientes est do lado "um" e a tabela Pedidos est no lado "vrios" darelao. Excluir um registro em Clientes faz com que os registros correspondentes em Pedidos sejamexcludos se a opo de excluso em cascata for especificada.

    Uma consulta de excluso exclui registros inteiros e no apenas dados em camposespecficos. Se voc quiser excluir valores de um campo especfico, crie uma consulta atualizaoque mude os valores para Null.

    Importante

    Aps remover os registros usando uma consulta excluso, voc no poder desfazer aoperao. Se quiser saber quais arquivos foram excludos, primeiro examine os resultados de umaconsulta seleo que use o mesmo critrio e ento, execute a consulta excluso. Mantenha osbackups de seus dados. Se voc excluir os registros errados, poder recuper-los a partir dos seusbackups.

    47

  • 8/8/2019 42207430 Tutorial Oracle

    48/50

    O r a c l e

    Exemplo de instruo DELETE

    Esse exemplo exclui todos os registros de funcionrios cujo ttulo seja Estagirio. Quando aclusula FROM inclui apenas uma tabela, no necessrio indicar o nome da tabela na

    instruo DELETE.DELETE *FROM Funcionrios WHERE Ttulo = 'Estagirio';

    Subconsultas SQL

    Uma subconsulta uma instruo SELECT aninhada dentro de uma instruo SELECT, INSERT,DELETE ou UPDATE ou dentro de uma outra subconsulta.

    SintaxeVoc pode usar trs formas de sintaxe para criar uma subconsulta:

    comparao [ANY | ALL | SOME] (instruosql)expresso [NOT] IN (instruosql)[NOT] EXISTS (instruosql)

    Uma subconsulta tem as partes abaixo:

    Parte Descriocomparao Uma expresso e um operador de comparao que compara a expresso com o

    resultado da subconsulta.expresso Uma expresso para a qual o resultado definido da subconsulta procurado.instruosqlt Uma instruo SELECT de acordo com as mesmas regras e formato de qualquer outra

    instruo SELECT. Ela deve estar entre parnteses.

    Comentrios

    Voc pode usar uma subconsulta em vez de uma expresso na lista de campo de umainstruo SELECT ou em uma clusula WHERE ou HAVING. Em uma subconsulta, voc usa umainstruo SELECT para fornecer um conjunto de um ou mais valores especficos para avaliar asexpresses das clusulas WHERE ou HAVING.

    Use o predicado ANY ou SOME, que so sinnimos, para recuperar registros na consultaprincipal que satisfaam a comparao com quaisquer registros recuperados na subconsulta. Oexemplo abaixo retorna todos os produtos cujo preo unitrio maior que o preo de qualquerproduto vendido com um desconto de 25 por cento ou mais:

    SELECT * FROM Produtos WHERE PreoUnit > ANY(SELECT PreoUnit FROM PedidoDetalhes WHERE Desconto >= .25);

    48

  • 8/8/2019 42207430 Tutorial Oracle

    49/50

    O r a c l e

    Use o predicado ALL para recuperar apenas os registros na consulta principal que satisfaama comparao com todos os registros recuperados na subconsulta. Se voc mudou ANY para ALL noexemplo acima, a consulta retornaria apenas os produtos cujo preo unitrio fosse maior que o de

    todos os produtos vendidos com um desconto de 25 por cento ou mais. Isto muito mais restritivo.Use o predicado IN para recuperar apenas os registros na consulta principal para os quais

    alguns registros na subconsulta contm um valor igual. O exemplo abaixo retorna todos os produtoscom um desconto de 25 por cento ou mais:

    SELECT * FROM Produtos WHERE ProdutoID IN(SELECT ProdutoID FROM PedidoDetalhes WHERE Desconto >= .25);

    De maneira contrria, voc pode usar NOT IN para recuperar apenas os registros na consultaprincipal para os quais no existam registros com valores iguais na subconsulta. Utilize o predicadoEXISTS (com a palavra reservada NOT opcionalmente) em comparaes true/false para determinar

    se a subconsulta retorna algum registro.

    Voc tambm pode usar aliases de nomes de tabelas em uma subconsulta para fazerreferncia a tabelas listadas em uma clusula FROM fora da subconsulta. O exemplo abaixo retornaos nomes dos funcionrios cujos salrios sejam iguais ou superiores mdia de salrios de todos osfuncionrios na mesma funo. Para a tabela Funcionrios dada o alias "T1":

    SELECT Sobrenome, Nome, Ttulo, Salrio FROM Funcionrios AS T1WHERE Salrio >= (SELECT Avg(Salrio)FROM Funcionrios WHERE T1. T1.Ttulo = Funcionrios.Ttulo) Order by Title;

    No exemplo acima, a palavra reservada AS opcional. Algumas subconsultas so aceitas em

    consultas de tabela cruzada especialmente como predicados (as da clusula WHERE). Subconsultascomo sada (as da lista SELECT) no so aceitas em tabelas de referncia cruzada.

    Exemplos de subconsultas SQL

    Esse exemplo lista o nome, ttulo e salrio de todos os representantes de vendas cujossalrios sejam superiores aos de todos os gerentes e diretores.

    SELECT Sobrenome, Nome, Ttulo, Salrio FROM FuncionriosWHERE Ttulo LIKE "*Repr Vendas*" AND Salrio > ALL(SELECT Salrio FROM Funcionrios WHERE (Ttulo LIKE "*Gerente*")OR (Ttulo LIKE "*Diretor*"));

    Esse exemplo lista o nome e preo unitrio de todos os produtos cujo preo unitrio seja igualao do Licor de Cacau.

    SELECT NomeProduto, PreoUnit FROM ProdutosWHERE PreoUnit = (SELECT PreoUnit FROM [Produtos]WHERE NomeProduto = "Licor de Cacau");

    Esse exemplo lista a empresa e o contato de cada empresa de todos os clientes que fizerampedidos no segundo trimestre de 1995.

    49

  • 8/8/2019 42207430 Tutorial Oracle

    50/50

    O r a c l e

    SELECT NomeContato, NomeEmpresa, ContatoTtulo, Fone FROM ClientesWHERE ClienteID IN (SELECT ClienteID FROM PedidosWHERE DataPedido BETWEEN '1/04/95' AND '1/07/95');

    Esse exemplo lista os funcionrios cujo salrio seja maior que a mdia dos salrios de todosos funcionrios.

    SELECT Sobrenome, Nome, Ttulo, Salrio FROM Funcionrios T1WHERE Salrio >= (SELECT AVG(Salrio) FROM FuncionriosWHERE Funcionrios.Ttulo = T1.Ttulo) ORDER BY Ttulo;

    Esse exemplo seleciona o nome de todos os funcionrios que tenham registrado pelo menosum pedido. Isto tambm poderia ser feito com INNER JOIN.

    SELECT Nome, Sobrenome FROM Funcionrios AS EWHERE EXISTS (SELECT * FROM Pedidos AS O

    WHERE O.FuncionrioID = E.FuncionrioID);

    Altera o campo Efetuado do arquivo de servios para 2 caso o mesmo tenha parecer tcnicoda entidade encaminhanhamento diferente de nulo.

    UPDATE servico SET efetuado = 2WHERE numero_servico = ANY (SELECT servico.numero_servicoFROM servico INNER JOIN encaminhamentoON (servico.numero_servico = encaminhamento. numero_servico)AND (servico. ano_servico = encaminhamento.ano_servico)WHERE (((servico.efetuado) Is Null) AND ((encaminhamento.parecer_tecnico) Is Not Null))GROUP BY servico.numero_servico ORDER BY servico.numero_servico);