Você está na página 1de 116

Apostila de Banco de Dados v.4.

Banco de Dados

Prof. Flavio Rezende

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

1 2

Evoluo dos Sistemas de Informao........................................................................... 6 Introduo ....................................................................................................................... 7


2.1 2.2 2.3 Modelo Conceitual de Dados (MCD) ................................................................................ 7 Modelo Lgico de Dados (MLD) ....................................................................................... 7 Modelo Fsico de Dados (MFD) ......................................................................................... 7 Entidades ............................................................................................................................. 9
Especificaes ............................................................................................................................ 9 Eventos ou Ocorrncias ............................................................................................................ 10 Especificaes .......................................................................................................................... 10 A Dicionarizao dos Objetos Modelados................................................................................ 10 Regras Bsicas para a Dicionarizao de Objetos (Entidades/Classes).................................... 10 Requisitos a serem atendidos na dicionarizao ....................................................................... 10 Dependncia de Existncia ....................................................................................................... 11 Dependncia de Identificador ................................................................................................... 11 Atributos Descritivos ................................................................................................................ 11 Atributos Nominativos ............................................................................................................. 11 Atributos Referenciais .............................................................................................................. 11 Dicionarizao dos Atributos ................................................................................................... 12 Identificao dos Relacionamentos .......................................................................................... 12 Denominao dos Relacionamentos ......................................................................................... 12 Caracterizao dos Relacionamentos........................................................................................ 12 Grau de Cardinalidade do Relacionamento .............................................................................. 12 Relacionamentos incondicionais .............................................................................................. 13 Relacionamentos Condicionais................................................................................................. 13 Quanto Existncia Simultnea de Relacionamentos .............................................................. 14 Quanto Presena de Atributos................................................................................................ 15 Dicionarizao de Relacionamentos......................................................................................... 15 Estrutura de Generalizao e Especificao ............................................................................. 15 Especializaes Mutuamente Exclusivas (Categorias) ............................................................. 15 Especializao No-mutuamente Exclusivas (Papis).............................................................. 15 Nveis de Especializao .......................................................................................................... 16 Quando Utilizar a Estrutura de Generalizao-Especializao................................................. 16 Como Apresentar os Subgrupos Existentes .............................................................................. 16

Modelo Conceitual de Dados (MCD) ............................................................................. 7


3.2
3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8

3.3

Atributos............................................................................................................................ 11

3.3.1 3.3.2 3.3.3 3.3.4

3.4

Relacionamentos ............................................................................................................... 12

3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 3.4.9 3.4.10 3.4.11 3.4.12 3.4.13 3.4.14 3.4.15

Modelo Lgico de Dados (MLD) .................................................................................. 17


4.1 4.2 4.3 Passos para a Derivao do Modelo Lgico ................................................................... 17 Implementao do Modelo Relacional............................................................................ 17
Regras de Derivao ................................................................................................................. 18 Benefcios da Normalizao ..................................................................................................... 18 Primeira Forma Normal (1FN) ................................................................................................. 19 Segunda Forma Normal (2FN) ................................................................................................ 20 Terceira Forma Normal (3FN)................................................................................................. 21

4.2.1 4.3.1 4.3.2 4.3.3 4.3.4

Normalizao..................................................................................................................... 18

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 4.3.5

Derivao de Agregaes ......................................................................................................... 22 Restries de Domnio.............................................................................................................. 23 Restries de Integridade.......................................................................................................... 23 Restries de Implementao ................................................................................................... 24 Objetos bsicos de um SGBDR ................................................................................................ 24

4.4

Restries no Modelo Lgico ........................................................................................... 22

4.4.1 4.4.2 4.4.3 4.4.4

Modelo de Entidades e Relacionamentos (ER)............................................................ 27


5.1 5.2 5.3 5.4 5.5 5.6 Entidade............................................................................................................................. 27 Relacionamento................................................................................................................. 27 Cardinalidade.................................................................................................................... 28 Generalizao / Especializao :...................................................................................... 28 Entidade Fraca.................................................................................................................. 29 Agregao :........................................................................................................................ 30 Entidade............................................................................................................................. 31 Entidade Fraca.................................................................................................................. 31 Relacionamentos ............................................................................................................... 32 Especializao ................................................................................................................... 32 Agregao .......................................................................................................................... 33 Introduo ao SQL ........................................................................................................... 33
SQL*Plus.................................................................................................................................. 34 PL/SQL..................................................................................................................................... 36 Sintaxe de um bloco PL/SQL: .................................................................................................. 36 Alguns Comandos SQL: ........................................................................................................... 36 SELECT ................................................................................................................................... 36 Expresses Aritmticas............................................................................................................. 37 Colunas Sinnimas ................................................................................................................... 39 Operador de Concatenao ....................................................................................................... 39 Literais...................................................................................................................................... 40 Manuseando Valores Nulos...................................................................................................... 40 Prevenindo a Seleo de Linhas Duplicadas Clusula Distinct ............................................. 41 A clausula ORDER BY ............................................................................................................ 42 A Clausula WHERE ................................................................................................................. 43 O Operador BETWEEN ........................................................................................................... 44 O Operador IN.......................................................................................................................... 44 O Operador LIKE ..................................................................................................................... 44 Operador IS NULL................................................................................................................... 45 Pesquisando Dados com Mltiplas Condies ......................................................................... 47 Funes Alfanumricas ............................................................................................................ 49 Aninhamento de Funes ......................................................................................................... 53

Regras de converso do Modelo Conceitual (E-R) para o Modelo Lgico. ............... 31


6.1 6.2 6.3 6.4 6.5

Linguagem SQL. ........................................................................................................... 33


7.1
7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.1.6 7.1.7 7.1.8 7.1.9 7.1.10 7.1.11 7.1.12 7.1.13

7.2

Operadores SQL ............................................................................................................... 44

7.2.1 7.2.2 7.2.3 7.2.4

7.3 7.4

Expresses Negativas........................................................................................................ 45 Funes .............................................................................................................................. 48

7.3.1 7.4.1 7.4.2

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 7.4.3 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.4.9 7.4.10

Funes Numricas................................................................................................................... 53 Funes de Data........................................................................................................................ 56 Funes de Converso .............................................................................................................. 59 Funes que Aceitam Vrios Tipos de Entrada de Dados ........................................................ 63 Funes de Grupo..................................................................................................................... 65 A clusula GROUP BY ............................................................................................................ 66 A clausula HAVING ................................................................................................................ 67 A Ordem das clausulas na declarao SELECT. ...................................................................... 68 nica Varivel Substituvel...................................................................................................... 68 Duplo & para Variveis substituveis ....................................................................................... 69 O Comando DEFINE................................................................................................................ 70 O comando ACCEPT ............................................................................................................... 70 Comandos de Manipulao de Dados (DML) .......................................................................... 72 Alterando uma seqncia.......................................................................................................... 74 Eliminando uma seqncia ....................................................................................................... 74 Recuperando informaes sobre ndices: ................................................................................. 75 Tipos de Lock ........................................................................................................................... 75

7.5

Executando Pesquisas Padres com Variveis Substituveis ........................................ 68

7.5.1 7.5.2 7.5.3 7.5.4

7.6 7.7

Recuperando valores da base de dados........................................................................... 71 Seqncias ......................................................................................................................... 74

7.6.1 7.7.1 7.7.2

7.8 7.9 7.10

ndices ................................................................................................................................ 75 Controle de Concorrncia................................................................................................ 75 Declaraes .................................................................................................................... 76


Declaraes de Variveis.......................................................................................................... 76 Tipos de Dados PL/SQL........................................................................................................... 77 Subtype ..................................................................................................................................... 80 Atribuindo Valores s Variveis............................................................................................... 81 Escopo de Variveis ................................................................................................................. 81

7.8.1 7.9.1 7.10.1 7.10.2 7.10.3 7.10.4 7.10.5

7.11 7.12 7.13


7.13.1 7.13.2 7.13.3 7.13.4

Codificao de Comando SQL Dentro de PL/SQL.................................................... 82 Tratamento de Transaes ........................................................................................... 82 Estruturas de Controle ................................................................................................. 83
IF THEN ELSE .................................................................................................................. 83 WHILE-LOOP ......................................................................................................................... 84 FOR-LOOP............................................................................................................................... 84 LOOP........................................................................................................................................ 84

7.14
7.14.1 7.14.2 7.14.3 7.14.4 7.14.5

Cursores:........................................................................................................................ 84
Comandos de Manipulao do cursor:...................................................................................... 85 Close ......................................................................................................................................... 86 O Comando For para abrir Cursores:........................................................................................ 87 Atualizao na tabela da linha atual do cursor: ........................................................................ 87 Cursores Implcitos:.................................................................................................................. 87

7.15
7.15.1 7.15.2

Tratamento de Excees ............................................................................................... 88


Excees Predefinidas .............................................................................................................. 88 Excees Definidas pelo Usurio ............................................................................................. 89

Coloca uma linha no buffer, e mostra na tela. ..................................................................... 90


7.16
7.16.1 7.16.2

Subprogramas (Procedures e Functions).................................................................... 90


Parmetros ................................................................................................................................ 91 Procedures ................................................................................................................................ 91

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 7.16.3 7.16.4 7.16.5 7.16.6

Functions: ................................................................................................................................. 91 Executando subprogramas atravs do SQL* Plus: ................................................................... 91 Eliminando um subprograma:................................................................................................... 91 Anlise das dependncias: ........................................................................................................ 91

7.17
7.17.1 7.17.2 7.17.3

Packages......................................................................................................................... 92
Especificao ............................................................................................................................ 92 Body ......................................................................................................................................... 92 Execuo de Estruturas Pblicas de uma Package: .................................................................. 93

7.18
7.18.1 7.18.2

Triggers .......................................................................................................................... 93
Criao de triggers.................................................................................................................... 93 Triggers possveis para uma tabela:.......................................................................................... 93

Projeto fsico de Banco de Dados:.................................... Error! Bookmark not defined.


8.1 8.2 8.3 8.4 8.5 Criao de Tabelas ........................................................................................................... 98 Criao de Views............................................................................................................... 98 Criao de Stored Procedures :....................................................................................... 99 Criao de Functions :...................................................................................................... 99 Criao de triggers : ....................................................................................................... 100

9 10

Privilgios.................................................................................................................... 101 Exerccios................................................................................................................. 104


Modelo Conceitual e Lgico ....................................................................................... 104 SQL............................................................................................................................... 112 PLSQL ......................................................................................................................... 113 Banco de Dados Distribudo....................................................................................... 114 10.1 10.2 10.3 10.4

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

1 Evoluo dos Sistemas de Informao.


Nos anos 70 , o programa era o foco principal dos sistemas de informao. Dados e apresentao de telas para usurios, ficavam em segundo plano. Dependncia dos programas com relao aos dados armazenados.
P R O G R A M A

Usurio

Dados

O SGBD (Sistema Gerenciador de Banco de Dados) uma camada lgica entre os programas e os dados, tornando assim os programas independentes dos dados.
P R O G R A M A S G B D

Usurio

Dados

Programas Programas + Arquivos Banco de Dados Coleo de dados.

Programas + SGBD + Banco de Dados

Caractersticas do SGBD Relacional (tambm conhecidos como SGBDR). Linguagem SQL. Backup/Recovery. Segurana. Integridade. Controle de concorrncia de transaes. Desempenho.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

2 Introduo
2.1 Modelo Conceitual de Dados (MCD)

Define-se como Modelo Conceitual aquele em que os objetos, suas caractersticas e relacionamentos tm a representao fiel ao ambiente observado. Devemos representar os conceitos e caractersticas observados em um dado ambiente, voltando-nos simplesmente ao aspecto conceitual. Nesse nvel devem ser ignoradas quaisquer particularidades de implementao, bem como desconsiderada qualquer preocupao com qual ser o modo de implementao futura, permanecer imutvel.

2.2

Modelo Lgico de Dados (MLD)

Define-se como aquele em que os objetos, suas caractersticas e relacionamentos tm a representao de acordo com as regras de implementao e limitantes impostos por algum tipo de tecnologia. Esse modelo deve ser o modelo elaborado respeitando-se e implementando-se os conceitos tais como chave de acesso, controles de chaves duplicadas, itens de repetio (arrays), normalizao, ponteiros, headers, integridade referencial, entre outros.

2.3

Modelo Fsico de Dados (MFD)

aquele em que a representao dos objetos feita sob o foco do nvel fsico de implementao das ocorrncias, ou instncias das entidades e seus relacionamentos. Cada diferente SGBD poder definir um diferente modo de implementao fsica das caractersticas e recursos necessrios para o armazenamento e manipulao das estruturas de dados. No modelo fsico podem ser includos dois nveis de representao. O primeiro deles diz respeito s ocorrncias ou instncias, seus relacionamentos e disposio fsica dos elementos. Outro diz respeito alocao de espaos fsicos nos diversos nveis de agrupamento possveis: tabelas (arquivos), blocos, linhas (registros) e colunas (campos). Integrao da Arquitetura de Trs Nveis com a Abordagem E-R Uma integrao entre a abordagem de modelos conceitual, lgico e fsico e a proposta do grupo ANSI-X3-SPARK possvel se forem estabelecidos os nveis de projeto.

3 Modelo Conceitual de Dados (MCD)


3.1.1.1 3.1.1.2 Antes de mais nada, o qu uma tabela ?
Tabela ou Relao: Uma representao lgica da organizao dos dados dentro do SGBDR. uma tabela de valores, o seu nome e o nome das colunas, servem para auxiliar a interpretao do significado de seus valores. Valor : usado para representar 'alguma coisa'. a menor partcula de dados do modelo relacional, eles so indivisveis.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

Domnio : um conjunto de valores atmicos, de mesmo tipo. So usados para preencher os valores de uma coluna. ex: Nome char(40) : restringe a coluna Nome a ter seus valores dentro do domnio de no mximo 40 caracteres ou seja um nome de 50 caracteres no um nome vlido para este domnio. Linha ou Tupla : Representa uma linha da tabela, onde cada linha, representa uma coleo de valores.

Coluna ,atributo MATRICULA 01 02 03 04 ... NOME Z Maria Joo Margarida SALARIO 200,00 1000,00 800,00 150,00

Linha , Tupla

Valor Conceitos de Chave: Primary Key (PK) :Atributo ou conjunto de atributos de uma tabela que identificam univocamente uma linha. Toda Primary key deve ser minimal. Foreign Key (FK) : Atributo ou conjunto de atributos de uma tabela que referencia a chave primria em outra tabela, ou no caso do auto relacionamento, na mesma tabela. Unique Key(UK) : Atributo de uma tabela que tem todas as qualificaes para ser uma chave primria. OBS. Muitos autores representa a chave primria de uma tabela com as colunas sublinhadas, e as chaves estrangeiras com uma linha acima das colunas.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

Ex: FUNCIONARIOS(MATRICULA , NOME , SALARIO , CPF , DEPTO)

Ex: FUNCIONARIOS MATRICULA 01 02 03 04 ...

PK NOME Z Maria Joo Margarida SALARIO 200,00 1000,00 800,00 150,00

UK CPF 12999666 18765789 49555969 89993393 DEPTO 01 02 02 01

FK para DEPARTAMENTOS, ou seja, todos os valores desta coluna tem que existir na tabela de DEPARTAMENTOS na coluna da PK.

DEPARTAMENTOS DEPTO DESCRICAO 01 Recursos Humanos 02 Diretoria PK

3.1.1.3 Modelo E-R


A Abordagem Entidade-Relacionamento A tcnica de diagramao bastante simples e serve como meio de representao dos prprios conceitos por ela manipulados. Utiliza, basicamente, um retngulo para representar as entidades, um losango para representar os relacionamentos e bales para indicar e alocar os atributos.

3.2

Entidades

Identificao de Objetos (Entidades ou Classes) Representao grfica: Aluno

A estratgia proposta por Shlaer & Mellor, define que deveremos procurar reconhecer objetos, ou elementos individualizados, atravs da observao de cinco grandes grupos de elementos: - As coisas tangveis - As funes exercidas por elementos - Interaes

3.2.1 Especificaes
As classificaes propostas tm como objetivo servir como um meio de discernimento para casos no facilmente enquadrveis ou mesmo para verificao e validao do processo de modelagem.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

10

3.2.1.1.1

Coisas Tangveis

O grupo de Coisas Tangveis engloba todos os elementos que tenham existncia concreta. Funes Definimos como todo o tipo de papel, atribuio, classificao, capacitao, ou outra caracterstica qualquer que, para um dado elemento, especifique no sua existncia mas sua atuao no ambiente em que est inserido.

3.2.2 Eventos ou Ocorrncias


Alguns objetos, ou elementos individualizados, s conseguem ser percebidos, ou caracterizados, enquanto uma certa ao se desenrola. Em outras palavras, quando alguma ao, ou fato, acontece conseguimos definir caractersticas que os tornam materializveis. Enquanto programado, durante sua execuo ou aps encerrado, esse elemento caracteriza-se como um evento ou ocorrncia ao qual podemos fazer alguma referncia.

3.2.2.1.1

Interaes

Os chamados objetos-interao so resultantes da associao de objetos em funo de um processo executado. Os objetos-interao passam a existir de maneira individualizada, alm dos objetos que participam dessa interao.

3.2.3 Especificaes
So elementos que definem caractersticas de outros objetos. Representam especificaes que quando aplicadas ou seguidas daro origem a objetos.

3.2.4 A Dicionarizao dos Objetos Modelados


Cada um dos elementos identificados e representados dever, em um segundo instante, ser definido claramente para que, associando-se seu nome, sua representao e sua definio, sejamos capazes de ter o completo entendimento de conceito que estes procuram transmitir.

3.2.5 Regras Bsicas para a Dicionarizao de Objetos (Entidades/Classes)


Uma das principais tendncias quando passamos a dicionarizar um objeto nos referenciarmos a ele como um meio de armazenamento e no como o prprio objeto que ele representa.

3.2.6 Requisitos a serem atendidos na dicionarizao


Para dicionarizao de um objeto, ou entidade, deveremos ter em mente algo que satisfaa, seno todas, a grande parte das seguintes perguntas: - O que o elemento? - O que faz o elemento? - Para que serve? - O que engloba essa categoria de elementos? - O que est excludo dessa categoria

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 Quando algum passa a ser, ou deixa de ser, um elemento desse tipo? Sua permanncia nessa categoria imutvel?

11

Consideraes sobre Entidades Fortes e Entidades Fracas Essa caracterizao se d atravs da anlise de existncia de duas condies bsicas: - Dependncia de existncia - Dependncia de identificador Dizemos que uma entidade fraca se um desses dois tipos de dependncia se verificar entre uma entidade A e uma entidade B.

3.2.7 Dependncia de Existncia


Se B depender de A para existir, teremos em B uma entidade fraca, enquanto que A, se no depender de ningum para existir, ser considerada, ser considerada uma entidade forte.

3.2.8 Dependncia de Identificador


Esse segundo critrio de definio de entidades fortes e entidades fracas, tem sua importncia reconhecida sob o ponto de vista de projeto lgico, onde as chaves identificadoras, utilizadas como diferenciadores entre instncias dos elementos, ou como mtodo de endereamento de registros, passando a ter papel vital durante o processo de projeto de estruturas de dados.

3.3

Atributos

O Papel dos Atributos Ao observarmos objetos em um ambiente, estaremos, na verdade, reconhecendo tais elementos atravs da identificao de suas caractersticas prprias. Essas caractersticas, inerentes a cada um desses objetos, sero, em princpio, comuns a todos os objetos, ou elementos individualizados, pertencentes a um mesmo conjunto. Classificao dos Atributos quanto a sua finalidade Aps termos identificado os atributos de cada um dos objetos, podemos, sob o ponto de vista de classificao quanto a sua finalidade, enquadra-los em trs grandes grupos:

3.3.1 Atributos Descritivos


Todo e qualquer atributo que seja capaz de demonstrar, ou representar, caractersticas formadoras, ou pertencentes, a um objeto poder vir a ser enquadrado como descritivo.

3.3.2 Atributos Nominativos


Engloba todos aqueles atributos que, alm de cumprirem a funo de descritivos, tambm servem como definidores de nomes ou rtulos de identificao aos objetos aos quais pertencem. Qualquer atributo que possa identificar um objeto, chamado de Atributo Nominativo.

3.3.3 Atributos Referenciais


Os Atributos classificados como Referenciais so aqueles que no pertencem ao objeto onde esto alocados, mas fazem algum tipo de citao, ou ligao, desse objeto com um outro objeto.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

12

3.3.4 Dicionarizao dos Atributos


A Dicionarizao dos Atributos identificados nos objetos por ns observados , complementarmente dicionarizao dos prprios objetos e entidades, o nico modo efetivo de caracterizao do universo observado. A Dicionarizao deve procurar trazer ao conhecimento pblico toda e qualquer informao que seja de valia para o processo de compreenso e unificao de conceitos.

3.4

Relacionamentos

3.4.1 Identificao dos Relacionamentos


Atravs do mapeamento dos relacionamentos estaremos sendo capazes de demonstrar como um objeto se comporta em relao aos demais, qual seu grau de dependncia de outros objetos, qual a associao de dados existentes entre eles, entre outros fatores. Devemos estar atentos para que o mapeamento desses relacionamentos possa agregar todas as caractersticas semnticas existentes em um certo tipo de associao. Se um Relacionamento mapeado espelha a realidade, ele poder envolver quaisquer tipos ou instncias de objetos. Dois tipos bsicos de Relacionamentos: 1- Relacionamentos entre instncias de objetos de diferentes tipos associa instncias de um objeto de um tipo a outras de outro tipo. 2- Relacionamentos entre instncias de um mesmo tipo de objeto esse tipo de relacionamento caracteriza um caso especial onde no papel de objetos formadores, ou participantes, do relacionamento encontraremos o mesmo tipo de objeto.

3.4.2 Denominao dos Relacionamentos


No processo de reconhecimento e identificao dos relacionamentos existentes entre os objetos devemos buscar uma denominao que represente o conceito observado. Essa denominao ser, do ponto de vista semntico e conceitual, extremamente importante para a correta construo do modelo.

3.4.3 Caracterizao dos Relacionamentos


Um relacionamento demonstra uma associao entre objetos, de igual ou diferentes tipos. Esses Relacionamentos tm, todavia, caractersticas diversas que devem ser observadas e mapeadas. A Caracterizao dos Relacionamentos dever ser feita baseada no atendimento de alguns requisitos: 1- Grau, ou Cardinalidade, do Relacionamento; 2- Nmero de elementos que participam do relacionamento; 3- Condio de participao dos elementos no relacionamento; 4- Condio de estabelecimento do relacionamento.

3.4.4 Grau de Cardinalidade do Relacionamento


Durante o processo de reconhecimento e entendimento de um relacionamento, estaremos sempre nos defrontando com regras de estabelecimento das associaes entre os elementos, extradas do prprio

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

13

ambiente observado. Em muitos casos, uma regra que seja verdadeira em um ambiente X observado poder no ser verdadeira em outro ambiente Y. Processo para a Definio e Notao de um Relacionamento Junto ao elemento que representa o relacionamento, estaremos representando o grau de associao, ou cardinalidade. Possibilidades de Estabelecimento de Graus de relacionamento Deveremos enquadrar os relacionamentos analisados em trs grandes grupos, os quais, para fins de modelagem, cumprem a total finalidade de expressar a semntica de associao entre os elementos: - 1:1 (Um para Um) Um elemento do tipo A s se relaciona com um elemento do tipo B, e viveversa; - 1:N (Um para Muitos) Apesar de um elemento do conjunto A poder se associar a N elementos do conjunto B, o contrrio no verdadeiro, cada elemento do conjunto B s poder estar associado a um elemento do conjunto A; - M:N (Muitos para Muitos) Um elemento qualquer de um conjunto A pode se associar a nenhum, 1 ou vrios elementos do conjunto B, e vice-versa. Mudanas na Notao de Relacionamentos M:N Algumas notaes acabam por induzir o modelador para que, se o relacionamento for de grau 1:1 ou grau 1:N, seja utilizada uma representao e se o grau do relacionamento for M:N seja utilizada outra. Isso deve-se ao fato de essas notaes estarem bastante orientadas aos modelos lgicos e no aos modelos conceituais. Nmero de Elementos que participam do Relacionamento Um Relacionamento pode se estabelecer entre dois ou mais elementos, e no somente, no mximo, dois elementos. Em Relacionamentos Ternrios, Quaternrios ou de maiores graus podem estar mascarando um objeto no percebido, o qual concentra sobre si relacionamentos com os demais. A estrutura necessria para a derivao de um relacionamento Ternrio a Agregao. Presena dos Elementos no relacionamento Outro tipo de conceito que deve ser manipulado quando se tratam os relacionamentos entre os objetos a obrigatoriedade ou no da participao dos elementos nas associaes passveis de serem estabelecidas. Alguns elementos de um dado conjunto A podem no participar em nenhuma associao com elementos de um conjunto B. Do mesmo modo, qualquer um dos elementos do conjunto B pode no estabelecer associao com algum elemento do conjunto A.

