Академический Документы
Профессиональный Документы
Культура Документы
Sistema Gerenciador de Banco de Dados Uma Viso Geral dos Produtos ORACLE
O modelo relacional tem como base o ramo da matemtica conhecido como lgebra relacional. Este modelo envolve:
uma coleo de objetos conhecidos como relaes, um conjunto de operadores que agem nestas relaes produzindo novas relaes.
Relao
Restrio Projeo Produto Join Union Interseo Diferena
Descrio
A restrio traz um subconjunto de linhas de uma tabela que atende a determinada restrio imposta. ( Subconjunto Horizontal); Operao que mostra um subconjunto de colunas de uma tabela. (subconjunto vertical) o resultado do produto entre dois conjuntos de linhas de tabelas. o resultado da combinao de dois conjuntos de dados sob determinadas condies. Tem como resultado todas as linhas que aparecem em ambas as relaes. Tem como resultado somente as linhas que aparecem em ambas as relaes Tem como resultado as linhas que aparecem em uma das relaes mas no na outra.
SQL
a linguagem padro dos bancos de dados relacionais, entre eles o ORACLE.
PL/SQL
Extenses procedurais do ORACLE ao SQL.
SQL*DBA
Conjunto de ferramentas do administrador do banco de dados.
SQL*Loader
Permite entrada de dados a partir de tabelas ASCII para as tabelas ORACLE
10
Designer/2000
Conjunto de ferramentas CASE que abrange todas as fases do desenvolvimento de aplicativos de banco de dados.
Data Query
Ferramenta de consulta baseada em formulrios para usurios finais.
Data Browser
Ferramenta de consulta grfica para usurios finais.
Mdulo II
Introduo Linguagem SQL Escrevendo Comandos SQL Variveis de Substituio em Queries
13
14
15
Descrio
seleciona dados de uma base de dados Insere linhas em uma tabela altera valores de linhas na base de dados elimina linhas na tabela cria objetos na base de dados altera a estrutura de um objeto da base elimina determinado objeto da base de dados d direitos de acessos aos objetos do banco de dados retira direitos de acesso aos objetos do banco
* t ec l ; t se no ec lu el a s m * ro ; f ct no e lu el a s om fr
om fr
; no lu a
17
Ser aberta uma caixa de dilogo para voc entrar com o nome do seu usurio, sua password e a identificao do banco de dados que voc vai entrar ( connect string );
18
19
20
Note que o nome das colunas separado por vrgulas. possvel tambm selecionar todas as colunas de uma tabela.
Ex.:
sql> select * from aluno;
21
Considerando uma carga de 4 horas/dia o curso poderia ser dado em carga_horaria/4 dias
22
23
24
25
26
27
28
NOM_CIDADE -------------------NATAL NATAL MANAUS BELO HORIZONTE MANAUS BELO HORIZONTE CAMPINAS CURITIBA
29
NOM_CIDADE -------------------CURITIBA CAMPINAS BELO HORIZONTE MANAUS BELO HORIZONTE MANAUS NATAL NATAL
30
Significado
igual a maior que maior ou igual a menor que menor ou igual a
31
32
33
34
35
36
37
O smbolo % significa qualquer caracter ( ou conjunto ) de caracteres. Outro operador que pode ser usado junto com a clausula like o _ (underscore) que substitui um nmero especfico de caracteres.
SQL> select nom_aluno 2 from aluno 3 where nom_aluno like '____'; NOM_ALUNO ------------------------JOS JOO ROSA
38
39
Operador is null
SQL> select cod_curso, nom_curso, carga_horaria 2 from curso 3 where carga_horaria is null; COD_CURSO NOM_CURSO CARGA_HORARIA --------- --------------------------------------- ------------6 SISTEMAS OPERACIONAIS
40
NOM_ALUNO ------------------------FELIPE
41
42
44
45
Para substituir o valor de uma varivel ou criar uma nova varivel && usa-se o comando define.
46
47
OBS
O comando ACCEPT no deve ser copiado para a rea de transferncia seguido de outros comandos e colado no SQL*Plus, pois este interpretar os comandos posteriores como a entrada do ACCEPT.
48
Ex.:
SQL> accept cidade char prompt 'Informe a cidade: '; Informe a cidade: NATAL SQL> accept password char prompt 'Informe a senha: ' hide; Informe a senha: ***** SQL> accept cidade char noprompt; CAMPINAS SQL> SQL> define DEFINE NOTA DEFINE PASSWORD DEFINE NOTA2 SQL>
= = =
Mdulo III
Funes Extrao de Dados de mais de uma Tabela Subqueries Linguagem de Manipulao de Dados (DML)
Funes
51
Funes
Objetivos desta unidade:
Introduzir os diversos tipos de funes: funes de datas, de converso, etc.
Introduo s funes:
Funes so usadas para manipulaes de dados. Elas aceitam um ou mais argumentos e retornam um valor. O formato de uma funo geralmente o seguinte:
nome_da_funo ( argumento_1,argumento_2.....)
52
Funes
Os tipos de funes existentes so:
Caracter; Nmeros; Data Converso; Grupo
Algumas funes tm efeito em apenas uma linha, outras tm efeito em um grupo de linhas.
53
Funes de Caracter
Funes de Caracter.
Funo Lower:
Recupera o dado especificado em letra minscula:
SQL> select lower(nom_cidade) from aluno; LOWER(NOM_CIDADE) -------------------belo horizonte belo horizonte manaus natal natal curitiba manaus campinas 8 rows selected.
54
Funes de Caracter
Funo Upper:
Recupera o dado especificado em letra maiscula:
SQL> select upper(nom_cidade) from aluno; UPPER(NOM_CIDADE) -------------------BELO HORIZONTE BELO HORIZONTE MANAUS NATAL NATAL CURITIBA MANAUS CAMPINAS 8 rows selected.
55
Funes de Caracter
Funo Initcap:
Recupera o dado especificado com a primeira letra maiscula:
SQL> select initcap(nom_cidade) from aluno; INITCAP(NOM_CIDADE) -------------------Belo Horizonte Belo Horizonte Manaus Natal Natal Curitiba Manaus Campinas 8 rows selected.
56
Funes de Caracter
Funes LPAD e RPAD:
A funo LPAD completa com o caracter(es) informado, a esquerda da coluna, a coluna/valor at o nmero especificado em n.
LPAD ( col|val,n,caracter) Ex.:
SQL> select lpad(nom_cidade, 30, '*') from aluno; LPAD(NOM_CIDADE,30,'*') -----------------------------****************BELO HORIZONTE ****************BELO HORIZONTE ************************MANAUS *************************NATAL *************************NATAL **********************CURITIBA ************************MANAUS **********************CAMPINAS 8 rows selected.
57
Funes de Caracter
A funo RPAD completa com o(s) caracter(es) informado, a direita da coluna, a coluna/valor at o nmero especificado em n.
Ex.:
SQL> select rpad(nom_cidade, 30, '*') from aluno; RPAD(NOM_CIDADE,30,'*') -----------------------------BELO HORIZONTE**************** BELO HORIZONTE**************** MANAUS************************ NATAL************************* NATAL************************* CURITIBA********************** MANAUS************************ CAMPINAS********************** 8 rows selected.
58
Funes de Caracter
Funo Substr:
Traz uma parte do dado especificado: SUBSTR (col|val,pos,n)
SQL> select substr('SQL*PLUS', 1, 3), substr(nom_cidade, 3), 2 substr(nom_cidade, 4,5) 3 from aluno; SUB --SQL SQL SQL SQL SQL SQL SQL SQL SUBSTR(NOM_CIDADE, -----------------LO HORIZONTE LO HORIZONTE NAUS TAL TAL RITIBA NAUS MPINAS SUBST ----O HOR O HOR AUS AL AL ITIBA AUS PINAS
8 rows selected.
59
Funes de Caracter
Funes LTRIM e RTRIM
So utilizadas para remover caracteres especificados de uma coluna/valor especificado: LTRIM (col|val,caracter) Remove da esquerda da coluna|valor a(s) ocorrncia(s) encontradas do caracter informado ou da combinao deles quando informado mais de um caracter.
60
Funes de Caracter
Exemplo:
SQL> select nom_cidade, ltrim(nom_cidade, 'B'), ltrim(nom_cidade, 'BNA') 2 from aluno; NOM_CIDADE -------------------BELO HORIZONTE BELO HORIZONTE MANAUS NATAL NATAL CURITIBA MANAUS CAMPINAS 8 rows selected. LTRIM(NOM_CIDADE,'B' -------------------ELO HORIZONTE ELO HORIZONTE MANAUS NATAL NATAL CURITIBA MANAUS CAMPINAS LTRIM(NOM_CIDADE,'BN -------------------ELO HORIZONTE ELO HORIZONTE MANAUS TAL TAL CURITIBA MANAUS CAMPINAS
61
Funes de Caracter
Rtrim (col|val,caracter)
Remove da direita da coluna|valor a(s) ocorrncia(s) encontradas do caracter informado ou da combinao deles quando informado mais de um caracter.
SQL> select nom_cidade, rtrim(nom_cidade, 'S'), rtrim(nom_cidade, 'AUS') 2 from aluno; NOM_CIDADE -------------------BELO HORIZONTE BELO HORIZONTE MANAUS NATAL NATAL CURITIBA MANAUS CAMPINAS 8 rows selected. RTRIM(NOM_CIDADE,'S' -------------------BELO HORIZONTE BELO HORIZONTE MANAU NATAL NATAL CURITIBA MANAU CAMPINA RTRIM(NOM_CIDADE,'AU -------------------BELO HORIZONTE BELO HORIZONTE MAN NATAL NATAL CURITIB MAN CAMPIN
62
Funes de Caracter
Funo Length:
Retorna o nmero de caracteres de uma coluna/valor especificado: LENGTH ( col|val )
Ex.:
SQL> select length('ORACLE'), length(nom_aluno), length(nom_cidade) 2 from aluno; LENGTH('ORACLE') LENGTH(NOM_ALUNO) LENGTH(NOM_CIDADE) ---------------- ----------------- -----------------6 4 14 6 5 14 6 4 6 6 6 5 6 3 5 6 6 8 6 6 6 6 4 8 8 rows selected.
63
Funes Numricas
Funes numricas.
As funes numricas recebem como argumentos dados numricos e retornam dados numricos.
Round (col|value,n)
Arredonda o valor / coluna especificados com o nmero de casas decimais informado:
SQL> select round(45.923, 1), round(45.963, 1) from dual; ROUND(45.923,1) ROUND(45.963,1) --------------- --------------45.9 46
64
Funes Numricas
Power (col|value,n)
Funo de exponenciao. Eleva o nmero/coluna especificados por n.
SQL> select power(carga_horaria, 0.5) from curso; POWER(CARGA_HORARIA, 0.5) ------------------------10 10.954451 10 14.142136 12.247449
6 rows selected.
65
Funes Numricas
SQRT (col|value)
Funo de raiz quadrada. Faz o clculo da raiz quadrada do nmero/coluna especificado.
SQL> select sqrt(carga_horaria) from curso; SQRT(CARGA_HORARIA) ------------------10 10.954451 10 14.142136 12.247449
6 rows selected.
66
Funes de Datas
Funes de datas operam com datas no Oracle. Todas as funes exceto Months_Between, retornam um valor no formato de data. O Oracle guarda datas com os seguintes dados:
Sculo Ano Ms Dia Hora Minutos Segundos
O formato default da data no Oracle : dd-mon-yy e armazena datas que podem ir de 1 de janeiro de 4712 antes de Cristo at o ano 4712 depois de Cristo.
67
Funes de Datas
Coluna Sysdate.
A coluna Sysdate uma pseudo-coluna que retorna o valor de data e hora.Voc pode usar o Sysdate como qualquer outro tipo de coluna. Ela usualmente selecionada da tabela dummy dual. Para mostrar a data corrente use o seguinte comando: SQL> select sysdate from sys.dual;
SYSDATE --------21-NOV-95
68
Funes de Datas
Operaes que podem ser feitas com datas:
data + nmero data - nmero data - data data + nmero / 24 adiciona um nmero de dias data produzindo uma nova data subtrai um nmero de dias da data produzindo uma nova data subtrai uma data de outra produzindo um nmero de dias. adiciona um nmero de horas na data produzindo uma nova data.
SQL> select dat_inicial, dat_inicial-7, dat_inicial+7 2 ,sysdate-dat_inicial from periodo_letivo; DAT_INICI --------01-MAR-94 01-AUG-94 01-MAR-95 01-AUG-95 DAT_INICI --------22-FEB-94 25-JUL-94 22-FEB-95 25-JUL-95 DAT_INICI SYSDATE-DAT_INICIAL --------- ------------------08-MAR-94 1042.4246 08-AUG-94 889.42456 08-MAR-95 677.42456 08-AUG-95 524.42456
69
Funes de Datas
Funo Months_Between:
A funo Months_Between encontra o nmero de meses entre as duas datas informadas.O resultado pode ser positivo ou negativo.
SQL> select months_between(sysdate, dat_inicial), 2 months_between('01-jan-97', '01-jan-96') 3 from periodo_letivo; MONTHS_BETWEEN(SYSDATE,DAT_INICIAL) MONTHS_BETWEEN('01-JAN-97','01-JAN-96') ----------------------------------- --------------------------------------34.175013 12 29.175013 12 22.175013 12 17.175013 12
70
Funes de Converso
O SQL possui funes para converso de tipos de dados. Essas funes convertem um tipo de dado para outro.
Funo To_Char :
utilizada geralmente para mudar um formato de uma data para outro.
SQL> select to_char(sysdate, 'DD/MM/YYYY') 2 from sys.dual; TO_CHAR(SYSDATE,'DD/MM/YYYY') --------------------------------------------------06/01/1997
71
Funes de Converso
Para mostrar uma data/hora:
SQL> select to_char(sysdate, 'DD/MM/YYYY HH24:MI') 2 from sys.dual; TO_CHAR(SYSDATE,'DD/MM/YYYYHH24:MI') ---------------------------------------------------06/01/1997 10:14
72
Funes de Converso
Funo To_Number:
usada para transformar um nmero que est no formato de caracter para o formato numrico:
SQL> select nom_curso, carga_horaria from curso 2 where carga_horaria > to_number('100'); NOM_CURSO CARGA_HORARIA -------------------------------------------------- ------------CLCULO NUMRICO 120 BANCOS DE DADOS 200 ALGORITMOS E ESTRUTURAS DE DADOS 150
73
Funes de Converso
Funo To_Date:
Transforma um conjunto de caracteres em uma data vlida.
SQL> select * 2 from periodo_letivo 3 where dat_inicial = to_date('01/03/1995', 'DD/MM/YYYY'); COD_PERIODO DAT_INICI DAT_FINAL ----------- --------- --------3 01-MAR-95 30-JUN-95
74
Funes de Converso
Funo Decode.
A funo Decode facilita queries condicionais, fazendo o trabalho das funes Case ou IF-THEN-ELSE. Sintaxe: decode (col|expression , search1,result1[ search2,result2 ] default )
SQL> select nom_aluno, decode(sexo, 'M', 'MASCULINO', 'F','FEMENINO') gnero 2 from aluno; NOM_ALUNO GNERO ------------------------- --------JOS MASCULINO MARIA FEMENINO JOO MASCULINO FELIPE MASCULINO ANA FEMENINO TEREZA FEMENINO JALENE FEMENINO ROSA FEMENINO 8 rows selected.
75
Funes de Grupo
As funes de grupo agem sempre sobre um conjunto de linhas ao invs de agir sobre cada linha separada.
Funo Avg:
Calcula a mdia dos valores selecionados:
SQL> select avg(carga_horaria) 2 from curso; AVG(CARGA_HORARIA) -----------------134
76
Funes de Grupo
Funo Min / Max:
Seleciona o menor ou o maior valor dos valores selecionados:
SQL> select min(carga_horaria) 2 from curso; MIN(CARGA_HORARIA) -----------------100 SQL> select count(*) 2 from curso 3 where carga_horaria <> carga_horaria_ant; COUNT(*) --------4
77
Funes de Grupo
Funo Sum:
A funo Sum faz o somatrio dos dados extrados da coluna especificada ignorando os valores Null:
SQL> select sum(carga_horaria) 2 from curso; SUM(CARGA_HORARIA) -----------------670
Funo Count:
A funo Count faz a contagem das linhas retornadas em uma Query:
SQL> select count(carga_horaria) from curso; COUNT(CARGA_HORARIA) -------------------5
78
Funes de Grupo
Clusula Group BY:
A Clusula group by utilizada para dividir a tabela em conjuntos menores de dados relacionados entre si. Ex.: Para contar os alunos por cidade:
SQL> select nom_cidade, count(*) 2 from aluno 3 group by nom_cidade; NOM_CIDADE COUNT(*) -------------------- --------BELO HORIZONTE 2 CAMPINAS 1 CURITIBA 1 MANAUS 2 NATAL 2
79
Funes de Grupo
O where pode ser usado em conjunto com a clusula group by para excluir determinada linha:
SQL> 2 3 4 select nom_cidade, count(*) from aluno where sexo = 'M' group by nom_cidade;
80
Funes de Grupo
Clusula Having:
A clusula Having utilizada para selecionar os grupos retornados de uma seleo feita com Group By . Ex.: Para selecionar as cidades com mais de dois alunos:
SQL> 2 3 4 select nom_cidade from aluno group by nom_cidade having count(*) >=2;
82
Joins
Em um banco de dados relacional, comum fazer uma seleo em vrias tabelas relacionadas para obtermos um resultado desejado. Um Join usado quando uma Query necessita de dados de mais de uma tabela do database, o Join feito comparando colunas das tabelas envolvidas na relao. Equi-join
Equi-join usado quando o valor da coluna de uma tabela tem o seu valor correspondente na segunda. Nas tabelas ALUNO e MATRICULA os valores comparados so da coluna cod_aluno que tem em ambas as tabelas e tem o mesmo valor. No equi-join o operador = usado. Ex.: Para sabermos o nome do aluno de uma matrcula, ns devemos comparar os valores da coluna cod_aluno das duas tabelas desta relao. As colunas so trazidas das duas tabelas envolvidas.
83
Joins
Selecionar o nome dos alunos que se matricularam no perodo letivo 4:
SQL> 2 3 4 select from where and distinct nom_aluno matricula, aluno matricula.cod_aluno = aluno.cod_aluno cod_periodo = 4;
84
Joins
Para especificar de qual tabela queremos que o valor seja trazido usamos o seguinte formato:
SQL> 2 3 4 5 select distinct matricula.cod_aluno, nom_aluno from matricula, aluno where matricula.cod_aluno = aluno.cod_aluno and cod_periodo = 4 order by nom_aluno; NOM_ALUNO ------------------------ANA FELIPE JALENE ROSA TEREZA
COD_ALUNO --------5 4 7 8 6
85
86
87
88
89
90
91
92
Subqueries
94
Subqueries
Uma Subquery um comando select dentro de outro comando select .
Ex.:
SQL> select column1, column2, ... from table where column= (select column from table where condition)
Este tipo de estrutura geralmente utilizada quando precisamos selecionar linhas de uma tabela com uma condio que depende dos dados que esto na prpria tabela. Para encontrarmos o curso com a menor carga horria, sendo que no sabemos qual a menor carga horria (este dado tambm est na tabela e pode variar com o tempo).
95
Subqueries
Primeiro vamos encontrar a menor carga horria:
select min(carga_horaria) from curso; MIN(CARGA_HORARIA) -----------------100
96
Subqueries
Neste caso a Query mais interna executada primeiro e traz como resultado o valor 100. A seguir a Query principal executada substituindo a Query interna pelo valor encontrado. No exemplo dado a Query interna volta um nico valor. Neste caso um comparador lgico deve ser usado, por exemplo: = , < , > , >= , etc. Ex.: Alunos que ingressaram no mesmo ano da aluna MARIA
SQL> select nom_aluno, ano_ingresso 2 from aluno 3 where ano_ingresso = (select ano_ingresso 4 from aluno 5 where nom_aluno = 'MARIA' ); NOM_ALUNO ANO_INGRESSO ------------------------- -----------MARIA 1993 FELIPE 1993 ROSA 1993
97
98
99
100
101
102
103
104
O maior ano de ingresso de Belo Horizonte 1993, portanto a Query vai retornar os anos de ingresso maiores que 1993. O Not pode ser usado com os operadores IN, ANY ou ALL.
105
Clusula Having
Clusula Having:
A clusula having utilizada para selecionar linhas de uma seleo feita com group by . A clusula having muito utilizada em subqueries. Ex.: Para as cidades com mais de um aluno, retornar o menor ano de ingresso
SQL> 2 3 4 select nom_cidade, min(ano_ingresso) from aluno group by nom_cidade having count(*) > 1;
NOM_CIDADE MIN(ANO_INGRESSO) -------------------- ----------------BELO HORIZONTE 1992 MANAUS 1991 NATAL 1993
106
Clusula Having
Ex.: Alunos cuja mdia geral superior mdia da aluna MARIA (cod_aluno = 2)
SQL> 2 3 4 5 6 7 select nom_aluno, avg(val_nota_final) from matricula m, aluno a where m.cod_aluno = a.cod_aluno group by nom_aluno having avg(val_nota_final) > (select avg(val_nota_final) from matricula where cod_aluno=2);
NOM_ALUNO AVG(VAL_NOTA_FINAL) ------------------------- ------------------ANA 78 FELIPE 70.714286 JALENE 71.666667 JOO 82.5 ROSA 93.8 TEREZA 88 6 rows selected.
107
Clusula Having
Se no soubssemos o cdigo da aluna MARIA poderamos escrever:
SQL> 2 3 4 5 6 7 8 9 10 11 select from where group having ( nom_aluno, avg(val_nota_final) matricula m, aluno a m.cod_aluno = a.cod_aluno by nom_aluno avg(val_nota_final) > select avg(val_nota_final) from matricula where cod_aluno = ( select cod_aluno from aluno where nom_aluno = MARIA) );
108
Clusula Having
Aluno com maior mdia de notas:
SQL> 2 3 4 5 6 7 select from where group having nom_aluno, avg(val_nota_final) matricula m, aluno a m.cod_aluno = a.cod_aluno by nom_aluno avg(val_nota_final) = (select max(avg(val_nota_final)) from matricula group by cod_aluno);
Uma Subquery no pode conter a clusula order by. No existem limites de subqueries aninhadas.
109
Subqueries: Sumrio
A Query interna deve ser usada dentro de parnteses; A SubQuery no pode conter a clusula order by; Quando utilizando mltiplas colunas em uma Subquery, estas colunas devem aparecer na mesma ordem e com os mesmos tipos de dados da Query principal, alm do mesmo nmero de colunas; Podem ser usados operadores lgicos bem como os operadores Any e All. As clusulas numa instruo SQL so executadas na seguinte ordem:
from (produto cartesiano) where (restrio) group by (agrupamento das linhas que satisfizeram WHERE) having (restrio sobre linhas do agrupamento)
111
No caso acima onde sero inseridos dados em todas as colunas da tabela, a lista de colunas no precisa ser especificadas, e os dados devem ser colocados na ordem em que aparecem na tabela.
Valores caracter e de data devem ser especificados entre aspas simples. Valores que no vo ser especificados podem ser definidos como Null.
112
113
Ex.: Para copiar todas as informaes dos alunos de NATAL para a tabela ALUNOS_NATAL:
insert into alunos_natal ( cod_aluno, nom_aluno, sexo, nom_cidade, ano_ingresso ) select cod_aluno, nom_aluno, sexo, nom_cidade, ano_ingresso from aluno where nom_cidade = NATAL;
114
Ex.:
update periodo_letivo set dat_inicial = 01-MAR-97, dat_final = 30-JUN-97 where cod_periodo = 5;
115
Ex:. Para apagar todas as informaes sobre o periodo letivo 5 da tabela periodo_letivo.
delete from periodo_letivo where cod_periodo = 5;
116
Mdulo IV
Gerenciando Objetos do Oracle7 O Dicionrio de Dados Oracle
119
Introduzir os principais comandos DDL (Data Definition Language) necessrios para criar/alterar/remover objetos do Oracle7
120
121
Criao de Tabelas
O nome de uma tabela deve seguir as regras padres de nomes de objetos Oracle:
O nome deve comear com uma letra; Ele pode conter letras, nmeros e o caracter especial ( _ underscore ) . Podem tambm ser usados os caracteres ( $ e # ) ( o que no recomandado ) ; O nome de uma tabela no sensvel a letras maisculas / minsculas. A tabela emp pode ser referenciada por: aluno, ALUNO, Aluno, etc.; Deve ter at no mximo 30 caracteres; O nome da tabela tem que ser nico ( incluindo outros objetos do banco de dados ); O nome no pode ser uma palavra reservada de SQL
122
123
Ex.:
create table (cod_periodo dat_inicial dat_final periodo_letivo2 number(3) not null, date not null, date);
124
125
Clusula Constraint
Uma restrio de integridade ( integrity constraint ) uma regra que restringe os dados de uma ou mais colunas de uma tabela garantindo o relacionamento entre elas. Por exemplo, uma constraint de integridade que existe entre as tabelas ALUNO e MATRICULA fora que uma linha s possa ser includa na tabela MATRICULA se o aluno informado na incluso existir na tabela ALUNO.
Ex.:
SQL> insert into matricula 2 (cod_periodo, cod_curso, cod_aluno, dat_matricula, val_nota_final) 3 values (1, 1, 10, '01-JAN-95', null); ERROR at line 1: ORA-02291: integrity constraint (SYSTEM.COD_ALUNO_FK) violated - parent key not found
As constraints podem ser criadas para tabelas e para colunas das tabelas e so especificadas nos comandos create ou alter table.
126
Clusula Constraint
O objetivo de uma constraint criar uma srie de restries para os valores que so colocados no banco de dados. Estas restries so verificadas todas as vezes que so usados os comandos: insert, delete e update. Constraints so utilizadas para:
forar a entrada de valores em colunas Not Null; especificar que determinada coluna s pode ter valores nicos em relao s linhas da tabelas; identificar colunas como primary key; estabelecer restries de foreign key; checar o valor entrado na coluna conforme valor pr-determinado: check.
127
Clusula Constraint
Table constraints:
Table constraints so restries que fazem parte da definio global da tabela e se refere a uma ou mais colunas da tabela:
create table exemplo ( e1 number(4), e2 number(4), primary key (e1, e2) );
Columns constraints:
Columns constraints so restries especficas de uma coluna:
create table exemplo2 ( e1 number(2) primary key, e2 varchar2(5) NOT NULL,...);
Constraints que estabelecem restries sobre mais de uma coluna s podem ser declaradas como Table Constraint; as que restringem apenas uma coluna podem ser tanto Table/Column Constraint.
128
Clusula Constraint
Exemplos de constraints:
CREATE TABLE MATRICULA (COD_PERIODO NUMBER(3) NOT NULL, COD_CURSO NUMBER(3) NOT NULL, COD_ALUNO NUMBER(3) NOT NULL, DAT_MATRICULA DATE NOT NULL, VAL_NOTA_FINAL NUMBER(5,2), CONSTRAINT MATRICULA_PK PRIMARY KEY (COD_PERIODO, COD_CURSO, COD_ALUNO), CONSTRAINT VAL_NOTA_FINAL_CK CHECK (VAL_NOTA_FINAL BETWEEN 0 AND 100), CONSTRAINT COD_PERIODO_FK FOREIGN KEY (COD_PERIODO) REFERENCES PERIODO_LETIVO (COD_PERIODO), CONSTRAINT COD_CURSO_FK FOREIGN KEY (COD_CURSO) REFERENCES CURSO (COD_CURSO), CONSTRAINT COD_ALUNO_FK FOREIGN KEY (COD_ALUNO) REFERENCES ALUNO (COD_ALUNO));
129
Clusula Constraint
Outra sintaxe para criar a mesma tabela:
CREATE TABLE MATRICULA (COD_PERIODO NUMBER(3) NOT NULL REFERENCES PERIODO_LETIVO (COD_PERIODO), COD_CURSO NUMBER(3) NOT NULL REFERENCES CURSO (COD_CURSO), COD_ALUNO NUMBER(3) NOT NULL REFERENCES ALUNO (COD_ALUNO), DAT_MATRICULA DATE NOT NULL, VAL_NOTA_FINAL NUMBER(5,2) CHECK (VAL_NOTA_FINAL BETWEEN 0 AND 100), CONSTRAINT MATRICULA_PK PRIMARY KEY (COD_PERIODO, COD_CURSO, COD_ALUNO));
130
131
132
133
134
Uma maneira de criar uma nova tabela apenas com a estrutura da tabela j existente colocar na clusula where uma condio que far com que a Query no retorne nenhuma linha.
Views
136
Views
Definio: Uma view ( viso ) uma forma pr-determinada de visualizar dados de uma ou mais tabelas como se fosse uma nica tabela. Uma view um subconjunto de uma outra tabela ou view que pode ser manipulada como uma tabela. Uma view no existe fisicamente como uma tabela. Apenas comando select que define a view que guardado no banco de dados. Views so usadas para diversas situaes:
restringir o acesso aos dados da tabela original, j que a view pode conter apenas algumas colunas de uma tabela. simplificar para usurios a estrutura de tabelas, ou comandos selects mais complicados. permitir usurios diferentes visualizar os dados de forma diferente.
137
Criao de Views
Sintaxe:
CREATE VIEW AS SELECT nome_da_view [(coluna1,coluna2,....)] parmetros do comando select.....
Ex.:
Para criar uma view referente tabela aluno mas apenas com os alunos da cidade de NATAL:
SQL> 2 3 4 create view v_alunos_natal as select * from aluno where nom_cidade = NATAL;
View created.
138
Criao de Views
Para selecionar todos os dados da view criada:
SQL> select * from v_alunos_natal; COD_ALUNO --------4 5 NOM_ALUNO ------------------------FELIPE ANA S M F NOM_CIDADE ANO_INGRESSO -------------------- -----------NATAL 1993 NATAL 1995
OBS
A clusula ORDER BY no pode ser utilizada em views.
139
Criao de Views
Views que se referem a uma nica tabela e no contm funes de dados (data, caracter ou numricas) e nem grupos so chamadas de views simples. Views complexas so views que se referem a mais de uma tabela e podem conter funes de grupo ou funes de dados. Para criar uma view contendo funes de grupo e dados de duas tabelas:
SQL> 2 3 4 5 6 7 create as select from where group view media_aluno (Nome, Media) nom_aluno, avg(val_nota_final) matricula m, aluno a m.cod_aluno = a.cod_aluno by nom_aluno;
View created.
140
Criao de Views
Foram especificados nomes para as colunas da view j que no comando select exitem funes e o nome para a coluna da view seria invlido, ex.: avg(val_nota_final) no um nome de coluna vlido. Poderia ser usado tambm o alias para as colunas no comando select . Se os dois forem especificados vale o especificado para a view.
141
142
Nenhum dado referenciado pela view afetado, j que eles esto guardados fisicamente nas tabelas da base e no na view.
Para verificar as views existentes e o SQL que compe a views do usurio ele pode selecionar a tabela: User_Views.
Sinnimos e Seqncias
144
Criao de Sinnimos
Para acessar ou alterar uma tabela de um outro usurio, ela deve ser refenciada com o prefixo do nome do usurio que a criou seguido de um ponto. Para o usuro aluno1 fazer um select na tabela CURSO do usurio aluno2 ele deve usar o seguinte comando:
select * from aluno2.curso;
O usurio que est fazendo a query na tabela de outro usurio pode criar um sinnimo para acess-la de forma mais simples:
Ex.: Para o usurio aluno1 referenciar a tabela do aluno2 somente como CURSO2, o aluno1 deve executar o seguinte comando:
SQL> create synonym curso2 for aluno2.curso; Synonym created.
145
Criao de Sinnimos
O usurio aluno1 no pode conter nenhum objeto com o mesmo nome que est sendo criado. O usurio que est criando um sinnimo sobre tabela/view de outro usurio deve ter acesso a esta tabela. O usurio com privilgio de DBA pode criar sinnimos pblicos, ou seja, sinnimos que todos os usurios da base de dados tm acesso.
Ex.: SQL> create public synonym curso on escola.curso; Synonym created.
146
Removendo Sinnimos
Os sinnimos so removidos pelo comando DROP.
drop synonym [nome_do_sinonimo]
147
start with n
valor inicial da sequence.
maxvalue n
valor final da sequence.
148
Na prxima execuo do comando select o valor ser incrementado de acordo com a definio da sequence. O usurio pode selecionar o varlor corrente da sequence atraves do select:
SQL> select seq.currval from dual; CURRVAL --------1
149
Alterando/Removendo Sequences
Para alterar uma sequence utilizamos o comando ALTER SEQUENCE
SQL> alter sequence SEQ increment by 1 2 start with 1 3 maxvalue 1000
Criao de ndices
151
Criao de ndices
A criao de ndices em uma base de dados serve para aumentar a velocidade de queries em tabelas grandes e garantir que tabelas tero valores nicos nas colunas apropriadas. Depois de criado, o ndice vai ser usado pelo Oracle toda vez que for necessrio para aumentar a performance. O prprio Oracle gerencia o ndice, dispensando do usurio qualquer manuteno nestes ndices.
Tipo unique non unique Descrio garante que o valor na coluna vai ser nico. garante o acesso mais rpido possvel aos dados ( default).
single column o ndice composto de apenas uma coluna. concatenado ndice composto de at 16 colunas da tabela.
152
Tipos de ndices
Criao de um ndice:
Sintaxe:
create [unique] index nome_do_ndice on tabela (coluna1 [ ,coluna2...]) ;
154
O Dicionrio de Dados criado junto com a criao do banco de dados. As alteraes feitas na base de dados so feitas pelo RDBMS Oracle. O Dicionrio de dados uma referncia para todos os usurios do banco de dados. uma fonte valiosa de informaes para os usurios finais, desenvolvedores de aplicaes, e DBAs.
155
156
157
158
159
160
Mdulo V
Transaes Leitura Consistente Mecanismo Lock - Viso Geral Viso Geral de Usurio e Segurana
Transaes
163
Transaes
Uma transao uma operao feita no banco de dados que contm uma srie de alteraes em uma ou mais tabelas.
164
Transaes
Existem duas classes de transaes:
Transaes DML - consiste em uma srie de comandos DML e que o Oracle trata como uma unidade lgica de trabalho. Transaes DDL - contm apenas comandos DDL. Uma transao para o Oracle tornada permanente para o banco somente no caso de todos os comandos dentro daquela transao terminarem corretamente, se no as alteraes so descartadas.
Uma transao comea quando um comando DML ou DDL encontrado e termina quando:
executado um comando Commit ou Rollback; qualquer comando DDL encontrado; sada do SQL*Plus; falha de mquina.
165
Transaes
Quando uma transao termina, o prximo comando vai iniciar automaticamente a prxima transao. Para tornar alteraes permanente, utilizado o comando Commit. Para desistir das alteraes que ainda no foram tornadas permanentes utilize o comando Rollback. O comando Rollback volta os dados at a opsio do ltimo Commit feito pelo usurio (explcito, ou implcito). Falhas de sistemas:
Quando o sistema falha por algum motivo, as alteraes que estavam sendo feitas na base e ainda no tinha sido tornadas permanentes tambm so voltadas ao estado original para garantir a integridade do banco de dados.
166
Savepoint nome_do_savepoint
utilizado para dividir uma transao em partes menores; se utilizado um segundo savepoint com o mesmo nome o primeiro descartado; o nmero mximo default de savepoints por processo de 5. ( pode ser alterado );
167
168
Leitura Consistente
170
Leitura Consistente
Os usurios do Banco de dados fazem dois tipos de acesso ao Banco de dados:
Acesso somente para leitura ( select ); Acesso para escrita ( insert update e delete ). O banco de dados deve garantir para os leitores do banco a consistncia dos dados que ele est vendo. Os leitores no podem ver dados que esto sendo alterados naquele momento, pois comprometeria a consistncia destes dados. Da mesma forma os escritores do banco de dados precisam da garantia que os dados que ele est modificando esto consistentes e no esto sendo modificados por outro escritor. A leitura consistente implementada mantendo uma cpia parcial dos dados nos segmentos de rollback
171
Leitura Consistente
Quando uma alterao feita no banco de dados, o banco mantm a cpia dos dados antes da alterao no segmento de rollback. Quando um outro usurio for acessar estes dados ele ter a viso dos dados que esto no segmento de rollback. Quando o escritor faz o commit da sua transao o banco de dados altera definitivamente estes dados no banco de dados e elimina os dados anteriores do segmento de rollback. A partir da os outros usurios do banco passam a ter acesso a estes dados j com as alteraes. Se o escritor faz um rollback, os dados anteriores so copiados novamente para o banco do segmento de rollback , retornando a verso anterior dos dados.
173
174
O que um Lock?
O Lock um mecanismo usado para controlar o acesso dos dados em um sistema multi-usurio. Ele previne que o mesmo dado seja alterado por dois usurios, e que uma tabela que esteja sendo alterada em sua estrutura tenha seus dados alterados. Um Lock feito quando um dado est sendo alterado, ou quando a estrutura de uma tabela est sendo alterada. Ele finalizado quando um commit ou rollback feito no dado que estava sendo alterado, ou quando a transao terminada.
175
Nveis de Locks
Existem dois tipos de Locks:
Table Lock ( Locks em Tabelas ) - quando toda a tabela est em lock para um usurio;
SQL> lock table aluno in exclusive mode; Table(s) Locked.
Row Lock ( Lock de Linha ) - quando uma linha est em lock por causa da alterao dos dados desta linha.
SQL> 2 3 1 row SQL> update aluno set ano_ingresso = 1990 where nom_aluno='MARIA'; updated.
176
Tipos de Locks
Exclusive ( x )
Recurso bloqueado somente para um usurio. Somente este usurio pode alterar os dados . Os outros usurios s podem ler os dados.
177
Deadlocks
Deadlocks ocorrem quando dois usurios esto tentando acessar para alterao os mesmos dados ao mesmo tempo. Tipicamente, eles esto esperando cada um por um recurso que est sendo bloqueado pelo outro. EX.:
Tempo Primeira Transao Segunda Transao 1 update aluno update periodo_letivo set nom_cidade=NATAL set dat_final=01-MARwhere nom_aluno = ANA; 92 where cod_periodo = 1; update periodo_letivo update aluno set dat_final=01-MAR-90 set ano_ingresso= where cod_periodo = 1; 1995 where nom_aluno = ANA;
Quando o Oracle detecta um deadlock, ele envia uma mensagem de erro para um dos usurios e faz um rollback de seu comando. Normalmente o usurio deve ento fazer um rollback de sua transao. Se possvel o usurio pode aguardar alguns instantes e tentar novamente a operao.
179
180
181
imp_full_database usar o comando imp para recuperar a base de dados de um backup. exp_full_database fazer backup da base de dados completa. dba administrao do banco e acesso aos objetos de outros usurios.
182
183
Privilgios em Tabelas
Quando um usurio cria um objeto no banco de dados, s ele tem acesso quele objeto. O dono deste objeto pode passar determinado privilgio para que outros usurios possam tambm acess-lo. Para isso o usurio deve usar o comando grant.
Sintaxe:
Grant on to privilgio objeto [ usurio | role ] ;
184
Privilgios em Tabelas
Privilgios sobre objetos que podem ser passados para outros usurios/roles so:
Privilgio: select insert update delete alter index references all Direitos sobre o objeto: selecionar dados da tabela ou view. inserir linhas na tabela ou view. alterar linhas na tabela ou view. eliminar linhas da tabela ou view. alterar a estrutura de de uma tabela. indexar uma tabela. fazer referncia tabela em constraints de foreing key. todos os privilgios sobre o objeto
185
Privilgios em Tabelas
Ex.: Para dar o direito de fazer select e insert na tabela curso do usurio aluno1 para o aluno2;
SQL> grant select,insert on curso to aluno2; Grant succeeded.
Os privilgios passados para um usurio, como no exemplo acima, no podem ser passados para outros usurios por quem recebeu o direito. Para isso usa-se a clusula with grant option:
Ex.:
SQL> grant all on curso to aluno2 with grant option;
Desta forma o usurio aluno2 agora pode passar os privilgios recebidos sobre a tabela CURSO para outros usurios. Um usurio pode tambm tornar um objeto pblico, ou seja de acesso a todos os usurios da base de dados: Ex.:
SQL> grant all on curso to public;
186
Quando voc retira um privilgio de um objeto que foi dado a um usurio, este usurio perde o privilgio e todos os usurios a quem ele deu o privilgio tambm. Ex.:
SQL> revoke all 2 on curso 3 from aluno2;
Para saber quais usurios tm privilgios em suas tabelas, views ou sequences, verifique a view User_Tab_Grants.