Вы находитесь на странице: 1из 94

1.

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

2. SQL STRUTURED QUERY LANGUAGE

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

2.13.2.2.2 Converso de nmeros em caracteres


2.13.2.2.3 Converso de caracteres em nmeros
2.13.2.2.4 Converso caracteres em datas
2.13.2.3 Outras funes de linha
2.13.3. FUNES DE GRUPO
2.13.3.1 Agrupando Resultados:
2.13.3.2 Restringindo resultados do grupo
2.13.4. SUBCONSULTAS
2.13.4.1 Subconsulta em Consultas
2.13.4.2 Subconsultas de uma linha
2.13.4.3 Subconsultas de vrias linhas
2.13.4.4 Subconsultas de vrias colunas
2.13.4.5 Subconsulta na clusula FROM
2.13.4.6 Criando uma tabela usando uma subconsulta.
2.13.4.7 Insero partir de subconsultas
2.13.4.8 Alterao de dados partir de subconsultas
2.13.4.9 Remoo de linhas a partir de subconsultas
2.14. INSTRUES PARA MANIPULAO DE TABELAS
2.14.1. INSTRUO ALTER TABLE
2.14.1.1 Adicionando colunas
2.14.1.2 Adicionando restries
2.14.1.3 Modificando colunas
2.14.1.4 Eliminando uma Restrio
2.14.1.5 Desativando e Ativando uma Restrio
2.14.2. ELIMINANDO UMA TABELA
2.15. VISES (VIEWS)
2.15.1. CRIANDO VISES
2.15.2. REMOVENDO UMA VIEW
2.15.3. CONSULTANDO VIEWS NO DICIONRIO DE DADOS
2.16. SEQUENCIA
2.16.1. CRIANDO UMA SEQUENCIA
2.16.2. CONSULTANDO SEQNCIAS NO DICIONRIO DE DADOS.
2.16.3. UTILIZANDO UMA SEQNCIA
2.16.3.1 Alterando uma Seqncia
2.16.4. REMOVENDO UMA SEQNCIA
2.17. SINNIMO
2.17.1. CONSULTANDO SINNIMOS NO DICIONRIO DE DADOS
2.17.2. REMOVENDO UM SINNIMO
2.18. NDICE (INDEX)
2.18.1. CRIANDO UM NDICE
2.18.2. CONSULTANDO NDICES NO DICIONRIO DE DADOS.
2.18.3. REMOVENDO UM NDICE
2.19. USURIO
2.19.1. ALTERANDO USURIOS
2.19.2. REMOVENDO USURIOS
2.19.3. PERSONAGENS
2.20. PRIVILGIOS

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

3.1. BLOCOS ANNIMOS


3.1.1. OPERADORES E DELIMITADORES
3.1.2. VARIVEIS
3.1.3. TIPOS DE VARIVEIS
3.1.3.1 Tipos de Dados Escalares
3.1.4. VARIVEIS DE SUBSTITUIO
3.1.5. VARIVEIS DE LIGAO
3.1.6. INSTRUES SELECT EM PL/SQL
3.1.7. ANINHAMENTO DE BLOCOS E ESCOPO DAS VARIVEIS
3.1.8. INSERO DE DADOS
3.1.9. ATUALIZANDO DADOS
3.1.10. EXCLUSO DE DADOS
3.1.11. CONTROLE DE TRANSAES

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

produo de informaes1. Neste nvel no so, necessariamente, consideradas


particularidades relacionadas ao modelo de banco de dados que ser utilizado
para a implementao do banco. a etapa de entendimento do negcio e sua
representao.
No contexto de desenvolvimento de projetos, este nvel est associado a etapa de
anlise de requisitos.
Nvel lgico: consiste na representao de como os dados sero armazenados
seguindo uma metodologia. De acordo com Cougo[1] essa representao
independente dos dispositivos ou meios de armazenamento fsico das estruturas
de dados, mas deve ser elaborado respeitando-se os conceitos tais como chaves
de acesso, controles de chaves duplicadas, normalizao, integridade referencial
entre outros.
No contexto de desenvolvimento de projetos, este nvel est associado etapa de
projeto.
Nvel Fsico:
Consiste na implementao das estruturas de dados, dos
relacionamentos, das chaves, enfim a etapa da construo do banco de dados
considerando os aspectos fsicos e as caractersticas do sistema gerenciador de
bancos de dados utilizado.
No contexto de desenvolvimento de projetos, este nvel est associado etapa de
implementao ou operao.
1.2.

Bancos de dados relacionais

conjunto de dados sobre um negcio organizados por assunto, onde cada


assunto representado por uma tabela, por exemplo: uma pizzaria precisa de
informaes sobre: os fornecedores dos produtos que utiliza, o estoque de seus
produtos, clientes, pizzas etc., sendo assim podemos separar as os dados que
representaro as informaes de fornecedores, clientes, produtos, etc.. Nos
modelos relacionais estes assuntos so representados por tabelas.
As tabelas so compostas por conjuntos de campos, denominados registros
(tuplas), que armazenam dados.
Os dados existem fisicamente e precisam de um contexto para adquirir algum
significado. So estticos, isto , permanecem no mesmo estado at que sejam
modificados por um processo manual ou automtico.
Mellanzone

55

03909-70

22,00

Mesozica

Isoladamente estes dados no tm nenhum sentido. O que Mellanzone? Ser o


nome de uma pessoa, de um supermercado ou de uma pizza? E 55? um
cdigo? Uma soma? Uma nota?
1

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.

Outra caracterstica dos dados que eles so estticos, ou seja, permanecem no


mesmo estado at que sejam modificados por algum processo manual ou
automtico.
Os dados tornam-se informaes quando so associados a um contexto e
transmitem significados lgicos s pessoas.
Nome da Pizza
Mellanzone

Ingredientes

Cdigo Pizza

Preo da pizzza

Apelido da Pizza

55

03909-70

22,00

Mesozica

Os dados so armazenados em campos. Um campo a menor estrutura dentro


de um banco de dados relacional. Cada campo possui um conjunto de
caractersticas tais como identificador do campo, tipo de dado que ser
armazenado, tamanho do dado e restries2, por exemplo:
Campo
Nome da Pizza
Ingredientes

Identificador
do campo
nome_pizza
ingredientes

Cdigo da Pizza codigo_pizza


Preo da pizza
preco
Apelido da pizza apelido

Tipo de dado Tamanho Restries


alfanumrico
numrico
inteiro
numrico
inteiro
numrico real
alfanumrico

20
2

preenchimento obrigatrio
preenchimento obrigatrio, chave
estrangeira
chave primria

8
5
15

nenhuma
no pode ser repetido em outro
registro.

O conjunto de campos sobre um assunto compe um registro. Um registro


equivale a uma linha de
uma tabela e tambm conhecido como tupla, por exemplo:
Tabela: CARDPIO
Nome da Pizza
Mellanzone
Tomate Seco
Calabresa

Ingredientes

Cdigo

Preo

Apelido

55

03909-70

22,00

Mesozica

02983-89

21,00

Pomodori

19203-89

11,00

Kashu

23
11

A tabela CARDPIO contm:


Os campos: Nome da Pizza, Ingredientes, Cdigo, Preo e Apelido;
O campo Nome da Pizza recebeu os dados: Mellazone, Tomate Seco e
Calabresa;
O 3o. registro composto pelo conjunto de dados: Calabresa, 11, 19203-89, 11,00
e Kashu;
2

A especificao destas caractersticas deve seguir os padres do SGBDR escolhido

Cada linha da tabela representa uma tupla ou registro;


Cada coluna da tabela representa um campo.
Os campos podem ainda, ser classificados como composto, multivalorado ou
calculado e devem ser implementados de acordo com o modelo projetado que
deve atender s especificidades do negcio. A seguir sero apresentadas as
caractersticas de cada um:

Campo de mltiplas partes ou campo composto: armazena dados com


valores distintos. No exemplo abaixo, o campo endereo possui
informaes sobre o nome da rua (alfanumrico) e o nmero do imvel
(numrico).

Instrutor

Endereo

Lcia da Silva Pires

Rua Sebastio Marchesone, 500

Campo Simples

Campo contendo mltipas partes

Campo multivalorado: armazena mltiplas instncias de um mesmo tipo,


no exemplo abaixo a instrutora Lcia ensina diversas categorias: Cisco,
Oracle, Asp, neste caso o campo Categorias ensinadas multivalorado
pois recebe muitos dados sobre o mesmo assunto para uma nica
instrutora.

Instrutor

Categorias ensinadas

Lcia da Silva Pires

Cisco, Oracle, Asp

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

O projeto de um banco de dados relacional consiste em um conjunto de tabelas


que devem estar relacionadas de maneira que no exista a necessidade de
redundncias no armazenamento de dados. Os relacionamentos entre as tabelas
so estabelecidos por meio dos campos chave primria de uma tabela com um
campo chave estrangeira de outra tabela.

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.

Chave Estrangeira: um campo ou conjunto de campos usado para


estabelecer um relacionamento entre duas tabelas. Na tabela de origem
deve ser chave primria.

No exemplo abaixo, as tabelas EMP e DEPT3 contm, respectivamente,


informaes sobre os funcionrios e sobre os departamentos de uma empresa e
para que no exista necessidade de armazenar os dados sobre o nome do
departamento e a localizao dos mesmos para cada registro de funcionrios elas
so relacionadas por meio dos campos DEPTNO que na tabela EMP chave
estrangeira e na tabela DEPT chave primria.
Tabela EMP
Empno Ename
7839

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

Como os dados sobre entidades diferentes so armazenados em tabelas


diferentes, talvez voc precise combinar duas ou mais tabelas para responder a
uma pergunta especfica. Por exemplo, talvez seja necessrio saber a localizao
do departamento no qual um funcionrio trabalha. Nesse cenrio, voc precisa de
informaes da tabela EMP (que contm dados sobre funcionrios) e da tabela
DEPT (que contm informaes sobre departamentos).
O recurso de relacionar dados de uma tabela a dados de outra permite organizar
informaes em unidades gerenciveis separadas. possvel manter logicamente
os dados dos funcionrios separadas dos dados dos departamentos
armazenando-os em uma tabela separada.

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