3.4.5 Relacionamentos incondicionais


Nos Relacionamentos Incondicionais no ser denotado nenhum tipo de opcionalidade quanto participao de elementos nas associaes. Nesse tipo de representao precisaremos de informaes adicionais para reconhecer se o relacionamento sempre segue o grau descrito (1:1, 1:N, M:N), ou se, por omisso, existem regras de exceo no qualificadas.

3.4.6 Relacionamentos Condicionais

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

14

Nesse tipo de representao, estaremos, graficamente, demonstrando quando um ou outro elemento permite a ausncia de associaes. Deveremos expandir o conceito de grau do relacionamento e pensar em dois tipos de grau: Mnimo e Mximo. Grau Mximo a determinao de relacionamentos como associaes 1:1, 1:N e M:N. Ou seja, qual o menor valor possvel de participao dos elementos do conjunto A e B no relacionamento.

3.4.7 Quanto Existncia Simultnea de Relacionamentos


Essa caracterstica leva-nos a uma situao na qual ser preciso definir quando a existncia de uma associao impacta ou impede a existncia de outra. Podemos caracterizar trs tipos de associaes entre objetos: - Relacionamentos Independentes Agrupa todo e qualquer relacionamento que possa vir a ser estabelecido sem que haja necessidade de avaliao simultnea de outro relacionamento; - Relacionamentos Contingentes Aqueles que, tendo dependncia uns com os outros, impem o estabelecimento simultneo de associaes entre os vrios elementos envolvidos. - Relacionamentos Mutuamente Exclusivos Se a associao de um elemento for estabelecida atravs de um dos relacionamentos, no poder ser estabelecida pelos demais.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

15

3.4.8 Quanto Presena de Atributos


Durante o processo de modelagem, iremos nos defrontar com situaes nas quais deveremos manipular informaes (dados) que pertenam associao dos objetos do ambiente observado. Isso far com que seja necessrio expandir nosso entendimento sobre o mapeamento de atributos e de relacionamentos. Classificao dos Relacionamentos: - Com Atributos tem um nome, um significado, um grau mnimo e mximo, pode ser independente, contingente, mutuamente exclusivo, e adicionalmente, possui dados a serem manuseados. - Sem Atributos se estabelece entre elementos de dois, ou mais, conjuntos e para o qual no so identificadas informaes a serem mantidas ou mapeadas. Mudanas na Representao em Funo de Relacionamentos com Atributos Outro motivo que tem levado os modeladores a j no nvel conceitual terem de criar estruturas do tipo Entidade para espelhar relacionamentos o fato de o relacionamento conter atributos a serem mapeados.

3.4.9 Dicionarizao de Relacionamentos


Para que realmente seja entendido o papel de um relacionamento, muitas vezes ser necessrio agregar algum tipo de informao adicional sobre o relacionamento estabelecido entre as entidades. O conhecimento da cardinalidade, utilizando-se graus mnimos e mximos, e a utilizao de nomes significativos podem ajudar mas, freqentemente, no so suficientes para o completo entendimento dos modelos. Elementos de Caracterizao Semntica Adicionais Qualquer modelo poderia ser construdo com um mnimo suficiente de semntica baseado nos conceitos de entidades, atributos e relacionamentos. Com o passar do tempo, novas caractersticas semnticas passaram a demonstrar ser necessrias para o completo entendimento dos modelos.

3.4.10 Estrutura de Generalizao e Especificao


O principal objetivo do processo de abstrao e identificao dos objetos reconhecer agrupamentos e distines entre conjuntos de objetos identificados. Entretanto, nem sempre a separao de instncias desses objetos, ou elementos, se dar por conjuntos estritamente distintos.

3.4.11 Especializaes Mutuamente Exclusivas (Categorias)


A partir da observao e identificao dos elementos e subconjuntos existentes em um conjunto, sempre que um elemento do conjunto global, pertencer a um dos subconjuntos, no poder pertencer simultaneamente, a outro.

3.4.12 Especializao No-mutuamente Exclusivas (Papis)


Caracterizar, especificamente, se um elemento pertence a uma especificao com ou sem exclusividade dever ser o objetivo do processo de investigao das regras estabelecidas pelo ambiente.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

16

3.4.13 Nveis de Especializao


Uma caracterstica, que podemos encontrar, quanto formao de subconjuntos especializados, a da existncia de diferentes nveis de agrupamento. Partindo de um conjunto global, poderemos estabelecer um primeiro nvel de subconjuntos e, dentro desses, voltar a estabelecer novos subconjuntos.

3.4.14 Quando Utilizar a Estrutura de Generalizao-Especializao


Como regras prticas para definir se uma especializao deve ou no ser explicitada no modelo, devemos avaliar os seguintes passos: - Regra 1: Existe algum atributo que seja aplicvel a somente um subconjunto de elementos e no a todos? Se sim, ento desejvel a criao da especializao. - Regra 2: Existe algum relacionamento que seja aplicvel a somente um subconjuntos de elementos e no a todos? Se sim, ento desejvel a criao da especializao. - Regra 3: No estaremos poluindo o modelo com a insero de detalhes desnecessrios? No, no estaremos. Ento possvel a criao da especializao. - Regra 4: A finalidade de nosso modelo procurar incorporar o mximo de elementos grficos para que a compreenso no dependa de anlise de elementos complementares, tais como dicionrio de dados, documentos, anexos? Sim, . Ento, possvel a criao da especializao. Essas regras nos levam a ter duas situaes distintas: 1- A especializao dever ser explicitada; 2- A especializao pode ser explicitada.

3.4.15 Como Apresentar os Subgrupos Existentes


Uma habilidade est disponvel para ser utilizado junto estrutura de Generalizao-Especializao: a definio dos critrios. A partir desse critrio teremos, ento , a formao dos subgrupos pela diviso dos elementos pertencentes ao conjunto global. Utilizando a Estrutura de Gen-Espec em Auto-Relacionamentos A utilizao da estrutura de Generalizao-Especializao pode ser um recurso bastante interessante para acrescentar semntica ao casos de auto-relacionamento. Um auto-relacionamento se d quando diferentes instncias de um mesmo tipo de objeto se relacionam entre si.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

17

Modelo Lgico de Dados (MLD)


Passos para a Derivao do Modelo Lgico

4.1

Vimos que a gerao de um modelo lgico deveria ser antecedida pela obteno de um modelo conceitual. A grande vantagem dessa proposta, que a partir do modelo conceitual gerado, podemos aplicar regras predefinidas em funo da tecnologia a ser empregada e , assim, obter os modelos necessrios. Podemos definir que o processo de obteno de um modelo lgico a partir de um modelo conceitual segue os seguintes passos: 1- Obter o modelo conceitual; 2- Definir o tipo de implementao; 3- Aplicar as regras de derivao especficas; 4- Adaptar o modelo s necessidades. Adaptaes no Modelo Lgico Derivado Visa a criar estruturas de implementao que atendam s reais expectativas das aplicaes. Conceitos Utilizados na Derivao de Modelos Relacionais A viso bsica estabelecida era de que registros de um arquivo assemelhavam-se a tuplas de uma relao. Uma relao, por sua vez, assemelhava-se a uma arquivo onde cada uma de suas tuplas, contendo elementos de domnios distintos, agregados de forma predefinida, podia ser entendida com um registro e seus campos.

4.2

Implementao do Modelo Relacional


Conceitos 1- Chave Candidata e Chave Primria A No-existncia de elementos repetidos em uma tabela uma necessidade bsica a ser cumprida para o estabelecimento de um modelo relacional realmente aderente aos conceitos de relao, foi introduzido o conceito de Chave Identificadora da tabela. Identificar domnios nos quais sabemos que a existncia de valores instanciados no ser repetida, podemos eleger esses domnios, ou colunas, como Candidatas a Chave. Basta que exista mais de um domnio que apresente a caracterstica de no repetir seus valores durante as instanciaes para todas as linhas da tabela. Dentre essas vrias colunas deveremos escolher uma e elegela como Chave Identificadora ou Chave Primria. 2- Chave Estrangeira Uma Chave Estrangeira recebe esse nome para denotar algumas caractersticas importantes: - Ela uma chave, portanto, identifica de modo nico uma tupla; - Ela no est em seu local original, mas sim em um local para onde foi migrada; - Ela tem um local de origem e l possui suas caractersticas originais ( uma chave primria). Uma Chave Estrangeira uma chave primria de uma tabela que aparece repetida em outra. 3- Domnios de Atributos Existe um conjunto de valores distintos que podem ser atribudos a uma coluna. Entretanto, sabemos que pela diferente natureza de cada uma das colunas poderemos ter diferentes valores sendo vlidos s instanciaes.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

18

4.2.1 Regras de Derivao


O processo de obteno de um modelo relacional baseado na execuo de trs atividades distintas: - Normalizao das Estruturas de Dados; - A Derivao de Estruturas de Agregao e Generalizao-Especializao; - A Derivao de Relacionamentos.

4.3

Normalizao
Quando os pontos passam a estar claros, a ento passamos a efetivamente encarar o processo de normalizao como uma alavanca para o processo de construo de banco de dados. A Normalizao no um processo com finalidade restritiva mas sim com carter organizativo. A Normalizao pode ocorrer em trs instantes distintivos: 1- Durante o processo de concepo do modelo conceitual; 2- Durante a derivao do modelo lgico; 3- Aps a derivao do modelo lgico. Normalizao durante o processo de concepo do Modelo Conceitual O grau de normalizao que ele pode apresentar depender de vrios fatores como, por exemplo: - Abrangncia do Modelo Quanto mais abrangente for um modelo, mais chances, caso ele tenha sido adequadamente concebido, haver de que ele tenha um baixo grau de normalizao. - Facilidade de abstrao e compreenso O correto entendimento dos elementos presentes em um ambiente a ser modelado poder nos levar mais facilmente concepo de um modelo normalizado. - Conhecimento prvio do ambiente O fato de que j temos conhecimento prvio do ambiente a ser modelado, e assim do prprio resultado a ser obtido, tanto no nvel conceitual como no nvel lgico, nos introduzir a previamente enxergar o ambiente de modo normalizado. Normalizao durante a derivao do Modelo Lgico Caso tenha concebido seu modelo conceitual e agora pretenda transforma-lo em um ambiente lgico para implementao em ambiente relacional, voc dever ter certeza de que ele respeita os preceitos da tecnologia relacional. Normalizao aps o Processo de Derivao do Modelo Lgico Caso voc execute o processo de normalizao em um dos outros dois instantes, acabar por criar tabelas cuja estrutura no est normalizada, o que resultar em deficincias e anomalias de projeto que, mais cedo ou mais tarde, tero de sofrer os ajustes necessrios.

4.3.1 Benefcios da Normalizao


1- Estabilidade do Modelo Lgico Por estabilidade entendemos a capacidade de um modelo manterse inalterado face a mudanas que venham a ser percebidas ou introduzidas no ambiente que tenha sido modelado. 2- Flexibilidade Tanto de processos como de utilizao de estruturas de dados. Capacidade de adaptao a demandas diferenciadas, a expanso e reduo, a omisso ou presena, etc. 3- Integridade As estruturas de dados obtidas pelo processo de modelagem necessitam de recursos para que os dados a serem nelas armazenados possam ter qualidade. 4- Economia O aspecto economia, quando se aborda o tema normalizao, tem sido visto, basicamente, sob o prisma da economia de espao para armazenamento.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

19

5- Fidelidade ao Ambiente Observado Representao de um ambiente observado, atravs de um modelo, deve procurar retratar, independentemente do grau de abstrao, as caractersticas observadas, assim como elas efetivamente so.

4.3.2 Primeira Forma Normal (1FN)


A definio para a primeira forma normal, assim como para as demais, bastante formal e rigorosa. No poderia e nem deveria ser diferente. Como esses processos agem sobre estruturas relacionais e foram definidas por pessoas ligadas ao ambiente matemtico, herdaram predominantemente o formalismo presente nessas reas. Isso bom, por certo lado, pois torna inequvoca sua interpretao. Entretanto por outro lado, temos percebido que boa parte da dificuldade de entendimento, no que diz respeito a formas normais, advm, justamente de dificuldade em traduzir o formalismo para termos do dia-a-dia. Definio da Primeira Forma Normal Diz-se que um modelo est na primeira forma normal se: Est integrado por tabela; As linhas da tabela so unvocas; As linhas no contm itens repetitivos; Os atributos so atmicos; Os atributos no contm valores nulos.

... As linhas da tabela so unvocas Tambm quando mostramos os conceitos envolvidos no ambiente relacional, falamos sobre a obteno de identificadores nicos para uma tabela visando assegurar a diferenciao entre duas linhas de uma tabela. ... As linhas no contm itens repetitivos Grupos repetitivos so estruturas de dados artificiais (vetores) criadas para facilitar o manuseio de ocorrncias repetitivas de elementos de dados. ... Os atributos so atmicos Estruturas de agrupamento de itens de dados tornaram-se bastante comuns junto linguagem tais como o COBOL.

... Os atributos no contm valores nulos A definio da 1FN impondo a no existncia de valores nulos era historicamente, uma restrio bastante clara. Seguindo-se definio formal de uma relao no deveramos, realmente, ter um domnio sem instanciao de valor.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

20

Do ponto de vista prtico atual, no h mais restrio quanto existncia de valores nulos em colunas de uma tabela para que ela esteja na primeira forma normal (1FN).

Processo para obteno da Primeira Forma Normal (1FN) Definir chaves candidatas e escolher a chave primria da tabela Esse passo que em um primeiro instante parece trivial, pode nos levar a uma srie de consideraes de ordem prtica. Em princpio, a escolha da chave da tabela deve ser feita observando-se os atributos existentes na tabela e escolhendo-se um ou mais deles para que concatenados possam servir como meio de diferenciao entre luma linha e outra (funo bsica da chave primria). Transformar atributos compostos em atmicos Esse passo bastante simples e implica poucas decises. Atributos compostos, que claramente tenham elementos distintos em sua estrutura, devero ser separadas.

Em cada tabela eliminar grupos repetitivos gerando novas tabelas, uma para cada ocorrncia de Item Repetitivo, mantendo os valores dos demais itens A execuo dessa atividade, isoladamente, poder nos parecer bastante estranha. Ao olharmos a Estrutura tabular que temos antes e depois dessa atividade, seremos levados a acreditar que tnhamos antes uma estrutura bem melhor do que depois de sua execuo.

4.3.3 Segunda Forma Normal (2FN)


O intuito da segunda forma normal (2FN) avanar, ainda mais na direo de uma estrutura de dados que no contenha anomalias. Podero existir casos onde somente aplicando-se as regras da primeira forma normal j venhamos a obter uma estrutura acabada. O que isso significa? Que na verdade, nossa tabela j est normalizada, naturalmente, nas segunda e terceira formas normais. Para constatar isso, teremos de tentar aplicar regras da segunda e terceira formas normais da tabela. Se verificarmos que no existem as caractersticas indicadas pela segunda e terceira forma normais da tabela, ento teremos comprovado sua normalizao natural. Muitas vezes bastar que tenhamos aplicado as regras da segunda forma normal sobre uma tabela para que ela tambm j esteja normalizada na terceira forma normal. Processo para obteno da Segunda Forma Normal (2FN) 1. 2. 3. Definir as colunas que no participaram da chave primria da tabela; Para cada uma das colunas identificadas, analisar se seu valor determinado por parte ou pela totalidade da chave; Para as colunas dependentes parcialmente da chave Criar novas tabelas onde a chave primria ser a coluna da chave original que determinou o valor da coluna;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 Excluir da tabela original as colunas dependentes parcialmente da chave.

21

4.3.4 Terceira Forma Normal (3FN) Visando a transformar a estrutura de dados obtidas at a segunda forma normal em uma estrutura isenta das anomalias constatadas, deveremos buscar a terceira forma normal.

Definio da Terceira Forma Normal Uma tabela est na terceira forma normal se est na 2FN, e se nenhuma coluna no pertencente chave fica determinada transitivamente por esta.

Processo para obteno da Terceira Forma Normal (3FN) 1. 2. 3. Identificar as colunas que no participam da chave primria da tabela; Para cada uma das colunas identificadas, analisar se seu valor determinado por alguma outra coluna no pertencente chave; Para as colunas dependentes transitivamente da chave: Criar novas tabelas onde a chave primria ser a coluna que determinou o valor da coluna analisada. Agregar a essas tabelas as colunas dependentes transitivamente. Excluir da tabela de origem as colunas dependentes transitivamente das chaves mantendo, porm, a coluna determinante da transitividade na tabela.

Derivao de Relacionamentos O tratamento dos relacionamentos, estruturas de Generalizao-Especializao e agregao tambm dever ser feito durante o processo de derivao. Relacionamento 1:1 sem Atributos O caso mais elementar de relacionamento entre duas entidades o de cardinalidade 1:1. Dentro desse tipo de relacionamento, por sua vez, o caso mais freqente de ser encontrado o de relacionamento 1:1 sem atributos. Relacionamento 1:1 com Atributos

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

22

A existncia de relacionamentos 1:1 com atributos no algo muito comum. Poderamos at dizer que , realmente, um rigor extremo do projeto conceitual. Entretanto, como no nvel conceitual eles podero existir, apresentando 3 mtodos para deriva-los.

Relacionamentos M:N com ou sem Atributos Para a derivao dos relacionamentos M:N, independentemente da existncia ou no de atributos nesse relacionamento, deveremos aplicar uma mesma estratgia. Essa estratgia ser baseada no fato de que se um relacionamento M:N representa a interseo dos elementos de um conjunto A com um conjunto B, ento deveremos representar fisicamente os possveis pares formados pela agregao dos elementos de A e B. Derivao de Estruturas de Generalizao-Especificao O processo de derivao de uma estrutura de Generalizao-Especificao no nos levar diretamente a um modelo lgico para a implementao. Ele na verdade, nos fornecer um novo modelo conceitual simplificado onde a estrutura, antes existente, ser substituda, simplesmente, por entidades e relacionamentos comuns. Estaremos substituindo a notao especial utilizada para representar essa estrutura por elementos comuns (entidade e relacionamentos) e, aps isso, aplicando sobre eles as mesmas regras de derivao j vistas. A partir desse ponto teremos obtido os elementos lgicos resultantes da derivao. Durante o processo de derivao, poderemos adotar quatro diferentes estratgias para tratar essas estruturas: 1. 2. 3. 4. Criar uma tabela para a entidade generalizada e uma tabela para cada entidade especializada; Criar somente uma tabela para a entidade generalizada e migrar todos os atributos e relacionamentos especializados para esta tabela; Criar somente tabelas para as entidades especializadas e migrar todos os atributos e relacionamentos generalizados para cada uma dessas tabelas; Utilizar as estratgias 3 e 4 de maneira combinada, migrando atributos e relacionamentos das entidades especializadas para entidade generalizada e/ou vice-versa.

4.3.5 Derivao de Agregaes


A agregao foi um elemento introduzindo no modelo conceitual para representar de modo mais claro uma relao no-binria. O resultado obtido foi um elemento com caractersticas de entidade e de relacionamento simultaneamente. Para deriva-lo iremos tratar primeiramente seu aspecto ligado ao relacionamento e, depois, o aspecto ligado entidade.

4.4

Restries no Modelo Lgico

O assunto restrio ser tratado sob trs aspectos bastante distintos. So eles:

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

23

Restries de Domnio; Restries de Integridade; Restries de Implementaes;

4.4.1 Restries de Domnio


A preocupao com restries de domnios, para colunas de uma tabela, um trabalho final executado durante a fase de definio dessas tabelas atravs da linguagem DDL de um SGBD especfico. Dentre as restries de domnio que devemos tratar esto: O tipo de dado da coluna; O tipo de representao interna escolhida para o dado; As caractersticas conceituais de presena ou no desse dado; A especificao explcita de intervalos para domnios contnuos; A especificao explcita de um conjunto de valores par domnios discretos; A definio de alguns tipos especiais de dados.

4.4.2 Restries de Integridade


O aspecto relativo restries de integridade no afetar diretamente a atribuio de valores isoladamente em uma linha de uma coluna. Normalmente estar envolvendo diferentes linhas da mesma tabela ou de tabelas diferentes. Em alguns casos ter a funo de estabelecer (implementar) no modelo lgico algumas das restries tecnolgicas do modelo relacional e outras vezes, simplesmente, ter a funo de manter a integridade (fidelidade,correteza, coeso, etc...) entre os dados armazenados no banco de dados.

Dentre as restries de integridade que devemos tratar esto: A definio de unicidade de valores em certas colunas das tabelas A restrio de referncia de uma chave estrangeira a um valor de chave primria inexistente; A restrio de referncia de uma chave estrangeira a uma coluna ou composio de colunas, de uma chave primria inexistente; A referncia de uma chave estrangeira a uma tabela inexistente; A excluso de ocorrncias (tuplas) em modo cascata em estruturas tipo hierarquia ; A alterao de ocorrncias (tuplas) em modo cascata em estruturas do tipo hierarquia ; A manuteno de sincronismo entre tabela e os ndices da tabela.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

24

4.4.3 Restries de Implementao


O tratamento das restries de implementao dever ocorrer j durante a fase de derivao de modelo lgico. As decises sobre quais estratgias utilizar durante o processo de derivao de relacionamentos e das estruturas de agregao e generalizao-especializao dependero das restries de implementao impostas pelo SGBD que se esteja utilizando. Dentre as restries de implementao que possivelmente sero encontradas esto: A existncia de itens de repetio; Implementao direta ou manuseio transparente de estruturas de generalizao-especializao.

4.4.4 Objetos bsicos de um SGBDR


Tabela. ndice. View. Stored Procedure. Trigger. Tabela ou Relao: Uma representao lgica da organizao dos dados dentro do SGBDR. uma tabela de valores, o seu nome e o nome das colunas, servem para auxiliar a interpretao do significado de seus valores. Valor : usado para representar 'alguma coisa'. a menor partcula de dados do modelo relacional, eles so indivisveis. Domnio : um conjunto de valores atmicos, de mesmo tipo. So usados para preencher os valores de uma coluna. ex: Nome char(40) : restringe a coluna Nome a ter seus valores dentro do domnio de no mximo 40 caracteres ou seja um nome de 50 caracteres no um nome vlido para este domnio. Linha ou Tupla : Representa uma linha da tabela, onde cada linha, representa uma coleo de valores.

Coluna ,atributo MATRICULA 01 02 03 04 ... NOME Z Maria Joo Margarida SALARIO 200,00 1000,00 800,00 150,00 Valor

Linha , Tupla

Conceitos de Chave: Primary Key (PK) :Atributo ou conjunto de atributos de uma tabela que identificam univocamente uma linha. Toda Primary key deve ser minimal.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

25

Foreign Key (FK) : Atributo ou conjunto de atributos de uma tabela que referencia a chave primria em outra tabela, ou no caso do auto relacionamento, na mesma tabela. Unique Key(UK) : Atributo de uma tabela que tem todas as qualificaes para ser uma chave primria. OBS. Muitos autores representa a chave primria de uma tabela com as colunas sublinhadas, e as chaves estrangeiras com uma linha acima das colunas. Ex: FUNCIONARIOS(MATRICULA , NOME , SALARIO , CPF , DEPTO)

Ex: FUNCIONARIOS MATRICULA NOME 01 Z 02 Maria 03 Joo 04 Margarida ...

PK SALARIO 200,00 1000,00 800,00 150,00

Chave Candidata CPF 12999666 18765789 49555969 89993393 DEPTO 01 02 02 01 FK para DEPARTAMENTOS, ou seja, todos os valores desta coluna tem que existir na tabela de DEPARTAMENTOS na coluna da PK.

