Академический Документы
Профессиональный Документы
Культура Документы
FUNDAMENTAO TERICA
1.1.
1.2.
1.3.
1.4.
1.5.
BANCO DE DADOS
BANCOS DE DADOS RELACIONAIS
SISTEMAS GERENCIADORES DE BANCOS DE DADOS
OBJETOS DO BANCO DE DADOS.
USURIOS DO BANCO DE DADOS
4
4
5
9
11
11
13
2.1. HISTRICO
2.2. CARACTERSTICAS DA SQL
2.3. INSTRUES DDL
2.4. INSTRUES DML
2.5. INSTRUES DCL
2.6. AMBIENTE DE TRABALHO
2.7. CRIANDO TABELAS
2.7.1. RESTRIES (CONSTRAINTS)
2.7.1.1 Restrio NOT NULL
2.7.1.2 Restrio UNIQUE KEY
2.7.1.3 Restrio PRIMARY KEY
2.7.1.4 Restrio FOREIGN KEY
2.7.1.5 Restrio CHECK
2.7.1.6 Consultando restries de uma tabela
2.8. INSERO DE DADOS
2.9. ALTERAO DE DADOS
2.10. REMOO DE DADOS
2.11. CONFIRMANDO OU DESCARTANDO TRANSAES
2.12. OPERADORES
2.12.1. OPERADORES ARITMTICOS
2.12.2. OPERADORES DE COMPARAO
2.12.3. OPERADORES LGICOS
2.13. CONSULTAS
2.13.1. JUNES - JOIN
2.13.1.1 Junes idnticas (Equi-Join)
2.13.1.2 Junes No-Idnticas (No EquiJoin)
2.13.1.3 Junes Externas - (OuterJoin)
2.13.2. FUNES SQL
2.13.2.1 Funes de Uma nica Linha
2.13.2.1.1 Funes de linha para manipulao de caracteres
2.13.2.1.2 Funes de linha para manipulao de nmeros
2.13.2.1.3 Funes de linha para manipulao de datas
2.13.2.2 Funes para converso de dados
2.13.2.2.1 Converso de datas em caracteres
13
13
14
14
14
15
16
17
18
19
19
20
21
22
23
25
25
26
29
29
30
31
34
34
34
35
36
38
39
39
40
41
43
43
44
45
45
46
47
49
50
51
51
52
53
54
54
55
56
56
56
57
57
57
58
58
59
60
61
61
62
65
65
66
66
67
67
68
69
69
70
70
71
71
72
73
73
74
74
75
75
2.20.1.
2.20.2.
2.20.3.
2.20.4.
2.20.5.
PRIVILGIOS DE SISTEMA
PRIVILGIOS DE OBJETO
CONCEDENDO PRIVILGIOS POR MEIO DE PERSONAGENS
REVOGANDO PRIVILGIOS
CONSULTADO OS PRIVILGIOS
75
76
77
78
78
3. PL/SQL
81
81
82
83
83
85
86
87
89
91
91
92
92
92
1. Fundamentao terica
Neste captulo sero abordados os conceitos necessrios para melhor
compreenso e aplicao dos assuntos dos captulos posteriores, que dizem
respeito implementao de banco relacionais. Um bom profissional da rea de
banco de dados precisa conhecer os trs nveis envolvidos em um projeto de
bancos de dados: conceitual, lgico e fsico. Nesta disciplina ser abordado
basicamente o terceiro nvel, no entanto, o conhecimento dos nveis fsico e lgico
pr-requisito para um bom implementador.
1.1. Banco de Dados
Podemos entender como Banco de Dados(Data Base) qualquer sistema que
rena e mantenha organizada uma srie de informaes relacionadas a um
determinado assunto, em uma determinada ordem.
Um sistema de manuteno de informaes por computador, consideradas como
significativa ao indivduo ou a organizao servida pelo sistema, cujo objetivo
global manter as informaes atualizadas e torn-las disponveis quando
solicitadas para o processo de tomada de deciso.
O objetivo principal de um Banco de Dados fornecer um ambiente que seja
adequado e eficiente para o uso na recuperao e no armazenamento da
informao.
Uma agenda telefnica, catlogo que fica ao lado do aparelho telefnico, no
deixa de ser um banco de dados: nela temos telefones de vrias pessoas de uma
regio geogrfica, organizados pelo sobrenome. O computador apenas uma
ferramenta eficiente para montar um banco de dados, pois nele inserimos muitas
informaes e as localizamos de forma extremamente rpida.
Os bancos de dados implementados em computadores so divididos em parte
Lgica e parte Fsica:
A parte fsica constituda dos equipamentos de hardware necessrios para o
armazenamento dos dados, processamento das informaes e acesso aos dados,
como por exemplo: processadores, memrias, HDs, dispositivos de entrada e
sada, enfim so os computadores (servidores e clientes).
A parte lgica o conjunto de softwares que possibilitam a implementao do
modelo projetado, o controle de acesso aos usurios, a compilao das
instrues, enfim o Sistema Gerenciador do Banco de Dados.
J a concepo de um banco de dados, compreendida pela parte lgica do
sistema de banco de dados, se d em trs nveis: conceitual, lgico e fsico:
Nvel conceitual: consiste na identificao dos dados que devero ser
armazenados e no entendimento de como estes dados sero utilizados para
55
03909-70
22,00
Mesozica
Alguns autores no fazem distino entre dados e informaes, mas para evitar interpretaes
trataremos dado como uma valor fisicamente registrado no banco de dados e informao como o
significado atribudo a estes valores de acordo com o seu contexto de utilizao.
Ingredientes
Cdigo Pizza
Preo da pizzza
Apelido da Pizza
55
03909-70
22,00
Mesozica
Identificador
do campo
nome_pizza
ingredientes
20
2
preenchimento obrigatrio
preenchimento obrigatrio, chave
estrangeira
chave primria
8
5
15
nenhuma
no pode ser repetido em outro
registro.
Ingredientes
Cdigo
Preo
Apelido
55
03909-70
22,00
Mesozica
02983-89
21,00
Pomodori
19203-89
11,00
Kashu
23
11
Instrutor
Endereo
Campo Simples
Instrutor
Categorias ensinadas
Campo Simples
Campo multivalorado
Campo calculado:
armazena um resultado de uma expresso
matemtica, no exemplo abaixo o campo Total o resultado da
multiplicao entre os campos Quantidade e Preo Unitrio:
Quantidade
Preo Unitrio
Total
10
12,00
120,00
Campos Simples
Campo calculado
ATENO:
Chave Primria: um campo ou um conjunto de campos que identifica
unicamente cada registro da tabela, sendo assim, um registro no pode
conter, neste campo, um dado que j esteja armazenado em outro registro.
KING
7782
7566
7698
CLARK
JONES
BLAKE
Deptn
o
10
10
20
30
PK4
Tabela DEPT
Deptno Dname
Loc
10
ACCOUTING
NEW YORK
20
30
40
FK5
RESEARCH DALLAS
SALES
CHICAGO
OPERATIONS BOSTON
As tabelas emp e dept bem como os dados nela inseridos fazem parte de um banco de dados
exemplo disponvel no Oracle.
4
PK Primary Key Chave Primria
5
FK Foreing Key Chave Estrangeira
Tabela (Table)
Viso (View)
Sequencia (Sequence)
ndice (Index)
Usurio (User)
Personagem (role)
Procedimentos (Procedure)
Funes (Function)
Gatilhos (Trigger)
Pacotes (Package)
Select - Existem autores que a classificam com instruo do DRL Linguagem para
Recuperao de Dados.
Como ferramenta grfica poder ser utilizado, por exemplo, o ORACLE NAVIGATOR: uma
ferramenta grfica do Oracle que permite ao desenvolvedor a criao e manuteno de objetos no
banco de dados.
9
PL/SQL: a linguagem procedural do SQL do ORACLE, composta essencialmente de todos os
comandos SQL padro e outras instrues tais como estruturas de seleo, estruturas de
repetio, recursos de manipulao de cursores, outras que permitem utilizar o SQL de forma
procedural. Ser estudada com mais detalhes na parte 3 da disciplina.
arquivos com extenso sql, para isso deve-se digitar o comando execute seguido
do caminho e nome do arquivo.
Todos os exemplos apresentados neste material e exerccios sero trabalhados, a
prncipio neste ambiente.
Para a edio de instrues no SQL*PLUS deve-se considerar algumas
recomendaes:
No feita distino entre maisculas de minsculas, a menos que
indicado.
As instrues SQL podem ser digitadas em uma ou mais linhas.
As palavras-chave no podem ser divididas entre as linhas nem abreviadas.
As clusulas so em geral colocadas em linhas separadas para melhor
legibilidade e facilidade de edio.
As guias e endentaes podem ser usadas para tornar o cdigo mais
legvel. Em geral, as palavras-chave so digitadas em letras maisculas,
todas as outras palavras, como nomes de tabela e colunas so digitadas
em minsculas.
Dentro do SQL*Plus, uma instruo SQL digitada no prompt SQL e as
linhas subseqentes so numeradas. Isso chama-se buffer de SQL.
Somente uma instruo pode ser a atual a qualquer momento dentro do
buffer.
2.7. Criando Tabelas
Est uma operao DDL. Para criar uma tabela necessrio que o usurio
tenha privilgio e uma rea para armazenamento. A sintaxe simplificada para
criao de tabelas :
Sintaxe: CREATE TABLE [esquema.]tabela
(nome da coluna tipo do dado [DEFAULT expr]
[constraint da coluna],
...,
[constraint
da
onde:
tabela]);
Descrio
VARCHAR2(tamanho)
CHAR(tamanho)
NUMBER(p,s)
DATE
LONG
CLOB
BLOB
BFILE
Null?
EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
NOT NULL
NOT NULL
Type
NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
NUMBER(4)
DATE
NUMBER(7,2)
NUMBER(7,2)
NUMBER(2)
CREATE TABLE
dept(
deptno
NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname));
CREATE TABLE
dept(
deptno
NUMBER(2),
dname
VARCHAR2(14),
loc
VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE (dname),
CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));
CREATE TABLE
dept(
deptno NUMBER(2)CONSTRAINT dept_deptno_pk PRIMARY KEY,
dname
VARCHAR2(14),
loc
VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE (dname);
ATENO: A definio de uma chave primria composta deve ser feita no nvel
da tabela:
SQL>
2
3
4
CREATE TABLE
pk_composta(
valor1 NUMBER(2),
valor2 NUMBER(2),
CONSTRAINT dept_deptno_pk PRIMARY KEY(valor1, valor2));
CREATE TABLE
emp(
empno
NUMBER(4),
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
5
6
7
8
9
10
11
mgr NUMBER(4),
hiredate
DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno
NUMBER(7,2) NOT NULL,
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
REFERENCES dept (deptno) ON DELETE CASCADE );
TABELA EMP
empno pk
ename
job
mgr
hiredate
sal
deptno fk
comm
TABELA DEPT
deptno pk
dname
loc
onde:
o nome da restrio
tipos de restries aos quais os campos esto
envolvidos, onde:
C = NOT NULL
P = PRIMARY KEY
R = FOREIGN KEY e
U = UNIQUE KEY
STATUS:
representa o estado em que a restrio se encontra:
ENABLE, significa que a restrio est vlida e esta
sendo usada e DISABLE que a restrio esta
desabilitada e que por isso no est em uso.
SEARCH_CONDITION: a condio expressa da restrio.
CONSTRAINT_NAME:
CONSTRAINT_TYPE:
Resultado:
CONSTRAINT_NAME
-----------------SYS_C00884
SYS_C00885
EMP_EMPNO_PK
EMP_MGR_FK
EMP_DEPTNO_FK
EMP_ENAME_UK
C
C
C
P
R
R
U
STATUS
-------ENABLED
ENABLED
ENABLED
ENABLED
ENABLED
ENABLED
SEARCH_CONDITION
-------------------"EMPNO" IS NOT NULL
"DEPTNO" IS NOT NULL
VALUES (valor
[, valor...]);
Onde:
o nome da tabela
o nome da coluna a ser preenchida, a lista de colunas
pode ser omitida, neste caso devem ser informados valores
para todas as colunas.
o valor correspondente para a coluna. Os valores de data
e caractere devem ser informados entre aspas simples.
Tabela
Coluna
Valor
Para verificar a ordem default das colunas de uma tabela e o tipo de dado
esperado utilize a instruo describe.
SQL> DESCRIBE
dept
Name
----------DEPTNO
DNAME
LOC
Null?
----------NUMBER(2)
VARCHAR2(14)
VARCHAR2(13)
Type
------------NOT NULL
Exemplo 2:
SQL> INSERT INTO
2 VALUES
dept
(70, 'PRODUCAO', MARILIA);
dept
(70, 'FINANCE', NULL);
J neste outro exemplo o nulo para a coluna loc est sendo explicitado, note que a
lista de colunas omitida pois esto sendo mencionados os dados para todas as
colunas. A palavra NULL poderia ser substituida por aspas simples (70,
'FINANCE', '').
Para insero de datas o formato default do Oracle DD-MON-YY, mas a data
tambm pode ser informada de acordo com a configurao do sistema, veja o
exemplo a seguir:
Exemplo 5:
SQL> INSERT INTO emp
2 VALUES
(2296,'AROMANO','SALESMAN',7782, '03/02/97',
3
1300, NULL, 10);
O resultado pode ser visualizado executando a consulta:
SQL> Select *
2
from emp;10
EMPNO
----2296
10
ENAME
------AROMANO
JOB
-------SALESMAN
MGR HIREDATE
---- -------7782 03/02/97
SAL
---300
COMM
----
DEPTNO
-----10
o nome da tabela
o nome da coluna a ser preenchida, podem ser atualizados os
dados de vrias colunas
o valor correspondente ou subconsulta para a coluna
uma clusula opcional e identifica as linhas a serem
atualizadas de acordo com uma condio que pode ser
composta por expresses de comparao ou subconsultas
emp
deptno = 20
empno = 7782;
onde:
Tabela:
Condio:
o nome da tabela
Est clusula opcional e identifica as linhas a
serem eliminadas de acordo com uma condio
que pode ser composta por expresses de
comparao ou subconsultas
Exemplo:
SQL> DELETE FROM dept
2 WHERE dname = 'PRODUCAO';
ATENO: Todas as linhas na tabela sero removidas se a clusula WHERE for
omitida.
Em
efetivao
parcial
Em
efetivao
Ativa
Em falha
Abortada
WHERE
empno = 7782;
SQL> COMMIT;
11
Segmento de rollback arquivo que armazena uma cpia dos dados de uma tabela que esto
envolvidos em transaes.
From employee;
14 rows deleted
SQL> ROLLBACK;
2.14.1.5
COLUMN_NAME
DEPTNO
EMPNO
ENAME
MGR
EMPNO
DEPTNO
onde:
Tabela
Restrio
Cascade
o nome da tabela
Nome da constraint que ser eliminada
Est clusula elimina todas as restries
dependentes
emp_empno_pk CASCADE;
emp_empno_pk;
As views do dicionrio de dados so tabelas lgicas que contm informaes sobre os objetos
do banco de dados.
ATENO: Para tornar uma restrio ativa os dados inseridos na coluna devem
estar em conformidade com a restrio, isto devem respeita, caso contrrio no
ser possvel.
2.14.2. Eliminando uma Tabela
A instruo DROP TABLE remove a definio de uma tabela. Quando uma tabela
eliminada, o banco de dados perde todos os dados na tabela e todos os ndices
associados a ela.
Sintaxe:
DROP TABLE tabela;
onde:
Tabela
o nome da tabela
Sintaxe:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW nome_view
[(apelido[, apelido]...)]
AS subconsulta
[WITH CHECK OPTION [CONSTRAINT restrio]]
[WITH READ ONLY];
onde:
OR REPLACE Cria uma view ou substitui a view existente
Identificador da view
Cria a view independentemente das tabelas
base existirem ou no
NOFORCE
Cria a view somente se as tabelas base
existirem (default)
apelido
especifica
apelidos
para
as
colunas
selecionadas pela view, opcional, mas se
utilizados devem corresponder ao nmero de
colunas selecionadas na consulta.
consulta da view
Operao de consulta s tabelas base ou a
outras views para gerar o resultado da viso.
subconsulta
uma instruo SELECT completa (Voc pode
usar apelidos para as colunas na lista
SELECT.) e no pode conter a clusula order
by
WITH CHECK OPTION
especifica que somente linhas acessveis
view podem ser inseridas ou atualizadas
restrio
o nome atribudo restrio CHECK OPTION
WITH READ ONLY
assegura que as operaes DML no possam
ser executadas nesta view
CREATE VIEW
nome_view
FORCE
SQL>
2
3
4
CREATE VIEW
empvu10
AS SELECT empno, ename, job
FROM
emp
WHERE
deptno = 10;
Null?
NOT NULL
Type
NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
CREATE VIEW
dept_sum_vu
(name, minsal, maxsal, avgsal)
AS SELECT d.dname, MIN(e.sal), MAX(e.sal),
AVG(e.sal)
FROM
emp e, dept d
WHERE
e.deptno = d.deptno
GROUP BY d.dname;
No exemplo anterior est sendo criada uma view complexa para exibir os nomes
de departamento, maior salrio, menor salrio
e o salrio mdio por
departamento. Note que os nomes alternativos foram especificados para a view.
Esse um requisito se uma coluna da view derivar de uma funo ou expresso.
Exemplo 4: Criar uma view, identificada por empvu20, com todas as colunas da
tabela emp e todos os funcionrio do departamento 20. Acrescentar uma clusula
para garantir que as manipulaes permaneam no domnio da view.
SQL>
2
3
4
5
Pode-se remover uma view sem perder dados porque uma view est baseada em
tabelas subjacentes no banco de dados.
Sintaxe:
DROP VIEW view;
TEXT
SELECT REPID, ORD.CUSTID, CUSTOMER.NAME CUSTNAME,
PRODUCT.PRODID, DESCRIP PRODNA
Quando a base de dados acessada usando uma view, o Oracle Server executa
as seguintes operaes:
Recupera a definio da view da tabela do dicionrio de dados
USER_VIEWS.
Verifica os privilgios de acesso para a tabela-base da view.
Converte a consulta da view em uma operao equivalente nas tabelas ou
tabela-base subjacentes. Em outras palavras, os dados so recuperados a
partir da(s) tabela(s)-base, ou uma atualizao feita nela(s).
2.16. Sequencia
Uma seqncia um objeto do banco de dados criado pelo usurio que pode ser
compartilhado por vrios usurios para gerar nmeros inteiros exclusivos. Pode-se
usar as seqncias para gerar valores de chave primria automaticamente.
A seqncia gerada e incrementada (ou diminuda) por uma rotina Oracle8
interna. Esse objeto pode economizar tempo, pois capaz de reduzir a quantidade
de cdigo de aplicao necessria para criar uma rotina de gerao de
seqncias, alm disso acelera a eficcia do acesso a valores de seqncia
quando esto em cach na memria.
2.16.1. Criando uma sequencia
Sintaxe:
CREATE SEQUENCE nome_seqncia
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
onde:
nome_seqncia
INCREMENT BY n
START WITH n
MAXVALUE n
NOMAXVALUE
MINVALUE n
NOMINVALUE
CYCLE | NOCYCLE
CACHE n | NOCACHE
o identificador da seqncia
especifica o intervalo entre nmeros de
seqncia onde n um nmero inteiro, o
default 1.
especifica o primeiro nmero de seqncia a
ser gerado, default 1
especifica o valor mximo que a seqncia
pode gerar
especifica um valor mximo de 10^27 para
uma seqncia crescente e 1 para uma
seqncia decrescente (NOMAXVALUE a
opo default)
especifica o valor de seqncia mnimo
especifica um valor mnimo de 1 para uma
seqncia crescente e (10^26) para uma
seqncia decrescente. (NOMINVALUE a
opo default)
especifica que a seqncia continue a gerar
valores aps alcanar seu valor mximo
ou mnimo ou no gere valores adicionais
(NOCYCLE a opo default.)
especifica quantos valores o Oracle Server
alocar previamente e manter na memria
O exemplo acima cria uma seqncia chamada DEPT_DEPTNO para ser usada
na coluna DEPTNO da tabela DEPT. A seqncia comea em 91, no permite
cach e no permite o ciclo da seqncia.
ATENO: Se o valor do parmetro INCREMENT By for negativo, a seqncia
ser descendente.
2.16.2. Consultando Seqncias no dicionrio de dados.
Resultado:
SEQUENCE_NAME
LAST_NUMBER
DEPT_DEPTNO
1
MIN_VALUE
MAX_VALUE
INCREMENT_BY
CACHE_SIZE
Y N
Para utilizar a seqncia pode-se fazer referncia aos seus valores usando as
pseudocolunas NEXTVAL e CURRVAL.
2.16.3.1
ATENO:
Somente o proprietrio ou usurios que possuam o privilgio ALTER podem
alterar a seqncia.
Somente os nmeros de seqncia futuras so afetados.
A seqncia deve ser eliminada e recriada para reiniciar a seqncia em
um nmero diferente.
Alguma validao executada, Por exemplo, no possvel impor um novo
MAXVALUE menor do que o nmero de seqncia atual.
2.16.4. Removendo uma Seqncia
no ser possvel
fazer
Sintaxe:
DROP SEQUENCE nome_seqncia;
Sintaxe:
CREATE [PUBLIC] SYNONYM sinnimo
FOR
objeto;
onde:
PUBLIC
sinnimo
objeto
ATENO:
O objeto que receber um sinnimo no pode estar contido em um pacote.
Um nome de sinnimo deve ser distinto de todos os outros objetos de
propriedade do mesmo usurio.
Exemplo: Criar um sinnimo de uso pblico para a tabela emp do usurio Scott.
SQL> CREATE PUBLIC SYNONYM empregado
2 FOR
Scott.emp;
2.17.1. Consultando Sinnimos no dicionrio de dados
Resultado:
SYNONYM_NAME
TABLE_OWNER
TABLE_NAME
DB_LINK
------------------------------ ------------------------------ ---CATALOG
SYS
CATALOG
COL
SYS
COL
2.17.2. Removendo um Sinnimo
Sintaxe:
CREATE INDEX nome_ndice ON tabela (coluna[, coluna]...);
onde:
nome_ndice
tabela
coluna
o nome do ndice
o nome da tabela
o nome da coluna na tabela a ser indexada
emp_ename_idx
emp(ename);
possvel criar vrios ndices para uma tabela, mas isso no significa que as
consultas sero aceleradas. Cada operao DML que seja submetida a commit
em uma tabela com ndices significa que os ndices devem ser atualizados.
Quanto mais ndices associados a uma tabela voc tiver, maior ser o esforo
feito pelo Oracle Server para atualizar todos os ndices aps uma DML. Por isso
recomenda-se a criao de ndices quando:
a coluna for usada freqentemente na clusula WHERE ou em uma
condio de juno.
a coluna contiver uma ampla faixa de valores.
a coluna contiver um grande nmero de valores nulos.
duas ou mais colunas forem usadas juntas com freqncia em uma
clusula WHERE ou em uma condio de juno.
a tabela for grande e se esperar que a maioria das consultas recupere
menos que 2 a 4% das linhas.
ATENO:
Lembre-se de que, para aplicar exclusividade, deve-se definir uma restrio
exclusiva na definio da tabela. Em seguida, um ndice exclusivo ser
criado automaticamente.
Quando a tabela for atualizada com freqncia. Se voc tiver um ou mais
ndices em uma tabela, as instrues DML que acessarem a tabela sero
mais lentas.
2.18.2. Consultando ndices no dicionrio de dados.
Resultado:
INDEX_NAME
INDEX_TYPE
TABLE_NAME
--------------------- --------------------------- ---------------EMP_ENAME_IDX
NORMAL
EMP
onde:
nome do usurio
atribui uma senha para o usurio
senha que ser atribuida ao usurio,
no deve iniciar com nmeros
PASSWORD EXPIRE DEFAULT
quando o usurio se conecta ao banco
ele deve redefinir a sua senha de
autenticao. Este recurso vlido
somente para os usurios que se
autenticam pelo DD
Exemplo: Criar o usurio EXEMPLO, com senha PBD cuja senha dever ser
modificada quando a primeira conexo for realizada.
nome_usurio
identified by
senha
As definies atribudas a um usurio podem ser alteradas, isso pode ser feito
pelo DBA ou por usurios com privilgio ALTER USER. Para isso deve ser
informado o nome do usurio, o parmetro que dever ser alterado e o valor do
novo parmetro.
Sintaxe:
ALTER USER usurio IDENTIFIED BY senha;
onde:
usurio
senha
o nome do usurio
especifica a nova senha
Sintaxe:
drop user nome_usurio;
onde:
personagem
ROLE
nome_personagem;
Exemplo:
SQL> CREATE ROLE manager;
16
A Oracle como funes, para evitar confuses ser utilizado o termo personagem tambm
utilizado por Abbey & Corey em Oracle Guia do usurio
INDEX
TABLE
SESSION
Sintaxe:
GRANT {privilgio | role} ...
TO {usurio | role | public} ...
[WITH ADMIN OPTION];
onde:
privilgio
o privilgio de sistema a ser concedido
usurio
o nome do usurio
role
um personagem (funo ou papel)
public
concede os privilgios de sistema a todos os usurios
WITH ADMIN OPTION permite que o usurio que est recebendo um privilgio
ou as atribuies possa concede-las a outros usurios
ou atribuies.
Tabela
x
x
Viso
Seqncia
x
Procedimento
x
x
INDEX
INSERT
REFERENCES
SELECT
UPDATE
x
x
x
x
x
x
Sintaxe:
GRANT [privilgio (lista de colunas) | ALL PRIVILEGES} ...
ON esquema.objeto
TO {usurio | role | public} ...
[WITH GRANT OPTION];
onde:
privilgio
o privilgio de objeto a ser concedido
lista de colunas
especifica as colunas de uma view ou tabela
on esquema.objeto
especifica o nome do objeto
to usurio
o nome do usurio
role
um personagem ou funo
public
concede os privilgios de sistema a todos os usurios
WITH GRANT OPTION permite que o usurio conceda o privilgio recebido a
outro usurio
ATENO:
Sintaxe:
REVOKE privilgios FROM usurio [cascade contraints];
onde,
REVOKE
privilgios
FROM usurio|role
cascade constraints
on SCOTT. EMP
from exemplo;
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
USER_COL_PRIVS_MADE
USER_COL_PRIVS_RECD
USER_ROLE_PRIVS
USER_TAB_PRIVS_MADE
USER_TAB_PRIVS_RECD
Exemplo: Exibir a lista de
objetos do usurio.
Comentrios
Este livro aborda.
3. PL/SQL
A linguagem PL/SQL (Procedural Language/SQL) uma extenso de linguagem
procedural da Oracle Corporation para SQL, incorpora muitos recursos de
programao, tais como:
declarao de varivies e tipos pr-definidos
Estruturas de seleo e repetio
Procedimentos e funes
Tipos de objeto e mtodos (nas verses posteriores a 8)
Alm de aceitar a manipulao de dados, ela tambm permite que as instrues
de consulta da linguagem SQL sejam includas em unidades procedurais de
cdigo e estruturadas em blocos, tornando a linguagem SQL uma linguagem
avanada de processamento de transaes. Com a linguagem PL/SQL,
possvel criar blocos de annimos ou blocos nomeados17.
.A linguagem PL/SQL estruturada em blocos, os programas podem ser
divididos em blocos lgicos. Um bloco PL/SQL dividido em trs sees:
DECLARATIVA (opcional) - Seo destinada declarao das variveis,
cursores e excees que sero utilizadas no bloco
EXECUTVEL (obrigatria) - tambm conhecida como corpo do programa, rea
onde so descritos os passos necessrios para realizao da tarefa. Podem ser
utilizadas instrues SQL e/ou PL/SQL
TATAMENTO DE EXCEES (opcional) - destinada ao tratamento das
excees geradas no bloco; devem ser descritas as aes a serem
desempenhadas quando ocorrerem erros.
3.1. Blocos Annimos
Os blocos annimos no ficam armazenados na base de dados e no podem ser
chamados por outros blocos PL/SQL, eles devem ser compilados a cada
utilizao. Pode-se incorporar um bloco annimo em uma aplicao ou pode-se
execut-lo interativamente no SQL*Plus.
Exemplo da estrutura de um bloco em PL/SQL:
DECLARE
v_variavel varchar2(5);
BEGIN
Select nome_coluna
into v_variavel
17
from nome_tabela;
EXCEPTION
When exception_name then
... procedimentos a serem executados quando uma determinada exceo ocorrer.
END;
Sobre o cdigo:
As palavras chave DECLARE, BEGIN e EXCEPTION no so
sucedidas de ponto e vrgula, as demais instrues so terminadas
com um ponto e vrgula (;).
A palavras-chave BEGIN e END so obrigatrias.
Deve-se utilizar uma barra (/) para executar o bloco annimo PL/SQL
no buffer de SQL*Plus.
Coloque um ponto (.) para fechar um buffer de SQL*Plus. Um bloco
PL/SQL tratado como uma instruo contnua no buffer e os pontoe-vrgulas no bloco no fecham ou executam o buffer.
A edio do bloco pode ser feita utilizando um editor de textos cujo
arquivo dever possuir extenso sql, por exemplo teste.sql. No
SQL*Plus possvel definir o editor default, para isso deve-se
selecionar, no menu, o item Editor Definir Editor.
3.1.1. Operadores e delimitadores
Operador
+
*
=
Descrio
operador de adio
operador de multiplicao
operador de igualdade
>
operador de comparao
maior do que
delimitador de fim expresso
)
%
.
:
~=
^=
:=
..
-/*
<<
Operador
/
<>
!=
<
**
Descrio
operador de subtrao
operador de diviso
operador de comparao
diferente
operador de comparao
menor do que
delimitador de incio de
expresso
terminador de instruo
separador de itens
delimitador de cadeia de
caracteres (mensagens)
operador de exponenciao
||
operador de concatenao
>=
operador de comparao
maior ou igual
operador de comparao
menor ou igual
delimitador
de
fim
de
comentrio de linha
delimitador de final do texto do
label(etiqueta)
indicador de atributo
separador de componentes
delimitador de cadeia de
caracteres
indicador de varivel de
ligao
operador de comparao
diferente
operador de atribuio
operador de intervalo
;
,
indicador de comentrio de
linha
delimitador de incio de
comentrio de linha
delimitador de incio do texto
do label(etiqueta)
<=
*/
>>
3.1.2. Variveis
Neste curso a nfase ser nos tipos escalares, variveis de ligao e o tipo composto registro.
onde,
dentificador
ATENO:
Exemplos:
v_nome emp.ename%type; -- declarao da varivel com a mesma
estrutura da coluna ename da tabela emp.
v_balance number(7,2);
v_min_balance v_balance%type; -- declarao da varivel com a
mesma estrutura da varivel declarada anteriormente.
ATENO: uma boa prtica de programao a adoo de uma conveno de
nomeao para variveis, por exemplo: o prefixo v_ representa uma varivel; c_
representa uma constante.
3.1.4. Variveis de Substituio
PL/SQL estiver sendo executado para passar valores para o bloco, estes valores
so passados por meio das variveis de substituio.
ATENO: Ao utilizar as variveis de substituio os valores so substitudos no
bloco PL/SQL antes que esse bloco seja executado. Por isso, no possvel
substituir os diferentes valores para as variveis de substituio usando um loop.
Exemplo:
ACCEPT p_nome PROMPT Digite o nome do funcionrio...
ACCEPT p_sal_mes PROMPT Digite o valor do salario...
O comando accept indica que o valor para a varivel de substituio p_nome e
p_sal_mes sero fornecidos pelo teclado. O comando PROMPT indica a
mensagem que ser exibida para orientar o usurio quanto ao valor a ser digitado.
Para atribuir os valores das variveis de substituio para as variveis PL/SQL
necessrio a utilizao do &.
Exemplo:
Declare
v_nome varchar2(30) := &p_nome;
v_sal number(9,2) := &p_sal_mes;
3.1.5. Variveis de ligao
Estas variveis podem ser declaradas no prompt do SQL ou fora do bloco PL/SQL
(antes d o declare ou depois da /).
Para utilizar estas variveis no bloco PL/ SQL deve-se precede-las de : (dois
pontos), para que sejam distinguidas das variveis PL/SQL:
Exemplo:
:g_sal_anual := v_sal * 12;
A exibio dos valores armazenados nestas variveis pode ser feita por meio do
comando SQL PRINT:
Exemplo:
PRINT g_sal_anual
nome
valor
Declare
v_nome varchar2(30) := &p_nome;
v_sal number(9,2)
:= &p_sal_mes;
Begin
:g_sal_anual := v_sal * 12;
END;
/
PRINT g_sal_anual
do Instrues
SQL
do
Bloco
PL/SQL
Instrues
SQL
onde,
mensagem pode ser:
uma
cadeia
de
caracteres,
por
exemplo:
DBMS_output.put_line(O nome do funcionrio ); e neste
caso dever ser especificada entre aspas simples.
uma
varivel
ou
constante,
por
exemplo:
DBMS_output.put_line(v_sal_anual);
ou ambas, por exemplo: DBMS_output.put_line(nome do
funcionrio || v_sal_anual); neste caso est sendo utilizado
o operador de concatenao || para unir as duas mensagens.
nome
valor
do Instrues
SQL
do
Declare
v_nome varchar2(30) := &p_nome;
v_sal number(9,2)
:= &p_sal_mes;
v_sal_anual number(9,2);
Bloco
Begin
PL/SQL
v_sal_anual := v_sal * 12;
DBMS_output.put_line(O salario anual de ||
v_nome || || v_sal_anual);
END;
/
Note que no exemplo 2 no est sendo utilizada a varivel de ligao g_sal_anual,
pois a solicitao da exibio do resultado do processamento est sendo feita na
rea executvel do bloco PL/SQL.
3.1.6. Instrues SELECT em PL/SQL
variveis
registro
tabela
condio
Comentrios
Este livro aborda os principais conceitos sobre
bancos de dados.
Oracle8i Administrao de
Bancos de Dados. Rio de
Janeiro:
Editora
Cincia
Moderna
Oracle8i Administrao de
Bancos de Dados. Rio de
Janeiro:
Editora
Cincia
Moderna
Morelli, Eduardo Terra, Oracle 8i
Fundamental SQL, PL/SQL e
Administrao, Editora rica,
2000
Sites:
Oracle
imasters
SLQMagazi
ne
BIBLIOGRAFIA:
[Bibliografia Complementar]
[1] Cougo, Paulo Srgio.Modelagem Conceitual e projeto de bancos de
dados.Rio de Janeiro: Campus, 1997 [Bibliografia Bsica]
[2] Silberschatz, Abraham; Korth, Henry F. e Sudarshan, S. Sistema de
Banco de Dados. So Paulo: Makron Books, 1999.
[3] Urman, Scott, Oracle 8 Programao PL/SQL, McGraw Hill (1999)
[4] Morelli, Eduardo Terra, Oracle 8i Fundamental SQL, PL/SQL e
Administrao, Editora rica, 2000