1.3. Sistemas Gerenciadores de Bancos de Dados


De acordo com Silberschatz[2], um SGBD constitudo por um conjunto de dados
associados a um conjunto de programas para acesso a esses dados tendo como
objetivo proporcionar um ambiente tanto conveniente quanto eficiente para a
recuperao de dados.
O conjunto de dados contm informaes sobre um assunto em particular, este
assunto pode ser uma empresa, um projeto, um negcio entre outros.
O SGBDR ou RDBMS (Relational Database Management System) so sistemas
que disponibilizam recursos para implementao de projetos de bancos de dados
relacionais, manuteno e administrao de suas estruturas, dados e usurios.
Com conceito de centralizar os dados e torn-los disponveis a vrios usurios
conseguimos incrementar a velocidade, ter os dados centralizados, tambm torna
mais fcil a administrao e a segurana do banco de dados. Este conceito
chamado de SGBDR cliente/servidor. Neste tipo de SGBDR, os dados ficam
fisicamente armazenados em um computador que age como um servidor de banco
de dados e os usurios interagem com esse banco por meio de aplicaes
localizadas em seus prprios computadores denominados clientes. Estes sistemas
so amplamente utilizados para administrar grandes volumes de dados
compartilhados.
Atualmente podem ser encontrados diversos SGBDR para quase todos os
sistemas operacionais e que podem ser usados para atender inmeras
necessidades. Alguns exemplos de sistemas gerenciadores de bancos de dados
relacionais so: Oracle, Sybase, MySql, SQLServer, Access, entre outros.
De maneira geral os SGBDR apresentam algumas caractersticas operacionais
desejveis, so elas:
Controle de Redundncias: A redundncia consiste no armazenamento
de uma mesma informao em locais diferentes, provocando
inconsistncias. Por exemplo: Quando informaes esto em locais
diferentes, onde uma atualizada e outra no. Em um Banco de Dados as
informaes s se encontram armazenadas em um nico local, no
existindo duplicao descontrolada dos dados. Quando existem replicaes
dos dados, estas so decorrentes do processo de armazenagem tpica do
ambiente Cliente-Servidor, totalmente sob controle do Banco de Dados.
Compartilhamento dos Dados: deve possuir um sistema de controle de
concorrncia ao acesso dos dados, garantindo em qualquer tipo de
situao a escrita/leitura de dados sem erros. Como exemplo imagine que
um casal possui uma conta corrente conjunta cujo saldo R$ 100,00, e
ambos tentam efetuar um saque exatamente no valor de R$ 100,00, no
mesmo momento e em locais diferentes.
Controle de Acesso: deve possuir um sistema de controle dos privilgios
de acesso aos dados cada um dos usurios ou grupos de usurios do
banco.
Interfaceamento: Formas de acesso grfico, em linguagem natural, em
SQL ou ainda via menus de acesso, no sendo uma "caixa-preta" somente
sendo passvel de ser acessada por aplicaes.

Esquematizao: Mecanismos que possibilitem a compreenso do


relacionamento existente entre as tabelas e de sua eventual manuteno.
Controle de Integridade: Deve impedir que aplicaes ou acessos pelas
interfaces possam comprometer a integridade dos dados.
Backups e recuperao de dados: Deve possuir opes para realizao
de cpias de segurana e recuperao de dados.

Alm das caractersticas operacionais apresentadas anteriormente, o SGBD deve


possuir alguns componentes para possibilitar a realizao das suas tarefas:

Gerenciador de Acesso ao Disco: O SGBD utiliza o Sistema Operacional


para acessar os dados armazenados em disco, controlando o acesso
concorrente s tabelas do Banco de Dados. O Gerenciador controla todas
as pesquisas (queries) solicitadas pelos usurios, os acessos do
compilador DML, os acessos feitos pelo Processador do Banco de Dados
ao Dicionrio de Dados e tambm aos prprios dados.
Compilador DDL (Data Definition Language): Processa as definies do
esquema do Banco de Dados, acessando quando necessrio o Dicionrio
de Dados do Banco de Dados.
Dicionrio de Dados: Contm o esquema do Banco de Dados, suas
tabelas, ndices, forma de cesso e relacionamentos existentes.
Processador do Banco de Dados: Manipula requisies a Base de Dados
em tempo de execuo. o responsvel pelas atualizaes e integridade
da Base de Dados.
Processador de Pesquisas (Queries dos usurios): analisa as
solicitaes, e se estas forem consistentes, aciona o Processador do Banco
de Dados para acesso efetivo aos dados.
Compilador DML (Data Manipulation Language): As aplicaes fazem
seus acessos ao pr-compilador DML da linguagem hospedeira, que os
envia ao Compilador DML (Data Manipulation Language) onde so gerados
os cdigos de acesso ao Banco de Dados.

Os Sistemas Gerenciadores de Bancos de Dados alm de serem classificados de


acordo com o modelo utilizado para o projeto e implementao tambm podem
ser classificados de como mono-usurio, utilizado em computadores pessoais ou
multi-usurios, por exemplo Cliente/servidor; localizado ou distribudo; se ele for
localizado, ento todos os dados ficam armazenados em um mesmo local
(mquinas ou discos) no distribudo os dados ficam distribudos em vrios locais
distintos e ainda um SGBD pode possuir um ambiente homogneo o ambiente
composto por um nico SGBD ou um ambiente heterogneo compostos por
diferentes SGBDs, este assunto ser explorado com mais detalhes em outras
disciplinas ao longo do curso.

1.4. OBJETOS DO BANCO DE DADOS.


A criao de um banco de dados compreende uma srie de instrues para
definio de como sero as caractersticas do banco; onde os dados sero
fisicamente armazenados; quantos usurios iro utilizar o banco simultneamente;
como ser a configurao da instncia do banco, entre outras informaes. Mas
no basta apenas criar o banco necessrio que este banco tenha estruturas que
possibilitem o armazenamento de dados, o acesso aos dados, mecnismos que
auxiliem na recuperao dos dados, entre outros. Os objetos do banco
representam estas estruturas e so criados e manipulados com as instrues DDL
Data Definition Language6 e as suas definies ficam armazenadas no
dicionrio de dados (Data Dictionary) do banco. Como exemplos de objetos podese citar:

Tabela (Table)
Viso (View)
Sequencia (Sequence)
ndice (Index)
Usurio (User)
Personagem (role)
Procedimentos (Procedure)
Funes (Function)
Gatilhos (Trigger)
Pacotes (Package)

1.5. Usurios do Banco de Dados


Os usurios do banco de dados so as pessoas que utilizam o banco de dados e
seus objetos, direta ou indiretamente e esto agrupados nas seguintes categorias:

desenvolvedor de aplicaes: o profissional responsvel pela


construo de aplicaes que iro acessar a base de dados para realizar
consultas, alteraes ou excluses de dados;
usurio final: a pessoa que faz uso dos dados consolidados para
tomada de deciso ou simples consulta ou atualizao. Normalmente
interage com o banco por intermdio de aplicaes.
analista de Banco de dados (Case): o usurio responsvel pela
modelagem dos dados e implementao do banco de dados nos nveis
lgico e fsico junto com o DBA.
administrador de banco de dados: o profissional que tem as seguintes
responsabilidades:
-

Instalar e atualizar o banco de dados e as ferramentas de


aplicao;

Este tpico ser estudado na parte 2.

Alojar sistemas de armazenamento e planejar os futuros


armazenamentos de requerimentos para o sistema de
banco de dados;
Criao e armazenamento das estruturas primrias para
que os desenvolvedores possam gerar aplicaes;
Criao de objetos primrios, uma vez que os usurios
tenham construdo uma nova aplicao;
Modificar a estrutura do banco de dados para adequ-lo
s novas aplicaes;
Garantir a disponibilidade do banco de dados, bem como
a performance do mesmo;
Controlar e monitorar os acessos dos usurios ao banco
de dados (Segurana);
Fazer o backup das informaes e a restaurao;
Manter um controle sobre os backups.

ATENO: Os usurios tm acesso ao banco de dados ou aos seus objetos de


acordo com os privilgios que lhe so conferidos.

2. SQL Strutured Query Language


Neste captulo sero abordadas as estruturas SQL para criao e manipulao de
tabelas e dados. A SQL uma linguagem estruturada que utiliza uma combinao
de construtores em lgebra e clculo relacional e que possibilita no s a
realizao de consultas, como o prprio nome sugere, mas tambm a
manipulao de tabelas e dados. apesar de ser conhecida como uma linguagem
para consultas possibilita a realizao de consultas, mas tambm criao,
alterao e excluso de tabelas e manipulaes de dados. A SQL a linguagem
padro utilizada pelos SGBD relacionais, mesmo assim podem existir algumas
variaes quanto utilizao. Neste curso a SQL ser abordada de acordo com
as especificidades do SGBD relacional Oracle.
2.1. Histrico
Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram
criadas linguagens destinadas sua manipulao. O Departamento de Pesquisas
da IBM, desenvolveu a SQL como forma de interface para o sistema de BD
relacional denominado SYSTEM R, incio dos anos 70, originalmente chamada de
SEQUEL - Structured English Query Language.
Em 1977 foi revisada e passou a ser chamada de SQL - Structured Query
Language.
Em 1986 o American National Standard Institute (ANSI), publicou um padro SQL,
ento a SQL estabeleceu-se como linguagem padro para Bancos de Dados
Relacionais.
2.2. Caractersticas da SQL
A SQL possui comandos para a definio dos dados (DDL-Data Definition
Language), comandos para a manipulao de dados (DML Data Manipulation
Language) e uma subclasse de comandos DML, a DCL (Data Control Language),
dispe de comandos de controle como Grant e Revoke.
Algumas caractersticas da SQL so:

Independncia de fabricante: A SQL oferecida em praticamente todos


os SGBDs.
Portabilidade entre computadores: A SQL pode ser utilizada desde um
PC, passando por Workstantions, at Mainframes.
Reduo de custos com treinamento: Devido portabilidade, as
aplicaes podem se movimentar de um ambiente para outro sem
necessidade de um novo treinamento.

Ingls estruturado de alto nvel: A SQL formada por um conjunto bem