DEPARTAMENTOS DEPTO DESCRICAO 01 Recursos Humanos 02 Diretoria PK

ndices : um conjunto de colunas da tabela, que so ordenadas visando uma maior performance nas consultas. OBS: O Banco de Dados Relacional permite a recuperao de um valor de qualquer coluna, independente da existncia de ndices para a coluna. View : Restringe o acesso do usurio aos dados. Ex: Pode-se restringir o acesso do usurio a coluna de SALARIO. FUNCIONATIOS_V01 MATRICULA NOME 01 Z 02 Maria 03 Joo 04 Margarida ... CPF 12999666 18765789 49555969 89993393 DEPTO 01 02 02 01

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

26

Stored Procedure : Um programa escrito em SQL que pode ser executado por uma aplicao, a diferena que o processamento ser executado no servidor. Trigger: Um programa escrito em SQL que est obrigatoriamente associado a pelo menos um evento(inserso, alterao ou excluso de linhas) em uma tabela, e ser executado de acordo com este evento. O trigger usado para implementar restries de integridade.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

27

5 Modelo de Entidades e Relacionamentos (ER).


5.1 Entidade
Representa um objeto ou um conceito do mundo real. Ex: Aluno , disciplina , curso , funcionrio e etc... Representao grfica: Aluno

Atributo Representa uma caracterstica da entidade, uma informao sobre a entidade. Ex: No caso de uma entidade aluno, podemos citar como atributo a sua matrcula , nome , endereo e outros. Tipos de Atributo: Atributos Identificadores : Deve ser capaz de identificar univocamente uma instncia da entidade. Ex: Para a Faculdade, a matrcula do aluno capaz de identific-lo. Representao grfica:

Atributos Simples : Apenas uma caracterstica ou informao da entidade. Ex: O nome de um aluno uma informao til. Representao grfica:

5.2

Relacionamento

Representa um relacionamento entre duas entidades. Ex: O histrico escolar relaciona as disciplinas cursadas com o aluno. Representao grfica:

histrico

Aluno

histrico
Prof. Flavio Rezende

Disciplina

Apostila de Banco de Dados v.4.0

28

5.3

Cardinalidade
Representa quantas vezes uma entidade pode se relacionar com a outra.

OBS. Podemos indicar numericamente o mnimo e o mximo de vezes que uma entidade pode se relacionar com a outra..

Aluno

histrico

Disciplina

5.4

Generalizao / Especializao :

quando temos duas ou mais entidades com alguns atributos em comum e outros no. Na especializao os filhos devem ter o mesmo identificador do pai.
Matrcula Nome Endereo

TempoMagistrio

NvelDiretoria

A especializao pode ser ({Total|Parcial},{Exclusiva,Superposio}) Total : Quando todos os elementos da entidade pai, deve obrigatoriamente existir em pelo menos uma entidade filha. Pessoa
(T,E)

Homem

Mulher

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 Parcial : Quando pode existir elementos na entidade pai e no existir nas entidades filhas.

29

Funcionrio
(P,S)

Professor

Diretor

Exclusiva : Quando um elemento de uma especializao no pode existir em outra entidade do mesmo nvel.

Pessoa
(T,E)

Homem

Mulher

Sobreposio : Quando um elemento de uma especializao pode existir em outra entidade do mesmo nvel. Funcionrio
(P,S)

Professor

Diretor

5.5

Entidade Fraca

O conceito de entidade fraca quando uma entidade precisa do identificador de outra entidade para ajudar a se identificar. Ex: Prdio 1 Endereco

N Apartamento Endereco NumeroApartamento

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

30

Importante : Uma entidade fraca TEM que se relacionar com a entidade forte no mnimo uma vez e no mximo uma vez

5.6
Ex:

Agregao :
quando h a necessidade de ligar um relacionamento a outro relacionamento.

matrcula Aluno Disciplina

ou Nota matrcula

Aluno

Disciplina

Nota

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

31

6 Regras de converso do Modelo Conceitual (E-R) para o Modelo Lgico.


Nesta fase devemos identificar como tipo de colunas apenas os tipos genricos, deixando para se preocupar com os tipos mais especfico de dados no projeto fsico, a no ser que o SGBD j tenha sido escolhido. Ex: char(n),Int, Datetime , etc...

6.1

Entidade
Toda entidade vira tabela e seu(s) atributo(s) identificadores formar a chave primria (PK). Aluno
Matrcula Nome Endereco

Aluno(Matricula, Nome, Endereco) Aluno Matricula Nome Eendereco

6.2

Entidade Fraca

A entidade fraca vira tabela e carrega o atributo identificador da entidade forte. A chave primria(PK) formada concatenando-se o atributo identificador da entidade forte com o seu atributo identificador.

Prdio 1

Endereco

N Apartamento NumeroApartamento QtdQuartos

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 Apartamento(Endereco, NumeroApartamento, QtdQuartos) Apartamento Endereco NumeroApartamento QtdQuartos

32

6.3

Relacionamentos

Cardinalidade 1:N : A tabela cujo a conectividade N carregar o identificador da entidade onde a conectividade 1 e formar uma chave estrangeira(FK). Obs. Caso o relacionamento tenha um mnimo 1, basta definir a FK no permitindo valores nulos. Cardinalidade 1:1 : A tabela que conter o menor nmero de linhas carregar o identificador da entidade onde conter o maior nmero de linhas e formar uma chave estrangeira(FK), nesta chave estrangeira deve ser criado um ndice nico(ser visto mais tarde em Projeto Fsico ). Cardinalidade N:N : O relacionamento transforma-se em tabela, carregando os identificadores das entidades que ele relaciona. Esses identificadores concatenados, formaro a chave primria(PK), e cada um dos identificadores separadamente sero chaves estrangeiras(FKs) para suas entidades/tabelas de origem. Obs. Caso o relacionamento seja com repetio, ele ter obrigatoriamente atributo identificador, neste caso, este atributo tambm far parte da PK.

6.4

Especializao

Segue a regra para entidade, ou seja, vira tabela com as entidades filhas carregando a PK da entidade pai, sendo que a PK da entidade filha uma FK para entidade pai. OBS: No caso da especializao preciso analisar caso a caso.

O caso mais genrico transformar todas as entidades, pais e filhas em tabelas. Obs. No caso da especializao Total e Exclusiva pode-se colocar um campo a mais na entidade pai para saber em qual das filhas ela se encontra. Porm a duas outras maneiras de se implementar:

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 No caso da especializao ser Total e Exclusiva e somente neste caso, poderemos transformar apenas as entidades filhas em tabelas. A ultima opo transformar tudo em apenas uma tabela, porm o caso mais recomendado o da especializao Parcial com Superposio.

33

6.5

Agregao

No caso da Agregao, ter de um lado do relacionamento uma entidade, e do outro lado, outro relacionamento. Neste caso deveremos tratar o relacionamento da ponta, como se fosse uma entidade.

7 Linguagem SQL.
7.1 Introduo ao SQL

A linguagem SQL subdividida em vrias sub-linguagens. Atravs do comando select implementado todas as operaes algbricas. Sintaxe bsica para o comando select. select [distinct] campo1,campo2,campo3 from tabela1[, tabela2, tabela3...] [where condio] onde: distinct : Serve para eliminar as linhas redundantes condio : Qualquer condio de seleo para restringir o resultado final. Ex1. select NOME from ALUNOS where ID_CURSO = 2

seleo

Este comando simples utiliza a operao algbrica da seleo, reparem que feito uma seleo para o nome dos alunos apenas com o ID_CURSO = 2. O resultado deste comando ser o conjunto de todos os alunos que esto matriculados no curso 2. Ex2. select ALUNOS.NOME , CURSO.NOME Produto cartesiano from ALUNOS , CURSOS where ALUNOS.ID_CURSO = CURSOS.ID_CURSO

Seleo

Com o produto cartesiano de ALUNOS com CURSOS e a seleo da PK de CURSOS com a FK de ALUNOS temos a juno ou o join.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

34

Comandos SQL realizam tarefas como: pesquisar dados inserir, alterar e apagar linhas em uma tabela criar, modificar e apagar objetos do Banco de Dados controlar acesso para Banco de Dados e objetos do Banco de Dados garantir a consistncia do banco de dados

7.1.1 SQL*Plus
SQL*Plus uma interface na qual os comandos SQL podem ser entendidos e executados. Comandos SQL*Plus so feitos no prompt do SQL>, eles no entram no buffer. Comando SAVE arquivo GET arquivo START arquivo Descrio permite o corrente contexto do SQL buffer ser salvo em um arquivo chama texto previamente salvo executa um comando previamente salvo em um arquivo. Comandos de arquivo so discutidos na Unidade 10 usa editor padro em ordem para edio do arquivo salvo. escreve todos os comandos subsequentes de sada no arquivo nomeado. O arquivo SPOOL estendido por .LIS (LST em algum sistemas) OFF fecha o arquivo SPOOL e OUT fecha o arquivo SPOOL e emite o arquivo para impressora. mostra a estrutura de uma tabela. invoca o interno sistema de ajuda ORACLE invoca um comando do sistema operacional. mesma funo acima Invoca outro usurio ORACLE sai SQL*Plus

ED arquivo SPOOL arquivo

SPO(OL) OFF/OUT

DESC(RIBE) tabela HELP $O/S comando HOST comando CONN(ECT) usurio/senha EXIT

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

35

Comando PROMPT texto ; / EXEC

Descrio mostra o texto quando executa o comando arquivo. mostra o texto que est no buffer. Executa o texto que est no buffer. Executa um simples comando SQL como por exemplo uma stored procedure.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

36

7.1.2 PL/SQL
uma linguagem de programao sofisticada que permite processar cdigos diretamente no servidor, tornando o acesso rpido e eficiente. Procedimentos compatveis: declarao de variveis. tarefas (X := Y + Z) controles condicionais (IF, THEN, ELSE, ELSIF, GOTO) Loop (FOR, WHILE, EXIT, WHEN) manuseio de excees (exception)

7.1.3 Sintaxe de um bloco PL/SQL:


DECLARE Procedure Procedure BEGIN Procedure SQL Procedure SQL END rea de declarao de variveis

Comandos

7.1.4 Alguns Comandos SQL:


SELECT INSERT UPDATE DELETE CREATE ALTER DROP GRANT REVOKE Esse o comando mais comum, usado para retirar dados de uma Tabela So os comandos usados para o preenchimento de novas linhas, modificando linhas existentes e removendo linhas no desejadas das tabelas.

So usados dinamicamente para configurar, modificar e remover vrias estruturas de dados como: tabelas, vises, ndices.

Usados para dar ou remover privilgios e direitos de acesso de um usurio ou grupo de usurios ao Banco de Dados ORACLE e s estruturas dentro dele.

7.1.5 SELECT
SELECT * (asterisco seleciona todos os campos) FROM EMP(nome da tabela) Exemplo 1: SELECT SELECT EMPNO, ENAME,MGR FROM EMP;

Resultado da pesquisa: EMPNO ENAME 7369 SMITH

MGR 7902

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 Exemplo 2: SELECT * EMPNO 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782

37

FROM EMP; ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

JOB CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDEN SALESMAN CLERK CLERK ANALYST CLERK

MGR 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782

HIREDATE 17/12/80 20/02/81 22/02/81 02/04/81 28/09/81 01/05/81 09/06/81 19/04/87 17/11/81 08/09/81 23/05/87 03/12/81 03/12/81 23/01/82

MGR SAL 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782

COMM 300 500 1400

DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10

7.1.6 Expresses Aritmticas


Expresses Aritmticas podem conter nome de colunas, valores numricos, constantes e aritmticos: Operadores Descries + Adio Subtrao * Multiplicao / Diviso Exemplo: SELECT FROM ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK operadores

ENAME, SAL*12, COM EMP; SAL*12 9600 19200 15000 35700 15000 34200 29400 COMM 300 500 1400

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 SCOTT KING TURNER ADAMS JAMES FORD MILLER 36000 60000 18000 13200 11400 36000 15600

38

A prioridade *,/, ento +,-. No exemplo seguinte a multiplicao (250*12) avaliada primeiro; ento o valor do salrio adicionado no resultado da multiplicao (3000). Exemplo: Select NOME, sal + 250 * 12 from emp; ENAME SAL+250*12 SMITH 3800 ALLEN 4600 WARD 4250 JONES 5975 MARTIN 4250 BLAKE 5850 CLARK 5450 SCOTT 6000 KING 8000 TURNER 4500 ADAMS 4100 JAMES 3950 FORD 6000 MILLER 4300 Parnteses podem ser usados para especificar a ordem na qual sero executados es operadores, se, por exemplo, a adio e requerida antes da multiplicao. Exemplo: Select NOME, (sal + 250) * 12 from emp; ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER (sal + 250) * 12 12600 22200 18000 38700 18000 37200 32400 39000 63000 21000 16200 14400 39000 18600

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

39

7.1.7 Colunas Sinnimas


Quando mostramos o resultado de uma pesquisa, o SQL*Plus normalmente usa-se o nome das colunas selecionadas como cabealho. Voc pode modificar o cabealho de uma coluna usando sinnimos(alias). Exemplo: SELECT SAL*12 GANHO_ANUAL, COMM FROM EMP; GANHO_ANUAL COMM 9600 19200 300 15000 500 35700 15000 1400 34200 29400 36000 60000 18000 0 13200 11400 36000 15600

7.1.8 Operador de Concatenao


O Operador de Concatenao (||) permite que as colunas sejam juntadas com outras colunas, expresses aritmticas ou valores constantes para criar uma expresso alfanumrica. Para combinar COD e NOME e obter o sinnimo EMPREGADO, observe o exemplo abaixo: Exemplo: SELECT FROM

EMPNO||ENAME EMPREGADO EMP;

EMPREGADO 7369SMITH 7499ALLEN 7521WARD 7566JONES 7654MARTIN 7698BLAKE 7782CLARK 7788SCOTT 7839KING 7844TURNER 7876ADAMS 7900JAMES 7902FORD 7934MILLER

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

40

7.1.9 Literais
Literais so um ou mais caracteres, expresses ou nmeros, includos na lista do SELECT. Um literal na lista do SELECT ter uma sada para cada linha retornada. Literais de livre formatos de textos podem ser includos no resultado da pesquisa e so tratados como uma coluna na lista do SELECT. Datas e caracteres alfanumricos devem ser colocados entre aspas simples(); nmeros no precisam de aspas simples. As declaraes seguintes contm literais selecionados com concatenao e colunas sinnimas. Exemplo: SELECT EMPNO||'-'||ENAME EMPREGADO, 'WORKS IN DEPARTMENT', DEPTNO FROM EMP; EMPREGADO 7369-SMITH 7499-ALLEN 7521-WARD 7566-JONES 7654-MARTIN 7698-BLAKE 7782-CLARK 7788-SCOTT 7839-KING 7844-TURNER 7876-ADAMS 7900-JAMES 7902-FORD 7934-MILLER 'WORKS IN DEPARTMENT' WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT WORKS IN DEPARTMENT DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10

7.1.10 Manuseando Valores Nulos


Um valor nulo um valor indisponvel e desconhecido. O valor nulo no zero. Zero um nmero. Se algum valor de uma coluna em uma expresso for nulo, o resultado ser nulo. Exemplo: SELECT ENAME, SAL*12+COMM GANHO_ANUAL FROM EMP; ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER GANHO_ANUAL 19500 15500 16400

18000

Na ordem para realizar o resultado para todos os empregados, necessrio converter os valores nulos para numricos. Ns usamos a funo NVL para converter valores nulos para no nulos.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 NVL conta com dois argumentos: 1- uma expresso 2- um valor que ser retornado caso o valor do primeiro argumento for nulo. Note que voc pode usar a funo NVL para converter qualquer tipo de valor nulo. NVL(COLUNA_DATA_NULA,30-OCT-74) NVL(COLUNA_NUMRICA_NULA,21) NVL(COLUNA_ALFANUMRICA_NULA,QUALQUER VALOR)

41

7.1.11 Prevenindo a Seleo de Linhas Duplicadas Clusula Distinct


Para eliminar valores duplicados no resultado, inclumos o DISTINCT Exemplo sem a clausula distinct: SELECT DEPTNO FROM EMP; DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10 Para eliminar os valores Duplicados: SELECT DISTINCT DEPTNO FROM EMP; DEPTNO 10 20 30

Vrias colunas podem ser especificadas depois do DISTINCT Exemplo: SELECT DISTINCT DEPTNO, JOB FROM EMP; DEPTNO JOB --------------10 CLERK 10 MANAGER 10 PRESIDENT 20 ANALYST 20 CLERK 20 MANAGER 30 CLERK 30 MANAGER 30 SALESMAN

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

42

7.1.12 A clausula ORDER BY


A clausula ORDER BY pode ser usada para ordenar as linhas. Se usado, o ORDER BY deve ser a ltima clausula da declarao SELECT. Para ordenar pelo NOME, faa: Exemplo: SELECT ENAME, JOB, SAL*12, DEPTNO FROM EMP ORDER BY ENAME;

ENAME ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD

JOB CLERK SALESMAN MANAGER MANAGER ANALYST CLERK MANAGER PRESIDENT SALESMAN CLERK ANALYST CLERK SALESMAN SALESMAN

SAL*12 13200 19200 34200 29400 36000 11400 35700 60000 15000 15600 36000 9600 18000 15000

DEPTNO 20 30 30 10 20 30 20 10 30 10 20 20 30 30

Ordenao descendente Para inverter essa ordem, use o comando DESC(Decrescente) depois do nome das colunas da clausula ORDER BY. Exemplo: SELECT ENAME, JOB, HIREDATE DATA DESC FROM EMP ORDER BY HIREDATE DESC; ENAME ADAMS SCOTT MILLER JAMES FORD KING MARTIN TURNER CLARK BLAKE JONES WARD JOB CLERK ANALYST CLERK CLERK ANALYST PRESIDENT SALESMAN SALESMAN MANAGER MANAGER MANAGER SALESMAN DATA 23/05/87 19/04/87 23/01/82 03/12/81 03/12/81 17/11/81 28/09/81 08/09/81 09/06/81 01/05/81 02/04/81 22/02/81

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 ALLEN SMITH SALESMAN CLERK 20/02/81 17/12/80

43

Ordenao por vrias colunas. possvel na clausula ORDER BY usar mais de uma coluna. O limite de colunas o nmero de colunas da tabela. Se algumas ou todas so invertidas especifique DESC depois de alguma ou cada uma das colunas. A clausula ORDER BY usada na pesquisa. O comando no altera a ordem dos dados que esto armazenados no Banco de Dados ORACLE.

7.1.13 A Clausula WHERE


A clausula WHERE corresponde aos Operadores de Restries da lgebra Relacional. Sintaxe: SELECT coluna(s) FROM tabela(s) WHERE certa condio a ser encontrada A clausula WHERE pode comparar valores em uma coluna, valores literais, expresses aritmticas ou funes. Operadores de comparao so usados na clausula WHERE e podem ser divididos em duas categorias: Lgicos e SQL. Operadores Lgicos Esses operadores testam as seguintes condies: = igual a > maior que >= maior e igual a < menor que <= menor e igual a Alfanumricos e Datas na clausula WHERE devem estar entre aspas simples.

Para listar os nomes, nmeros, emprego e departamentos de todos os escriturrios(CLERK): SELECT ENAME, EMPNO, JOB, DEPTNO FROM EMP WHERE JOB = 'CLERK'; ENAME EMPNO JOB DEPTNO SMITH 7369 CLERK 20 CLERK 20 ADAMS 7876 30 JAMES 7900 CLERK MILLER 7934 CLERK 10 Para encontrar todos os nomes de departamentos com nmero maior que 20, faa: SELECT DEPTNO, DNAME FROM DEPT WHERE DEPTNO > 20; DEPTNO DNAME 30 SALES 40 OPERATIONS

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 Comparando uma coluna com outra coluna na mesma linha: Exemplo: SELECT FROM WHERE COMM ENAME ---------MARTIN

44

ENAME, SAL, COMM EMP > SAL; SAL COMM --------- --------1250 1400

7.2

Operadores SQL
Entre dois valores (inclusive) Compara uma lista de valores Compara um parmetro alfanumrico um valor nulo

Existem quatro operadores SQL que operam com todos os tipos de dados: BETWEEN ... AND ... IN(Lista) LIKE IS NULL

7.2.1 O Operador BETWEEN


Testa um faixa de valores inclusive. Exemplo: SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000; ENAME SAL ALLEN 1600 WARD 1250 MARTIN 1250 TURNER 1500 ADAMS 1100 MILLER 1300

7.2.2 O Operador IN
Testa os valores especificados em uma lista. Para encontrar empregados que tenham um dos trs nmeros de MAT, faa: SELECT EMPNO, ENAME, SAL, MGR FROM EMP WHERE MGR IN (7902,7566,7788) EMPNO ENAME SAL MGR 7369 SMITH 800 7902 7788 SCOTT 3000 7566 7876 ADAMS 1100 7788 7902 FORD 3000 7566 Podemos usar o comando select dentro da clusula in.

7.2.3 O Operador LIKE


Algumas vezes voc precisa procurar valores que no conhece exatamente. Usando o operador LIKE possvel selecionar linhas combinando parmetros alfanumricos. Dois smbolos podem ser usados para construir uma linha de procura. Smbolo: % Vrias seqncia de zero ou mais caracteres

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 _ um nmero desejado de caracteres

45

Para listar todos os empregados os quais o nome comea com a letra S, faa: SELECT ENAME FROM EMP WHERE ENAME LIKE 'S%'; ENAME ---------SMITH SCOTT Eles podem ser usados para encontrar um determinado nmero de caracteres. Por exemplo para listar todos empregados que tenham exatamente quatro caracteres de tamanho do nome: SELECT ENAME FROM EMP WHERE ENAME LIKE '____'; ENAME ---------WARD KING FORD O % e o _ podem ser usados em vrias combinaes com literais alfanumricos.

7.2.4 Operador IS NULL


Para encontrar unicamente todos os empregados que no tenham gerente, voc testar um valor nulo: SELECT ENAME, MGR FROM EMP WHERE MGR IS NULL; ENAME ---------KING MGR -----

7.3

Expresses Negativas
diferente (todos sistemas operacionais) tudo que estiver fora da faixa tudo que no esteja na lista tudo que no contenha a linha de caracteres tudo que no for nulo

Os operadores seguintes so testes de negao: <> NOT BETWEEN NOT IN NOT LIKE IS NOT NULL

Para encontrar empregados que tenham o salrio fora da faixa, faa: SELECT ENAME, SAL

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

46

FROM EMP WHERE SAL NOT BETWEEN 1000 AND 2000; ENAME SMITH JONES BLAKE CLARK SCOTT KING JAMES FORD SAL 800 2975 2850 2450 3000 5000 950 3000

Para encontrar os empregados os quais o cargo no comece com a letra M, faa: SELECT ENAME, JOB FROM EMP WHERE JOB NOT LIKE 'M%'; ENAME SMITH ALLEN WARD MARTIN SCOTT KING TURNER ADAMS JAMES FORD MILLER JOB CLERK SALESMAN SALESMAN SALESMAN ANALYST PRESIDEN SALESMAN CLERK CLERK ANALYST CLERK

Para encontrar todos os empregados que tenham um gerente, faa: SELECT ENAME, MGR FROM EMP WHERE MGR IS NOT NULL; ENAME SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT TURNER ADAMS JAMES FORD MILLER MGR 7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782

Nota: Se um valor nulo usado em uma comparao, ento o operador de comparao deve ser IS ou IS NOT NULL. Se esses operadores no forem usados e valores nulos forem comparados, o resultado ser sempre FALSO.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

47

Por exemplo, COMM <> NULL ser sempre FALSO. O resultado ser falso porque um valor nulo no pode ser igual ou no igual a qualquer outro valor.

7.3.1 Pesquisando Dados com Mltiplas Condies


Os operadores AND e OR devem ser usados para fazer composies de expresses lgicas. O predicado AND espera que ambas as condies sejam verdadeiras, enquanto que o predicado OR espera que uma das condies seja verdadeira. Nos seguintes exemplos as condies so as mesmas, o predicado diferente. Veja como o resultado dramaticamente alterado. Para encontrar todos os escriturrios que ganhem entre 1000 e 2000, faa: SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 AND JOB = 'CLERK'; COD ----- 7876 7934 ENAME --------ADAMS MILLER JOB ---------CLERK CLERK SAL ---------1,100.00 1,300.00

