Escolar Documentos
Profissional Documentos
Cultura Documentos
Banco de Dados
1 2
3.3
Atributos............................................................................................................................ 11
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
Normalizao..................................................................................................................... 18
Derivao de Agregaes ......................................................................................................... 22 Restries de Domnio.............................................................................................................. 23 Restries de Integridade.......................................................................................................... 23 Restries de Implementao ................................................................................................... 24 Objetos bsicos de um SGBDR ................................................................................................ 24
4.4
7.2
7.3 7.4
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
7.6 7.7
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
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
9 10
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
Caractersticas do SGBD Relacional (tambm conhecidos como SGBDR). Linguagem SQL. Backup/Recovery. Segurana. Integridade. Controle de concorrncia de transaes. Desempenho.
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
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
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.
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.
FK para DEPARTAMENTOS, ou seja, todos os valores desta coluna tem que existir na tabela de DEPARTAMENTOS na coluna da PK.
3.2
Entidades
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.
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.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.
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.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:
12
3.4
Relacionamentos
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.
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.
15
16
17
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
18
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.
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.
... 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.
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.
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
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.4
O assunto restrio ser tratado sob trs aspectos bastante distintos. So eles:
23
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.
24
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.
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)
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.
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
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.
27
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
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
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
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.
ou Nota matrcula
Aluno
Disciplina
Nota
31
6.1
Entidade
Toda entidade vira tabela e seu(s) atributo(s) identificadores formar a chave primria (PK). Aluno
Matrcula Nome Endereco
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
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:
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.
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
SPO(OL) OFF/OUT
DESC(RIBE) tabela HELP $O/S comando HOST comando CONN(ECT) usurio/senha EXIT
35
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.
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)
Comandos
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;
MGR 7902
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
DEPTNO 20 30 30 20 30 30 10 20 10 30 20 30 20 10
ENAME, SAL*12, COM EMP; SAL*12 9600 19200 15000 35700 15000 34200 29400 COMM 300 500 1400
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
39
EMPREGADO 7369SMITH 7499ALLEN 7521WARD 7566JONES 7654MARTIN 7698BLAKE 7782CLARK 7788SCOTT 7839KING 7844TURNER 7876ADAMS 7900JAMES 7902FORD 7934MILLER
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
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.
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
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
42
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
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.
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
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.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.
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.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
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.
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.
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
48
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
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
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.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
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
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..................
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
RTRIM(col/value,caractere(s))
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
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.
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.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
7.4.3.2 TRUNC
TRUNC(col/value.n) trunca a coluna, expresso ou valor para n casas decimais. Se n negativo
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
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(99.9) 99 99 99
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
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
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
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.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
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%';
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.
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
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
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
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
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.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.
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
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
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
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'));
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
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.
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.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)
66
FROM WHERE
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
67
SELECT MAX(SAL), JOB FROM EMP GROUP BY JOB; MAX(SAL) 3000 1300 2975 5000 1600 OCUP ANALYST CLERK MANAGER PRESIDENT SALESMAN
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
68
GROUP BY DEPTNO HAVING AVG(SAL) > 2000; SETOR 10 20 AVG(SAL) 2916.66667 2175
7.5
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
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
70
As Aspas duplas em volta da expresso so opcionais a menos que a expresso tenha espaos.
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
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.
72
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
73
7.6.1.5 Rename
Sintaxe: RENAME nome_antigo_da_tabela TO nome_novo_da_tabela Ex.: RENAME SALGRADE_TTEMP TO SALGRADE_T;
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
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.9
Controle de Concorrncia
O uso da funo lock mantm a consistncia do banco de dados no caso de acesso simultneo.
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
77
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).
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.
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
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:
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.
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.
80
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
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;
82
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,
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;
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.:
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
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
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,
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;
Apostila de Banco de Dados v.4.0 Dbms_output.Put_line (Produto: ||Reg_Pref.Nome); End Loop; Close Preferncia; End;
87
88
89
7.15.2.1
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)
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
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.
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
93
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.
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.
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).
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
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
Apostila de Banco de Dados v.4.0 PCTINCREASE 50 MINEXTENTS 2 MAXEXTENTS 200)] A clusula STORAGE igual a da TABELA.
97
98
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);
99
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
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).
102
. . .
Aluno98 Aluno99
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.
103
G E R E N C I A
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;
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
114
9.4
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 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
115
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.