simples de sentenas em ingls, oferecendo um rpido e fcil
entendimento.
Consulta interativa: Prov um acesso rpido aos dados, fornecendo
respostas ao usurio quase instantaneamente.
Mltiplas vises dos dados: Permite ao criador do banco de dados levar
diferentes vises dos dados a diferentes usurios.
Definio dinmica dos dados: Pode-se alterar, expandir ou incluir,
dinamicamente, as estruturas dos dados armazenados.

2.3. Instrues DDL


Os comandos DDL (Data Definition Language) composta entre outros pelos
comandos Create, que destinado a criao do Banco de Dados, das Tabelas
que o compe, alm das relaes existentes entre as tabelas. Como exemplo de
comandos da classe DDL temos os comandos Create, Alter e Drop. Por meio das
instrues DDL podem ser realizadas as tarefas de:

Criao, alterao e eliminao de objetos do banco de dados, como por


exemplo tabelas, ndices, seqncias;
Conceo e revogao de privilgios em objetos
Criao do banco de dados
Criao de usurios;
Conceo e revogao de privilgios usurios

2.4. Instrues DML


Os comandos da srie DML (Data Manipulation Language), destinados a
consultas, inseres, excluses e alteraes em um ou mais registros de uma ou
mais tabelas de maneira simultnea. Como exemplo de comandos da classe DML
pode-se citar os comandos:

Insert Insero de dados


Update Alterao de dados
Delete Remoo de dados
Commit Confirmao das manipulaes
Rollback Desistncia das manipulaes
Select 7 Seleciona linhas de dados de tabelas ou vises

2.5. Instrues DCL


Os comandos da srie DCL (Data Control Language) so utilizados para controlar
os privilgios de usurios, com eles possvel:
permitir a um usurio que se conect ao banco;
7

Select - Existem autores que a classificam com instruo do DRL Linguagem para
Recuperao de Dados.

permitr que crie objetos no banco;


permitir que consulte objetos do banco; entre outros
cancelar os privilgios de um usurio ou personagem.

Para isso, esto disponveis as instrues:


Grant: utilizada para conceder privilgios aos usurios
Revoke: Utilizada para cancelar os privilgios dos usurios
2.6. Ambiente de trabalho
Ser utilizada como ferramenta para edio e execuo de instrues SQL o
SQL*Plus.
O SQL*PLUS uma ferramenta da Oracle usada como interface para acesso ao
banco de dados Oracle, no grfica8 e capaz de reconhecer e executar
instrues SQL e PL/SQL9. As instrues podem ser escritas diretamente no
prompt ou em um editor de textos.
O SQL*Plus pode ser acessado a partir de um duplo
clique no cone do aplicativo .ou selecionando
diretamente o arquivo que est localizado no diretrio
c:\oracle\ora81\bin\sqlplusw.exe
A seguir ser solicitada a identificao do usurio e Figura 1 - cone do
nome do banco que ser utilizado. Alguns usurios e SQLl*Plus
senhas default so:
Usurio Senha Privilgios
Scott
Tiger usurio
Internal Oracle administrador
Aps a autenticao da conexo ser
aberto o ambiente do SQL*Plus. A
ferramenta oferece um menu com
opes para manipulao de arquivos,
configurao do ambiente e outras.
As instrues so digitadas no prompt e
submetidas execuo aps o enter.
Tambm
podem ser executados

Figura 2 - Autenticao e conexo

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]);

o nome do proprietrio da tabela, quando omitido


a tabela criada no esquema do usurio corrente
Tabela:
o nome da tabela
DEFAULT expr: especifica um valor default que ser utilizado
quando um dado for omitido na insero
Coluna:
o nome da coluna
tipo de dados: o tipo de dados e o comprimento da coluna
Constraint:
Est clusula opcional e especifica as restries
para a coluna ou para a tabela, quando o nome da
constraint omitido o Oracle assume uma
identificao
Esquema:

Convenes para Nomeao de Tabelas e Colunas:


Deve comear com uma letra
Pode ter de 1 a 30 caracteres
Deve conter somente AZ, az, 09, _, $ e #
No deve duplicar o nome de outro objeto de propriedade do mesmo
usurio
No deve ser uma palavra reservada pelo Oracle Server
Tipos de Dados:
Tipo de Dados

Descrio

VARCHAR2(tamanho)

Dados de caractere de comprimento varivel

CHAR(tamanho)

Dados de caractere de comprimento fixo

NUMBER(p,s)

Dados numricos de comprimento varivel

DATE

Valores de data e hora

LONG
CLOB

Dados de caractere de comprimento varivel at 2


gigabytes
Dados de caractere de um byte de at 4 gigabytes

RAW e LONG RAW

Dados binrios brutos

BLOB

Dados binrios de at 4 gigabytes

BFILE

Dados binrios armazenados em um arquivo externo de


at 4 gigabytes

No exemplo abaixo est sendo criada


chamadas, DEPTNO, DNAME e LOC.

a tabela DEPT, com trs colunas

SQL>CREATE TABLE dept


2 (deptno NUMBER(2),
3 dname
VARCHAR2(14),
4 loc VARCHAR2(13));
Table created.

A instruo Describe utilizada para exibir a estrutura de uma tabela.


SQL> DESCRIBE dept
Name
Null?
Type
------------------ -------- --------DEPTNO
NUMBER(2)
DNAME
VARCHAR2(14)
LOC
VARCHAR2(13)
2.7.1. Restries (constraints)

As restries impem regras que podem ser no nvel da coluna ou no nvel da


tabela. So utilizadas para impedir que dados invlidos sejam digitados nas
tabelas, garantindo assim a consistncia dos dados.
Os seguintes tipos de restrio so vlidos no Oracle:
NOT NULL Impe a insero obrigatria de dados nas colunas com est
restrio;
UNIQUE Campos com est restrio no aceitam dados com valores j
inseridos em outros registros
PRIMARY KEY Define uma ou mais colunas como chave primria da
tabela.
FOREIGN KEY Define uma ou mais colunas como chave estrangeira da
tabela.
CHECK Especifica uma lista de valores que sero utilizados para validar a
insero de um dado
Todas as restries so armazenadas no dicionrio de dados, as restries no
nomeadas recebem sero identificadas pelo oracle com o formato SYS_cn, onde n
um nmero inteiro para criar um nome de restrio exclusivo.
As restries podem ser definidas enquanto a tabela est sendo criada ou
adicionadas aps sua criao, podendo ainda, ser desativadas temporariamente.
2.7.1.1 Restrio NOT NULL
A restrio NOT NULL assegura que os valores nulos no sejam permitidos na
coluna. As colunas sem uma restrio NOT NULL podem conter valores nulos por
default. Deve ser definida no nvel da coluna
Exemplo: No exemplo acima a restrio NOT NULL est sendo aplicada s
colunas ENAME e DEPTNO da tabela EMP. Observe que na linha 3 a restrio
est sendo identificada, j na linha 9 no, neste caso o Oracle a identificar de
acordo com o seu padro de identificao SYS_cn.
SQL> CREATE TABLE emp(
2
empno
NUMBER(4),
3
ename
VARCHAR2(10) constraint emp_ename_NN NOT NULL,
4
job
VARCHAR2(9),
5
mgr
NUMBER(4),
6
hiredate
DATE,
7
sal
NUMBER(7,2),
8
comm NUMBER(7,2),
9
deptno
NUMBER(7,2) NOT NULL);

Para verificar se as colunas da tabela esto ou no com a restrio NOT NULL,


utilize a instruo DESCRIBE, como segue exemplo abaixo:

SQL> DESCRIBE EMP;


Name

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)

2.7.1.2 Restrio UNIQUE KEY


Uma restrio de integridade UNIQUE KEY requer que cada valor em uma coluna
ou conjunto de colunas (chave) seja exclusivo ou seja, duas linhas de uma
tabela no podem ter valores duplicados em uma coluna especfica ou conjunto
de colunas. A coluna (ou conjunto de colunas) includa na definio da restrio
UNIQUE KEY chamada de chave exclusiva. Se a chave UNIQUE contiver mais
de uma coluna, tal grupo de colunas considerado uma chave exclusiva
composta. Podem ser definidas no nvel da coluna ou da tabela
Exemplo: Criar a tabela dept cujo nome do departamento (dname) no poder ser
duplicado.
SQL>
2
3
4
5

CREATE TABLE
dept(
deptno
NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
CONSTRAINT dept_dname_uk UNIQUE(dname));

No exemplo anterior a constraint dept_dname_uk est sendo criada no nvel da


tabela
2.7.1.3 Restrio PRIMARY KEY
Uma restrio PRIMARY KEY cria uma nica chave primria para cada tabela. A
restrio PRIMARY KEY uma coluna ou conjunto de colunas que identifica
exclusivamente cada linha em uma tabela. Essa restrio impe a exclusividade
da coluna ou combinao de colunas e assegura que nenhuma coluna que seja
parte da chave primria possa conter um valor nulo. Pode ser definida no nvel da
tabela ou da coluna
ATENO: Um ndice UNIQUE automaticamente criado para uma coluna
PRIMARY KEY.

Exemplo: Criar a tabela dept cujo campo nmero do departamento (deptno)


dever ser a chave de identificao do registro:
Resoluo 1 Definio da chave primria no nvel da tabela:
SQL>
2
3
4
5
6

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));

Resoluo 2 Definio da chave primria no nvel da coluna:


SQL>
2
3
4
5

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));

2.7.1.4 Restrio FOREIGN KEY


uma restrio de integridade referencial, designa uma coluna ou combinao de
colunas como a chave estrangeira e estabelece um relacionamento entre a chave
primria ou uma chave exclusiva na mesma tabela ou em uma tabela diferente.
Um valor de chave estrangeira deve corresponder a um valor existente na tabela
me ou ser NULL.
As chaves estrangeiras so baseadas nos valores dos dados, sendo puramente
lgicas, e no ponteiros fsicos. Pode ser definida no nvel da tabela ou da coluna.
Exemplo: No exemplo a seguir o DEPTNO foi definida como a chave estrangeira
na tabela EMP (tabela filha ou dependente); ela faz referncia coluna DEPTNO
da tabela DEPT (tabela me ou referenciada).
Resoluo 1 Restrio Foreign Key definida no nvel da tabela
SQL>
2
3
4

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