Para encontrar todos os empregados que so escriturrios ou todos que ganhem entre 1000 e 2000 faa: SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 OR JOB = 'CLERK'; EMPNO 7369 7499 7521 7654 7844 7876 7900 7934 ENAME SMITH ALLEN WARD MARTIN TURNER ADAMS JAMES MILLER JOB CLERK SALESMAN SALESMAN SALESMAN SALESMAN CLERK CLERK CLERK SAL 800 1600 1250 1250 1500 1100 950 1300

Voc pode combinar AND e OR na mesma expresso lgica. Quando AND e OR aparecerem na mesma clausula WHERE, o AND realizado primeiro depois o OR. Se AND no interfere sobre o OR a seguinte declarao SQL retornar todos os gerentes com salrio acima de 1500 e todos os vendedores: SELECT FROM WHERE EMPNO, ENAME, JOB, SAL, DEPTNO EMP SAL > 1500

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

48

AND OR EMPNO 7499 7521 7566 7654 7698 7782 7844

JOB = 'MANAGER' JOB = 'SALESMAN'; ENAME JOB ALLEN SALESMAN WARD SALESMAN JONES MANAGER MARTIN SALESMAN BLAKE MANAGER CLARK MANAGER TURNER SALESMAN SAL 1600 1250 2975 1250 2850 2450 1500 DEPTNO 30 30 20 30 30 10 30

Todos os operadores so organizados em uma hierarquia. Numa Expresso, as operaes so feitas na ordem de sua precedncia, do maior para o menor. Onde os operadores de igual precedentes so usados prximo a outro, eles so feitos da esquerda para direita. 1- Todos os comparativos e Operadores SQL tem igual precedente: =, !=, <, >, <=, >=, BETWEEN ... AND ..., IN, LIKE, IS NULL. 2- NOT (para inverter o resultado das expresses lgicas: WHERE NOT (SAL>2000)) 3- AND 4- OR Sempre que voc estiver em dvida sobre qual dos dois operadores ser feito primeiro quando a expresso avaliada, use parnteses aumentar a legibilidade.

Suponha que voc queira encontrar todos os gerentes, em vrios departamentos, e todos os escriturrios no departamento 10 unicamente: SELECT * FROM EMP WHERE JOB = 'MANAGER' OR (JOB = 'CLERK' AND DEPTNO = 10); JOB MGR HIREDATE EMPNO ENAME 7566 JONES MANAGER 7839 02/04/81 7698 BLAKE MANAGER 7839 01/05/81 7782 CLARK MANAGER 7839 09/06/81 7934 MILLER CLERK 7782 23/01/82

SAL COMM 2975 2850 2450 1300

DEPTNO 20 30 10 10

O parnteses acima no necessrio, por que o AND precedente ao OR, mas ele esclarece o significado da expresso.

7.4

Funes

As Funes so usadas para manipular dados. Elas aceitam um ou mais argumentos e retornam um valor. Um argumento uma constante, refere-se varivel, expresso ou coluna. Sintaxe: funo_nome (agrumento1,argument2,...) Funes podem ser usadas para: Clculos sobre datas

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 modificar valores de itens individuais manipular sada para grupos de linhas alterar formatos de datas para mostr-los Existem diferentes tipos de funes: ALFANUMRICAS NUMRICAS DATA CONVERSO FUNES QUE ACEITAM VRIOS TIPOS DE DADOS GRUPO

49

Algumas funes operam unicamente sobre linhas simples; outras manipulam grupos de linhas. Funes de Linha nica: agem sobre cada linha retornada na pesquisa retornam um resultado por linha esperam um ou mais argumento do usurio podem ser aninhadas podem ser usadas com variveis do usurio, colunas, expresses; podem ser usadas, por exemplo, nas clusulas SELECT, WHERE, ORDER BY.

7.4.1 Funes Alfanumricas


Funes Alfanumricas aceitam dados alfanumricos e podem retornar valores alfanumricos ou numricos. A funo seguinte influencia na construo de valores alfanumricos.

7.4.1.1 LOWER
LOWER(col/value) fornece valores alfanumricos os quais esto em letra maiscula ou minscula e retornam em letra minscula

Para mostrar o nome dos departamentos em letra minscula e a constante CURSO_SQL, faa: SELECT LOWER(DEPTNO), LOWER('CURSO_SQL') FROM DEPT; LOWER(DEPTNO) LOWER('CURSO_SQL') 10 curso_sql 20 curso_sql 30 curso_sql 40 curso_sql

7.4.1.2 UPPER
UPPER(col/value) fornece caracteres alfanumricos, os quais esto em letra maiscula ou minscula e retorna em letra maiscula.

No exemplo seguinte, a funo UPPER fora o usurio entrar em letra maiscula. SELECT ENAME FROM EMP WHERE ENAME = UPPER('&NOME'); Enter value for NOME : smith

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

50

ENAME ---------SMITH

7.4.1.3 INITCAP
INITCAP(col/value) fora a primeira letra da palavras ser em maiscula e o resto minscula Exemplo: SELECT INITCAP(DNAME), INITCAP(LOC) FROM DEPT; INITCAP(DNAME) INITCAP(LOC) Accounting New York Research Dallas Sales Chicago Operations Boston

7.4.1.4 LPAD e RPAD


LPAD(col/value,n,caracter) Preenche a coluna ou valor literal da esquerda para o total tamanho de n posies. Os principais espaos esto preenchidos com o caracter. Se o caracter for omitido o valor padro espaos.

SELECT LPAD(DNAME,20,'*'), LPAD(DNAME,20), LPAD(DEPTNO,20,'.') FROM DEPT; LPAD(DNSMR,20,'*') LPAD(DNAME,20 ) *************RESEACH RESEACH ***************SALES SALES **********OPERATIONS OPERATIONS ***********ACCOUTING ACCOUNTING RPAD(col/value,n,caracter) LPAD(DEPTNO,20,'.') ..................20 ..................30 ..................40 ..................10

preenche a coluna ou valor literal da direita para o total tamanho de n posies. Os espaos a direita so preenchidos com o caracter. Se o caracter for omitido o preenchimento fica em branco.

Exemplo: SELECT RPAD(DNAME,20,'*'), RPAD(DNAME,20), RPAD(DEPTNO,20,'.') FROM DEPT; RPAD(DNAME,20,'*') ACCOUTING*********** RESEACH************* SALES*************** OPERATIONS********** RPAD(DNAME,20) ACCOUNTING RESEACH SALES OPERATIONS RPAD(DEPTNO,20,'.') 10.................. 20.................. 30.................. 40..................

A segunda coluna alinhada para a direita com brancos por padro.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

51

7.4.1.5 SUBSTR
SUBSTR(col/value,pos,n) Retorna uma linha de n caracteres da coluna ou valor literal, iniciando na posio nmero pos. Se n omitido a linha extrada da posio pos at o fim.

Exemplo: SELECT SUBSTR('ORACLE',2,4), SUBSTR(DNAME,2), SUBSTR(DNAME,3,5) FROM DEPT; SUBSTR('ORACLE',2,4) SUBSTR(DNAME,2) SUBSTR(DNAME,3,5) RACL CCOUNTING COUNT RACL ESEARCH SEARC RACL ALES LES RACL PERATIONS ERATI Note que os valores esto alinhados para a esquerda. Isso porque SQL*Plus sempre mostra dados alfanumricos alinhados para a esquerda por default.

7.4.1.6 INSTR
INSTR(col/value,caracter) INSTR(col/value,caracter,pos,n) encontra a primeira ocorrncia do caracter. encontra a posio do caracter na coluna ou valor literal iniciando na posio que se encontra dentro de uma repetio desta varivel ou literal.

SELECT DNAME, INSTR(DNAME,'A'), INSTR(DNAME,'ES'), INSTR(DNAME,'C',1,2) FROM DEPT; DNAME ACCOUNTING RESEARCH SALES OPERATIONS INSTR(DNAME,'A') 1 5 2 5 INSTR(DNAME,'ES') 0 2 4 0 INSTR(DNAME,'C',1,2) 3 0 0 0

7.4.1.7 LTRIM e RTRIM


Removem especficos caracteres de um linha. LTRIM(col/value,caractere(s)) Se o caracter no especificado cortar os brancos da esquerda. Exemplo: SELECT DNAME, LTRIM(DNAME,'A'), LTRIM(DNAME,'AS'), LTRIM(DNAME,'ASOP') FROM DEPT; DNAME ACCOUNTING RESEARCH SALES OPERATIONS LTRIM(DNAME,'A') CCOUNTING RESEARCH SALES OPERATIONS LTRIM(DNAME,'AS') CCOUNTING RESEARCH LES OPERATIONS LTRIM(DNAME,'ASOP') CCOUNTING RESEARCH LES ERATIONS

RTRIM(col/value,caractere(s))

Se os caracteres no forem especificados sero removidos os brancos.

SELECT DNAME, RTRIM(DNAME,'G'), RTRIM(DNAME,'GHS'), RTRIM(DNAME,'N') FROM DEPT;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 DNAME ACCOUNTING RESEARCH SALES OPERATIONS RTRM(DNAME,'G') ACCOUNTIN RESEARCH SALES OPERATIONS RTRIM(DNAME,'GHS') ACCOUNTIN RESEARC SALE OPERATION RTRIM(DNAME,'N') ACCOUNTING RESEARCH SALES OPERATIONS

52

7.4.1.8 SOUNDEX
SOUNDEX(col/value) retorna uma linha de caracteres representando o som da palavra para uma coluna ou um valor literal. Esta funo retorna a fontica representao de uma palavra.

SELECT ENAME, SOUNDEX(ENAME) FROM EMP WHERE SOUNDEX(ENAME) = SOUNDEX('FRED'); NOME ----------FORD SOUNDEX(NOME) -------------F630

7.4.1.9 LENGTH
LENGTH(col/value) retorna o nmero de caracteres na coluna ou valor literal. SELECT LENGTH(CURSO SQL), LENGTH(DEPTNO), LENGTH(DNAME) FROM DEPT; LENGTH(CURSO SQL) 9 9 9 9 LENGTH(DEPTNO) 2 2 2 2 LENGTH(DNAME) 10 8 5 10

Note que a funo INSTR, LENGTH retornam um valor numrico.

7.4.1.10

TRANSLATE e REPLACE

