Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila bd2 PDF
Apostila bd2 PDF
N de crditos: 04
BANCO DE DADOS II
1- NOES FUNDAMENTAIS
1.1. Transaes
Transao uma unidade atmica de trabalho que atua sobre um banco de dados. Uma transao pode
ser constituda por uma ou mais operaes de acesso base de dados. Todas as operaes devem ser bemsucedidas, caso contrrio os efeitos da transao devem ser revertidos.
Uma transao bem-sucedida termina quando um comando COMMIT executado. O comando
COMMIT finaliza e efetiva todas as alteraes feitas na base de dados durante a transao.
1.2. ROLLBACK
Se uma transao aborta antes de o comando COMMIT ser executado, a transao deve ser
desfeita, isto , todas as mudanas feitas durante a transao devem ser desconsideradas. O processo de
recuperao automtica que permite desfazer as alteraes feitas contra a base chamado ROLLBACK.
O ROLLBACK retorna a situao dos objetos da base alterados na transao mesma situao em que
se encontravam no incio da transao.
O ROLLBACK reverte os efeitos de uma transao como se ela nunca tivesse existido.
1.3. Locks
Quando um dado acessado por uma transao, o perigo de interferncia de outras transaes
acessarem o mesmo dado constante. O gerenciamento de LOCKS ajuda a prevenir isto.
Locks so recursos de compartilhamento de dados, que permitem que o dado seja atualizado e
pesquisados dentro de um ambiente multi-usurio de maneira segura e que lhes garante confiabilidade e
integridade.
Atravs dos locks possvel garantir que somente um usurio esteja atualizando o dado em um
determinado momento, que vrios usurios possam pesquisar o mesmo dado ao mesmo tempo, etc.
H, normalmente, independente da nomenclatura dada por fornecedores de SGBDs, dois nveis de locks
importantes:
- locks exclusivos: ou XLOCKS, usados para garantir o uso de um determinado dado por um nico
usurio. especialmente utilizado em casos de atualizaes.
- locks compartilhados: ou SLOCKS, usados para permitir que mais de um usurio acesse o mesmo
dado ao mesmo tempo. especialmente utilizado em casos de pesquisa em tela, por exemplo. Os
SLOCKS garantem que um usurio possa consultar (e somente consultar) um dado se houver outros
usurios acessando o mesmo dado para consulta.
Quando um usurio adquire um nvel de lock sobre um dado, ele pode requisitar outro nvel ao SGBD.
A este conceito damos o nome de promoo de nveis de LOCK.
Imagine um usurio em nvel SLOCK sobre um registro presente na tela. Para alterar o registro,
ser necessrio que adquira XLOCK, para depois poder alter-lo. Isto s ser possvel se mais nenhum
usurio estiver atuando sobre o mesmo registro, seja em SLOCK ou XLOCK. Isto se explica de
maneira muito simples:
- se fosse possvel a qualquer usurio alterar valores de registros em uso por parte de outros usurios, a
informao consultada nunca seria garantidamente segura, uma vez que a qualquer momento poderia ser
alterada, inclusive no exato momento de um processamento, quando iniciaria com um valor e terminaria
com outro valor, alterado por outro usurio.
A tabela abaixo mostra as transies de nveis de LOCK possveis:
Corrente
Requisitado
Slock
OK
OK
Slock
Xlock
Xlock
X
X
TX2
SLOCK
OK
OK
X
SLOCK
XLOCK
XLOCK
OK
X
X
Corrente
Slock
Registro
Slock
Tabela
Xlock
registro
Xlock
Tabela
Slock
Registro
OK
Requisitado
Slock
Tabela
X
OK
OK
Ok
OK
OK
OK
OK
OK
Xlock
Registro
X
Xlock
Tabela
X
Diferente do rollback, que pode ser executado por uma aplicao ou no processo de reinicializao do
banco de dados, o rollfoward pode ser apenas executado quando do processo de reinicializao do banco
de dados.
1.9 SYNCPOINT
Embora algumas SGDBs permitam que cada transao completada seja imediatamente gravada na base,
este no sem dvida o melhor meio de se efetivar transaes, devido sobrecarga de gravao contra o
banco, o que ocasiona uma queda de performance considervel.
Cada operao que constitui uma transao pode ser mantida em memria (gerenciada por
paginadores, cache managers, etc) e registrada contra o log de transaes, sendo gravada contra a base
em intervalos de tempo pr-determinados. Quando terminado o intervalo, todos os efeitos da alteraes
mantidos em memria so gravados efetivamente contra a base, sem prejuzo do gerenciamento de lock
em curso. A este "alarme" que permite disparar a efetivaes contra a base chamamos syncpoint.
Os syncpoints sincronizam log de transaes, base de dados e memria.
2. ARQUITETURAS DE DISTRIBUIO DE DADOS
H, na teoria, 2 arquiteturas bsica de Bancos de Dados no que se refere distribuio dos dados:
-Centralizados: os dados encontram-se sob um nico gerenciamento, possivelmente no mesmo
equipamento, podendo ser acessados por equipamentos localizados distncia;
-Distribudos: Os dados encontram-se sob gerenciamento distribudo, possivelmente em equipamentos
separados por qualquer distncia, ligados por meios de comunicao de dados. Cada unidade autnoma
no que se refere a seus prprios dados, podendo acess-los independentemente de haver conexo ativa
com as demais. Isto , por exemplo, o caso de uma agncia bancria que armazena os dados de seus
clientes: para acess-los localmente ela no depende ( de fato, no pode depender) das demais agncias,
ou se a comunicao com a matriz est no ar ou no. A distribuio dos dados deve ser efetiva: acessar
os dados dos clientes locais no pode de forma alguma depender do acesso a outros equipamentos que
no sejam o servidor de dados local. No entanto, dados de outras agncias tambm devem estar
disponveis, sendo transparente para o usurio final onde efetivamente se encontra o dado requisitado.
Esta questo abre uma discusso sobre alguns aspectos:
-Se uma agncia precisa consultar, por exemplo, um dicionrio master de toda a rede, para
descobrir que finalmente os dados que precisa so locais, este BD pode ser considerado distribudo,
especialmente se este master se encontra em outro equipamento distncia?
-Se o master vier a ter algum problema, todas as agncias deixam de ter inclusive acesso a seus
prprios dados. Isto pode acontecer em um BD distribudo?
Estes so pontos cruciais sobre os quais se focalizam as querelas entre fornecedores de BD
centralizados e distribudos. O fato que, enquanto no h uma palavra final dos organismos
internacionais de padronizao sobre o que totalmente distribudo e o que no , fornecedores diversos
tm adotado uma filosofia alternativa que se no atende a todas as necessidades da distribuio completa
dos dados, auxilia na obteno de algumas vantagens que antes s eram alcanadas atravs desta
distribuio: o processamento distribudo sobre dados centralizados, mais presente hoje na forma clientserver ou cliente servidor.
Na forma tradicional de processamento distncia sobre dados distribudos, todos os
equipamentos eram considerados terminais da mquina principal ou host. Isto, na maioria das vezes
queria dizer que remotamente, atravs de modem, linha privada ou discada, redes de pacotes, etc.,
obtinha-se um terminal a mais, ainda que funcionando a uma velocidade de comunicao inferior aos
terminais locais.
Tecnologicamente, as formas de comunicao de dados sofreram um avano considervel pelo
uso de protocolos mais rpidos e confiveis, bem como pela melhoria de equipamentos de comunicao e
meios de transmisso, especialmente a fibra ptica. Isto resolveu o problema da velocidade de
comunicao host-terminal. Subsistia o problema da sobrecarga de processamento, cada terminal a mais
conectado ao host tendia a degradar a performance global do equipamento.
A filosofia cliente-servidor foi a alternativa encontrada para este problema. Passou-se a adotar
uma forma de processamento realmente distribudo, no qual ao invs de se ligar terminais diretamente
sobre o host, ligam-se a servidores de processamento, que conectados ao host, agora chamado servidor de
dados, tornam-se clientes de dados armazenados no servidor.
Assim, cada servidor de processamento d aos usurios dos terminais ligados a ele a impresso de
que os dados esto efetivamente armazenados nele. De fato, esta a impresso que a mquina servidora
de processamento tem de si prpria, embora ela seja um cliente dos dados do servidor de dados.
Como resultado, todo o processamento dos terminais feito pelo cliente, que requisita ao servidor
somente os dados necessrios ao processamento.
Reduz-se assim, a quantidade de canais de comunicao necessrios entre o antigo host e os
terminais, passando a existir canais entre o host, agora chamado servidor, e as mquinas clientes.
Numa palavra final, permanecem centralizados os dados, mas distribui-se o processamento.
2.1 TWO-PHASE COMMIT
Uma das principais caractersticas, e tambm das que apresentam maior dificuldade de
implementao plena, para BD distribudos o COMMIT de duas fases ou two-phase commit (TPC).
Imagine uma transao sobre um banco de dados distribudo que atualize tabelas de 3 ou 4
mquinas. O que aconteceria transao se uma das mquinas que teve alguma tabela j atualizada sasse
do ar enquanto a transao prosseguia at certo ponto quando ento um rollfoward fosse solicitado por
qualquer razo?
Ao tentar desfazer a parte da transao ocorrida sobre o equipamento em falha poderia acontecer
de no serem revertidos os efeitos da transao sobre os dados daquele equipamento, mas dos demais sim.
Isto colocaria o banco numa situao de exceo, ou erro transacional, ou ainda de falha da integridade
transacional.
Para evitar este problema, e da mesma forma garantir que quando uma transao emita um
COMMIT, todos os gerenciadores envolvidos efetuem as partes da transao com que esto envolvidos,
faz-se necessrio emitir um COMMIT para cada gerenciador. A transao s ser efetivamente
"commitada" no caso de todos os gerenciadores envolvidos responderem OK solicitao.
Para armazenar os dados em disco, o DBMS tem de fornecer algum tipo de servio de definio
de dados, a fim de definir os registros e os campos. Precisa, ainda, de um mecanismo interno para manter
os dados no disco e para saber onde est cada elemento em particular.
3.2 Aplicativo de Banco de Dados
So programas que permite restaurar, visualizar e atualizar as informaes armazenadas pelo
DBMS.
Domnio
a categoria e o tipo dos elementos permitidos em um campo particular.
Ex: nome : A..Z, a..z
Modelos de DBMS
- Sistema de Gerenciamento de arquivos;
- Sistema de Banco e Dados Hierrquico
- Sistema de Banco de Dados de Rede;
- Banco de Dados Relacional;
4. SQL
4.1 Histrico
Entre 1974 e 1979, o San Jos Research Laboratory da IBM desenvolveu um SGDB relacional que ficou
conhecido como Sistema R.
Para a criao e acesso aos dados foi adotada uma linguagem chamada SEQUEL, mais tarde
rebatizada SQL (Structured Query Language).
Embora a query em sua definio, a SQL foi projetada de forma a permitir que alm de consultas
(queries), inseres, alteraes e delees fossem feitas, alm da prpria criao das tabelas e campos.
Dividiu-se a SQL ento em duas partes:
-DDL: Data Description Language (Linguagem de Descrio de Dados);
-DML: Data Manipulation Language (Linguagem de Manipulao de Dados).
DDL
A DDL, uma parte muito pequena da SQL, permite a criao e manuteno do dicionrio de
dados. O dicionrio de dados contm a definio de cada tabela, de cada campo, enfim, contm a
definio da base de dados propriamente dita. Em outras palavras, o dicionrio de dados guarda dados
sobre os dados.
Embora existam algumas outras construes, a mais importante das construes da DDL a destinada a
criao de tabelas. Por exemplo, a sentena para a criao das tabelas funcionrio, cidade, e setor, poderia
ser como segue:
Adotada como padro mundial pela ISSO em 1987, uma linguagem exclusiva de banco de
dados Cliente/Servidor;
6
Exemplos:
1- Selecionar todos os atributos de cada funcionrio:
SELECT *
FROM funcionrio;
2- Selecionar todos os atributos dos funcionrios da cidade de Tubaro:
SELECT *
FROM funcionrio
WHERE cidafunc = Tubaro;
3- Selecionar os nomes de todos os funcionrios da cidade de Tubaro e salrios maior que R$ 500,00
SELECT nomefunc
FROM funcionrio
Where cidafunc = Tubaro and salafunc > 500;
4- Selecionar o nome e rua onde moram os funcionrios com matrcula maior que 100 e cidade igual a 25:
SELECT nomefunc, ruanofunc
FROM funcionrio
WHERE cdcidfunc=25
AND matrfunc>100;
5- Selecionar o nome rua onde moram os funcionrios com matrcula maior do que 100 e cidade igual a
25, ordenados por nome em ordem decrescente:
SELECT nomefunc,ruanofunc
FROM funcionrio
WHERE cdcidfunc=25
AND matrfunc>100
ORDER BY nomefunc DESC;
6- Selecionar para cada funcionrio o seu nome e o de sua cidade:
SELECT nomefunc, nomecid
FROM funcionrio, cidade
WHERE cdcidfunc=cdcidade;
Not Between
Faz uma pesquisa descartando uma faixa de valores.
Exemplo
Select *
from funcionario
where idadefunc between 18 and 30;
Select *
from funcionario
where idadefunc not between 18 and 30;
IN
Consulta a presena de um campo em um conjunto de valores
NOT IN
Consulta a no presena de um campo em um conjunto de valores
Exemplo:
Select *
from funcionario
where cdcidfunc in ( 10, 20, 30 ,35);
Like
Compara a existncia de uma caracter em uma determinada posio em uma string.
_ Testa a existncia de um caracter no nulo na posio;
% representa qualquer seqncia de n caracteres.
Not Like
Compara a no existncia de um caracter em uma determinada posio em uma string.
Exemplo
Select *
From funcionario
where nomefunc like Rudiney%
Esta consulta traz todos os funcionrios com primeiro nome Rudiney no importa o resto do nome.
Select *
From funcionario
where nomefunc like %da Silva
9
10
Select x
from A
Where exists (select *
from B
where y=x)
O campo X da relao A ser selecionado, se existir um elemento y=x na relao B.
Exemplo
Select *
from alunos
where exists
(select *
from alunos
where curso_alu=CCP);
Not Exists
Verifica se o resultado do calculo da subconsulta representada por Select * from vazia.
FUNES
Count - Nmero de valores da coluna
Sum - Soma dos valores da Coluna
AVG - Mdia dos valores da Coluna
Max - Maior valor da coluna
Min - Menor valor da coluna
Exemplo
10
11
GRUPO BY
Forma grupos com as tuplas da tabela especificada na clusula from, que possuem o mesmo valor
no atributo especificado na clusula grupo by;
Para ter resultado em ordem, deve ser especificado tambm a clausula order by(aps a clausula
grupo by).
Exemplo
Select curso_alu, count(curso_alu)
from alunos
group by curso_alu;
HAVING
Having para os grupos o que where para as linhas. Em outras palavras, utilizado para eliminar
grupos, onde where utilizado para eliminar linhas.
Exemplo:
Select curso_alu, avg(idade)
from alunos
group by curso_alu
having avg(idade) > 18;
11
12
LIMITE
No h limites.
No h limites
254
No h limites
No h limites
30
255
16
CRIANDO TABELAS
Tipos de Dados(Datatypes)
Char(n)
Varchar2(n)
Long
Number(p,s)
Raw
Long Raw
Date
13
JOB CHAR(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) NOT NULL);
INSERINDO DADOS EM TABELAS
DESC DEPT;
13
14
FUNES ARITMTICAS
Funes
Round
ROUND(SAL,2)
Trunc
TRUNC(SAL,2)
Mod
Mod(sal,comm)
Power
Power(sal,2)
Sign
Sign(sal)
SQRT
SQRT(25)
OPERADORES ARITMTICOS
+, -, *, /
15
CRIANDO VIEWS
CREATE VIEWS MANEGERS AS
SELECT ENAME, JOB, SAL
FROM EMP
WHERE JOB = 'MANAGER';
DELETANDO VIEWS
DROP VIEWS MANAGERS;
15
16
ATUALIZANDO REGISTROS
UPDATE EMP
SET JOB='MANAGER'
WHERE ENAME='MARTIN';
FUNES DE GRUPO
AVG, COUNT, WHERE, MAX, MIN, SUM, STDDEV,VARIANCE
Funes
AVG
COUNT
WHERE
MAX
MIN
SUN
STDDEV
VARIANCE
Exemplo
AVG(SAL)
COUNT(COMM)
COUNT(*)
COUNT(*)
MAX(SAL)
MIN(SAL)
SUM(SAL)
STDDEV(SAL)
VARIANCE(SAL)
Resultado
MADIA DO VALOR DE SAL
CONTA NUMERO DE LINHAS COM COMM
CONTA O NUMERO DE LINHAS CFE.
MAIOR VALOR DE SAL.
MNIMO VALOR DE SAL.
SOMOTRIA DOS VALORES DE COMM
CLCULO DESVIO PADRO DA SAL.
CALCULA DA VARIANA DE SAL.
16
17
17
18
FUNES DE DATA
FUNES
ADD_MONTHS
MONTHS_BETWEEN
NEXT_DAY
LAST_DAY
TRUNC
EXEMPLO
RESULTADO
ADD_MONTHS(HIREDATE ADICIONA 5 MESES NA
,5)
DATA HIREDATE
MONTHS_BETWEEN(HIRE CALCULA O NMERO DE
DATE,SYSDATE)
MESES BETWEEN ENTRE
AS DATAS
NEXT_DAY(HIREDATE,'FR PROCURA UMA SEXTAIDAY')
FEIRA APS HIREDATE
LAST_DAY(SYSDATE)
RETORNA
A
DATA
TOMANDO
COMO
PARAMETRO O 'FMT'
TRUNC(SYSDATE,FMT)
TRUNCA A DATA PARA A
PRIMEIRA DATA DO 'FMT'
Funes de converso
Funes
TO_CHAR
Exemplo
TO_CHAR(SYSDADE,YY)
TO_DATE
TO_DATE(15/05/90,DD/MM/YY)
TO_NUMBER
TO_NUMBER(SUBSTR($150,2,3))
Resultado
CONVERTE
COLUNAS
DO
TIPO
NUMBER E DATA PARA CHAR.
CONVERTE COLUNAS DO TIPO CHAR
PARA O FORMATO DE DATA.
CONVERTE AS 3 ULTIMAS (EM
FORMATO CHAR) PARA MUMBER.
Resultado:
Enter value for nome_da_coluna: deptno
EMPNO ENAME
JOB
----------- ------------------ -------------------------
DEPTONO
-------------------18
19
7839
7782
King
Clark
President
Manager
10
10
5. INTEGRIDADE REFERENCIAL
PRIMARY KEY
CREATE TABLE FILIAL
( CD_EMPRESA NUMBER(6,0),
CD_FILIAL
NUMBER(4,0),
CD_TIPO
VARCHAR2(20),
DT_CADASTRO DATE,
CONSTRAINT PK_FILIAL PRIMARY KEY(CD_EMPRESA,CD_FILIAL));
INTREGRIDADE REFERENCIAL
INTEGRIDADE
No ORACLE 7 todas as regras de integridade de dados e entidade so definidos por objetos
chamados CONSTRAINT. Que podem ser definidos quando da criao da tabela ou posteriori via
camando ALTER TABLE.
Os constraints suportados so :
* NOT NULL
* UNIQUE KEY
* PRIMARY KEY
* FOREIGN KEY
* CHECK
CONSTRAINTS IN-LINE
Exemplo:
CREATE TABLE EMPREGADO
( CD_EMPREGADO NUMBER (6,0) PRIMARY KEY,
...............................................................................
............................................................................... );
CONSTRAINTS OUT-OF-LINE
Exemplo:
19
20
Nota : Quando o constraint for definido sem nome, o oracle define um nome para o mesmo - sys_c00n onde n um nmero seqencial crescente.
CHECK CONSTRAINT
As validaes de colunas so feitas utilizando o CHECK CONSTRAINT.
Exemplo:
CREATE TABLE FILIAL
( CD_EMPRESA NUMBER (6,0) CONSTRAINT FK1_FILIAL
REFERENCE EMPRESA (CD_EMPRESA),
CD_FILIAL NUMBER (4,0) CONSTRAINT CK_FILIAL
CHECK (CD_FILIAL BETWEEN 1 AND 9999) DISABLE,
CD_TIPO VARCHAR2 (20) CONSTRAINT CK_TIPO_FILIAL
CHECK (CD_TIPO IN ('MATRIZ', 'FILIAL', 'FABRICA')),
DT_CADASTRO DATE,
CONSTRAINT PK_FILIAL PRIMARY KEY (CD_EMPRESA, CD_FILIAL));
20
21
Exemplo:
CONSTRAINT FK1_FILIAL
FOREIGN KEY (CD_EMPRESA)
REFERENCES EMPRESA (CD_EMPRESA)
OU
CONSTRAINT FK1_FILIAL
FOREIGN KEY (CD_EMPRESA)
REFERENCES EMPRESA
CHECK CONSTRAINT
As validaes de colunas so feitas utilizando o CHECK CONSTAINT.
Exemplo:
Create table filial
(
cd_empresa number(6,0) constraint fk1_filial
references empresa (cd_empresa),
cd_filial number(4,0) constraint ck_filial
check (cd_filial between 1 and 9999) disable,
cd_tipo varchar2(20) constraint ck_tipo_filial
check (cd_tipo in (matriz, filial,fabrica, )),
dt_cadastro date,
21
22
DEFAULT SPECIFICATION
Podemos atribuir valores default para colunas, visando facilitar a insero de dados
Create table filial
(
cd_empresa number(6,0) constraint fk1_filial
references empresa (cd_empresa),
cd_filial number(4,0) constraint ck_filial
check (cd_filial between 1 and 9999) disable,
cd_tipo varchar2(20) constraint ck_tipo_filial
check (cd_tipo in (matriz, filial,fabrica, )),
dt_cadastro date default sysdate,
constraint pk_filial primary key (cd_empresa, cd_filial));
OBS: para ativar a constraint : alter table filial enable constraint fk_filial;
DELETANDO CONSTRAINT
alter table filial drop constraint fk_filial;
22
23
6 PL/SQL
6.1. PORTABILIDADE
Aplicaes escritas em PL/SQL so portveis para qualquer Mquina que rode ORACLE
RDBMS com PL/SQL.
6.2. INTEGRAO COM RDBMS
- Variveis PL/SQL podem ser definidas a partir de definies das colunas das tabelas.
- Reduo de manuteno das aplicaes, pois estas adaptam-se as mudanas da Base de Dados.
6.3. CAPACIDADE PROCEDURAL
- Comandos de controle de fluxo, comandos de repeties e tratamentos de erros;
6.4. PRODUTIVIDADE
- Desenvolvimento de Procedures e Triggers no Oracle Forms e Oracle Reports.
- Desenvolvimento de Database Triggers, Procedures e Functions a nvel do Banco de Dados
ESTRUTURA DE BLOCO
DECLARE - Opcional
Variaveis, cursores, exceptions definidas pelo usurio
BEGIN - Obrigatrio
- SQL
- PL/SQL
EXCEPTION Opcional
Aes que so executadas quando ocorem os erros
END obrigatrio
24
COMANDOS
EXCEPTION
TRATAMENTO DE ERROS
END;
Exemplo:
Declare
V_variavel varchar2(5);
Begin
Select nome_coluna
Into v_varivel
From table_name;
Exeption
When exception_name Then
.....
End;
Obs: Sempre coloque um (;) no fim de SQL ou um PL/SQL.
Tipos de Blocos
Anonymous
Declare
Begin
.......
Execption
Procedure
Function
Procedure name is
Begin
.......
Execption
Begin
.......
Return value;
Execption
End;
End;
UTILIZA COMANDOS SQL
SELECT, INSERT, UPDADE, DELETE, ROLLBACK, COMMIT, SAVAPOINT
25
NUMBER
DATE
BOOLEAN
Declare
V_data
date;
V_deptno
number(2) := 10;
V_location varchar2(13) := Atlanta;
V_comm
contant number :=1400;
EXEMPLO
DECLARE
NOME
CHAR(30);
SALARIO
NUMBER(11,2);
DEPART
NUNBER(4);
DTNASC
DATE;
SIM
BOOLEAN;
CONT
NUMBER(6) :=0;
PERC
CONSTANT NUMBER(4,2):= 36.00;
O atributo %TYPE
Declara a varivel de acordo com uma coluna definida no Banco de Dados;
Exemplo
V_ename
emp.ename%Type;
V_balance
number(7,2);
V_min_balance v_balance%Type :=10;
CONCEITO DE TRANSAO
UMA SEQUENCIA DE COMANDOS SQL DELIMITADOS POR COMANDOS CONNECT,
DISCONECT OU AINDA POR COMANDOS COMMIT.
COMANDOS A SEREM UTILIZADOS EM PL/SQL
1. COMMIT
2. ROLLBACK
3. SAVEPOINT nome-do-ponto
4.ROLLBACK TO SAVEPOINT nome-do-ponto
25
26
Declare
Cargo_atual char(10);
Begin
Select upper(substr(cargo,1,10)) into cargo_atual
from funcionario
where cd_func = 2150;
End;
26
27
FUNES DE DATA
Add_months, lat_day, months_between, new_time, next_day, round......
CONTROLE DE FLUXO
COMANDO IF
1. IF <condio> THEN
<comandos>
END IF;
2. IF <condio> THEN
<comandos>
ELSE
<comandos>
END IF;
3. IF <condio> THEN
<comandos>
ELSIF <condio> THEN
<comandos>
END IF;
4. IF <condio> THEN
<comandos>
ELSIF <condio> THEN
<comandos>
ELSE
<comandos>
END IF;
5. IF <condio> THEN
IF <condio> THEN
<comandos>
END IF;
END IF;
EXEMPLO
DECLARE
QUANT NUMBER(3);
BEGIN
SELECT ES.NR_QTD INTO QUANT
FROM ESTOQUE ES
WHERE CD_PROD = 30;
IF QUANT > 0 AND QUANT < 3000 THEN
UPDATE ESTOQUE SET NR_QTD = QUANT + 1
WHERE CD_PROD = 30;
27
28
COMANDOS DE REPETIO
SO UTILIZADOS PARA EXECUTAR REPETIDAMENTE O CDIGO ESCRITO DENTRO
DELES.
LOOP
FOR LOOPs
WHILE LOOP
29
30
EXCEES
SO USADAS NO PL/SQL PARA LIDAR COM QUAISQUER ERROS QUE OCORRAM DURANTE
A EXECUO DE UM BLOCO.
H DOIS TIPOS DE EXECEES, AS DEFINIDAS INTERNAMENTE PELA PL/SQL E AS
DEFINIDAS PELO USURIO.
NESTA PARTE VEREMOS APENAS ALGUMAS DELAS
SINTAXE:
EXCEPTION
WHEN <nome-exeception> THEN
<comandos>;
WHEN <nome-execetion> THEN
<comandos>;
EXEMPLO EXCEPTION
NO_DATA_FOUND -
31
RETORNANDO ERROS
SQLERR - Retorna o nmero do erro
SQLERRM Retorna o nmero e a descrio do erro
Exemplo
BEGIN
INSERT INTO TESTE VALUES
(50,45,SYSDATE);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('ERRO - '||SQLERRM);
END;
EXCEPTION
DUP_VAL_ON_INDEX
Chave Duplicada
31
32
INVALID_CURSOR
Operao Ilegal com Cursor
INVALID_NUMBER
Converso invlida p/numrico
LOGIN_DENIED
Usurio/Senha Invlida
NO_DATA_FOUND
Nenhuma linha retornada
NOT_LOGGED_ON
Usurio no conectado
OTHERS
Erro no declarado em exceptions
PROGRAM_ERROR
Problema Interno
STORAGE_ERROR
Falta de Memria
TIMEOUT_ON_RESOURCE
Tempo de espera
TOO_MANY_ROWS
Retorna Muitas Linhas
TRANSACTION_BACKED_OUT
Volta Atrs uma transao
VALUE_ERROR
Erro Converso,Expresso
ZERO_DIVIDE
Diviso por zero
Exerccio
Escreva um bloco PL/SQL para selecionar o nome do cliente tratando os erros de nenhum valor
encontrado e muitos valores enontrados. Adicione tambm uma exceo geral para cobrir outro erro que
venha a ocorrer.
Exceptions Definidas Pelo Usurio
Exemplo:
DECLARE
X NUMBER := 0;
Y NUMBER := 0;
ESTOURO EXCEPTION;
BEGIN
FOR X IN 1..1000 LOOP
Y:= X + (X/2);
IF Y > 1000 THEN
RAISE ESTOURO;
END IF;
32
33
END LOOP;
EXCEPTION
WHEN ESTOURO THEN
DBMS_OUTPUT.PUT_LINE('ESTOURO DE CAPACIDADE');
END;
PROCEDURE
SINTAXE:
PROCEDURE nome_procedure IS
variable1 datatype;
...
BEGIN
comandos;
...
EXCEPTION
when ...
END nome_procedure;
EXEMPLO PROCEDURE
CREATE OR REPLACE PROCEDURE CHECK_SALARY
(EMP_ID INTEGER, INCREASE REAL) IS
CURRENT_SALARY
REAL;
SALARY_MISSING
EXCEPTION;
BEGIN
SELECT SAL INTO CURRENT_SALARY FROM EMP
WHERE EMPNO = EMP_ID;
IF CURRENT_SALARY IS NULL THEN
RAISE SALARY_MISSING;
ELSE
UPDATE EMP SET SAL = SAL + INCREASE
WHERE EMPNO = EMP_ID;
EXCEPTION
WHERE NO_DATA_FOUND THEN
INSERT INTO EMP_AUDIT VALUES
(EMP_ID, NO SUCH NUMBER);
WHEN SALARY_MISSING THEN
(EMP_ID, SALARY IS NULL);
END CHECK-SALARY;
/
FORMA DE CHAMADA CHECK_SALARY(EMP_NUM,AMOUNT);
33
34
PACKAGE
UM OBJETO DO DATABASE QUE CONTM UM GRUPO DE FUNES RELACIONADAS.
UM PACKAGE PODE CONTER:
PROCEDURES
FUNCTIONS
CURSOR DEFINITIONS
EXCEPTION DEFINITIONS
EXEMPLO PACKAGE
CREATE REPLACE PACKAGE EMP_ACTION IS
PROCEDURE HIRE_EMPLOYEE (EMPNO NUMBER, ENAME CHAR, .....);
PROCEDURE FIRE_EMPLOYEE (EMP_ID NUMBER);
END EMP_ACTIONS;
/
CREATE OR REPLACE PACKAGE BODY EMP_ACTIONS IS
PROCEDURE HIRE_EMPLOYEE (EMPNO NUMBER, ENAME CHAR, .....); IS
BEGIN
INSERT INTO EMP VALUES (EMPNO, ENAME, .....);
END HIRE_EMPLOYEE;
PROCEDURE FIRE_EMPLOYEE(EMP_ID NUMBER) IS
BEGIN
DELETE FROM EMP WHERE EMPNO = EMP_ID;
END FIRE_EMPLOYEE;
END EMP_ACTIONS;
/
DATABASE TRIGGER
So programas PL/SQL, utilizados para completar a integridade, segurana e regras de negcios retirando
estas tarefas dos programas. Eles esto ligados a uma tabela e associado a um Evento.
CARACTERSTICA
34
35
DESCRIO
TRIGGER TYPE
TRIGGERING EVENT
TRIGGER RESTRICTION
TRIGGER ACTION
PL/SQL BLOCK
EXEMPLO DE UTILIZAO
BEFORE STATEMENT
BEFORE ROW
AFTER ROW
AFTER STATEMENT
Auditoria em geral
INSERTING
UPDATING
DELETING
35
36
36
37
EXEMPLO:
ALTER TABLE EMPRESA DISABLE ALL TRIGGERS;
ALTER TABLE EMPRESA ENABLE ALL TRIGGERS;
ELIMINANDO UM DATABASE TRIGGER
DROP TRIGGER [ schema.] trigger_name
EXEMPLO:
DROP TRIGGER TRG_EMPRESA;
VIEW DO DIOCIONRIOS COM INFORMAES DE DATABASE TRIGGERS
. USER_TRIGGERS
. DBA_TRIGGERS
37
38
BIBLIOGRAFIA
.ELMASRI, Ramez e NAVATHE, ShamKant B. Sistemas de Banco de Dados - Fundamentos e
Aplicaes. Ed. LTC. Rio de Janeiro, 2000.
.KORTH, Henry F. & SILBERSCHATZ, Abraham. Sistemas de Bancos de Dados, So Paulo.
Ed. Makron Books, 1999.
.DATE, C.J., Introduo a Sistemas de Bancos de Dados, Rio de Janeiro. Ed. Campus, 1991.
ABBEY, Michael. Oracle: guia do usurio / Michael Abbey, Michael J. Corey; traduo Joo
Eduardo Nbrega Tortello; reviso tcnica Marcus Faversani Hermman. So Paulo: Markon
Books, 1997.
SARAIVA, Armando. Programando em Oracle. Rio de Janeiro: Infobook, 1999.
38