Observe que o campo


deptno chave primria na
tabela DEPT e est sendo
utilizado na tabela EMP
como chave estrangeira. Por
meio destas duas colunas
ser possvel relacionar as
tabelas EMP e DEPT.

Resoluo 2 Restrio Foreign Key definida no nvel da coluna, observe que a


instruo foreign key no requerida.
SQL> CREATE TABLE
emp(
2
empno
NUMBER(4),
3 ename
VARCHAR2(10) NOT NULL,
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(7,2) constraint emp_deptno_fk
10

REFERENCES dept (deptno) not null));

ATENO: A definio de uma chave estrangeira composta deve ser feita no


nvel da tabela:
2.7.1.5 Restrio CHECK
Define uma condio que cada registro deve atender. Podem ser utilizados
operadores de comparao para delimitao dos valores a serem aceitos para a
coluna.
Exemplo: Para evitar erros de digitao do usurio voc coloca uma restrio do
tipo CHECK para o campo SALRIO, onde o mesmo deve ser maior que o salrio
mnimo de R$200,00, desta forma ao tentar inserir valor menores que 200 a
restrio ser ativada e ser apresentado um erro para o usurio.

Resoluo 1 Restrio criada no nvel da tabela:


SQL> CREATE TABLE emp(
2
empno NUMBER(4),
3
ename VARCHAR2(10) NOT NULL,
4
job VARCHAR2(9),
5
mgr NUMBER(4),
6
hiredate DATE,
7
sal NUMBER(7,2),
8
constraint emp_sal_ck check (sal > 200));

Resoluo 2 Restrio criada no nvel da coluna:


SQL> CREATE TABLE emp(
2
empno NUMBER(4),
3
ename VARCHAR2(10) NOT NULL,
4
job VARCHAR2(9),
5
mgr NUMBER(4),
6
hiredate DATE,
7
sal NUMBER(7,2) check (sal > 200));

2.7.1.6 Consultando restries de uma tabela


A instruo SELECT, que ser estudada com mais detalhes em um tpico
posterior, utilizada para realizao de consultas.
Sintaxe:
Select nome_coluna1, nome_coluna2 ... nome_colunaN
from nome_tabela1, nome_tabelaN
where condio;

No exemplo a seguir sero consultadas as restries definidas para a tabela emp:


SQL>SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,
2
STATUS,SEARCH_CONDITION
3
FROM USER_CONSTRAINTS
4
WHERE TABLE_NAME = 'EMP';

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

2.8. Insero de Dados


A insero de dados uma operao DML.
Sintaxe:
INSERT INTO tabela [(coluna [, coluna...])]

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 1: Instruo completa para insero de dados


SQL> INSERT INTO
2 VALUES

dept (DEPTNO, DNAME, LOC)


(70, 'PRODUCAO', MARILIA);

Neste caso, no existe a necessidade de indicar as colunas que iro receber as


inseres, pois esto sendo inseridos valores para todas as colunas, ento o
mesmo exemplo poderia ser resolvido assim:

Exemplo 2:
SQL> INSERT INTO
2 VALUES

dept
(70, 'PRODUCAO', MARILIA);

Tambm possvel a insero implcita de nulos, isto , pode-se deixar de


informar uma coluna na insero de dados, para a qual ser atribudo nulo:
Exemplo 3:
SQL> INSERT INTO
2 VALUES

dept (deptno, dname )


(60, 'MIS');

A tabela dept contm as coluna deptno, dname e loc, no entanto no exemplo


anterior esto sendo inseridos valores apenas s colunas deptno e dname, neste
caso a coluna loc ir conter NULL.
Exemplo 4:
SQL> INSERT INTO
2 VALUES

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

A instruo select ser abordada com mais detalhes posterioremente.

COMM
----

DEPTNO
-----10

2.9. Alterao de dados


A alterao de dados uma operao DML.
Sintaxe:
UPDATE tabela
SET coluna = valor [, coluna = valor, ...]
[WHERE condio];
onde:
Tabela
Coluna
Valor
Condio

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

Exemplo: Alterar o cdido do departamento para 20 do funcionrio com cdigo


7782:
SQL> UPDATE
2 SET
3 WHERE

emp
deptno = 20
empno = 7782;

ATENO: Todas as linhas na tabela so modificadas quando a clusula


WHERE omitida.
2.10. Remoo de dados
A remoo de dados uma operao DML.
Sintaxe:
DELETE [FROM]tabela [WHERE condio];

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.

2.11. Confirmando ou Descartando transaes


Do ponto de vista do usurio uma transao parece uma simples operao, por
exemplo transferir o dinheiro de uma conta corrente para outra o usurio informa
os dados requeridos para que a operao de transferncia seja realizada e recebe
uma notificao de concluso da operao. Por outro lado, para que a operao
seja realizada com sucesso, sem a ocorrncia de falhas, uma srie de operaes
devem ser realizadas, no caso do exemplo de transferncia de valores de uma
conta para outra de maneira bem simplificada:
o dinheiro precisa ser debitado de uma conta, portanto uma operao de
atualizao de dados deve ser realizada nesta conta;
o dinheiro precisa ser creditado em outra conta, portanto outra operao de
atualizao de dados deve ser realizada nesta outra conta.
Sendo assim, uma transao um conjunto de operaes DML que so
realizadas para concluir uma determinada tarefa.
Para garantir a integridade dos dados necessrio que as transaes assegurem:
A consistncia de dados
A atomicidade todas as operaes devem ser refletidas corretamente no
banco ou ento nenhuma das operaes dever ser realizada
A integridade da base de dados
Quando no ocorrem falhas no processamento das operaes de uma transao
ela pode ser efetivada, neste caso as modificaes so refletidas fisicamente no
banco de dados. Enquanto isso no ocorre, as modificaes so refletidas
apenas em memria e podem ser desfeitas ou descartadas.
O controle de transaes tambm permite que as alteraes realizadas, possam
ser visualizadas antes de se tornarem permanentes, e que as operaes
relacionadas logicamente possam ser agrupadas.
As instrues responsveis pelo controle das transaes so o commit e o
rollbback. A emisso de um commit confirma as transaes, isto , efetiva as
manipulaes de dados realizadas nas tabelas. A emisso de um rollback
descarta as transaes que ainda no tenham sido confirmadas.
Uma transao tem incio quando a primeira instruo SQL executvel realizada
e termina com um dos seguintes eventos:
a emisso de uma instruo COMMIT ou ROLLBACK;
a execuo de uma instruo DDL ou DCL, nesse caso ocorre um commit
automtico;
quando o usurio sai do SQL*Plus; ou
Houver uma falha no computador ou o sistema cair.
Um commit automtico ocorre sob as seguintes circunstncias:
A instruo DDL emitida
A instruo DCL emitida
A sada normal do SQL*Plus, sem emitir explicitamente COMMIT ou
ROLLBACK

Um ROLLBACK automtico ocorre quando h uma finalizao anormal do


SQL*Plus ou queda do sistema.

Em
efetivao
parcial

Em
efetivao

Ativa

Em falha

Abortada

Figura 3 - Diagrama de estados de uma transao - fonte: Silberschatz [1999]

Uma transao pode estar:


ativa: enquanto suas operaes esto sendo executadas;
em efetivao parcial: aps a execuo da ltima operao, antes do
commit
em falha: quando alguma das operaes no pode ser realizada
normalmente
abortada: quando a transao desfeita (rollback) e o banco de dados volta
ao estado anterior ao incio da transao
em efetivao: quando concluda com sucesso (commit).
Exemplo usando commit: Atualizar a tabela EMP e definir o nmero de
departamento para o funcionrio 7782 (Clark) como 10 e depois confirmar a
alterao.
SQL> UPDATE
emp
2 SET
deptno = 10
3

WHERE

empno = 7782;

SQL> COMMIT;

11

Incio da transao; transao ativa; uma cpia dos


dados antes da alterao, armazenada no
segmento de rollback
Em efetivao parcial; concluso da operao; A
alterao est disponvel em memria; as linhas
afetadas ficam bloqueadas;
Em efetivao; a alterao refletida fisicamente
no banco; As linhas afetadas so desbloqueadas.
A imagem antiga retirada do segmento de
rollback.11

Segmento de rollback arquivo que armazena uma cpia dos dados de uma tabela que esto
envolvidos em transaes.

O bloqueio implcito ocorre para todas as instrues SQL exceto SELECT. O


mecanismo de bloqueio default do Oracle automaticamente usa o nvel mais
inferior da restrio aplicvel, fornecendo assim o maior grau de simultaneidade e
mxima integridade de dados. O bloqueio em um banco de dados do Oracle
automtico e no requer ao do usurio.
ATENO: importante lembrar que aps a emisso do comando COMMIT no
h mais como reverter a operao feita anteriormente.
Exemplo usando rollback: Remover todas as linhas da tabela employee
SQL> Delete

From employee;

Incio da transao; transao ativa; uma cpia dos


dados antes da alterao, armazenada no
segmento de rollback
Em efetivao parcial; concluso da operao; A
alterao est disponvel em memria; as linhas
afetadas ficam bloqueadas

14 rows deleted
SQL> ROLLBACK;

Transao abortada; as modificaes so


desfeitas; As linhas afetadas so desbloqueadas. A
imagem antiga retirada do segmento de rollback.

A verso original, mais antiga, dos dados no segmento de rollback gravada de


volta na tabela.
Por meio da consistncia na leitura dos dados que cada usurio visualiza os
dados como eles eram no ltimo commit, antes da operao DML iniciar, com isso
assegura que:
Os usurios no vejam os dados que estejam sendo alterados.
As alteraes feitas por um usurio no interrompam nem entram em conflito com
as alteraes que outro usurio esteja fazendo.
Linhas que esto sendo alteradas so disponibilizadas apenas para consulta.
A implementao da consistncia de leitura automtica, mantm uma cpia
parcial do banco de dados em segmentos de rollback, isto , quando uma
operao de insero, atualizao ou excluso feita no banco de dados, o
Oracle Server tira uma cpia dos dados antes de serem alterados e os grava no
segmento de rollback.