As funes TRANSLATE e REPLACE so usadas para substituir caracteres. TRANSLATE(col/value,from,to) Faz a substituio de um ou mais caracteres por outros. Exemplo: SELECT ENAME, TRANSLATE(ENAME,'C','P'), JOB, TRANSLATE(JOB,'AR','IT') FROM EMP WHERE DEPTNO = 10; ENAME TRANSLATE(ENAME,'C','P' JOB TRANSLATE(JOB,'AR','IT') CLARK PLARK MANAGER MINIGET KING KING PRESIDENT PTESIDENT MILLER MILLER CLERK CLETK REPLACE(col/value,linha,linha_alterada) Retorna o valor da coluna com toda a ocorrncia da linha de alterao. Se a linha alterada for omitida todo a linha especificada ser removida.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

53

SELECT JOB, REPLACE(JOB,'SALESMAN','SALESPERSON') FROM EMP; JOB, REPLACE(JOB,'SALESMAN','SALESPERSON') CLERK CLERK SALESMAN SALESPERSON SALESMAN SALESPERSON MANAGER MANAGER SALESMAN SALESPERSON MANAGER MANAGER MANAGER MANAGER ANALYST ANALYST PRESIDENT PRESIDENT SALESMAN SALESPERSON CLERK CLERK CLERK ANALYST CLERK CLERK ANALYST CLERK

A Funo REPLACE um complemento da funo TRANSLATE que substitui caracteres um a um e o REPLACE substitui um linha por outra.

7.4.2 Aninhamento de Funes


Funes de linhas nicas podem ser aninhadas para vrias finalidades. Se funes so aninhadas, elas so avaliadas de dentro para fora. Exemplo: X(D(A(B(C(caracter))))) ordem lgica de execuo C,B,A,D e X.

7.4.3 Funes Numricas


As funes aceitam entrada de nmeros e retornam valores numricos.

7.4.3.1 ROUND
ROUND(col/value,n) arredonda uma coluna, expresso ou valor para n casas decimais. Se n for negativo, os nmeros para esquerda do decimal so arredondados.

SELECT

FROM WHERE

ROUND(45.923,1), ROUND(45.923), ROUND(45.323,1), ROUND(45.323,-1), ROUND(SAL/32,2) EMP DEPTNO = 10; ROUND(45.923) 46 46 46 ROUND(45.323,1) 45.3 45.3 45.3 ROUND(45.323,-1) 50 50 50 ROUND(SAL/32,2) 76.56 156.25 40.63

ROUND(45.923,1) 45.9 45.9 45.9

7.4.3.2 TRUNC
TRUNC(col/value.n) trunca a coluna, expresso ou valor para n casas decimais. Se n negativo

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 os nmeros para esquerda das casas decimais so truncados para zero. SELECT TRUNC(45.923,1), TRUNC(45.923), TRUNC(45.323,1), TRUNC(45.323,-1), TRUNC(SAL/32,2) EMP DEPTNO = 10; TRUNC(45.923) 45 45 45 TRUNC(45.323,1) 45.3 45.3 45.3 TRUNC(45.323,-1) 40 40 40

54

FROM WHERE

TRUNC(45.923,1) 45.9 45.9 45.9

TRUNC(SAL/32,2) 76.56 156.25 40.62

7.4.3.3 CEIL
CEIL(col/value) Arredonda acima. Exemplo: SELECT CEIL(SAL), CEIL(99.9), CEIL(101.76), CEIL(-11.1) FROM EMP WHERE SAL BETWEEN 3000 AND 5000; CEIL(SAL) CEIL(99.9) CEIL(101.76) CEIL(-11.1) 3000 100 102 -11 5000 100 102 -11 3000 100 102 -11

7.4.3.4 FLOOR
FLOOR(col/value) Arredonda para baixo. SELECT FLOOR(SAL), FLOOR(99.9), FLOOR(101.76), FLOOR(-11.1) FROM EMP WHERE SAL BETWEEN 3000 AND 5000;

FLOOR(SAL) 3000 5000 5000

FLOOR(99.9) 99 99 99

FLOOR(101.76) 101 101 101

FLOOR(-11.1) -12 -12 -12

7.4.3.5 POWER
POWER(col/value,n) eleva uma coluna, expresso ou valor para uma potncia; n pode ser negativo mas deve ser um nmero, se no um erro ser retornado

SELECT SAL, POWER(SAL,2), POWER(SAL,3), POWER(50,5) FROM EMP WHERE DEPTNO = 10; SAL POWER(SAL,2) POWER(SAL,3) POWER(50,5) 2450 6002500 1,471E+10 312500000 5000 25000000 1,250E+11 312500000 1300 1690000 2,197E+09 312500000

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

55

7.4.3.6 SQRT
SQRT(col/value) encontra a raiz quadrada da coluna ou valor. Se a coluna ou valor for menor que zero ser retornado nulo.

SELECT SAL, SQRT(SAL), SQRT(40), SQRT(COMM) FROM EMP WHERE COMM > 0; SAL SQRT(SAL) SQRT(40) SQRT(COMM) 1600 40 6,3245553 17,320508 1250 35,355339 6,3245553 22,36068 1250 35,355339 6,3245553 37,416574

7.4.3.7 SIGN
SIGM(col/value) retorna -1 se a coluna, expresso ou valor for negativo ou zero e 1 se for positivo.

SELECT SAL-COMM, SIGN(SAL-COMM), COMM-SAL, SIGN(COMM-SAL) FROM EMP WHERE DEPTNO = 30; SAL-COM SIGN(SAL-COM) COM-SAL SIGN(SAL-COM) 1300 1 -1300 -1 750 1 -750 -1 -150 -1 150 1 1500 1 -1500 -1 Freqentemente a funo SIGN usada para testar se um valor menor, maior ou igual a um segundo valor. O seguinte exemplo apresenta todos os empregados os quais o salrio maior que sua comisso: SELECT ENAME, SAL, COMM FROM EMP WHERE SIGN(SAL-COMM) = 1; NOME SAL ALLEN 1600 WARD 1250 TURNER 1500

COM 300 500 0

7.4.3.8 ABS
ABS(col/value) encontra o valor absoluto de um coluna, expresso ou valor. SELECT SAL, COMM, COMM-SAL, ABS(COMM-SAL), ABS(-35) FROM EMP WHERE DEPTNO = 30; SAL COM COM-SAL ABS(COM-SAL) ABS(-35) 1600 300 -1300 1300 35 1250 500 -750 750 35 1250 1400 150 150 35 2850 35 1500 0 -1500 1500 35 950 35

7.4.3.9 MOD
MOD(val1,val2) encontra o resto da diviso val1 por val2

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

56

SELECT SAL, COMM, MOD(SAL,COMM), MOD(100,40) FROM EMP WHERE DEPTNO = 30 ORDER BY COMM; COM MOD(SAL,COM) MOD(100,40) SAL 1500 0 1500 20 1600 300 100 20 1250 500 250 20 1250 1400 1250 20 2850 20 950 20

7.4.4 Funes de Data


Funes de data operam sobre datas do ORACLE. Todas as funes de datas retornam valores de tipo data exceto MONTHS_BETWEEN o qual retorna um valor numrico. Armazenamento de Datas no ORACLE Sculo Ano Ms Dia Horas Minutos Segundos O padro de data mostrados nas pesquisas DD-MON-YY.

7.4.4.1 Sysdate
Sysdate uma coluna que retorna a data e horrio corrente. Voc pode usar o SYSDATE como uma outra coluna qualquer. Por exemplo, voc pode mostrar data corrente selecionando o sysdate de uma tabela simulada chamada DUAL. A tabela DUAL uma tabela do sistema e deve ser permitido acess-la para todos os usurios. Ela contm uma coluna DUMMY e uma linha com o valor X. A tabela DUAL usada quando voc quer retornar apenas uma linha. Para mostrar a data corrente: SELECT SYSDATE FROM DUAL; SYSDATE -------01/12/00 Voc poderia facilmente selecionar o sysdate da tabela EMP, mas seriam retornados tantos sysdate quanto o nmero de linhas na tabela EMP. Usando Operadores Aritmticos Devido ao fato das datas serem armazenadas como nmero, possvel fazer clculos com elas usando operadores aritmticos tal como adio e subtrao. Voc pode adicionar e subtrair nmeros bem como data. As operaes que voc pode realizar so: data + nmero Adicionando um nmero de dias em uma data, produzindo uma nova data data nmero subtraindo um nmero de dias de uma data, produzindo uma nova data

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 data data data+nmero/24 subtraindo uma data de outra, produzindo um nmero de dias adicionando um nmero de horas em uma data produzindo um nova data

57

Exemplo: SELECT HIREDATE, HIREDATE +7, HIREDATE -7, SYSDATE - HIREDATE FROM EMP WHERE HIREDATE LIKE '%12%';

HIREDATE 17/12/80 03/12/81 03/12/81

HIREDATE +7 24/12/80 10/12/81 10/12/81

HIREDATE -7 10/12/80 26/11/81 26/11/81

SYSDATE- HIREDATE 7289,7189 6938,7189 6938,7189

7.4.4.2 MONTHS_BEETWEEN
MONTHS_BETWEEN(data1,data2) encontra o nmero de meses entre data 1 e data2. O resultado pode ser positivo ou negativo. Se a data 1 for posterior a data2, ento o resultado ser positivo, se a data 1 for menor que a data 2 o resultado ser negativo.

SELECT FROM WHERE

MONTHS_BETWEEN(SYSDATE,HIREDATE), MONTHS_BETWEEN('01-01-84','05-11-88') EMP MONTHS_BETWEEN(SYSDATE, HIREDATE)> 59;


MONTHS_BETWEEN('01-JAN-84','05-NOV-88') -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903 -58,12903

MONTHS_BETWEEN(SYSDATE,DATA) 239,50724 237,41047 237,34595 235,99111 230,1524 235 233,76531 163,44273 228,50724 230,79756 162,31369 227,95885 227,95885 226,31369

A parte no inteira do resultado representa uma parcela do ms.

7.4.4.3 ADD_MONTHS
ADD_MONTHS(data,n) adiciona n nmeros de meses na data; n deve ser inteiro e pode ser negativo.

SELECT HIREDATE, ADD_MONTHS(HIREDATE,3), ADD_MONTHS(HIREDATE,-3) FROM EMP WHERE DEPTNO = 20; HIREDATE 17/12/80 ADD_MONTHS( HIREDATE,3) 17/03/81 ADD_MOSTHS(HIREDATE,-3) 17/09/80

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 02/04/81 19/04/87 23/05/87 03/12/81 02/07/81 19/07/87 23/08/87 03/03/82 02/01/81 19/01/87 23/02/87 03/09/81

58

7.4.4.4 NEXT_DAY
NEXT_DAY(data1,caracter) data do prximo dia especificado da semana. Caracter deve ser um nmero representado um dia, ou o dia da semana descrito em ingls. NEXT_DAY(HIREDATE,5)

SELECT HIREDATE, TO_CHAR(HIREDATE,DAY), FROM EMP WHERE DEPTNO = 20; HIREDATE 17/12/80 02/04/81 19/04/87 23/05/87 03/12/81 TO_CHAR(HIREDATE,DAY) QUARTA-FEIRA QUINTA-FEIRA DOMINGO SBADO QUINTA-FEIRA

NEXT_DAY(HIREDATE,5) 18/12/80 09/04/81 23/04/87 28/05/87 10/12/81

7.4.4.5 LAST_DAY
LAST_DAY(data) encontra a data do ultimo dia do ms da data especificada SELECT SYSDATE, LAST_DAY(SYSDATE), HIREDATE, LAST_DAY(HIREDATE), LAST_DAY('15-02-88') FROM EMP WHERE DEPTNO = 20; SYSDATE 01/12/00 01/12/00 01/12/00 01/12/00 01/12/00 LAST_DAY(SYSDATE) 31/12/00 31/12/00 31/12/00 31/12/00 31/12/00 HIREDATE 17/12/80 02/04/81 19/04/87 23/05/87 03/12/81 LAST_DAY(HIREDATE) 31/12/80 30/04/81 30/04/87 31/05/87 31/12/81 LAST_DAY(15-02-88) 29/02/88 29/02/88 29/02/88 29/02/88 29/02/88

7.4.4.6 ROUND
A funo ROUND pode ser aplicada para datas. ROUND(data) ROUND(data,MONTH) ROUND(data,YEAR) retorna a data com o horrio em 12:00(meio-dia) Usamos isso quando comparamos datas que tenham diferentes horrios. retorna o primeiro dia do ms da data, se a data estiver na primeira metade do ms; se no retorna o primeiro do ms seguinte. retorna o primeiro dia do ano da data se data estiver na primeira metade do ano; se no retorna o primeiro do ano seguinte.

SELECT SYSDATE, ROUND(SYSDATE,'MONTH'), ROUND(SYSDATE,'YEAR') FROM DUAL; SYSDATE 04-DEC-89 ROUND(SYSDATE,'MONTH') 01-DEC-89 ROUND(SYSDATE,'YEAR') 01-JAN-90

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

59

7.4.4.7 TRUNC
TRUNC(data,caracter) encontra a data do primeiro dia do ms quando caracter = MONTH. Se o caracter = YEAR ele encontra o primeiro dia do ano.

SELECT SYSDATE, TRUNC(SYSDATE,'MONTH'), TRUNC(SYSDATE,'YEAR') FROM DUAL; SYSDATE 04-DEC-89 TRUNC(SYSDATE,'MONTH') 01-DEC-89 TRUNC(SYSDATE,'YEAR') 01-JAN-89

TRUNC usado se voc quiser remover o horrio do dia. O horrio contido no dia removido por default.

7.4.5 Funes de Converso


SQL possui um nmero de funes para controlar os tipos de converso de dados. Essas funes convertem um valor de um tipo de dado para outro. TO_CHAR(nmero,data,formato) converte nmeros e datas para formatos alfanumricos TO_NUMBER(caracter) converte alfanumricos para numricos. TO_DATE(caracter,formato) converte um alfanumrico representando uma data, para um valor de data de acordo com o formato especificado. Se o formato omitido o formato padro DD-MON-YY.

7.4.5.1 TO_CHAR
TO_CHAR(data,mscara) Especifica que a data est sendo convertida para um novo formato na sada. Para converter a data corrente do formato padro (DD-MON-YY) para uma nova mscara: SELECT TO_CHAR(SYSDATE,'DAY, DD MONTH YYYY') FROM DUAL; TO_CHAR(SYSDATE,'DAY, DD MONTH YYYY') --------------------------------------SEXTA-FEIRA , 01 DEZEMBRO 2000 Note que: A mscara deve estar entre aspas simples e pode ser includa em vrios formatos. A coluna e mscara devem ser separadas por uma vrgula. DAY e MONTH na sada so espaados automaticamente com brancos no tamanho de 9 caracteres TO_CHAR pode tambm ser usado para extrair o horrio de um nico dia, e mostr-lo no formato especificado. SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM DUAL; TO_CHAR(SYSDATE,'HH:MI:SS') --------------------------------------08:16:24 A funo TO_CHAR tambm usada para converter um valor do tipo numrico para um valor do tipo alfanumrico.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

60

Formatos Numricos Mscara Significado 9 0 $ . , MI PR EEEE V B posio numrica (nmero de 9s determinam a largura mostrada) mostra zeros mostra sinal de dlar ponto decimal na posio especificada vrgula na posio especificada sinal de menos direita(valores negativos) parnteses para nmeros negativos notao cientfica(formato de conter quatro Es unicamente) multiplica pela dcima potncia 10n(n = nmero 9s depois da V mostra valores zero em branco, no zero

Exemplo 999999 0999999 $999999 999999.99 999,999 999999MI 999999PR 99.999EEEE 9999V99 B9999.99 1234 001234 $1234 1234.00 1,234 1234<1234> 1.234E+03 123400 1234.00

SELECT SAL, TO_CHAR(SAL,'$9,999') FROM EMP; SAL TO_CHAR(SAL,'$9,999') 800 $800 1600 $1,600 1250 $1,250 2975 $2,975 1250 $1,250 2850 $2,850 2450 $2,450 3000 $3,000 5000 $5,000 1500 $1,500 1100 $1,100 950 $950 3000 $3,000 1300 $1,300 Os formatos das mscaras so opcionais. Se a mscara omitida, a data convertida para um alfanumrico que padro DD-MON-YY. Se a mscara no especificada, o nmero convertido para alfanumrico. Formatos de Data Mscara SCC ou CC YYYY ou SYYYY YYY ou YY ou Y Y,YYY Significado Sculo, prefixo S BCdata com - Ano, prefixo S BC data com - ltimo 3, 2 ou 1 digito(s) do ano Ano com vrgula nessa posio

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 SYEAR ou YEAR BC ou AD B.C. ou A.D. Q MM MONTH MON WW ou W DDD ou DD ou D DAY DY J AM ou PM A.M. ou P.M. HH ou HH12 HH24 MI SS SSSSS /.,etc. ...

61

Ano, soletrado na sada S prefixo BC data com - BC/AD perodo BC/AD indicador com perodos Um quarto do Ano Ms nome do ms, espaamento com brancos do tamanho de 9 caracteres nome do ms, 3 letras abreviadas Semana do ano ou ms dia do ano, ms ou semana nome do dia, espaado com brancos com 9 caracteres de tamanho nome do dia, 3 letras abreviadas data Juliana, o nmero de dias desde 31 dezembro 4713 antes de Cristo Indicador meridiano indicador meridiano com perodos horas do dia (1-12) horas do dia (0-23) minuto segundos segundos passado meia-noite(0-86399) pontuao reproduzida no resultado cotas de linhas so representadas no resultado.

Os sufixos abaixo devem ser adicionados em frente dos cdigos: TH Ex.: SELECT TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY') FROM DUAL; SEXTA-FEIRA , 01ST DEZEMBRO 2000 SP Ex.: SELECT TO_CHAR(SYSDATE,'DAY, DDSP MONTH YYYY') FROM DUAL; SEXTA-FEIRA , ONE DEZEMBRO 2000 SPTH ou thsp Ex.: SELECT TO_CHAR(SYSDATE,'DAY, DDSPTH MONTH YYYY') FROM DUAL; SEXTA-FEIRA , FIRST DEZEMBRO 2000 DAY Day Month Ddth DdTh MONDAY Monday July 14th 14Th

7.4.5.2 TO_NUMBER
No seguinte exemplo a funo TO_NUMBER usada para transformar um nmero armazenado como um alfanumrico para um tipo numrico: SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL > TO_NUMBER('1500'); EMPNO ENAME 7499 ALLEN 7566 JONES JOB SALESMAN MANAGER SAL 1600 2975

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 7698 7782 7788 7839 7902 BLAKE CLARK SCOTT KING FORD MANAGER MANAGER ANALYST PRESIDENT ANALYST 2850 2450 3000 5000 3000

62

7.4.5.3 TO_DATE
Para mostrar todos os empregados admitidos em 4 de junho de 1984 (no formato padro), ns podemos usar a funo TO_DATE: SELECT EMPNO, ENAME, HIREDATE FROM EMP WHERE HIREDATE = TO_DATE ('September

8, 1981','Month dd, yyyy');

EMPNO ENAME HIREDATE -------------- --------7844 TURNER 08-SEP-81 O contedo convertido para data e comparado com o valor de DATA. Para entrar um linha na tabela EMP com a data no no formato padro: INSERT INTO EMP (EMPNO, DEPTNO,HIREDATE) VALUES (7777,20,TO_DATE('19/08/90 00:00:00','DD/MM/YY HH:MI:SS'));

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

63

7.4.6 Funes que Aceitam Vrios Tipos de Entrada de Dados 7.4.6.1 DECODE
DECODE a mais potente funo do SQL. Ele facilita pesquisas condicionais fazendo o trabalho de ferramentas ou comandos IF-THEN-ELSE. Sintaxe: DECODE(col/expresso, procurado1,resultado1, procurado2,resultado2...,padro) Col/expresso comparado com cada um dos valores procurados e retorna o resultado se a col/expresso igual ao valor procurado. Se no for encontrado nenhum dos valores procurados, a funo DECODE retorna o valor padro. Se o valor padro for omitido ele retornar um valor nulo. O seguinte exemplo decodifica os cargos dos tipos MANAGER e CLERK unicamente. Os outros cargos sero padro, alterados para UNDEFINED: SELECT ENAME, JOB, DECODE(JOB,'CLERK','WORKER', 'MANAGER','BOSS') FROM EMP; ENAME JOB DECODE CLERK WORKER SMITH ALLEN SALESMAN SALESMAN WARD BOSS JONES MANAGER MARTIN SALESMAN BLAKE MANAGER BOSS MANAGER BOSS CLARK SCOTT ANALYST PRESIDENT KING SALESMAN TURNER WORKER ADAMS CLERK WORKER JAMES CLERK FORD ANALYST MILLER CLERK WORKER Para mostrar a gratificao percentual dependendo do grau do salrio: SELECT GRADE, DECODE(GRADE,'1','15%', '2','10%', '3','8%', '4,5%') BONUS FROM SALGRADE; GRADE BONUS FROM SALGRADE 1 15% 2 10% 3 8% 4 5% 5

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

64

Esse exemplo ilustra que com a funo DECODE, o valor retornado forado a ter um tipo de dado no terceiro argumento.

7.4.6.2 NVL
NVL(col/valor,valor) converte um valor nulo para um valor desejado. Tipo de dados devem combinar(col/valor e valor).

SELECT SAL*12+NVL(COMM,0), NVL(COMM,1000), SAL*12+NVL(COMM,1000) FROM EMP WHERE DEPTNO = 10; SAL*12+NVL(COM,0) 29400 60000 15600 NVL(COM,1000) 1000 1000 1000 SAL*12+NVL(COM,1000) 30400 61000 16600

7.4.6.3 GREATEST
GREATEST(col/valor1,col/valor2,...) retorna o maior da lista de valores. Todos os col/valores so convertidos para um valor antes da comparao.

SELECT SAL, COMM, GREATEST(1000,2000), GREATEST(SAL,COMM) FROM EMP WHERE DEPTNO = 30; SAL COMM GREATEST(1000,2000) GREATEST(SAL,COMM) 1600 300 2000 1600 1250 500 2000 1250 1250 1400 2000 1400 2850 2000 1500 0 2000 1500 950 2000 Na funo GREATEST quando na lista de valores existe um valor nulo ele considerado como o maior.

7.4.6.4 LEAST
LEAST(col/valor1,col/valor2,...) retorna o menor valor de um lista de valores. Todos os valores so convertidos antes da comparao.

SELECT SAL, COMM, LEAST(1000,2000), LEAST(SAL,COMM) FROM EMP WHERE DEPTNO = 30; SAL 1600 1250 1250 2850 1500 950 COMM 300 500 1400 0 LEAST(1000,2000) 1000 1000 1000 1000 1000 1000 LEAST(SAL,COMM) 300 500 1250 0

Na funo LEAST quando na lista de valores existe um valor nulo ele considerado como o menor.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

65

7.4.6.5 VSIZE
VSIZE(col/valor) retorna o nmero de bytes interno do ORACLE representando um col/valor. SELECT DEPTNO, VSIZE(DEPTNO), VSIZE(HIREDATE), VSIZE(SAL), VSIZE(ENAME) FROM EMP WHERE DEPTNO = 10; SETOR 10 10 10 VSIZE(SETOR) 2 2 2 VSIZE(DATA) 7 7 7 VSIZE(SAL) 3 2 2 VSIZE(NOME) 5 4 6

7.4.7 Funes de Grupo


Funes de grupo operam sobre conjuntos de linhas. Elas retornam resultados baseados sobre um grupo de linhas, antes que um resultado por linha tenha retornado como uma funo de linha nica. Como padro todas as linhas de um tabela so trilhadas como um grupo. A clausula GROUP BY da declarao do SELECT usada para agrupar as linhas em menores grupos. As funes de grupos so listadas abaixo: Funo Valor Retornado AVG([DINSTINCT/ALL]n) Valor mdio de n, ignorando os valores nulos. COUNT([DINSTINCT/ALL]expr*) Contador * conta todas as linhas selecionadas, incluindo duplicadas e linhas nulas MAX([DISTINCT/ALL]expr) valor mximo da expresso MIN([DISTINCT/ALL]expr) valor mnimo da expresso STDDEV([DISTINCT/ALL]n) Desvio padro de n, ignorando valores nulos. SUM([DISTINCT/ALL]n) Valor soma de n, ignorando valores nulos. VARIANCE([DISTINCT/ALL],n) variao de n, ignorando valores nulos. Todas as funes acima operam sobre um nmero de linhas (por exemplo, uma tabela inteira) e so portanto funes de GRUPO. DISTINCT faz uma funo de grupo considerar valores no duplicados; ALL considera todos os valores. Todas as funes de grupo exceto o COUNT(*) ignoram os valores nulos.

7.4.7.1 AVG
Para calcular a mdia salarial dos empregados, faa: SELECT AVG(SAL) FROM EMP; AVG(SAL) ---------2073,2143 Note que as linhas da tabela EMP so trilhadas num nico grupo.

7.4.7.2 MIN
Uma funo de grupo pode ser usada para subconjunto de linhas de uma tabela usando a clausula WHERE. Para encontrar o mnimo salrio ganho por um escriturrio, faa: SELECT MIN(SAL)

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

66

FROM WHERE

EMP JOB = 'CLERK';

MIN(SAL) --------800

7.4.7.3 COUNT
Para encontrar o nmero de empregados do departamento 20, faa: SELECT COUNT(*) FROM EMP WHERE DEPTNO = 20; COUNT(*) -------5

7.4.8 A clusula GROUP BY


Pode ser usada para dividir as linhas de uma tabela em um grupo menor. Funes de grupo devem ser usadas para resumir informaes por cada grupo. Para calcular a mdia salarial de cada grupo de cargo, faa: SELECT JOB, AVG(SAL) FROM EMP GROUP BY JOB; JOB ANALYST CLERK MANAGER PRESIDENT SALESMAN AVG(SAL) 3000 1037.5 2758.33333 5000 1400

7.4.8.1 Grupos dentro de Grupos


Podemos ento usar a clausula GROUP BY para prover resultados para grupos dentro de grupos. Para mostrar a media salarial mensal faturado por cada cargo dentro de um departamento, faa: SELECT DEPTNO, JOB, AVG(SAL) FROM EMP GROUP BY DEPTNO, JOB; DEPTNO 10 10 10 20 20 20 30 30 30 JOB CLERK MANAGER PRESIDENT ANALYST CLERK MANAGER CLERK MANAGER SALESMAN AVG(SAL) 1300 2450 5000 3000 950 2975 950 2850 1400

7.4.8.2 Funes de Grupo e Resultados Individuais


A seguinte declarao SQL retorna o mximo salrio para cada grupo:

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

67

SELECT MAX(SAL), JOB FROM EMP GROUP BY JOB; MAX(SAL) 3000 1300 2975 5000 1600 OCUP ANALYST CLERK MANAGER PRESIDENT SALESMAN

7.4.9 A clausula HAVING


Use a clausula HAVING se voc quiser especificar qual grupo ser mostrado. Para mostrar a mdia salarial para todos os departamentos que tiverem mais de trs empregados, faa: SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING COUNT(1) > 3; DEPTNO 20 30 AVG(SAL) 2175 1566.6667

Para mostrar s os cargos, onde o mximo salrio maior ou igual a $3000, faa: SELECT JOB, MAX(SAL) FROM EMP HAVING MAX(SAL)>=3000 GROUP BY JOB; OCUP ANALYST PRESIDENT MAX(SAL) 3000 5000

A clausula HAVING deve preceder uma clausula GROUP BY e recomendado que seja colocada primeiro, pois mais lgico. A clausula WHERE no pode ser usada para restringir itens de grupo. A seguinte declarao da clausula WHERE errada. SELECT DEPTNO, AVG(SAL) FROM EMP WHERE AVG(SAL) > 2000 GROUP BY DEPTNO; ERROR at line 3: ORA-0934: set function is not allowed here Voc pode unicamente usar WHERE para restringir linhas individuais. Para restringir colunas de grupos usa-se a clausula HAVING: SELECT DEPTNO, AVG(SAL) FROM EMP

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

68

GROUP BY DEPTNO HAVING AVG(SAL) > 2000; SETOR 10 20 AVG(SAL) 2916.66667 2175

7.4.10 A Ordem das clausulas na declarao SELECT.


SELECT FROM WHERE GROUP BY HAVING ORDER BY coluna(s) tabela(s) condio linha coluna(s) condio de grupo de linhas coluna(s);

7.5

Executando Pesquisas Padres com Variveis Substituveis

7.5.1 nica Varivel Substituvel


Voc pode usar variveis substituveis para representar valores, em tempo de execuo. Uma varivel pode ser uma idia de como um valor pode ser armazenado temporariamente. Uma varivel representada por um nico "e" comercial(&), e o valor atribudo na mesma. A seguinte declarao apresenta ao usurio um nmero de departamento na execuo: SELECT EMPNO, ENAME, SAL FROM EMP WHERE DEPTNO = &DEP_NR; Enter value for DEP_NR : 10 EMPNO 7782 7839 7934 ENAME CLARK KING MILLER SAL 2450 5000 1300

O exemplo acima usa a condio WHERE SETOR = 10 Com o nico "e" comercial o usurio solicitado toda vez que o comando executado porque a varivel no definida e consequentemente o valor digitado no salvo. Valores alfanumricos ou datas, precisam ser includos entre aspas simples na entrada. Para evitar a entrada das aspas simples na execuo, declara-se a varivel entre aspas simples. Na declarao seguinte, as variveis esto includas entre aspas simples, s que as aspas simples no so requeridas na execuo: SELECT ENAME, DEPTNO, SAL*12 FROM EMP

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

69

WHERE JOB = '&JOB'; Enter value for OCUP: MANAGER ENAME DEPTNO SAL*12 JONES 20 35700 BLAKE 30 34200 CLARK 10 29400 O tamanho da varivel indefinido e o valor ser pedido toda vez que for executada a declarao. ainda possvel entrar com um nome de coluna de um tabela na execuo. No seguinte exemplo voc entrar com um expresso aritmtica: SELECT DEPTNO, &ARITHMETIC_EXPRESSION FROM EMP; Enter value for arithmetic_expression: sal/12 DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10 &ARITHMETIC_EXPRESSION 66,666667 133,33333 104,16667 247,91667 104,16667 237,5 204,16667 250 416,66667 125 91,666667 79,166667 250 108,33333

7.5.2 Duplo & para Variveis substituveis


Se uma varivel prefixada com um duplo "e" comercial(&&), o SQL*Plus preenche o valor da varivel com o primeiro valor fornecido na execuo da declarao SQL. Exemplo: SELECT ENAME, DEPTNO, JOB FROM EMP WHERE DEPTNO = &&SETOR_PLEASE; Enter value for SETOR_please: 10 ENAME CLARK KING MILLER DEPTNO 10 10 10 JOB MANAGER PRESIDENT CLERK

perguntado uma vez e no mais.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

70

7.5.3 O Comando DEFINE


Um valor pode ser atribudo para uma varivel usando o comando DEF[INE] do SQL*Plus. O valor atribudo pode ser referenciado na declarao SELECT ou pelo nome de varivel predefinido de um (&). Sintaxe: SQL>DEFINE var = valor No exemplo seguinte, uma varivel tem seu contedo definido como uma expresso aritmtica que calcula a remunerao. Na subsequente declarao, a varivel REM referenciada para um nmero de vezes. A varivel ento esvaziada usando UNDEF(INE): DEFINE REM = "SAL*12+NVL(COMM,0)"; SELECT ENAME, JOB, &REM FROM EMP ORDER BY &REM; UNDEFINE REM
NOME ---------SMITH JAMES ADAMS WARD MILLER MARTIN TURNER ALLEN OCUP ---------CLERK CLERK CLERK SALESMAN CLERK SALESMAN SALESMAN SALESMAN SAL*12+NVL(COM,0) -----------------9600 11400 13200 15500 15600 16400 18000 19500

As Aspas duplas em volta da expresso so opcionais a menos que a expresso tenha espaos.

7.5.4 O comando ACCEPT


O comando ACCEPT permite criar uma varivel. O ACCEPT geralmente usado num arquivo comando. Esta varivel ento pode ser referenciada na declarao do SQL. Existem benefcios em usar o ACCEPT para definir Variveis Substituveis. Dados tipo Data podem ser checados. A mensagem de entrada de dados pode ser mais explicativa Valores da resposta podem ser escondidos A sintaxe do comando : ACC(EPT)variable(NUMERICO/ALFANUMERICO)(PROMPT/NOPROMPT 'texto') (HIDE) Sintaxe NUMBER/CHAR PROMPT texto NOPROMPT HIDE Descrio determina o tipo de varivel. Se o valor entrado for invlido uma mensagem ser mostrada. mostra o texto se for especificado faz o ACCEPT omitir uma linha aguardando a entrada esconde entrada para o usurio, por exemplo, no caso de senha.

Exemplos SQL> ACCEPT SALARY NUMBER PROMPT 'Salary figure : '

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

71

Salary figure : 30000 SQL> ACCEPT PASSWORD CHAR PROMPT 'Password : ' HIDE Password : SQL> ACCEPT COM NUMBER NOPROMPT 500 SQL> DEFINE DEFINE SALARY DEFINE PASSWORD DEFINE COM = = = 30000 (NUMBER) "FREEBIES" (CHAR) 500 (NUMER)

Como fazer variveis permanecerem definidas? At que voc as redefina UNDEF(INE) ou at voc sair do SQL*Plus. Duas outras maneiras para definir uma varivel: SQL> ACCEPT varivel (tipo) (PROMPT 'texto') (HIDE) SQL> COLUMN nome coluna NEW_VALUE varivel

7.6

Recuperando valores da base de dados

Voc pode atribuir resultados de querys para variveis, porm tomando cuidado para que a query sempre retorne apenas uma linha. Ex.: SELECT NOTAFISCAL , DATA INTO V_NOTAFISCAL , V_DATA WHERE NUMERO_VENDA = 2334; O comando acima atribui os valores dos campos NOTAFISCAL e DATA para as variveis previamente definidas V_NOTAFISCAL e V_DATA respectivamente.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

72

7.6.1 Comandos de Manipulao de Dados (DML) 7.6.1.1 Insert


Sintaxe: INSERT INTO nome_tabela(campo1,campo2...) VALUES (valor1,valor2...); Ex: INSERT INTO SALGRADE(GRADE,LOSAL,HISAL) VALUES(6, 1500, 3000); Sintaxe: INSERT INTO nome_tabela(campo1,campo2...) SELECT campo1, campo2 FROM nome_tabela2; Ex: create table SALGRADE_TEMP (GRADE NUMBER, LOSAL NUMBER, HISAL NUMBER); INSERT INTO SALGRADE_TEMP(GRADE,LOSAL,HISAL) SELECT GRADE,LOSAL,HISAL FROM SALGRADE;

7.6.1.2 Update
Sintaxe: UPDATE nome_tabela SET campo1 = valor1 [,campo2 = valor2...] [WHERE condio] Ex: UPDATE SALGRADE_TEMP SET HISAL = 2000 WHERE LOSAL < 2000;

7.6.1.3 Delete
Sintaxe: DELETE FROM nome_tabela [WHERE condio] Ex: DELETE FROM SALGRADE_TEMP

WHERE LOSAL < 1000;

7.6.1.4 Create Table.......As Select


Sintaxe: CREATE TABLE nome_da_tabela (nome_da_coluna [restries] [, nome_da_coluna [restries]] [, restries]) AS SELECT..... Ex.:

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

73

CREATE TABLE SALGRADE_TTEMP AS SELECT GRADE, LOSAL FROM SALGRADE_TEMP;

7.6.1.5 Rename
Sintaxe: RENAME nome_antigo_da_tabela TO nome_novo_da_tabela Ex.: RENAME SALGRADE_TTEMP TO SALGRADE_T;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

74

7.7

Seqncias

So estruturas criadas no banco de dados que retornam valores diferentes a cada acesso. Por default este valor cresce seqencialmente.

Sintaxe: CREATE SEQUENCE nome_da_sequencia [STAR WITH valor_inicial] (default1) [INCREMENT BY incremento] (default1) [MAXVALUE valor_maximo_da_sequencia/NOMAXVALUE] [MINIVALUE valor_minimo_da_sequencia/NOMINVALUE] [CYCLE/NOCYCLE] (se for cclica, quando atingir o mximo volta ao incio) Ex.: CREATE SEQUENCE SEQ START WITH 6; Para pegar o valor corrente da seqncia, utiliza-se o valor CURRVAL e para pegar o prximo valor, utiliza-se NEXTVAL. Somente se inicia uma seqncia com o primeiro NEXTVAL referente a ela. Sintaxe: SELECT nome_da_sequencia.CURRVAL from Dual; SELECT nome_da_sequencia.NEXTVAL from Dual; Ex.: SELECT SEQ.NEXTVAL from Dual; 6 SELECT SEQ.CURRVAL from Dual; 6 SELECT SEQ.NEXTVAL from Dual; 7

7.7.1 Alterando uma seqncia


Sintaxe: ALTER SEQUENCE nome_da_sequencia Opo Ex.: ALTER SEQUENCE SEQ INCREMENT BY 2;

7.7.2 Eliminando uma seqncia


Sintaxe: DROP SEQUENCE nome_da_sequencia Ex.: DROP SEQUENCE SEQ;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

75

7.8

ndices

So estruturas que permitem a recuperao rpida de dados. Sintaxe: CREATE [UNIQUE] INDEX nome_do_indice ON nome_da_tabela (nome_da_coluna ASC/DESC[,nome_da_coluna ASC/DESC]...]} Ex.: CREATE INDEX FONE ON CLIENTE (nr_fone); Os ndices no podem ser alterados. necessrio exclu-los e cria-los novamente. Para excluir um ndice utiliza-se o comando DROP INDEX.

7.8.1 Recuperando informaes sobre ndices:


Algumas informaes sobre os ndices(INDEX_NAME, TABLE_OWNER, TABEL_NAME) so armazenadas numa tabela de controle chamada USER_INDEXES e podem ser recuperados a partir do seguinte comando: Sintaxe: SELECT * FROM USER_INDEXES WHERE TABLE_NAME = nome_da_tabela; O nome da tabela alm de estar entre aspas simples deve ser digitado em letras maisculas. Tambm podem ser recuperadas informaes sobre colunas(INDEX_NAME, TABLE_NAME, COLUMN_NAME, COLUMN_POSITION, COLUMS_LENGTH). Estas informaes ficam armazenadas na tabela de controle USER_IND_COLUMNS.

7.9

Controle de Concorrncia

O uso da funo lock mantm a consistncia do banco de dados no caso de acesso simultneo.

7.9.1 Tipos de Lock


Lock implcito gerado internamente pelo banco. Lock explcito criado via comando SQL e pode ser gerado a partir dos comandos Lock table e Select for update.

7.9.1.1 Lock table sobrepe o lock implcito


Sintaxe: LOCK TABLE [nome_da_tabela] IN ROW SHARE / ROW EXCLUSIVE/ SHARE UPDATE / SHARE / SHARE ROW EXCLUSIVE / EXCLUSIVE MODE [NOWAIT] Nome_da_tabela indica qual tabela sofrer o bloqueio. ROW SHARE nenhum outro usurio poder bloquear exclusivamente a tabela. ROW EXCLUSIVE permite acesso simultneo tabela, bloqueando linhas individuais. SHARE UPDATE Somente bloqueia linhas simples, permitindo a continuidade na consulta de dados. SHARE os outros usurios podem consultar os dados mas no podem alter-los. SHARE ROW EXCLUSIVE nenhum outro usurio poder bloquear a tabela. Diferentemente dos outros bloqueios tipo SHARE, somente um usurio por vez poder fazer o COMMIT na tabela.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 EXCLUSIVE s o usurio gerador do bloqueio poder fazer alteraes. NOWAIT libera o processo, caso no for possvel efetuar o bloqueio. Ex.: LOCK TABLE BLOQUEIO In Exclusive Mode; O LOCK termina com o fim da transao (COMMIT/ROLLBACK).

76

7.9.1.2 Select for Update


Bloqueia antecipadamente as linhas que sero alteradas ou excludas at o fim da trasao. Sintaxe: SELECT... FOR UPDATE OF nome_da_coluna1 [,nome_da_colunaN] [NOWAIT] Ex.: SELECT COD, TIPO_BLOQ FROM BLOQUEIO WHERE COD = 1 FOR UPDATE OF COD; O uso do Select for Update no permitido caso o comando select tenha as clusulas DISTINCT, GROUP BY, UNION, INTERSECT ou MINUS e funes de grupo(Count, AVG, Sum, Max, etc)

7.10 Declaraes 7.10.1 Declaraes de Variveis


Variveis so declaradas na seo de declarao de variveis. Em geral a sintaxe para a declarao de variveis : Sintaxe : Nome_variavel type [CONSTANT] [NOT NULL] [:=value] Onde: Nome_varivel : o nome da varivel. Type : o tipo que a varivel ir assumir. CONSTANT : se utilizado, a varivel precisa ser inicializada com um valor, e este valor no pode ser alterado ao longo do programa. NOT NULL : significa que a varivel no poder assumir NULL ao longo do programa. Quando utilizada a varivel deve ser inicializada com um valor. Value : um valor para inicializar a varivel. Ex: DECLARE Const_Temp CONSTANT NUMBER(5) := 15 ; V_SEQ NUMBER(5) ; BEGIN ...... END;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

77

7.10.2 Tipos de Dados PL/SQL


Existem basicamente duas categorias de tipos de dados PL/SQL, que so escalar, composto.

7.10.2.1

Escalar

Tipos escalares podem ser divididos em seis famlias: Number, character, date, raw, rowid, boolean. NUMBER Number - numrico com tamanho mximo de 38 caracteres. Na especificao de tipos de dados numricos com casas decimais, primeiro informado o nmero total de dgitos, que inclui as casas decimais, cujo nmero de dgitos estar separado do primeiro por uma virgula. Number (4) - no mximo 4 caracteres numricos. Number (12,2) - no mximo 12 nmeros (10 inteiros e 2 decimais). Number (-3,8) - 0 inteiros e 8 decimais, em que somente as 3 ltimas podem ter valor. Este tipo de variavel possui alguns subtipos derivados: Decimal - subtipo idntico ao tipo Number. Dec, DoublePrecision, Integer, Int, Numeric, Real e Smalllnt - so subtipos do tipo Number que apresentam, como diferena deste, apenas diferentes faixas de valores permitidos. Float - permite armazenar valores de at 126 dgitos binrios. PLS_Integer - armazena valores numricos, positivos e negativos, entre -2147483647 e 2147483647. Este tipo de varivel requer menor espao de armazenamento do que uma varivel do tipo Number e permite melhor desempenho em clculos do que os tipos Binaryinteger ou Number. Binary-Integer - armazena valores numricos, positivos e negativos, entre -2147483647 e 2147483647. Este tipo de varivel requer menor espao de armazenamento do que uma varivel do tipo Number e possui quatro subtipos derivados desta: Natural - pode armazenar valores entre 0 e 2147483647. NaturaIN - armazena valores entre 0 e 2147483647 e no pode receber valores nulos. Positive - pode armazenar valores entre 1 e 2147483647. PositiveN armazena valores entre I e 2147483647 e no pode receber valores nulos. CHARACTER Char - alfanumrico de tamanho fixo, mximo de 255 caracteres. Character - subtipo idntico ao tipo Char. Varchar2 - alfanumrico de tamanho mximo de 2.000 caracteres. A principal diferena deste tipo para o tipo Char que com o tipo Varchar2 o numero de caracteres que no for utilizado no ocupa espao no banco de dados. Varchar e String - subtipos idnticos ao tipo Varchar2, mas so utilizados apenas para manter compatibilidade com verses diferentes ou anteriores do SQL. Long - alfanumrico com tamanho mximo de 2G. (O tamanho no pode ser informado.) S pode existir um por tabela e no pode ser utilizado na clusula WHERE de consultas. DATE Date - data e hora (formato-padro: DD-MON-YY, 26-APR-74).

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

78

ROWID Rowid - utilizado para armazenar valores de Rowid, selecionados de linhas de tabelas. Este tipo normalmente empregado quando se quer eliminar ou alterar um registro, o qual tenha sido previamente selecionado, visto que Rowid uma forma rpida de acessar uma linha em uma tabela. Formato do Rowid: OOOOOOFFFBBBBBBSSS. Onde OOOOOO- identifica o objeto, FFF-identifica o Data File, BBBBBB- identifica o bloco dentro do Data file e o SSS identifica a linha dentro do bloco. RAW Raw - armazena valores hexadecimais com tamanho varivel (mximo de 2K). Normalmente, este tipo de campo utilizado para armazenamento de imagens. Long Raw - armazena valores hexadecimais com tamanho varivel (mximo de 2G). Tambm utilizado para armazenamento de imagens. BOOLEAN Boolean - permite armazenar os valores TRUE, FALSE ou NULL. No momento de utilizar este tipo de variveis em atribuies, pode-se atribuir um dos valores permitidos explicitamente ou uma condio(>, <, =, <>, ...) cujo valor de veracidade ser atribudo varivel.

7.10.2.1.1 Usando %TYPE

Na maioria dos casos os programas em PL/SQL ir manipular dados que esto armazenados em tabelas do Banco de Dados. Neste caso a varivel deve ser declarada com o mesmo tipo do campo da tabela. Ex: DECLARE V_DEPTNO SCOTT.DEPT.DEPTNO%TYPE ; V_EMPNO SCOTT.EMP.EMPNO%TYPE ; BEGIN ... No exemplo acima V_DEPTNO declarada com o mesmo tipo do campo DEPTNO da tabela DEPT do schema SCOTT. V_EMPNO declarada com o mesmo tipo do campo EMPNO da tabela EMP do schema SCOTT.

7.10.2.2

Tipos de Dados Composto(TABLES e RECORDS PL/SQL).

Ambas as composies so tipos definidos pelo usurio, para uslos, necessrio primeiro definir um tipo RECORD ou TABLE e depois declarar uma varivel com o tipo que foi definido.

7.10.2.2.1 RECORDS
Sintaxe:

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

79

TYPE record_type IS RECORD ( Campo1 type1 [NOT NULL] [:=exp1], Campo1 type2 [NOT NULL] [:=exp2], ... Campo1 type3 [NOT NULL] [:=exp3]) Ex: DECLARE TYPE T_EMP EMPNO ENAME JOB R_EMP T_EMP; BEGIN ... R_EMP.EMPNO := 1; ... END; No exemplo acima T_EMP declarado como um tipo RECORD com os campos EMPNO, ENAME, JOB. Depois R_EMP declarado como o tipo T_EMP.

IS RECORD ( NUMBER(4), VARCHAR2(10), VARCHAR2(9));

7.10.2.2.2 TABLE

Tables so similares a vetores, porm implementado de uma maneira diferente pelo Oracle. Sintaxe TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER Onde: TYPE : indica a declarao de um tipo definido pelo usurio. Tabletype : o nome do tipo que est sendo criado. IS TABLE OF : significa que o tipo ser do tipo TABLE. Type : Indica que ser um tipo TABLE deste tipo. Podendo ser um tipo RECORD. INDEX BY BINARY_INTEGER : faz parte da sintaxe. Futuramente pode ser indexado por outros tipos, porm na verso atual apenas por BINARY_INTEGER. Ex: DECLARE TYPE T_NAME IS TABLE OF SCOTT.EMP.ENAME%TYPE INDEX BY BINARY_INTEGER; TYPE T_DATE IS TABLE OF DATE INDEX BY BINARY_INTEGER; V_NAME T_NAME; V_DATE T_DATE; BEGIN ... V_NAME(1) := JONNAS; V_DATE(1) := SYSDATE; ... END; No exemplo acima so definido dois tipos T_NAME e T_DATE como sendo do tipo TABLE. As variveis V_NAME e V_DATE so declaradas como T_NAME e T_DATE respectivamente. Ao longo do bloco V_NAME de ndice 1 recebe JONNAS e V_DATE de ndice 1 recebe a data atual do sistema.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

80

7.10.2.2.3 Atributos do tipo TABLE.


Atributo COUNT DELETE EXISTS FIRST LAST NEXT PRIOR Tipo Retornado NUMBER N/A BOOLEAN BINARY_INTEGER BINARY_INTEGER BINARY_INTEGER BINARY_INTEGER Descrio Retorna o nmero de linhas na tabela Deleta uma linha na tabela Retorna true se existe o ndice na tabela Retorna o ndice da primeira linha da tabela Retorna o ndice da ltima linha da tabela Retorna o ndice da prxima linha Retorna o ndice da linha anterior

7.10.2.3 Usando %ROWTYPE


Assim como o %TYPE, o %ROWTYPE far com que a varivel assuma a mesma estrutura de uma linha da tabela, ou seja, a varivela ser um tipo RECORD que ter todos os campos da tabela que aparece na declarao. Ex: DECLARE R_DEPT SCOTT.DEPT%ROWTYPE ; BEGIN ... R_DEPT.DEPTNO := 1; ... END; No exemplo acima R_DEPT declarada com o mesma estrutura da tabela DEPT do schema SCOTT. Logo abaixo, o campo DEPTNO do RECORD R_DEPT recebe o valor 1.

7.10.3 Subtype
Podem ser definidos pelo usurio e servem para colocar restries opcionais aos tipos j existentes. Um subtipo deve ser antes baseado em um tipo j existente: Sintaxe: SUBTYPE nome_do_subtipo IS nome_do_tipo_base; Ex.: DECLARE --Baseado Subtype Subtype --Baseado AuxNome Subtype --Subtipo Subtype --Baseado Type

no Tipo escalar(Date) ou subtipo (Natural) padro EmpDate Is Date; Contador Is Natural; no tipo varchar2 e restrio de tamanho mximo (50) AuxNome Varchar2(50); Nome Is Aux_nome%Type; predefinido Character Is Char; em um tipo tabela NameTab Is TABLE OF Varchar2(10) INDEX BY BINARY INTEGER; Subtype EnameTab IS NameTab; --Baseado em um tipo registro Type TpTime Is RECORD

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

81

(minuto Integer, hora Integer); Subtype Momento Is TpTime; --Baseado em uma coluna Subtype TpCodigo is Cliente.CdCliente%Type; --Baseado no registro de um cursor Cursor Cur-Pais is Select * From Pais; Subtype Rec-Pais is Cur_Pais%Rowtype; --Utilizando subtipos criados NmClienteAux Nome, ContAux Contador; Begin Null; End;

7.10.4 Atribuindo Valores s Variveis


Pode-se utilizar o operador (:=), ou a partir de um comando SELECT atribuir valores com o uso da clusula INTO. Neste caso o comando deve retornar apenas uma linha. Ex: Select Into From Where Qt_Produto, VI_Unitario Qtdd, Valor Item_Nota_Fiscal nr_nota = 1;

Total := Qtdd * Valor; Existe := (Conta < 1200);

7.10.5 Escopo de Variveis


Quando uma varivel definida dentro de um bloco, ela no reconhecida fora do bloco, ou seja, ela local para este bloco e global para os sub-blocos. Como um bloco somente pode incluir variveis locais e globais, blocos isolados no podero referenciar variveis declaradas em outros blocos. Se uma varivel global for declarada em um sub-bloco, a declarao local prevalecer, Ex.: Declare Nm Produto Produto.Nm_Produto%Type; VI_Custo Number; Begin --Esto disponveis VI_Custo de tipo number e Nm_Produto. Declare VI_Custo Varchar2; NVI_Custo Number; Begin --Esto disponveis Vl_Custo de tipo varchar2, NVI Csto e Nm Produto. End; --Esto disponveis VI-Custo de tipo number e Nm Produto. End;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

82

7.11 Codificao de Comando SQL Dentro de PL/SQL


Comandos como INSERT, DELETE, UPDATE e SELECT e as funes (manipulaes de strings, numricas, de datas e genricas), podem ser utilizados dentro de blocos PL/SQL. O comando SELECT receber, obrigatoriamente, a clusula INTO, pois o resultado do mesmo no poder ser visualizado no momento de sua execuo, e ser armazenado em variveis ou estruturas. O comando SELECT deve ser criado para que retorne somente uma linha selecionada. Caso nenhuma linha seja retornada ocorrer um erro do tipo "no_data_found" e se mais de uma linha for retomada ocorrer um erro do tipo "too_many_rows'. Ex.: Declare Nome Cliente.Nm_Cliente%Type; Codigo Cliente.Cd_Cliente%Type; Begin SELECT Nm_cliente, Cd_Cliente INTO Nome, Codigo FROM Cliente WHERE Cd_Cliente = &Cod; End;

7.12 Tratamento de Transaes


Comandos de terminao das transaes: CONNECT/DISCONNECT Comandos DDL (que gere alteraes no dicionrio de dados Encerramento explcito por meio dos comandos COMMIT/ ROLLBACK. Savepoints: COMMIT - finaliza a transao efetivando as atualizaes no banco, de forma que os demais usurios (sesses) consigam acessar essas alteraes. ROLLBACK - finaliza a transao desfazendo todas as alteraes feitas no banco durante a transao. ROLLBACK TO - desfaz as alteraes realizadas no banco a partir da primeira instruo aps o ponto especificado. Ou seja, permite desfazer apenas parte de uma transao. 0 ponto a partir do qual ser desfeita a transao deve ter sido especificado com o comando SAVEPOINT. SAVEPOINT - permite a especificao de um ponto de processamento dentro de uma transao. Sintaxe COMMIT: ROLLBACK; SAVEPOINT Nome_do_Ponto; ROLLBACK TO Nome-do-Ponto; Ex.: Declare Nr_Nova_Nota Nota_Fiscal.Nr_Nota%Type; Begin -- insere dados nas tabelas Empresa e Filial Insert into Empresa (Cd_Empresa, Nm_Empresa) Values (3, 'Empresa teste 3'); Insert into Filial (Cd_Empresa, Cd_Filial, Nm_Filial) Values (3, 1, 'Filial I - BC'); SavepointLocal; -- insere dados nas tabelas Estado e municpio

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

83

Insert into Estado (Cd_Pais, Sg_EStado, Nm_Estado) Values (1, 'SP', 'So Paulo'); Insert into municipio (Cd_Pais, Sg_Estado, cd_Municipio, Nm_municipio) Values (1, SP, 10, 'Sorocaba'); Savepoint Pessoa; -- Insere dados na tabela Cliente Insert into Cliente (Cd_Cliente,Nm_Cliente,Ds-Endereco,Cd-Municipio,Sg_Estado,Nr_Cep, NR_DDD,Nr_Fone,le_Sexo,Ie_Fisica_juridica,Cd_Estado_Civil,Cd_Pais, Ie_Situacao) Values (50,'Fulano da Silva','Estrada Geral de Ida e Vinda', 10, 'Sp', '890103301, 047, 2312331, 'M', 'S',1, 1,'A'); Savepoint Notas; -- Insere dados nas tabelas Nota_Fiscal e Item_Nota_Fiscal Select Nvl (Max (Nr_Nota) , 0) + 1 Into Nr_Nova_Nota From Nota_Fiscal; Insert into Nota_Fiscal (Nr_Nota, Cd_Cliente, Dt_Emissao, le_Tipo_Nota) Values (Nr_Nova_Nota, 50, sysdate, C); Insert into Item_Nota_Fiscal (Nr_Nota, Nr_ltem, Cd_Produto, Qt_Produto, VI_Unitario) Values (Nr_Nova_Nota, 1 , 1, 15, 3.25); Rollback to Pessoa; Commit; End,

7.13 Estruturas de Controle 7.13.1 IF THEN ELSE


Sintaxe: IF expreo_booleana1 THEN Sequencia_de_comandos1; [ELSIF expreo_booleana2 THEN Sequencia_de_comandos2;] [ELSE Sequencia_de_comandos3;] END IF;

Ex: IF V_SALARIO < 100 THEN V_FUCIONARIO := COITADO; V_PRIVILEGIOS := 0; ELSIF V_SALARIO = 100 THEN V_FUNCIONARIO := ESTA MELHORANDO; V_PRIVILEGIOS := 0; ELSE V_PRIVILEGIO := 1; END IF;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

84

7.13.2 WHILE-LOOP
Sintaxe: WHILE condio LOOP Sequencia_de_comandos1; END LOOP; Ex.: WHILE V_CONTADOR < 50 LOOP V_CONTADOR := V_CONTADOR +1; END LOOP ;

7.13.3 FOR-LOOP
Sintaxe: FOR varivel_contador IN [REVERSE] valor_inicial..valor_final LOOP Sequencia_de_comandos1; END LOOP; Ex: FOR V_CONTADOR IN 1..50 LOOP V_TESTE := V_CONTADOR; END LOOP;

7.13.4 LOOP
Sintaxe LOOP Relao de comandos IF Condio_de_saida then EXIT END LOOP;

7.14 Cursores:
Guarda resultados de uma seleo em memria, permitindo a manipulao deste resultado de uma maneira procedural; deve ser declarado na rea de declaraes; o nome no pode ser igual ao da tabela; para dar um nome a uma coluna da seleo basta colocar o nome do alias logo aps a definio da coluna.

Sintaxe: CURSOR nome_do_cursor IS SELECT ... [FOR UPDATE OF colunas] Em que Relao_de_parmetros pode Ter o seguinte formato: Nome_do_parmetro tipo_de_dado {:= / DEFAULT} valor_inicial. Obs.: O tamanho do parmetro no pode ser declarado, somente seu tipo. Ex.:

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 CURSOR Preferencia IS SELECT DISTINCT I.Cd_Produto, NM_Produto Nome FROM Item_Nota_Fiscal I, Nota_Fiscal N, Produto P WHERE N.Cd_Cliente = cliente AND N.Nr_Nota = I.Nr_Nota AND I.Cd_Produto = P.Cd_Produto;

85

7.14.1 Comandos de Manipulao do cursor: 7.14.1.1 Open:

Cria numa rea de memria conhecida como Private SQL Area, uma tabela com um ponteiro apontando para o primeiro registro. Parmetros devem ser passados neste momento. Sintaxe: Open Preferencia ;

7.14.1.2

Fetch

Transfere as linhas armazenadas no cursor, para variveis, alm de posicionar o ponteiro no prximo registro do cursor. A lista de variveis que aparece na sintaxe do comando FETCH deve ter o mesmo nmero de variveis, na mesma seqncia e com tipos correspondentes s colunas selecionadas no comando SELECT da declarao do cursor. Sintaxe: FETCH nome_do_cursor INTO lista_de_variveis Ex.1: Declare Cursor Preferencia IS Select Distinct

I.Cd_Produto, Rpad(P.Nm_Produto, 30) Nome

From Item_Nota_Fiscal I, Nota_Fiscal N, Produto P Where N.Cd Cllente = cliente N.Nr_Nota = I.Nr_Nota I.Cd_Produto = P.Cd_Produto; Codigo Produto.Cd_Produto%Type; Nome Produto.Nm_Produto%Type; Begin ... Fetch Preferencia Into Codigo, Nome; Dbms_Output.Put_Line ('Produto: ||Nome); ........ End; Ex. 2: Declare Cursor Preferencia (Cliente Number) IS Select Distinct I.Cd_Produto,

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 Rpad(P.Nm_Produto, 30) Nome From Item_Nota_Fiscal I, Nota_Fiscal N, Produto P Where N.Cd_Cliente = Cliente And N.Nr_Nota = I.Nr_Nota And I.Cd_Produto = P.Cd_Produto; Reg_Pref Preferencia %RowType; Begin ..... Fetch Preferencia Into Reg_Pref; Dbms_Output.Put_Line ('Produto: '|| Reg_Pref.Nome); ..... End; Para cada cursor, quatro atributos podem ser verificados a cada execuo do comando FETCH:.

86

Nome_do_cursor%FOUND - retorna TRUE caso o FETCH consiga retornar alguma linha e FALSE, caso contrrio. Se nenhum FETCH tiver sido executado ser retornado NULL. Nome_do_cursor%NOTFOUND - retorna FALSE caso o FETCH consiga retornar alguma linha e TRUE, caso contrrio. Se nenhum FETCH tiver sido executado ser retornado NULL. Nome_do_cursor%ROWCOUNT - retorna o nmero de linhas j processadas pelo cursor. Se nenhum FETCH tiver sido executado ser retornado 0 (zero) Nome_do_cursor%ISOPEN - retorna TRUE caso o cursor esteja aberto e FALSE, caso contrrio.

7.14.2 Close
Libera a rea de memria utilizada pelo cursor. Sintaxe: CLOSE nome_do_cursor Ex.: CLOSE Preferencia; Exemplo Completo: Declare Cursor Preferencia (Cliente Number) IS Select Distinct I.Cd_Produto, Rpad(P.Nm_Produto, 30) Nome From Item_Nota_Fiscal I, Nota_Fiscal N. Produto P Where N.Cd_Cllente = Cliente And N.Nr_Nota = I.Nr_Nota And I.Cd_Produto = P.Cd_Produto; Reg_Pref Preferencia %Rowtype; Begin Open Preferencia (1); Loop Fetch Preferencia Into Reg_Pref; Exit When Preferencia%Notfound;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 Dbms_output.Put_line (Produto: ||Reg_Pref.Nome); End Loop; Close Preferncia; End;

87

7.14.3 O Comando For para abrir Cursores:


Cria a varivel do tipo registro Abre o cursor Realiza a cpia das linhas (Fetch) Controle o final do cursor Fecha o mesmo Para sair do lao, o cursor deve ser fechado explicitamente com o comando close. Sintaxe: FOR Nome_da_variavel_tipo_registro IN Nome_do_cursor (Lista_de_parametros) LOOP Relao_de_comandos END LOOP;

7.14.4 Atualizao na tabela da linha atual do cursor:


Declara-se o cursor como For Update e a atualizao ser feita com base no indicador de linha corrente (CURRENT OF). O ROWID do registro ser carregado com os demais itens do cursor e no UPDATE, a comparao ser feita internamente, com o ROWID. Sintaxe: CURSOR nome_do_cursor IS SELECT .... FOR UPDATE OF campos_a_atualizar UPDATE ... WHERE CURRENT OF nome_do_cursor

7.14.5 Cursores Implcitos:


Atributos de cursores que podem ser verificados com significado e retorno: SQL%FOUND retorna true se algum registro foi afetado ou se retornou algum registro; SQL%NOTFOUND retorna true se nenhum registro foi afetado. SQL%ROWCOUNT retorna numero de registros afetados ou a ltima quantidade de registros afetados(dever ser sempre 1) SQL%ISOPEN sempre retornar false

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

88

7.15 Tratamento de Excees


As excees podem ser predefinidas ou definidas pelo usurio. Sintaxe: EXCEPTION WHEN nome_da_exceo THEN Relao_de_comandos WHEN nome_da_exceo THEN Relao_de_comandos

7.15.1 Excees Predefinidas


Este tipo de exceo disparada implicitamente quando, no bloco PL/SQL, uma regra Oracle violada ou um limite de sistema excedido. Estas excees podem ser identificadas por um nome e um nmero. CURSOR_ALREADY_OPEN (ORA-06511, SQLCODE -06511) ocorre quando se tenta abrir um cursor que j est aberto. DUP_VAL_ON_INDEX (ORA-00001, SQLCODE -00001) ocorre na tentativa de armazenar um valor duplicado em uma coluna de uma tabela que possui chave nica ou primria. INVALID_CURSOR (ORA-01001, SQLCODE -01001) ocorre quando se tenta executar uma operao ilegal com um cursor, como fechar um cursor que no esteja aberto. INVALID_NUMBER (ORA-01722, SQLCODE -01722) ocorre na tentativa de converter uma string em nmero, caso a string no represente um nmero vlido. LOGIN_DENIED (ORA-01017, SQLCODE -01017) ocorre na tentativa de conexo com o banco com um username/passvvord invalido. NO_DATA_FOUND (ORA-01403, SQLCODE -01403) ocorre quando um comando SELECT ... lNTO no retornar nenhuma linha. NOT LOGGED_ON (ORA-01012, SQLCODE -01012) ocorre na tentativa de acessar o banco de dados sem que se esteja conectado a ele. PROGRAM ERROR (ORA-06501, SQLCODE -06501) ocorre em caso de problemas internos do PL/SQL. ROWTYPE_MISMATCH (ORA-06504, SQLCODE -06504) ocorre se o retorno do cursor e a varivel PL/SQL para retorno de um cursor sejam de tipos incompatveis. STORAGE_ERROR (ORA-06500, SQLCODE -06500) ocorre se no houver memria suficiente para a execuo de um bloco PL/. TIMEOUT_ON_RESOURCE (ORA-00051, SQLCODE -00051) ocorre quando acontecer um timeout enquanto o Oracle estiver aguardando um recurso. TOO_MANY ROWS (ORA-01422, SQLCODE -01422) ocorre quando um comando SELECT... INTO retornar mais de uma linha. VALUE-ERROR (ORA-06502, SQLCODE -06502) ocorre quando houver um erro aritmtico, de converso, truncagem ou tamanho, como quando um valor numrico for selecionado para dentro de uma varivel caracter, ou o valor for maior do que o declarado para a varivel. ZERO-DIVIDE (ORA-01476, SQLCODE -01476) ocorre na tentativa de dividir qualquer nmero por zero. OTHERS permite tratar outros erros, com a ajuda das funes SQLCODE e SQLERRM, que retorna o nmero do erro Oracle e o texto da mensagem de erro, respectivamente. Variveis que possuam restrio de limites (inferior e superior) pela definio de tipo ou subtipo dispararo restrio de VALUE-ERROR caso estes limites sejam ultrapassados.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

89

7.15.2 Excees Definidas pelo Usurio


Precisam ser declaradas e chamadas explicitamente pelo comando RAISE. Somente podem ser declaradas na rea de declaraes de um bloco PL/SQL, subprograma ou package. Sintaxe: Declare Nome_da_exceo EXCEPTION; Begin Relao_de_comandos If ........then RAISE Nome_da_exceo; End if; Relao_de_comandos Exception WHEN Nome_da_exceo THEN Relao_de_comandos End;

7.15.2.1

Utilizando OTHERS ou PRAGMA EXCEPTION_INIT

Um pragma renomeia um erro oracle para o compilador, permitindo escrever um tratamento especfico, sem que uma exception seja explicitamente chamada. Os pragmas so chamados em tempo de compilao e no afetam o significado do programa. Deve ser declarado na rea de declaraes de um bloco, subprograma ou package e precisa Ter o nome da exceo previamente declarado. Sintaxe: Declare Nome_da_exceo Exception; Pragma Exception_Init (nome_da_exceo, cdigo_erro); Begin Relao de comandos Exception When Nome_da_exceo then Relao_de_comandos End;

7.15.2.2

Raise_Application_Error

uma procedure que permite a emisso de mensagens de erro, definidas pelo usurio. Os erros podem ser relatados e evita-se o retorno de excees no tratadas. Sintaxe: RAISE_APPLICATION_ERROR (cdigo_erro, texto)

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

90

7.15.2.3

DBMS_output.put_line()

Coloca uma linha no buffer, e mostra na tela. SQL> set serveroutput on; SQL> exec dbms_output.put_line(sysdate); 10-MAR-01

7.16 Subprogramas (Procedures e Functions)


So blocos PL/SQL, armazenados na base de dados e chamados sempre que necessrios. O nome de um subprograma pode ter, no mximo, 30 caracteres. No momento de sua criao pode ser includo o parmetro OR REPLACE, o qual substituir um subprograma j existente por uma nova verso. As vantagens dessa opo manter os privilgios existentes, criar mesmo que haja erro de sintaxe, marcar objetos dependentes para compilao. Para que um subprograma seja criado como Pblico utilizam-se os seguintes comandos: GRANT EXECUTE ON Nome_do_Subprograma TO PUBLIC; CREATE PUBLIC SYNONYM Nome_do_Subprograma FOR Sinnimo_Pblico_do_Subprograma; Informaes dos subprogramas so armazenadas na tabela USER_OBJECTS, a qual pode ser acessada pelo usurio para obter dados como nome, tipo, data de criao, data de compilao, etc. J o texto das procedures e functions encontram-se na tabela USER_SOURCE. Exemplo de como obter o cdigo de um subprograma: SELECT TEXT FROM USER_SOURCE WHERE NAME = Nome_do_subprograma em maisculo ORDER BY LINE; A lista de argumentos de um subprograma obtida atravs do comando DESCRIBE. Sintaxe: DESCRIBE nome_da_procedure / function Os erros de compilao podem ser obtidos de duas formas: Ex.1: SELECT LINE, POSITION, TEXT FROM USER_ERRORS WHERE NAME = Nome_subprograma em maisculo ORDER BY LINE Ou Ex.2: SHOW ERRORS PROCEDURE Nome_subprograma;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

91

7.16.1 Parmetros
Podem ser de entrada, sada ou entrada/Sada: IN (padro) - passa um valor do ambiente chamador para o subprograma e este valor no pode ser alterado dentro do subprograma. OUT- passa um valor do subprograma para o ambiente chamador. IN OUT- passa um valor do ambiente chamador para o suprograma; este valor pode ser alterado dentro do subprograma e retornado com o valor atualizado para o ambiente chamador.

7.16.2 Procedures
CREATE OR REPLACE PROCEDURE Nome_Proc [(Argumento[{IN | OUT | IN OUT}] tipo, ....... Argumento [{IN | OUT | IN OUT}] tipo] {IS | AS} Corpo_procedimento Onde, nome_procedimento como se chama o procedimento, argumento o nome de um parmetro de procedimento, tipo o tipo do parmetro associado e corpo_procedimento um bloco de PL/SQL que constitui o cdigo do procedimento.

7.16.3 Functions:
Retornam resultado ou valor. Podem ser utilizadas em atribuies a variveis ou como argumento em comando Select. CREATE OR REPLACE FUNCTION Nome_funo [(Argumento[{IN | OUT | IN OUT}] tipo, ....... Argumento [{IN | OUT | IN OUT}] tipo] RETURN tipo_retorno {IS | AS} Corpo_funo Tipo_retorno o tipo do valor que a funo devolve.

7.16.4 Executando subprogramas atravs do SQL* Plus:


EXECUTE Nome_Procedure(Lista_de_parmetros) SELECT Nome_Funo(Lista_de_parmetros) FROM DUAL

7.16.5 Eliminando um subprograma:


DROP PROCEDURE / FUNCTION nome_do_Procedimento / nome_da_funo

7.16.6 Anlise das dependncias:


Um subprograma pode depender diretamente de tabelas, vises, seqncias e outros subprogramas. Pode ainda possuir dependncias indiretas de outros objetos. Por exemplo, se uma procedure A depender diretamente de uma function B, que depende diretamente de uma tabela C, ento a procedure A depender indiretamente da tabela C. Quando um objeto com o qual o subprograma possui uma relao de dependncia for modificado, o status do subprograma na tabela USER_OBJECT ficar como INVALID.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

92

Recompilando um subprograma que esteja como o status INVALID: ALTER PROCEDURES / FUNCTION nome_da_procedure / nome_da_function COMPILE Relaes de dependncia dos objetos podem ser encontradas na tabela USER_DEPENDENCIES. Exemplo de como verificar os objetos que dependem de um outro objeto: SELECT NAME, TYPE FROM USER_DEPENDENCIES WHERE REFERENCED_NAME = Nome_Objeto_que_se_quer_alterar;

7.17 Packages
So objetos equivalentes a bibliotecas que guardam Procedures, Functions, definies de cursores, variveis e constantes, definies de excees.

7.17.1 Especificao
Na rea de especificao so feitas as declaraes pblicas (variveis, constantes, cursores, excees e subprogramas que estaro disponveis para uso externo package. Sintaxe: CREATE OR REPLACE PACKAGE Nome_da_package IS Para procedures e functions s os cabealhos (interface) PROCEDURE Nome_da_Procedure (Lista_de_Parmetros); FUNCTION Nome_da_Function (lista_de_Parmetros Declarao de variveis, constantes, excees e cursores pblicos END Nome_da_Package;

7.17.2 Body
No corpo so feitas as declaraes privadas, que estaro disponveis internamente package Sintaxe: CREATE OR REPLACE PACKAGE BODY Nome_da_Package IS Declarao de variveis, constantes, excees e cursores privados PROCEDURE Nome_da_Procedure (Lista_de_Parmetros) IS BEGIN END; FUNCTION Nome_da_Function (Lista_de_Parmetros) RETURN tipo BEGIN RETURN END; END;

Para eliminar uma Package, utiliza-se DROP PACKAGE e DROP PACKAGE BODY.

A lista de erros de uma package obtida atravs do comando: SHOW ERRORS PACKAGE Nome_da_Package SHOW ERRORS PACKAGE BODY Nome_da_Package

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

93

7.17.3 Execuo de Estruturas Pblicas de uma Package:


Subprogramas podem ser executados em vrios ambientes: EXECUTE Nome_da_Package.Nome_procedures(Lista_de_Parmetros) SELECT Nome_da_Package.Nome_Funo(Lista_de_Parmetros) FROM DUAL. Recompilando Packages: ALTER PACKAGE nome_da_Package COMPILE PACKAGE --compila a especificao e o corpo ALTER PACKAGE nome_da_Package COMPILE PACKAGE ESPECIFICATION --a especificao ALTER PACKAGE nome_da_Package COMPILE PACKAGE BODY --compila o body

7.18 Triggers
So disparados implicitamente quando ocorrem eventos (INSERT, UPDATE, DELETE) em uma tabela. O Trigger deve estar obrigatoriamente associado a uma tabela. Sintaxe: CREATE OR REPLACE TRIGGER nome_da_trigger {BEFORE / AFTER} DELETE OR INSERT OR UPDATE OF (nome_coluna1, nome_tabela REFERENCING [OLD as antigo] [NEW as novo] FOR EACH ROW WHEN condio DECLARE Variveis, constantes, etc. BEGIN ..... END ;

nome_coluna2,

....)

ON

Os tempos de uma trigger podem ser: BEFORE disparada antes do evento AFTER disparada depois do evento A trigguer pode ser disparada pelos eventos INSERT, UPDATE e DELETE. No uso do UPADATE, as colunas devem ser especificadas aps a palavra OF. Uma trigger pode ainda ser do tipo COMANDO, que manipula dados dentro de uma tabela e executa uma nica vez; ou do tipo LINHA, que manipula linhas de uma tabela e pode ser executada uma ou mais vezes.

7.18.1 Criao de triggers


So permitidas at 12 triggers para cada tabela, incluindo todas as combinaes possveis entre tempos, eventos de disparo e tipos de triguer. Tambm no so permitidas triggers com o mesmo tempo, evento de disparo e tipo para uma mesma tabela.

7.18.2 Triggers possveis para uma tabela:


BEFORE UPDATE Linha BEFORE UPDATE comando BEFORE DELETE linha BEFORE DELETE comando BEFORE INSERT linha BEFORE INSERT comando AFTER UPDATE linha

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 AFTER UPDATE comando AFTER DELETE linha AFTER DELETE comando AFTER INSERT linha AFTER INSERT comando

94

No se permite no corpo de uma trigger o uso de comandos COMMIT e ROLLBACK. Tambm no podem ser alteradas chaves primrias, nicas ou estrangeiras.

O comando DROP TRIGGER serve para elimin-la. Podem ainda se habilitadas e desabilitadas: ALTER TRIGGER nome_da_trigger ENABLE ALTER TRIGGUER nome_da_trigger DISABLE ALTER TABLE nome_da_tabela ENABLE ALL_TRIGGERS (habilita todas de uma tabela) ALTER TABBLE nome_da_tabela DISABLE ALL_TRIGGERS (desabilita todas de uma tabela). As informaes sobre triggers so encontradas na tabela USER_TRIGGERS.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

95

Na hora da definio da preciso do campo devemos ficar atentos para no economizar demais a ponto de definir o campo matricula do funcionrio como NUMBER(2) e a empresa fica limitada a ter no mximo 99 funcionrios, e nem gastar demais, pois sempre bom lembrar que quanto menor o tamanho da linha, mais linhas cabero em um bloco, e quanto mais linhas couberem em um bloco, mais linhas iro para a memria a cada leitura do HD e menos espao em disco ir ocupar. EX. de criao de uma tabela. CREATE TABLE FUNCIONARIO( MATRICULA NUMBER(3) NOT NULL , NOME VARCHAR(2) NOT NULL ID_DEPTO NUMERIC (2) NOT NULL) STORAGE( INITIAL 5M NEXT 10M PCTINCREASE 50 MINEXTENTS 2 MAXEXTENTS 200) TASBLESPACE USER; STORAGE: INITIAL : Tamanho inicial da tabela. NEXT : Indica o tamanho que a tabela vai crescer quando ficar cheia. PCTINCREASE : A cada vez que a tabela crescer ela vai crescer o tamanho da clausula NEXT mais esta porcentagem. MINEXTENTS : nmero mnimo de extenses de uma tabela. MAXEXTENTS : nmero mximo de extenses em uma tabela. TABLESPACE : Nome da rea que a tabela vai ficar. Esta rea est associada a um arquivo fsico.

ndices: ndices so estruturas auxiliares que esto sempre ligados a uma tabela. Servem para agilizar as consultas diretas e indiretas. Devemos tomar certos cuidados ao criar ndices, pois quanto mais ndices em uma tabela, maior ser o tempo de insert, update e delete de uma tabela, sem contar que aumenta o consumo de disco. Quando criar ndices: Quando temos consultas constantes por um determinado campo da tabela que retorne menos que 5% do tamanho total da tabela, como por exemplo o campo NOME da tabela de CLIENTES (consultas diretas).

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

96

Quando temos uma tabela muito grande que possui uma FK para uma outra tabela que sofre constantes delees (consultas indiretas) DOCUMENTO NUMERO DATA 01 01/01/1996 ... ... 200000 01/01/1999 VALOR 200,00 ... 100,00

LANCAMENTO_CONTABIL NUM_LANC DOCUMENTO(FK) 01 01 02 01 ... ... 01 02 .. 200000 200000 ...

DATA 01/01/1996 01/01/1996 ... 01/01/1999 01/01/1999 ...

VALOR -200,00 200,00 ... ... -100,00 100,00 ...

Repare que a coluna DOCUMENTO da tabela de LANCAMENTO_CONTABIL uma FK para a tabela de DOCUMENTO. Quando o usurio quiser excluir uma linha na tabela DOCUMENTO o SGBD ter que verificar se existe algum lancamento contbil para este documento, e se no houver um ndice para a coluna de DOCUMENTO o SGBD far uma leitura da tabela inteira. OBS. Sempre que se cria uma PK em uma tabela, o SGBD cria automaticamente um ndice nico para a coluna ou colunas que formam a PK. Neste caso a ordem de como se cria a PK tambm influencia, pois se na tabela de LANCAMENTO_CONTABIL fosse criado DOCUMENTO,NUM_LANC , no precisaria criar um ndice para DOCUMENTO, pois o SGBD poderia aproveitar o prprio ndice criado da chave primria. Criando ndices para implementar cardinalidades 1:1. Ex. TABELA1(COLUNA1,COLUNA2,COLUNA3) TABELA2 (COLUNA1, COLUNA2,COLUNA3) Digamos que a a TABELA1 possui um relacionamento de 1:1 com a TABELA2. A COLUNA3 da TABELA2 possui uma FK para a TABELA1, desta maneira est implementado um relacionamento 1:N , para implementar um relacionamento 1:1 devemos criar um ndice nico para a FK, para garantir que a os valores da COLUNA3 no se repitiro. Sintaxe para a criao de ndice. CREATE [UNIQUE] INDEX index_name ON table_name (COLUNA [{ASC | DESC}]) [TABLESPACE tablespace_name] [STORAGE( INITIAL 5M NEXT 10M

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 PCTINCREASE 50 MINEXTENTS 2 MAXEXTENTS 200)] A clusula STORAGE igual a da TABELA.

97

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

98

7.19 Criao de Tabelas


Toda a tabela criada no banco de dados ela tem que possuir um owner (dono), que exatamente o usurio que cria a tabela. Toda tabela no momento da criao, no devem possuir foreign keys, as foreign keys devem ser incluidas no final da criao de todas as tabelas, pois se no momento da criao de uma tabela ela referenciar outra tabela que ainda no foi criada, o SGBD retornar uma mensagem de erro e no criar a tabela. Ex: CREATE TABLE ALUNOS (MATRICULA VARCHAR2 (12) NOT NULL , NOME VARCHAR2 (40) NOT NULL , ID_CURSO NUMBER (2) NOT NULL ); ALTER TABLE ALUNOS ADD CONSTRAINT ALUNOS_PK PRIMARY KEY (MATRICULA); CREATE TABLE CURSOS (ID_CURSO NOME NUMBER (2) NOT NULL , VARCHAR2 (40) NOT NULL);

ALTER TABLE CURSOS ADD CONSTRAINT CURSOS_PK PRIMARY KEY (ID_CURSO); . . . ALTER TABLE ALUNOS ADD CONSTRAINT ALUNOS_CURSOS_FK FOREIGN KEY (ID_CURSO) REFERENCES CURSOS (ID_CURSO);

7.20 Criao de Views


Para que tenha uma camada lgica entre a aplicao e os dados, ou para reduzir a viso dos usurios aos dados, necessrio que os acessos sejam feitos as views. CREATE VIEW ALUNOS_V00 AS SELECT * FROM ALUNOS; CREATE VIEW CURSOS_V00 AS SELECT * FROM CURSOS;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

99

7.21 Criao de Stored Procedures :


Stored procedures um procedimento que quando chamado executado no servidor, pelo prprio SGBD. Escrito em uma linguagem do prprio SGBD (no caso do Oracle 8: PL\SQL e Java). Sintaxe: CREATE [OR REPLACE] PROCEDURE procedure_name [(parametro1 [{IN|OUT|IN OUT}] type, ... parametro2 [{IN|OUT|IN OUT}] type)] AS declarative section BEGIN executable section . . . EXCEPTION exception section END procedure_name ; Exemplo: CREATE OR REPLACE PROCEDURE INSERIR_ALUNO( P_MATRICULA IN ALUNOS.MATRICULA%TYPE, P_NOME IN ALUNOS.NOME%TYPE, P_ID_CURSO IN ALUNOS.ID_CURSO%TYPE ) AS BEGIN INSERT INTO ALUNOS(MATRICULA , NOME , ID_CURSO) VALUES (P_MATRICULA ,P_NOME,P_ID_CURSO); END INSERIR_ALUNO ;

7.22 Criao de Functions :


As funes podem ser usadas inclusive na clausula SELECT. Por exemplo eu poderia ter uma funo que ao passar a matrcula de um aluno, a funo retorne o nome do aluno. Desta maneira eu poderia fazer um SELECT apenas na tabela de MATRICULA e retornar o nome do aluno, sem precisar ir na tabela ALUNOS. Sintaxe: CREATE [OR REPLACE] FUNCTION funcion_name [(parametro1 [{IN|OUT|IN OUT}] type, ... parametro2 [{IN|OUT|IN OUT}] type)] RETURN return_type {IS|AS} BEGIN .. END function_name ; Exemplo: CREATE OR REPLACE FUNCTION NOME_ALUNO ( P_MATRICULA IN ALUNOS.MATRICULA%TYPE) RETURN ALUNOS.NOME%TYPE

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 IS V_NOME ALUNOS.NOME%TYPE; BEGIN SELECT NOME INTO V_NOME FROM ALUNOS WHERE MATRICULA = P_MATRICULA; RETURN V_NOME; END NOME_ALUNO;

100

7.23 Criao de triggers :


Trigger um procedimento que executado automaticamente pelo SGBD, de acordo com um evento em uma tabela(insert , delete , update). Este procedimento executado no servidor. Sintaxe : CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE|AFTER} [INSERT|DELETE|UPDATE] ON table_name [FOR EACH ROW [WHEN trigger_condition]] BEGIN . . . END triger_name ; Exemplo: CREATE OR REPLACE TRIGGER MATRICULA_I BEFORE INSERT OR UPDATE ON MATRICULA FOR EACH ROW DECLARE V_NUM_LINHAS NUMBER ; BEGIN SELECT COUNT(*) INTO V_NUM_LINHAS FROM DBO.ALUNOS A, DBO.CURSOS C, DBO.CURRICULO R WHERE A.ID_CURSO = C.ID_CURSO AND C.ID_CURSO = R.ID_CURSO AND A.MATRICULA = :NEW.MATRICULA AND R.ID_DISCIPLINA = :NEW.ID_DISCIPLINA; IF V_NUM_LINHAS = 0 THEN RAISE_APPLICATION_ERROR (-20001 , 'DISCIPLINA NAO FAZ PARTE DO CURRICULO'); END IF; END MATRICULA_I;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

101

8 Privilgios.
8.1 Privilgios

Os privilgios de sistemas so dados a um usurio para permitir que o usurio execute atividades no Banco , como criar tabelas , criar ndices , criar uma sesso , criar um objeto procedural , entre outros . J os privilgios de objeto , como o prprio nome diz , so relativos a aes que um usurio poder fazer em um objeto de outro usurio , como selecionar , inserir linhas , deletar linhas , atualizar linhas , executar um procedimento. Os privilgios so dados atravs do comando grant , e revogados atravs do comando revoke , aproveitando o exemplo acima , podemos dizer que dois usurio foram criados , aluno e professor , ambos precisam ter o privilgio de criar sesses e criar tabelas para poderem criar suas tabelas e conectarem-se ao banco , alm disso , pela desejamos que somente os professores vejam os dados da tabela veculos do aluno, ento , o usurio aluno dever fornecer ao usurio professor o privilgio de selecionar a tabela veculos. Sintaxe: GRANT privilgio TO [user_name|role] Onde: Privilgio : o privilgios que estamos querendo atribuir. Podemos atribuir vrios privilgios em um s comando, basta separa-los por vrgula. [user_name|role] : Nome do usurio ou grupo de usurios que receber o privilgio.

REVOKE privilgio FROM [user_name|role] Onde: Privilgio : o privilgios que estamos querendo revogar. [user_name|role] : Nome do usurio ou grupo de usurios que ter o privilgio revogado.

8.2

Roles

Quando falamos em conceder permisses sobre objetos a nvel de sistema , falamos em algo como 80 tipos diferentes de privilgios , sendo que destes , vrios so dados em conjunto a um usurio especfico ou a um perfil de usurios. Com a finalidade de facilitar a administrao , podemos definir as roles como agrupamentos de privilgios , tanto de sistema quanto de objeto , que tem por objetivo gerar perfis de privilgios que podem ser associados a usurios ou a outras roles , facilitando a manuteno (Figura 16).

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

102

Privilgios Create table Create Session

Role R_estacio R_Estacio

Usurio Aluno1 Aluno2 Aluno3 Aluno4 Aluno5

. . .
Aluno98 Aluno99

8.2.1 Criando uma ROLE


Sintaxe: CREATE ROLE ROLE_NAME;

8.2.2 Atribuindo uma ROLE para um usutio


Sintaxe: GRANT ROLE_NAME TO USERNAME

8.2.3 Atribuindo uma ROLE para outra ROLE


Sintaxe : GRANT ROLE_NAME TO ROLE_NAME

Exemplo de Implementao Por questo de segurana contra usurios mal intencionados ou simplesmente usurios que no sabem direito o que fazem , devemos deixar os usurios conseguir acessarem exatamente o que eles devem acessar. Para isto devemos fazer uma matriz de objetos x perfil de usurio, para identificar exatamente quais os privilgios a serem dado a cada perfil de usurio. No conveniente dar privilgios de acesso diretamente as tabelas, por questo de manutenibilidade e flexibilidade em momentos crticos. Os acessos devem ser feitos sempre a views. conveniente que as alteraes na base de dados seja feita sempre atravz de stored procedure. Isto elimina uma boa parte de inconsistncias na base de dados, tendo em vista que os acessos sero pr-definidos dentro das procedures. Garante a implementao de restries de integridade, e ainda tem um ganho de performance, tendo em vista que os comandos j ficam prcompilados. claro que muitas vezes por questo de prazo de projeto nem sempre h tempo para se implementar uma soluo deste tipo. Sendo assim, os acessos de consulta devem ser sempre a views, e as alteraes sempre por stored procedure. 1. Identificar quais diferentes perfis ter o sistema. 2. Identificar os privilgios de cada perfil (matriz objetos x perfil de usurio). 3. Identificar em qual pefil cada usurio se encaixa.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

103

Vejamos um exemplo de matriz objetos x perfil de usurio. V E N D A S C O N T A B I L I D A D E X X C O M P R A

G E R E N C I A

VENDAS_V00 ITENSVENDA_V00 FORNECEDORES_V00 FORNECIMENTO_V00 PRODUTOS_V00

X X X X X

X X

X X X

Existem dois comandos bsicos para gerenciamento de privilgios: GRANT : Atribui um privilgio SINTAXE: GRANT privilgio ON nome_objeto TO usuario ou perfil Ex: GRANT SELECT ON VENDAS_V00 TO GERENCIA; REVOKE : Retira um privilgio REVOKE privilgio ON nome_objeto FROM usuario ou perfil Ex: REVOKE SELECT ON VENDAS FROM GERENCIA;

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

104

9 Exerccios
9.1 Modelo Conceitual e Lgico

Faa o modelo de entidades e relacionamentos para os caso: abaixo, especificando todas as Restries de Integridade caso necessrio. 1) Um diretor de cinema deseja saber quais os filmes que ele j fez e quais os atores que trabalharam em cada filme. 2) Uma empresa deseja saber quais os seus departamentos e quais os funcionrios que neles esto alocados. Sabendo-se que um funcionrio tem que estar alocado a um e somente um departamento, e um departamento pode Ter vrios funcionrios quanto nenhum. 3) Uma empresa deseja saber quanto e quais os produtos seus vendedores vendem. Podendo saber qual foi o vendedor responsvel por uma determinada venda. 4) Uma empresa deseja acompanhar os preos de cada produto que seus fornecedores fornecem, atravs dos pedidos de compra j enviados para os fornecedores. 5) Uma empresa deseja guardar informaes sobre seus clientes e que produtos eles compram. Guardando tambm informaes de todos os produtos que um cliente comprou em uma determinada nota fiscal. 6) Considerando os exerccios 2,3,4 e 5 como se fosse a mesma empresa. Faa o modelo completo para atender a esta empresa.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 7) Farmcia Farma Vida

105

Uma rede de farmcias deseja colocar seus remdios disponveis para venda na internet. Cada remdio deve ser identificado por um cdigo que depende do laboratrio que o fornece. Cada Laboratrio deve ser identificado pelo seu cgc. Cada remdio s pode ser fornecido por um e apenas um laboratrio. A venda identificada unicamente pela nota fiscal, e deve conter a data da venda, o status da venda e qual o funcionrio fez a entrega. Cada venda deve possuir vrios itens de venda, sendo que em cada item deve possuir o remdio, o preo do remdio e a quantidade. O cliente deve ser identificado pelo cpf e deve ser guardado no sistema o nome, e-mail e endereo do cliente. A venda paga a vista e em dinheiro no momento da entrega do remdio. A entrega do remdio feita apenas por um funcionrio que identificado pela sua matrcula.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 8) TV a Cabo NetCat