Para descobrir o nome da restrio pode-se consultar as views15 do dicionrio de


dados USER_CONSTRAINTS ou USER_CONS_COLUMNS. Antes de executar a
consulta verifique os nomes das colunas com a instruo DESCRIBE.
Exemplo:
SELECT CONSTRAINT_NAME, COLUMN_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'EMP';
Resultado:
CONSTRAINT_NAME
EMP_DEPTNO_FK
EMP_EMPNO_PK
EMP_ENAME_UK
EMP_MGR_FK
SYS_C00884
SYS_C00885

2.14.1.5

COLUMN_NAME
DEPTNO
EMPNO
ENAME
MGR
EMPNO
DEPTNO

Desativando e Ativando uma Restrio

Uma restrio pode ser desativada com a utilizao da clusula DISABLE em


conjunto com a instruo ALTER TABLE. Para torna-la ativa novamente utiliza-se
a clusula ENABLE.
Sintaxe:
ALTER TABLE
tabela
DISABLE/ENABLE CONSTRAINT restrio [CASCADE];

onde:
Tabela
Restrio
Cascade

o nome da tabela
Nome da constraint que ser eliminada
Est clusula elimina todas as restries
dependentes

Exemplo 1: Desativar a chave primria da tabela emp


SQL> ALTER TABLE
emp
2 DISABLE CONSTRAINT

emp_empno_pk CASCADE;

Exemplo 2: Ativar a chave primria da tabela emp


SQL> ALTER TABLE
emp
2 ENABLE CONSTRAINT

emp_empno_pk;

Pode-se usar a clusula DISABLE nas instrues CREATE TABLE e ALTER


TABLE.
15

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

Exemplo: Eliminar a tabela dept30.


SQL> DROP TABLE dept30;

Ao eliminar uma tabela:


Todos os dados so deletados da tabela.
As views e sinnimos permanecero, mas sero invlidos.
Todas as transaes pendentes sofrero commit.
Somente o criador da tabela ou um usurio com o privilgio DROP ANY
TABLE poder remover uma tabela.
ATENO: A instruo DROP TABLE, uma vez executada, irreversvel. O
Oracle Server no questiona a ao quando voc emite a instruo DROP TABLE.
Se voc possuir tal tabela ou tiver um privilgio de nvel superior, ento a tabela
ser imediatamente removida.
2.15. Vises (Views)
Uma view uma tabela lgica baseada em uma tabela ou outra view. Uma view
no contm dados prprios mas como uma janela atravs da qual os dados das
tabelas podem ser vistos ou alterados. As tabelas nas quais uma view baseada
so chamadas tabelas-base. A view armazenada como uma instruo SELECT
no dicionrio de dados.
Podem ser utilizadas para:
Restringir o acesso a dados
Facilitar as consultas complexas, por exemplo, possibilita que usurios
consultem informaes de vrias tabelas sem saber como criar uma
instruo de juno.
Permitir a independncia dos dados para usurios ad hoc e programas
aplicativos.
Apresentar diferentes vises dos mesmos dados

2.15.1. Criando Vises

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

H duas classificaes para views: simples e complexa:


Uma view simples uma que:
Seleciona dados a partir de somente uma tabela
No contm funes ou grupos de dados
Pode-se executar a DML
Uma view complexa uma que:
Seleciona dados a partir de vrias tabelas
Contm funes ou grupos de dados
Nem sempre pode-se executa a DML
Exemplo 1: Criar uma view com nome EMPVU10, que contenha detalhes tais
como nmero, nome e cargo dos funcionrios que trabalham no departamento 10.

SQL>
2
3
4

CREATE VIEW
empvu10
AS SELECT empno, ename, job
FROM
emp
WHERE
deptno = 10;

A estrutura da view pode ser exibida utilizando o comando DESCRIBE do


SQL*Plus:
SQL> DESCRIBE EMPVU10;
Name
EMPNO
ENAME
JOB

Null?
NOT NULL

Type
NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)

ATENO: Se no for especificado um nome de restrio para uma view criada


com CHECK OPTION, o sistema ir atribuir um nome default no formato SYS_Cn.
A opo OR REPLACE altera a definio da view sem elimin-la, recri-la ou
reconceder-lhe os privilgios de objetos anteriormente concedidos.
Exemplo 2: Alterar a definio da view empvu10 para que sejam exibidos
apelidos para as colunas da consulta: id_emp, nome e cargo:
SQL>
2
3
4
5

CREATE OR REPLACE VIEW empvu10


(id_emp, nome, cargo)
AS SELECT empno, ename, job
FROM
emp
WHERE
deptno = 10;

Exemplo 3: Criar uma view para exibir o nome do departamento e o menor


salrio, maior salrio e a mdia salarial de cada departamento.
SQL>
2
3
4
5
6
7

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

CREATE OR REPLACE VIEW empvu20


AS SELECT *
FROM
emp
WHERE
deptno = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck;

No exemplo anterior qualquer tentativa de alterao do nmero do departamento


para qualquer linha na view falhar porque ela violar a restrio WITH CHECK
OPTION. Est clusula especifica que INSERTS e UPDATES executados pela
view no tm permisso de criar linhas que a view no possa selecionar e,
portanto, ela permite restries de integridade e verificaes de validao de
dados a serem impostas aos dados que estiverem sendo inseridos ou atualizados.
Se houver uma tentativa de executar operaes DML em linhas que a view no
selecionou, ser exibido um erro, com o nome da restrio, se ele tiver sido
especificado, por exemplo, a instruo DML a seguir realiza uma alterao no
nmero do departamento, utilizando a view empvu20.
SQL> UPDATE empvu20
2 SET
deptno = 10
3 WHERE empno = 7788;
update empvu20
*
ERRO na linha 1: (ERROR at line1)

ORA-01402: violao na clusula where WITH CHECK OPTION na view (view


WITH CHECK OPTION where-clause violation)
Neste caso, nenhuma linha ser atualizada porque se o nmero do departamento
fosse alterado para 10, a view no seria mais capaz de enxergar o funcionrio. Por
isso, com a clusula WITH CHECK OPTION, a view poder ver apenas
funcionrios do departamento 20 e no permitir que o nmero de departamento
para esses funcionrios seja alterado na view.
Exemplo 5: Utilizando a clusula WITH READ ONLY- Alterar as definies da
view empvu10 para que se torne somente para leitura.
SQL>
2
3
4
5
6

CREATE OR REPLACE VIEW empvu10


(employee_number, employee_name, job_title)
AS SELECT empno, ename, job
FROM
emp
WHERE
deptno = 10
WITH READ ONLY;

Quaisquer tentativas de inserir uma linha ou modific-la usando a view resultar


em erro no Oracle Server -01733: no permitida coluna virtual aqui (virtual
column not allowed here).
2.15.2. Removendo uma View

Pode-se remover uma view sem perder dados porque uma view est baseada em
tabelas subjacentes no banco de dados.
Sintaxe:
DROP VIEW view;

Exemplo: Remover a view empvu10.


SQL> DROP VIEW empvu10;

A instruo DROP VIEW remove a definio da view do banco de dados. A


eliminao de views no tem efeito nas tabelas nas quais ela baseada. As views
ou outras aplicaes baseadas em views deletadas tornam-se invlidas. Apenas o
criador ou usurio com o privilgio DROP ANY VIEW poder remover uma view.
2.15.3. Consultando views no dicionrio de dados

As definies da view ficam armazenadas no dicionrio de dados como uma


consulta. A tabela do dicionrio de dados USER_VIEWS contm o nome e a
definio da view. O texto da instruo SELECT que constitui a view
armazenado em uma coluna LONG.
Exemplo: Exibir o nome e o texto de definio das views do usurio corrente:
SQL> SELECT VIEW_NAME, TEXT FROM USER_VIEWS;
Resultado:
VIEW_NAME
SALES

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

(Por default, o Oracle Server colocar em


cache 20 valores.)
Exemplo: Criar uma seqncia identificada por dept_deptno. A seqncia dever
iniciar em 91, ser incrementada de 1 em 1, ter como valor mximo 100 e as
demais configuares default.
SQL> CREATE SEQUENCE dept_deptno
2
INCREMENT BY 1
3
START WITH 91
4
MAXVALUE 100
5
NOCACHE
6
NOCYCLE;

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.

As definies da seqncia ficam armazenadas no dicionrio de dados e podem


ser consultadas na view USER_SEQUENCES.
SQL>
select *
from user_sequences
where sequence_name = 'DEPT_DEPTNO';

Resultado:
SEQUENCE_NAME
LAST_NUMBER
DEPT_DEPTNO
1

MIN_VALUE

MAX_VALUE

INCREMENT_BY

CACHE_SIZE

Y N

A coluna LAST_NUMBER exibe o prximo nmero de seqncia disponvel.


2.16.3. Utilizando uma Seqncia

Para utilizar a seqncia pode-se fazer referncia aos seus valores usando as
pseudocolunas NEXTVAL e CURRVAL.

NEXTVAL retorna o prximo valor de seqncia disponvel.


CURRVAL obtm o valor de seqncia atual.

NEXTVAL e CURRVAL podem ser usadas nos seguintes casos:

Na lista SELECT de uma instruo SELECT que no seja parte de uma


subconsulta
Na lista SELECT de uma subconsulta em uma instruo INSERT
Na clusula VALUES de uma instruo INSERT
Na clusula SET de uma instruo UPDATE

NEXTVAL e CURRVAL no podem ser usadas nos seguintes casos:

Na lista SELECT de uma view


Em uma instruo SELECT com a palavra-chave DISTINCT
Em uma instruo SELECT com as clusulas GROUP BY, HAVING ou
ORDER BY
Em uma subconsulta de uma instruo SELECT, DELETE ou UPDATE

Exemplo 1: Utilizando NEXTVAL - Inserir um registro na tabela dept utilizando a


sequence dept_deptno para fornecer o cdigo do departamento, o nome do
departamento MARKETING e a sua localizao SAN DIEGO.
SQL> INSERT INTO dept(deptno, dname, loc)
2 VALUES
(dept_deptno.NEXTVAL,
3 'MARKETING', 'SAN DIEGO');

Exemplo 2: Utilizando CURRVAL Consultar o prximo valor da seqncia


dept_deptno:
SQL> SELECT
dept_deptno.CURRVAL
2 FROM dual;

2.16.3.1

Alterando uma Seqncia

possvel alterar as especificaes de uma seqncia, para isso necessrio


informar o clusula que sofrer alteraes, as demais clusulas permanecero
com os valores anteriores.
Sintaxe:
Alter SEQUENCE nome_seqncia
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

Exemplo 3: Aterar a sequence dept_deptno, o valor mximo dever ser


modificado para 99999 e as demais configurao devero permanecer as
mesmas.
SQL> ALTER SEQUENCE dept_deptno
2
MAXVALUE 999999;

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

Aps remover a seqncia do dicionrio de dados,


referncia ela.

no ser possvel

fazer

Sintaxe:
DROP SEQUENCE nome_seqncia;

Exemplo: Remover a sequencia dept_deptno.


SQL> DROP SEQUENCE dept_deptno;

ATENO: Somente o proprietrio da seqncia ou usurios com privilgio


DROP ANY SEQUENCE podem remover uma seqncia.
2.17. Sinnimo
Um sinnimo um nome alternativo para um objeto do banco de dados. Este
recurso pode ser empregado para facilitar o acesso aos objetos ou para esconder
a verdadeira identidade de um objeto. Por exemplo, a tabela EMP faz parte do
esquema do usurio Scott, supondo que um outro usurio, que tenha privilgios,
utilize est tabela frequentemente para realizar consulta, para isso precisar fazer
referncia ao esquema e a instruo seria apresentada da seguinte maneira:
Select * from Scott.emp; com uso de um sinnimo para fazer referencia ao
objeto, este poderia ser tratado por um nome alternativo, por exemplo empregado,
desta forma qualquer usurio que necessite fazer uso da tabela emp do usurio
Scott, poderia faz-lo utilizando o sinnimo empregado: Select * from
empregado; Internamente o Oracle identifica e localiza o objeto pela referencia
original e completa.

Sintaxe:
CREATE [PUBLIC] SYNONYM sinnimo
FOR
objeto;

onde:

PUBLIC
sinnimo
objeto

cria um sinnimo acessvel a todos os usurios


o nome do sinnimo a ser criado
identifica o objeto para o qual o sinnimo ser criado

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

As definies dos sinnimos ficam armazenadas no dicionrio de dados e podem


ser consultadas na view USER_SYNONYM.
Exemplo: Consultar todas as definies dos sinnimos do usurio corrente.
SQL> select * from user_synonyms;

Resultado:
SYNONYM_NAME
TABLE_OWNER
TABLE_NAME
DB_LINK
------------------------------ ------------------------------ ---CATALOG
SYS
CATALOG
COL
SYS
COL
2.17.2. Removendo um Sinnimo

A instruo para se remover um sinnimo :


DROP SYNONYM nome_sinnimo;

Exemplo: Eliminar o sinnimo empregado.


SQL> DROP SYNONYM empregado;

ATENO: Somente usurios com privilgios de DBA podem eliminar um


sinnimo pblico

2.18. ndice (Index)


Um ndice do Oracle Server um objeto de esquema que pode acelerar a
recuperao de linhas usando um ponteiro. Se no houver um ndice na coluna,
ocorrer uma anlise em toda a tabela.
O ndice muito parecido com uma chave:
Permite classificao por outros campos
Acelera a busca de registros especficos
A chave primria e a chave secundria so ndices
A diferena entre chave e ndice que as chaves so estruturas lgicas, usadas
para identificar registros em uma tabela, e ndices so estruturas fsicas, usadas
para otimizar o processamento de dados pois so objetos no banco de dados que
fornecem um mapeamento de todos os valores em uma coluna de uma tabela.
Os ndices podem ser usados para garantir a unicidade dos elementos inseridos
numa coluna (ou campo) e tambm para alavancar a performance na busca por
registros.
O aumento de performance obtido quando o critrio de pesquisa por dados na
tabela inclui referncia de coluna(s) indexadas.
Um ndice fornece acesso direto e rpido s linhas em uma tabela. Seu objetivo
reduzir a necessidade de E/S do disco usando um caminho indexado para
localizar dados rapidamente. O ndice usado e mantido automaticamente pelo
Oracle Server. Aps a criao de um ndice, no necessria nenhuma atividade
direta do usurio.
Os ndices so lgica e fisicamente independentes da tabela que indexam. Isso
significa que eles podem ser criados e eliminados a qualquer momento e no tm
nenhum efeito sobre as tabelas-base ou outros ndices.
ATENO: Quando uma tabela eliminada, os ndices associados a ela tambm
so eliminados.
possvel criar dois tipos de ndices:

ndice exclusivo. O Oracle Server cria esse ndice automaticamente quando


voc define que uma coluna de uma tabela tenha uma restrio PRIMARY
KEY ou UNIQUE KEY. O nome do ndice o nome dado restrio.
ndice no-exclusivo. Por exemplo, voc pode criar um ndice da coluna
FOREIGN KEY para uma juno em uma consulta a fim de aumentar a
velocidade de recuperao.

2.18.1. Criando um ndice

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

Exemplo: Criar um ndice para coluna ename da tabela emp.


SQL> CREATE INDEX
2 ON

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.

As definies do ndice ficam armazenadas no dicionrio de dados, possvel


consult-las utilizando a view USER_INDEXES. Tambm possvel checar as
colunas envolvidas em um ndice consultando a view USER_IND_COLUMNS.
ATENO: A view user_indexes contm muitas colunas, por isso recomendado
que verifique estrutura da view e elabore uma consulta somente com as colunas
relevantes pesquisa, para isso utilize a instruo DESCRIBE user_indexes
Exemplo: Exibir as informaes sobre o tipo de ndice e o nome da tabela para o
ndice emp_ename_idx.

1 SELECT INDEX_NAME, INDEX_TYPE, TABLE_NAME


2 FROM USER_INDEXES
3* WHERE INDEX_NAME = 'EMP_ENAME_IDX'

Resultado:
INDEX_NAME
INDEX_TYPE
TABLE_NAME
--------------------- --------------------------- ---------------EMP_ENAME_IDX
NORMAL
EMP

2.18.3. Removendo um ndice

Somente o proprietrio do ndice ou usurios com privilgio DROP ANY INDEX.


podem remover o ndice.
Sintaxe:
DROP INDEX nome_indice
Exemplo: Eliminar o ndice emp_ename_idx.
SQL> DROP INDEX nome_indice
ATENO: Um ndice no pode ser modificado, para altera-lo deve-se elimin-lo
e, em seguida, recri-lo.
2.19. Usurio
Existem dois tipos de usurio que podem acessar o banco: os usurios que se
autenticam pelo arquivo de senhas e os usurios que se autenticam pelo
dicionrio de dados.
Os usurios que se autenticam pelo arquivo de senhas so os usurios DBA com
privilgios para realizar startup e shutdown no banco.
Os usurios que se autenticam pelo dicionrio de dados podem possuir privilgios
de DBA mas no podem realizar startup e shutdown no banco. Estes usurios so
criados e seu perfil fica armazenado no dicionrio de dados, sendo assim ele
poder realizar apenas as atividades descritas no seu perfil.
A criao de um usurio feita com uma instruo DDL e as especificaes so
armazenadas no dicionrio de dados, por isso tambm tratado como um objeto
do banco.
Sintaxe Simplificada:
CREATE USER nome_usurio
IDENTIFIED BY senha PASSWORD EXPIRE DEFAULT;

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

SQL> CREATE USER EXEMPLO


2 IDENTIFIED BY "PBD"
3 PASSWORD EXPIRE;

ATENO: Para que o usurio efetue a conexo necessrio conceder-lhe


privilgios de conexo (este tpico ser visto posteriormente).
2.19.1. Alterando usurios

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

Exemplo: Alterar a senha do usurio scott para lion.


SQL> ALTER USER scott
2
IDENTIFIED BY lion;
2.19.2. Removendo usurios

Sintaxe:
drop user nome_usurio;

Exemplo: Eliminar o usurio exemplo.

SQL> drop user exemplo;


ATENO: Um esquema uma coleo de objetos como, por exemplo, tabelas,
views e seqncias. O esquema pertence a um usurio de banco de dados e tem
o mesmo nome do usurio.
2.19.3. Personagens 16

Pode-se criar um objeto do banco denominado personagem, atribuir privilgios a


este personagem e depois atribuir estes privilgios a um usurio. Isso faz com que
a concesso e revogao de privilgios se torne mais fcil de desempenhar e
manter.
Sintaxe:
CREATE

onde:
personagem

ROLE

nome_personagem;

o nome do personagem ou papel a ser criado

Exemplo:
SQL> CREATE ROLE manager;

Depois de criado um personagem necessrio atribuir os privilgios a ele.


2.20. Privilgios
Os privilgios so os direitos concedidos aos usurios para executar instrues
SQL particulares. Os privilgios podem ser de sistema ou objetos.
O administrador de banco de dados um usurio de alto nvel que pode conceder
aos usurios acesso ao banco de dados e aos objetos. Os usurios requerem
privilgios de sistema para obter acesso aos privilgios de objeto e de banco de
dados para manipular o contedo dos objetos no banco de dados. Tambm pode
ser fornecido aos usurios o privilgio de conceder privilgios adicionais a outros
usurios ou a funes, que so grupos nomeados de privilgios relacionados.
2.20.1. Privilgios de sistema

Os privilgios de sistema permitem que os usurios executem determinadas aes


no banco de dados.
Exemplos de privilgios de sistema:

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

CREATE ANY INDEX


ALTER ANY INDEX
DROP ANY INDEX
CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
SELECT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE
CREATE SESSION
ALTER 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.

Exemplo 1: Conceder privilgios de conexo para o usurio exemplo:


SQL> grant connect to exemplo;

Exemplo 2: Conceder privilgios para criar tabelas, views e sequences para o


usurio scott, que poder conceder estes privilgios a outros usurios.
SQL> SQL> GRANT create table, create sequence, create view
2 TO
scott WITH ADMIN OPTION;
2.20.2. Privilgios de objeto

Os privilgios de objeto permitem que os usurios acessem e manipulem objetos