106

Uma empresa de TV a cabo deseja automatizar seu servio de cobrana. Para isto todos os requisitos abaixo devem ser preenchidos. Um Canal deve ser identificado por seu nmero, e deve conter o nome do canal. Um pacote um conjunto de canais que disponibilizado ao cliente mediante uma assinatura. Cada pacote criado pela empresa, tem que conter no mnimo um canal, ou vrios e um canal s pode pertencer a um e somente um pacote. O pacote deve possuir como informaes o nome do pacote, e o preo alm dos canais que ele contm. Para um cliente ser cadastrado ele precisa fazer uma assinatura de ao menos um pacote. Para um cliente deve ser guardado o cpf, nome, endereo, e o seu e_mail. Um cliente deve ser identificado pelo seu cpf . Uma assinatura deve possuir um e somente um cliente, um ou vrios pacotes, data de ativao da assinatura, data de desativao da assinatura e o endereo de instalao.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 9) Supermercado pela Internet

107

Uma rede de Supermercados deseja disponibilizar seus produtos para serem vendidos na internet, e deseja ter um sistema para controlar os itens abaixo. Fornecimento: Cada pedido deve ser feito a um fornecedor. Cada pedido deve ter um item de pedido ou mais, onde cada item de pedido deve guardar o produto , o preo do fornecedor e a quantidade. Para que haja um melhor controle sobre os fornecedores, deve existir um cadastro de fornecedores e os produtos que eles fornecem. Um fornecedor deve constar no cadastro, mesmo que ele nunca tenha fornecido nenhum produto. Venda de Produtos: Uma venda s pode ser realizada caso o cliente j seja cadastrado, sendo assim , caso o cliente no exista deve ser recolhido os dados cadastrais do cliente, que deve ser inserido antes de fazer a compra. Desta maneira o ciente s poder fazer qualquer operao caso ele fornea o seu usurio e senha. Caso o usurio j exista e ele tenha esquecido sua senha, ele deve poder se cadastrar novamente, porm ao invs de inserir um novo cliente, os seus dados devem ser apenas atualizados. Uma vez que o cliente fornea seu usurio e senha para usar o sistema, aparecer para ele uma lista com todas as sees do supermercado, o cliente deve escolher uma determinada seo e aparecer todas as gndolas da seo, o cliente deve ento selecionar uma gndola onde ser disponibilizado para ele todos os produtos da gndola. O cliente deve poder comprar diversos produtos em apenas uma compra. Ao trmino da compra o cliente deve fornecer o nmero e a bandeira do carto de crdito que ele usar para pagar a compra feita e receber via e_mail a lista de todos os produtos que ele comprou contendo o nmero da nota fiscal que identificar sua compra. A cada produto selecionado pelo usurio, deve ser atualizado na quantidade em estoque do produto. Cartes de Crdito : Para uma empresa aceitar uma determinada bandeira(Visa , CrediCard , Amex , etc...) de carto de crdito, ela deve se cadastrar junto a bandeira, primeiramente ela deve possuir uma conta em algum banco com que a bandeira trabalha. Possuindo a conta, a loja recebe uma identificao(para uso da bandeira do Carto de Crdito) assim como uma mquina onde ser digitado o nmero do carto e o valor da compra. A restituio do dinheiro para a empresa ser feito em um determinado dia do ms, que especificado quais as compras foram restitudas. Cada carto ganha um percentual em cima de cada transao que feita, podendo este percentual variar de bandeira para bandeira, por exemplo: se um cliente faz uma compra de 100 reais com um carto Visa, digamos que o Visa trabalha com um percentual de 5%, ento o Visa ir depositar na conta da empresa apenas 95 reais referentes a esta transao. Cada Bandeira trabalha apenas com determinados Bancos. Produtos: O cadastro de produto deve conter o nome do produto, seu preo unitrio e a quantidade de unidade de medida em que vendido. Cada produto deve possuir uma unidade de medida (ml , Kg , Litros e etc..) ex. um Iogurte da XPTO vendido em uma garrafa de 200ml, o '200' a quantidade e o 'ml' a unidade de medida. Cada produto deve estar em uma gndola e cada gndola deve se localizar em uma seo.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