especficos, por exemplo inserir linhas em uma tabela de outro usurio.
Alguns Privilgios de objeto:
Privilgio
ALTER
DELETE
EXECUTE

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

Exemplo 1: Conceder ao usurio exemplo o privilgio de inserir dados nas


colunas empno, ename e deptno da tabela EMP do usurio scott.
SQL> GRANT INSERT(empno, ename, deptno) on SCOTT.EMP
to exemplo;

Exemplo 2: Conceder ao usurio exemplo o privilgio de excluir e alterar dados


na tabela EMP do usurio scott, podendo inclusive repassar estes privilgios a
outros usurios.
SQL>
2
3
4

SQL> GRANT DELETE, UPDATE


ON SCOTT.EMP
TO EXEMPLO
WITH GRANT OPTION;

2.20.3. Concedendo privilgios por meio de personagens

Exemplo: Conceder o privilgio de criar tabelas e vises para o personagem


manager e depois atribuir este personagem aos usurios BLAKE e CLARK.
SQL> GRANT create table, create view
2 to manager;
SQL> GRANT manager to BLAKE, CLARK;

ATENO:

Para conceder privilgios sobre um objeto, ele deve estar no esquema do


prprio usurio ou ento o usurio deve ter recebido os privilgios de objeto
WITH GRANT OPTION.
Um proprietrio de objeto pode conceder qualquer privilgio de objeto sobre
o objeto para qualquer outro usurio ou personagem do banco de dados.
O proprietrio de um objeto adquire automaticamente todos os privilgios
de objeto sobre seus objetos.

2.20.4. Revogando privilgios

Sintaxe:
REVOKE privilgios FROM usurio [cascade contraints];

onde,
REVOKE
privilgios
FROM usurio|role
cascade constraints

comando para revogar privilgios


lista de privilgios a serem revogados, devem ser
separados por vrgula
indica o usurio ou role do qual o privilgio ser
removido
elimina as restries de integridade de referncia
definidas pela revogao usando os privilgios
REFERENCES ou ALL.

Exemplo 1 : Revogando privilgios de sistema - Revogar os privilgios de


create table, create sequence e create view do usurio exemplo.
SQL> revoke create table, create sequence, create view
from exemplo;

Exemplo 2 : Revogando privilgios de objeto - Revogar os privilgios de


excluso de linhas na tabela SCOTT.EMP do usurio exemplo.
SQL> revoke delete

on SCOTT. EMP

from exemplo;

ATENO: Privilgios de sistema no so revogados em cascata.


Privilgios de objeto so revogados em cascata.
2.20.5. Consultado os privilgios

Pode-se consultar os privilgios que um usurio ou personagem possui, para isso


pode-se utilizar as tabelas do dicionrio de dados, a seguir so apresentadas
algumas possibilidades.
Tabela de Dicionrio de Descrio
Dados

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.

Privilgios de sistema concedidos a personagens


Privilgios de tabela concedidos a personagens
Os privilgios de objeto concedidos s colunas
dos objetos do usurio
Os privilgios de objeto concedidos ao usurio em
colunas especficas
Personagens acessveis ao usurio
Os privilgios de objeto concedidos aos objetos
do usurio
Os privilgios de objeto concedidos ao usurio
privilgios de objeto concedidos s colunas dos

SQL> select * from USER_COL_PRIVS_MADE;


Resultado
GRANTEE
TABLE_NAME
COLUMN_NAME GRANTOR
------------------------------ ------------------------------ ---------------------- -------------EXEMPLO
EMP
EMPNO
SCOTT
SCOTT
EXEMPLO
EMP
ENAME
EXEMPLO
EMP
DEPTNO
SCOTT

Para saber mais consulte:


Livro

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

Os blocos nomeados (procedimentos, funes, triggers e packages) possuem algumas


o
particularidades que sero estudadas no 4 . semestre, so compilados e armazenados na base de
dados e por isso no precisam ser compilados a cada execuo

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

Os dados podem ser armazenados temporariamente em uma ou mais variveis e


podem ser utilizadas para:
Manipulao de valores armazenados - As variveis podem ser usadas para
clculo e manipulao de outros dados sem acessar o banco de dados, ou seja,
aps os valores em memria no h necessidade de outros acessos para
complemento da informao j armazenada.
Reutilizao - Quando declaradas, podem ser usadas repetidamente em uma
aplicao simplesmente referenciando-as em outras instrues, incluindo outras
instrues declarativas.
Facilitar a manuteno Pode-se declarar variveis baseadas na estrutura das
colunas das tabelas ou em outras varivies (%TYPE e %ROWTYPE). Se uma
definio subjacente for alterada, a declarao da varivel atualizada em tempo
de execuo. Isso permite a independncia dos dados, reduz custos de
manuteno e permite que os programas se adaptem de acordo com as
alteraes realizadas no banco de dados
Passar valores aos subprogramas PL/SQL atravs de parmetros.
Exibir os resultados em um bloco PL/SQL atravs de variveis de sada.
A declarao e a inicializao das variveis feita na seo declarativa de
qualquer subprograma pacote ou bloco PL/SQL. As declaraes alocam espao
de armazenamento para um valor, especificam seus tipos de dados e nomeiam a
localizao de armazenamento para que se possa referenci-los. As declaraes
podero tambm atribuir um valor inicial e impor a restrio NOT NULL.
ATENO: Ao Atribuir novos valores s variveis na seo executvel o valor
existente da varivel substitudo pelo novo e necessrio declarar uma varivel
antes de referenci-la em outras instrues, incluindo outras instrues
declarativas.
3.1.3. Tipos de Variveis

Todas as variveis PL/SQL tm um tipo de dados, o qual especifica um formato de


armazenamento, restries e uma faixa vlida de valores. A linguagem PL/SQL
suporta quatro categorias de tipos de dados18:
Escalares - armazenam um nico valor. Os principais tipos de dados so aqueles
que correspondem aos tipos de coluna nas tabelas do Oracle Server, por exemplo
vachar2, number, char, entre outros; a linguagem PL/SQL tambm suporta
variveis booleanas.
18

Neste curso a nfase ser nos tipos escalares, variveis de ligao e o tipo composto registro.

Compostos comporta o armazenamento de diferentes valores. Os tipos


compostos em PL/SQL so registro, tabelas e matrizes.
Referenciais - armazenam valores, chamados de indicadores, que designam
outros itens de programa. Um exemplo de tipos referenciais o REF CURSOR.
LOB (large object) - armazenam blocos de dados no estruturados (como, por
exemplo, texto, imagens grficas, videoclipes e formatos de arquivo para
armazenar sons) de at 4 gigabytes em tamanho. Os tipos de dados LOB
fornecem acesso eficiente, aleatrio e em intervalos aos dados, podendo ser
atributos de um tipo de objeto. As variveis LOB podem ser classificadas como:
O tipo de dados CLOB (character large object, objeto grande de caractere)
usado para armazenar blocos grandes de dados com caracteres de um nico byte
no banco de dados.
O tipo de dados BLOB (binary large object, objeto grande binrio) usado para
armazenar objeto binrios grandes no banco de dados em linha (dentro de uma
linha de tabela) ou fora de linha (fora da linha de tabela).
O tipo de dados BFILE (binary file, arquivo binrio) usado para armazenar
objetos grandes binrios em arquivos do sistema operacional fora do banco de
dados.
O tipo de dados NCLOB (objeto grande de caractere do idioma nacional) usado
para armazenar blocos grandes de dados NCHAR de byte nico ou de bytes
mltiplos de largura fixa no banco de dados, dentro e fora de linha.
Declarao de Variveis
Sintaxe:
identificador [CONSTANT] tipo de dados [NOT NULL]
[:= valor para inicializao | expr default]

onde,

dentificador

o nome da varivel; Os identificadores no devem ter mais


de 30 caracteres. O primeiro caracter deve ser uma letra; os
demais podem ser letras, nmeros ou smbolos especiais;
No devem ser palavras reservadas nem possuir espaos
entre os caracteres.
CONSTANT restringe as variveis para que o seu valor no possa ser
alterado; as constantes devem ser inicializadas
tipo de dados so tipos de dados escalares, compostos, referenciais ou
LOB
NOT NULL
indica preenchimento obrigatrio (variveis NOT NULL
devem ser inicializadas.)
expr
uma expresso PL/SQL que pode ser uma literal, uma
outra varivel ou uma expresso que envolve operadores e
funes

ATENO:

Para inicializar a varivel utiliza-se operador de atribuio (:=) ou a palavra


reservada DEFAULT. Se no for atribudo um valor inicial, a nova varivel
conter NULL por default.
No aconselhvel identificar uma varivel com nome igual ao nome das
colunas de tabela usadas no bloco. Se as variveis PL/SQL ocorrerem nas
instrues SQL e tiverem o mesmo nome que uma coluna, o Oracle Server
supe que seja a coluna que esteja sendo referenciada.

3.1.3.1 Tipos de Dados Escalares


Um tipo de dados escalares armazena um valor nico e no possui componentes
internos. Os tipos de dados escalares podem ser classificados em quatro
categorias: nmero, caractere, data e booleano. Os tipos de dados de caractere e
nmero possuem subtipos que associam um tipo bsico a uma restrio. Por
exemplo, INTEGER e POSITIVE so subtipos do tipo bsico NUMBER.
Segue abaixo exemplo de tipos de Dados Escalares Bsicos:
Tipo de dado
Descrio
VARCHAR2(tamanho) Armazena caracteres com tamanho varivel com at
32.767 bytes; no h tamanho default para estas variveisl
NUMBER(tamanho,
Armazena nmeros reais ou inteiros
preciso)
DATE
Armazena datas e horas entre os perodos de 4712 A.C. e
9999 D.C.
CHAR(tamanho)
Armazena caracteres de tamanho fixo at 32.767
bytes;tamanho default 1 byte.
LONG
Armazena caracteres com tamanho varivel de at 32.760
bytes, a largura mxima de 2.147.483.647 bytes
LONG RAW
Armazena dados binrios e strings de byte de at 32.760
bytes; estes dados no so interpretados pelo PL/SQL
BOOLEAN
Armazena um de trs possveis valores: TRUE, FALSE ou
NULL
BINARY_INTEGER
Armazena nmeros inteiros entre 2.147.483.647 e
2.147.483.647
PLS_INTEGER
Armazena nmeros inteiros entre 2.147.483.647 e
2.147.483.647;
estes
valores
requerem
menos
armazenamento e so mais rpidos que os valores
NUMBER e BINARY_INTEGER
Exemplos:
v_nascimento date;
v_data date := sysdate + 7; --declarao de varivel
inicializao partir de uma operao aritmtica