108

10) Hospital SafeLife O Hospital SafeLife deseja desenvolver um sistema para controlar das internaes de seus pacientes. O Hospital mantm convnio com vrios planos de sade e atende a dois tipos de pacientes: pacientes conveniados (pacientes que possui plano de sade das instituies conveniadas) e pacientes particulares pacientes que no possuem plano de sade das instituies conveniadas) Os pacientes conveniados podem possuir mais de um plano de sade. De todos os pacientes necessrio saber o seu nome, endereo e telefone. Dos pacientes particulares importante conhecer a sua renda mensal. O Hospital possui vrias enfermarias, cada uma com vrios leito para internao. As enfermarias possuem nome e localizao e os leitos apenas o nmero. Quando um paciente internado (conveniado ou particular), o Hospital registra o leito ocupado pelo paciente, a data da internao e da alta do paciente. As internaes dos pacientes conveniados so custeado por um nico plano de sade, dentre os que o paciente associado.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 11) Curso Bom Aluno

109

No Curso Bom Aluno todos os professores so lotados em um nico Departamento. Cada Departamento, identificado por um nome, sempre chefiado por um de seus professores. Dos professores importante saber o seu nome, endereo e titulao. Os professores podem ministrar mais de uma disciplina (eventualmente, um professor pode no ministrar nenhuma disciplina), mas toda disciplina ministrada por um nico professor. Das disciplinas importante conhecer o nome e carga horria. As disciplinas so cursadas pelos alunos do curso, que possuem nome, endereo e nmero de matrcula. Um aluno pode no estar cursando nenhuma disciplina ou no mnimo duas e no mximo 4, Os alunos so avaliados mediante a realizao de provas, que so realizadas em datas e salas previamente definidas (a prova de uma disciplina realizada em uma nica sala), O sistema deve registrar o grau obtido pelos alunos, em cada prova. As salas, onde as provas so realizadas, pertencem a trs diferentes edifcios. Cada edifcio possui um nome e as salas um nmero.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