v_codigo number(2) not null := 10; -- declarao da varivel


com a restrio de preenchimento obrigatrio, neste caso
preciso atribuir o valor inicial
v_UF varchar2(2) := SP; -- declarao e inicializao da
varivel com o valor SP; observe que os literais devem ser
informados entre aspas simples ( )
v_Loc varchar2(2) default RJ; -- declarao da varivel
cujo valor default RJ.
v_teste_logico
boolean
:=
(v_valor1
<
v_valor2);
-declarao da varivel v_teste_logico que ser inicializada
com o resultado da expresso (v_valor1 < v_valor2)
c_const constant number := 54; -- declarao da constante que
est sendo inicializada.
O atributo %TYPE pode ser utilizado para declarar variveis de com a mesma
estrutura de uma tabela ou de uma varivel j existente.
Sintaxe:
identificador [CONSTANT] {tabela.coluna%type | variavel%type}
[NOT NULL] [:= valor para inicializao | expr default]

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

Alm das variveis declaradas no Bloco PL/SQL existem as variveis de


substituio ou de ligao. O cdigo PL/SQL no tem capacidade de
entrada/sada prpria, para isso pode-se utilizar o ambiente no qual o cdigo

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

Para declarar uma varivel de ligao no ambiente SQL*Plus, utiliza-se o


comando VARIABLE.
Exemplo:
SQL> VARIABLE g_sal_anual NUMBER

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

Exemplo 1 (programa completo): Calcular o salrio anual de dado funcionrio


com base no salrio mensal fornecido pelo usurio. Exibir o resultado.
VARIABLE g_sal_anual NUMBER
ACCEPT
p_nome
PROMPT
Digite
funcionrio...
ACCEPT p_sal_mes PROMPT Digite
salario...

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

Para testar o exemplo 1:


escreva o cdigo utilizando um editor d textos, salve o arquivo com extenso sql,
por exemplo: exemplo1.sql.
no prompt do sql digite: @localizao do arquivo\nome do arquivo, por exemplo:
SQL>@ C:\programas\exemplo1.sql
No exemplo 1 foi utilizado o comando SQL PRINT para exibio do resultado do
processamento, uma outra opo para isso a utilizao do pacote DBMS_output
e procedimento put_line.
Sintaxe:
DBMS_output.put_line(mensagem);

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.

ATENO: Para a utilizao deste pacote necessrio ativ-lo no SQL*PLUS por


meio da instruo SET SERVEROUTPUT ON.
Exemplo 2 (programa completo): Calcular o salrio anual de dado funcionrio
com base no salrio mensal fornecido pelo usurio. Exibir o resultado.
SET SERVEROUTPUT ON
ACCEPT
p_nome
PROMPT
Digite
funcionrio...
ACCEPT p_sal_mes PROMPT Digite
salario...

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

Recuperar dados do banco de dados com SELECT.


Sintaxe:
SELECT colunas
INTO
{variveis...| registro}
FROM
tabela
WHERE condio;
onde,
colunas
into

lista de colunas que retornaro dados consulta;


podem incluir funes de linhas,
de grupo ou
expresses SQL
clusula obrigatria, usada para especificar os nomes
das variveis que armazenaro os valores que o SQL
retornar a partir da clusula SELECT. Deve-se
oferecer uma varivel para cada coluna, seguindo a
mesma ordem.

variveis
registro
tabela
condio

nome das varivies que iro armazenar o valor


recuperado
o registro PL/SQL para armazenar os valores
recuperados
especifica o nome da tabela do banco de dados
composta de nomes de coluna, expresses,
constantes e operadores de comparao, incluindo as
variveis PL/SQL e operadores

Exemplo 3: Recuperar o nome e o cargo do funcionrio para o cdigo indicado.


variable g_nome varchar2(15)
variable g_cargo varchar2(15)
DECLARE
v_nome
emp.ename%type;
v_cargo
emp.job%type;
BEGIN
select ename, job
into v_nome, v_cargo
from emp
where empno = 7934;
:g_nome := v_nome;
:g_cargo := v_cargo;
end;
/
print g_nome
print g_cargo
ATENO: As instrues SELECT em um bloco PL/SQL as consultas devem
retornar apenas uma linha, mais de uma ou nenhuma linha geram mensagens de
erro que poder ser tratado. Para consultas que retornam vrias linhas dever ser
criado um cursos explcito (este tpico ser abordado posteriormente).
Exemplo 4: Calcular e exibir a somatria do salrio de todos os funcionrios de
um dado departamento.
SET SERVEOUTPUT ON
DECLARE
v_soma_sal
emp.sal%TYPE;
v_deptno
NUMBER NOT NULL := 10;
BEGIN
SELECT SUM(sal)
INTO
v_soma_sal
FROM
emp
WHERE
deptno = v_deptno;

DBMS_output.put_line(A soma dos salrios do departamento


|| v_deptno || || v_soma_sal);
END;
3.1.7. Aninhamento de blocos e Escopo das variveis

As variveis podem ser utilizadas em determinadas reas do programa, um bloco


PL/SQL pode ser composto por vrios blocos aninhados (sub-blocos), cada subbloco pode possuir suas variveis. No exemplo 5 a varivel valor1 declarada nos
3 sub-blocos que compe o programa, mas em cada bloco o seu valor
preservado e no gerado nenhum tipo de conflito pois estas variveis so locais.
Exemplo 5: Aninhamento de blocos e escopo de variveis
SET SERVEROUTPUT ON
DECLARE -- bloco 1
valor1 number(2) := 7;
valor2 number(2) := 13;
BEGIN -- bloco 1
DECLARE -- bloco 2
valor1 varchar2(30) := 'Valor 1 do bloco 2';
BEGIN -- bloco 2
DECLARE -- bloco 3
valor1 date := sysdate;
BEGIN -- bloco 3
DBMS_OUTPUT.PUT_LINE('Valor 1 do bloco 3...' ||
valor1);
END; -- bloco 3
DBMS_OUTPUT.PUT_LINE('Valor 1 do bloco 2...' || valor1);
END; -- bloco 2
DBMS_OUTPUT.PUT_LINE('Valor 1 do bloco 1... ' || valor1);
END; -- bloco 1
/
Resultado da execuo do bloco:
SQL> @c:\programas\escopo.sql
Valor 1 do bloco 3...12/05/04
Valor 1 do bloco 2...Valor 1 do bloco 2
Valor 1 do bloco 1... 7
3.1.8. Insero de Dados

Exemplo 6: Adicionar informaes sobre novos funcionrios na tabela EMP.


declare

v_empno emp.empno%type := empno_sequence.nextval;


v_ename emp.ename%type := 'HARDING';
v_job emp.job%type := 'CLERK';
v_deptno emp.deptno%type := 10;
begin
insert into emp(empno, ename, job, deptno)
values (v_empno, v_ename, v_job, v_deptno);
end;
3.1.9. Atualizando Dados

Exemplo 7: Aumentar o salrio de todos os funcionrios na tabela EMP e que


sejam Analistas (Analysts), adicionando 2000 ao valor do salrio.
DECLARE
v_sal_increase
emp.sal%TYPE := 2000;
BEGIN
UPDATE emp
SET
sal = sal + v_sal_increase
WHERE
job = 'ANALYST';
END;
3.1.10. Excluso de Dados

Exemplo 8: Deletar linhas que pertenam ao departamento 10 da tabela EMP.


DECLARE
v_deptno
emp.deptno%TYPE := 10;
BEGIN
DELETE FROM
emp
WHERE
deptno = v_deptno;
END;
3.1.11. Controle de Transaes

O controle da lgica das transaes realizado com as instrues COMMIT e


ROLLBACK SQL, tornando permanentes as alteraes em alguns grupos de
bancos de dados e descartar outros. Assim como ocorre com o Oracle Server, as
transaes DML so iniciadas no primeiro comando seguindo uma instruo
COMMIT ou ROLLBACK e so finalizadas na prxima instruo COMMIT ou
ROLLBACK correta. Essas aes podem ocorrer em um bloco PL/SQL ou como
resultado dos eventos no ambiente do host (por exemplo, o encerramento de uma
sesso SQL*Plus automaticamente compromete a transao pendente).

Para saber mais consulte:


Livros:
Livro
SILBERSCHATZ, Abraham,
KORTH, Henry F. e
SUDASRSHAN, S., Sistema de
Banco de dados. So Paulo:
Makron Books, 1999
Urman,
Scott,
Oracle
8
Programao PL/SQL, McGraw
Hill (1999)

Comentrios
Este livro aborda os principais conceitos sobre
bancos de dados.

Este um livro que trata do comeo ao fim do


assunto PL/SQL, aborda o tema com
profundidade e assuntos complementares no
tratados nesta apostila.
uma tima
referncia para quem quiser se aprofundar
mais. Est uma edio Portuguesa.
Oliveira, Celso H. Poderoso de, Este guia de consulta rpida oferece as
Oracle 8i Pl/Sql - Guia De Consulta instrues PL/SQL de maneira sinttica.
Rapida, Novatec, 2000

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

Este livro dedica um captulo a Administrao


de tabelas e ndices
Este livro dedica um captulo a PL/SQL
Procedures, triggers e packages
Este livro dedica alguns captulos a PL/SQL,
mas no aborda blocos annimos, oferece
exemplos simples e funcionais e exerccios.

http://otn.oracle.com/sample_c Neste site podem ser encontrados


ode/tech/pl_sql/index.html
vrios exemplos sobre PL/SQL (em
ingls)
http://www.imasters.com.br
Apresenta uma srie de artigos e dicas
sobre PL/SQL
http://www.sqlmagazine.com.b Apresenta uma srie de artigos e dicas
r
sobre PL/SQL

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

Вам также может понравиться