110

12) Rede de Hotis A rede de hotis Cnco Estrelas deseja desenvolver um sistema para controle de reservas e hospedagens. A rede possui hotis em vrias cidades do pas. Em algumas cidades, a rede possui mais de um hotel. Dos hotis importante saber o seu nome, endereo, valor da diria e a sua classificao (nmero de estrelas). Alm disso, para que os hotis possam ser univocamente identificados, no sistema atual eles possuem um cdigo numrico. Os hotis possuem um nmero variado de apartamentos, sendo todos iguais. Os apartamentos so sempre identificados por um nmero sequencial (1 O 1, 102 ... 201, 202 ... ). A rede de hotis possui uma central onde so ofetuadas as reservas para todos os seus hotis. Ao reservar um apartamento, a central registra a data prevista da chegada e da sada do hspede. comum um hspede reservar de mais de um apartamento para uma mesma poca. Quando o hotel recebe um hspede para hospedagem, ele informa a Central de Reservas a data do inicio da hospedagem e a data prevista da sada do hspede. O trmino da hospedagem informado por ocasio da sada do hspede do hotel. comum ocorrerem hospedagens sem reserva prvia e um mesmo hspede pode ocupar, simultaneamente, mais de um apartamento. A central possui um cadastro de todos os seus hspedes contendo o nome, endereo e telefone. Alguns hspedes, considerados especiais, recebem um desconto variado sobre o valor da diria.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

111

13) CIA. Area Ao viajar de avio, costume o passageiro efetuar reserva em um vo antes da sua chegada ao aeroporto. Considere uma Cia. Area Hipottica e um passageiro viajando de uma cidade para outra. O passageiro solicita os servios de um agente de viagem, que telefona para a Central de Reservas da Cia. para efetuar as reservas. O atendente da Central de Reservas solicita os detalhes do itinerrio do passageiro - ele deseja ir de Recife para o Rio de Janeiro, onde participar de um -.urso que comear s 09.00h da segunda-feira, 16 de junho. O atendente faz uma consulta ao sistema de informaes de vos da Cia, e descobre que existe um vo chegando s 20:30h do domingo, 15 de julho. O agente de viagem diz que este vo atende ao passageiro e o atendente volta a consultar o sistema para verificar a existncia de lugares vagos. O vo escolhido esta com a classe executiva lotada, mas existe um vo mais cedo com lugares vagos, que faz escala em Salvador e chega ao Rio s 21:00h. Como o passageiro d preferncia ao primeiro vo, seu nome includo na lista de espera deste vo, alm de ter lugar confirmado no vo mais cedo, O agente relaciona as duas reservas, para que o lugar confirmado possa ser liberado, caso o da lista de espera venha a ser confirmado. O passageiro fornece os detalhes adicionais da reserva, tais como janela ou corredor, fumante ou no fumante, cardpio de carne ou vegetais e, ento, a reserva concluda. O bilhete de passagem emitido duas semanas antes da data de partida. Neste ano fiscal, a Cia. Hipottica tem como objetivo aumentar o lucro sobre a venda de passagens em 5%. Para atingir este objetivo, a Cia. resolveu melhorar a classe executiva de vrias maneiras- prover um servio personalizado de alocao de assentos para passageiros regulares, criar uma sala de espera no principal aeroporto do pas Hipottico, dando publicidade a esses dois novos servios atravs de anncios e marketing direto. Voltando ao passageiro, ele chega ao check-in para efetuar o CIA. Area Ao viajar de avio, costume o passageiro efetuar reserva em um vo antes da sua chegada ao aeroporto. Considere uma Cia. Area Hipottica e um passageiro viajando de uma cidade para outra. O passageiro solicita os servios de um agente de viagem, que telefona para a Central de Reservas da Cia. para efetuar as reservas. O atendente da Central de Reservas solicita os detalhes do itinerrio do passageiro - elo deseja ir de Recife para o Rio de Janeiro, onde participar de um -.urso que comear s 09-.00h da segunda-feira, 16 de junho. O atendente faz uma consulta ao sistema de informaes de vos da Cia, e descobre que existe um vo chegando s 20:30h do domingo, 15 de julho. O agente de viagem diz que este vo atende ao passageiro e a atendente volta a consultar o sistema para verificar a existncia de lugares vagos. O vo escolhido esta com a classe executiva lotada, mas existe um vo mais cedo com lugares vagos, que faz escala em Salvador e chega ao Rio s 21:00h. Como o passageiro d preferncia ao primeiro vo, seu nome includo na lista de espera deste vo, alm de ter lugar confirmado no vo mais cedo. O agente relaciona as duas reservas, para que o lugar confirmado possa ser liberado, caso o da lista de espera venha a ser confirmado. O passageiro fornece os detalhes adicionais da reserva, tais como janela ou corredor, fumante ou no fumante, cardpio de carne ou vegetais e, ento, a reserva concluda. O bilhete de passagem emitido duas semanas antes da data de partida. Neste ano fiscal, a Cia. Hipottica tem como objetivo aumentar o lucro sobre a venda de passagens em 5%. Para atingir este objetivo, a Cia. resolveu melhorar a classe executiva de vrias maneiras- prover um servio personalizado de alocao de assentos para passageiros regulares, criar uma sala de espera no principal aeroporto do pas Hipottico, dando publicidade a esses dois novos servios atravs de anncios e marketing direto. Voltando ao passageiro, ele chega ao check-in para efetuar o embarque. Como ele tem uma reserva confirmada, a Cia, sabe que h ligares suficientes no avio. Neste momento, alocado um assento enumerado especfico para o passageiro. O representante da Cia. verifica a Disponibilidade de assentos na classe executiva da aeronave, observa a Existncia de diversos lugares vazios e que o passageiro tem preferncia por corredor e pela rea de no fumantes. Isto confirmado com o Passageiro perguntando se ele deseja seu lugar usual. Um dos assentos no corredor da rea de no fumantes alocado ao passageiro. Adicionalmente, 5 representante verifica que o passageiro optou pelo cardpio de vegetais e confirma se esta continua sendo opo.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

112

9.2

SQL

Faa o comando SQL para os seguintes casos abaixo, marcando no comando onde aparece cada operao algbrica. Considere o modelo abaixo.

1. 2. 3. 4.

Uma relao de matricula e nome de todos os alunos. Uma relao com o nome de todos os cursos ordenados pelo nome de forma ascendente Uma relao de todos os alunos que iniciem com ZE Uma relao contendo matricula, nome e cdigo do curso de cada aluno. Resultado ordenado pelo nome do aluno. 5. Uma relao contendo a matricula e nome dos alunos e o nome de cada curso que esto cursando. 6. Uma relao contendo a matricula e nome dos alunos e o nome de cada disciplina que os alunos esto matriculados. Resultado ordenado por nome do aluno 7. Uma relao contendo o cdigo e nome da disciplina, a matricula e nome de cada aluno matriculado. O resultado deve ser ordenado pelo nome da disciplina e pelo nome do aluno 8. Uma relao contendo o cdigo e nome da disciplina, a matricula e nome de cada aluno matriculado. O resultado deve ser ordenado pelo nome da disciplina e pelo nome do aluno 9. Uma relao contendo o cdigo e nome da disciplina, a matricula e nome de cada aluno matriculado. Caso a disciplina no possua nenhum aluno matriculado, deve aparecer somente o nome da disciplina. O resultado deve ser ordenado pelo nome da disciplina e pelo nome do aluno 10. Uma relao contendo o nome do curso, a matricula e o nome de cada aluno matriculado. Caso o curso no possua nenhum aluno, deve retornar apenas o nome do curso. Resultado ordenado pelo nome do curso e nome do aluno. 11. Uma relao contendo o nome dos cursos que no possuem nenhum aluno matriculado. 12. Uma relao contendo o nome de todas as disciplinas que no possuem nenhum aluno matriculado.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.

113

Uma relao contendo o nome das disciplinas que os alunos faltam fazer para se formar. Uma relao contendo o nome dos alunos que j cursaram todas as disciplinas de seu curso. Retornar a quantidade de alunos Retornar a quantidade de cursos Uma relao contendo o nome do curso e a quantidade de alunos que esto matriculados. Uma relao contendo o a matricula e nome do aluno, e a mdia das mdias finais de cada disciplina. Uma relao contendo o cdigo e nome da disciplina, a maior nota obtida pelos alunos, a mdia de todas as notas finais, a menor nota e a quantidade de alunos que j cursaram cada disciplina. Nome dos alunos que j cursaram a mesma disciplina mais de uma vez. Resultado ordenado por nome do aluno. Nome de todos os alunos que j cursaram mais de 3 perodos, no importando a ordem. Nome de todos os alunos que possuem CR maior que 6.5. Nome de todos os alunos e a mdia das notas de todas as disciplinas. Somente deve ser considerada as disciplinas que tiveram mdia maior ou igual a 7. Nome de todos os alunos que no esto cursando nenhuma disciplina no momento e j cursaram mais de 3 perodos distintos. Nome de todas as disciplinas do curso de REDES, que no possuem nenhum aluno matriculado no momento, possui mdia das notas maior que 7 e no teve nenhuma nota final menor que 4. Nome de todos os alunos matriculados no curso de REDES e nome de todos os alunos que j cursaram mais de uma disciplina. Resultado ordenado por nome do aluno. Nome de todos os alunos que esto cursando mais de uma disciplina e nome dos alunos que j cursaram mais de 3 disciplinas.

9.3

PLSQL

28. Desenvolva uma procedure para inserir na tabela de matricula somente as disciplinas que fazem parte do curso do aluno. 29. Desenvolva uma procedure para que um aluno se matricule em uma disciplina que ele j tenha cursado com mdia final maior ou igual a 7 30. Desenvolva uma procedure que deve receber o ano perodo (tabela de histrico) e transfira cada linha da tabela de matricula para o histrico contendo zero para a mdia final. Cada linha transferida deve ser uma transao. 31. Desenvolva uma procedure que receba como parmetro o ano perodo, matricula do aluno, cdigo da disciplina e a media final e altere o valor da mdia final do aluno. 32. Desenvolva um trigger para impedir que um aluno se matricule em uma disciplina que no faz parte do curso do aluno 33. Desenvolva um trigger para impedir que um aluno se matricule em uma disciplina que ele j tenha cursado com mdia final maior ou igual a 7 34. Desenvolva um trigger para impedir que seja feito qualquer comando dml na tabela HISTORICO fora do perodo de 8:00 as 19:00. 35. Desenvolva um trigger para fazer a auditoria na tabela de histrico, recuperando o usurio do banco que fez a alterao, o usurio da rede, a mquina e o horrio que foi executado a alterao. Deve ser criado uma tabela de auditoria para o histrico.

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

114

9.4

Banco de Dados Distribudo

Uma rede de supermercados que atua em todo o territrio nacional, deseja melhorar os seus servios aumentando a performance e a disponibilidade de seus sistemas. Pede-se: 1- Matriz de SISTEMAS x SITES 2- Matriz de SISTEMAS x TABELAS 3- Matriz TABELAS x SITES 4- Tabelas de sentido de replicao. 5- Quais sero as transaes distribudas.

Sistema de Controle de Carto de Crdito.


O sistema de controle de carto de crdito, controla o pagamento por parte das bandeiras de cartes de crdito e deve rodar no escritrio de contabilidade no (RJ). Para conferir o total que uma bandeira deve depositar na conta da rede, deve ser calculado o somatrio de todas as vendas realizada com a determinada bandeira dentro do ms.Para isto o sistema deve acessar as seguintes tabelas: Vendas ItensVenda Bandeiras Bancos Agencias Agencias_Tel Contas BancosBandeiras

Sistema de Controle de Pedidos


O sistema de controle de pedidos tem o objetivo de controlar todos os pedidos de produtos feitos aos fornecedores, assim como o cadastro de todos os produtos. Deve rodar no escritrio do RJ, SP e BA. Cada escritrio pode fazer pedidos para qualquer supermercado de qualquer estado ou municpio. As tabelas utilizadas so: Fornecedores Pedidos Produtos ItensPedido UnidadeMedida Fornecedores_Tel

Sistema de Vendas
O sistema de vendas deve controlar as vendas para os clientes. Este sistema deve rodar nos supermercados. O cadastro de Clientes deve ser replicados entre os supermercados. As tabelas utilizadas so: Produtos UnidadeMedida Vendas ItensVenda Secao Gondola Clientes Clientes_Tel

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

115

Prof. Flavio Rezende

Apostila de Banco de Dados v.4.0

116

Uma empresa de nibus de turismo que atua em todo o territrio nacional, deseja melhorar os seus servios aumentando a performance e a disponibilidade de seus sistemas. Pede-se: 1- Matriz de SISTEMAS x SITES 2- Matriz de SISTEMAS x TABELAS 3- Matriz TABELAS x SITES 4- Tabelas de sentido de replicao. 5- Quais sero as transaes distribudas.

Sistema de Controle de multas.


O sistema de controle de multas utilizado apenas na matriz (RJ). Este sistema controla as multas emitidas para seus veculos em cada viagem, devendo identificar qual foi o motorista que recebeu a multa. Para isto o sistema deve acessar as seguintes tabelas: Veculo Multa Motorista Viagem

Sistema de Controle de Tickets


O sistema de controle de tickets tem o objetivo de controlar as vendas dos tickets, que podem ser vendidos em qualquer estao de nibus. O passageiro pode optar por comprar a viagem inteira ou parte dela. Cada estao de nibus ter o seu servidor local onde deve Ter parte dos dados replicados A tabela de TICKET deve ser centralizada na matriz(RJ). O sistema deve rodar na matriz que far toda a parte de cadastro e nas estaes, onde haver a venda de tickets. As tabelas utilizadas so: Estado Cidade Estacao Rota_Estacao Ticket Viagem Rota

Prof. Flavio Rezende

Você também pode gostar