You are on page 1of 38

1

Curso: Sistema de Informao Fase: 3 Disciplina: Banco de dados II Professor: Edson Thizon (ethizon@hotmail.com)

N de crditos: 04

Carga Horria: 68 horas/aula

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 Slock Xlock Slock OK OK Requisitado Xlock X X

A Tabela a seguir mostra a compatibilidade de Locks entre transaes : TX1 SLOCK XLOCK SLOCK OK OK X TX2 XLOCK OK X X

1.4 Promoo de Locks por Objeto A tabela abaixo mostra as transies de nveis de locks por objeto(tabela ou registro da base de dados) possveis:

Corrente Slock Registro OK OK Ok OK

Slock Registro Slock Tabela Xlock registro Xlock Tabela

Requisitado Slock Tabela X OK X OK

Xlock Registro X X OK OK

Xlock Tabela X X X OK

1.5 Gerenciadores de Banco de dados OLTP(On-line Transaction Processing) Os Gerenciadores de banco de dados OLTP ou transacionais permitem que os dados armazenados em um banco de dados permaneam disponveis 24 horas por dia. Estes Gerenciadores possuem arquitetura complexa e bastante sofisticada que garante a integridade transacional das operaes efetuadas contra a base de dados. Adotam a filosofia all-or-nothing pela qual uma transao s efetivada contra a base ao se alcanar a instruo COMMIT. Este procedimento garante que processos longos de modificao do estado da base jamais sejam efetivados parcialmente. Da mesma forma, este gerenciadores permitem que seja feito bachup do seu contedo de maneira transparente para que est usando os dados armazenados, no sendo necessrio desativar o servidor de dados. 1.6 Log de Transaes O Log de transaes, embora possa ser encontrado tambm em SGBDs OLTP. Normalmente trata-se de um arquivo que registra todo o desenvolvimento de cada transao ocorrida ou em curso. Sua importncia est na capacitao de efetuao de rollcks e rollforwords, que possibilitam desfazer e refazer transaes. 1.7 Falhas Os bancos de dados esto sujeitos a diversas causas de falhas: - queda do fornecimento de energia; - falhas de hardware; - falhas ou sabotagem de operao; - etc. Os backups e sua administrao so os mecanismo determinante da reversibilidade dos efeitos e danos provocados por falhas. Da mesma forma, a capacitao para desfazer transaes incompletas, e refazer transaes completas de fundamental importncia neste sentido. Aps ocorrida uma falha, j na reinicializao do banco de dados, o SGBD deve possuir ferramentas que possibilitem verificar que um encerramento anormal ocorreu e determinar as providncias a se tomar: - se o backup deve ser restaurado ou no; - se ser necessrio rolar log de transaes; - Quantas e quais transaes sero desfeitas 1.8 ROLLFORWORD Quando da reinicializao de um banco de dados aps uma falha, algumas transaes podem ter sido perdidas na memria, embora um comando Commit j tenha sido emitido. Isto quer dizer que no log de transaes a transao considerada completa. No entanto, os efeitos no foram registrados em definitivo na base de dados. Isto quer dizer que esta transao deve ser completada novamente. Usando o log de transaes o SGDB "sabe" que partes da transao ainda no foram gravados em definitivo. As etapas que ainda faltam ser gravadas so ento executadas at ser encontrado o comando COMMIT gravado no log de transaes. A este processo chamamos refazer a transao ou rollfoward.

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.

3 . SISTEMA GERENCIADOR DE BANCO DE DADOS (recapitulao BD) 3.1 CONCEITO (Sistema Gerenciador de Banco de Dados) - um programa que gerencia e mantm listas de informaes. Os dados armazenados em um banco de dados podem ser imaginados como uma populao de informao. Nesse caso, a populao no representa apenas um grupo de pessoas que vive na mesma rea geogrfica, mas qualquer grupo ou classe de itens ou objetos que podemos definir. Ao criarmos um banco, a populao na qual estamos interessados aquela que precisamos rastear, e que se torna a base dos dados.

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

No dispe dos seguinte recursos: - Repetio e desvio; - Comandos para manipulao de telas e impresso de relatrios; Os Fabricantes de SGBD podem expandir a linguagem SQL padro ANSI, desde que os comandos bsicos sejam aceitos. CREATE TABLE funcionrio (matrfunc NUMBER(5) NOT NULL, nomefunc CHAR(40), cdsetfunc NUMBER(3), ruanofunc CHAR (40), bairrofunc CHAR(15), cdcidfunc NUMBER(5), salrfunc NUMBER (11,2); DML a parte mais ampla da SQL. Permite pesquisar, alterar, incluir e deletar dados da base de dados. So quatro as sentenas mais importantes da DML: -SELECT: permite a pesquisa de dados; -UPDATE: permite a atualizao de dados; - DELETE: permite a deleo de dados; - INSERT: permite a incluso de dados. 4.2 Comandos Bsicos SELECT - Lista os atributos desejados como resultados de uma consulta; - Corresponde a operao de projeo da lgebra relacional; - Lista de atributos pode ser substitudo por *; From - Lista de relao a serem usados na execuo da expresso; Where - So definidos critrios de pesquisa envolvendo atributos das relaes definidas na clusula from ; comando opcional; Order By - Especifica a seqncia de ordenao da tabela criada pela consulta; - Comando opcional; - Qualificador opcional : asc / desc. Select A1, A2,...,An From r1,r2,...rm Where P

Onde A so os campos a serem selecionados, R so as tabelas, e P uma condio.

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;

Comandos de Comparao de Valores Between Faz uma pesquisa entre uma faixa de valores para um campo da tabela.
8

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

Neste caso localiza todos os funcionrios com sobrenome da Silva . Null Verifica se o valor do campo comparado zero ou vazio; Not Null Verifica se o valor do campo comparado no zero ou vazio; Exemplo: Select * From funcionario Where endereco is null; Exist Verifica se o resultado do clculo da subconsulta representada por select * from No vazia.

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

Select max(idade), nim(idade) from alunos; Select avg(salario) From funcionario; Select nome From funcionario Where idade > (select avg(idade) From funcionario) Neste exemplo o comando SQL vai selecionar o nome dos funcionrios com idade acima da mdia.

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

4.3 BANCO DE DADOS ORACLE - Conceitos Bsicos LIMITES DO ORACLE RDBMS ITEM Tabela na Base de dados Linhas por Tabelas Colunas por tabelas Indices por tabelas Tabelas ou views joined em uma query Niveis de ninho de subqueries Caracteres em um nome Colunas por ndices 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 Tamanho Fixo, pode conter uma seqncia de 1 a 255 bytes alfanumricos; Tamanho Varivel, pode conter uma seqncia de 1 a 2000 bytes - alfanumricos. Tamanho Varivel at 2 Gigabytes alfanumricos nota : s pode existir uma coluna long em cada tabela Numrico com sinal e ponto decimal, sendo preciso de 1 a 38 dgitos Binrio - Varivel at 255 bytes Binrio - Varivel at 2 gigabytes - imagem Data c/ hora, minuto e segundo

COMANDO CREATE TABLE CREATE TABLE DEPT (DEPTNO NUMBER(2) NOT NULL, DNAME VARCHAR2(14), LOC VARCHAR2(13)); CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10),
12

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; - lista os campos da tabela dept

INSERT INTO DEPT VALUES (50, TESOURARIA', 'TUBARAO',1000); INSERT INTO DEPT(DNAME,DEPTNO) VALUES(CAIXA',60);

13

14

FUNES ARITMTICAS Funes Round Trunc Mod Power Sign ROUND(SAL,2) TRUNC(SAL,2) Mod(sal,comm) Power(sal,2) Sign(sal) sal arredondado para 2 casas apos o ponto decimal Sal truncado para 2 dgitos aps o ponto decimal. Retorna o resto da diviso de sal/comm Retorna o sal elevado ao quadrado. Se SAL maior que O retorna +1 Se SAL menor que 0 retorna 1 Se SaL igual a 0 retorna 0. retorna a raiz quadrada de 25

SQRT

SQRT(25)

OPERADORES ARITMTICOS +, -, *, /

Select ename, sal, comm, sal+comm from emp where job = 'salesman'; Select ename, sal, comm from emp Where comm > 0.25 * sal Select ename, comm/sal, comm,sal from emp where job = 'Salesman' order by comm/sal asc; Select ename, sal, comm,12*(sal+comm) from emp where job = 'Salesman';

Select ename, sal, sal/22, round(sal/22,0), round(sal/22,2) from emp where emp where deptno = 30;
14

15

select ename, sal, sal/22, trunc(sal/22,0=, trunc(sal/22,2) from emp where deptno = 30;

INCLUINDO NOVA COLUNA NA TABELA ALTER TABLE DEPT ADD (CCUSTO NUMBER(6)); ALTERANDO O TAMANHO DE UMA COLUNA ALTER TABLE DEPT MODIFY DNAME CHAR(20);

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

ATUALIZANDO VRIOS REGISTROS UPDATE EMP SET JOB='VENDEDOR' WHERE JOB='SALESMAN'; UPDATE EMP SET DEPTNO=40, JOB='SALESMAN' WHERE JOB='VENDEDOR'; DELETANDO LINHAS DAS TABELAS DELETE FROM EMP WHERE ENAME='MARTINS'; DELETE FROM DEPT WHERE DEPTNO=60;

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.

UTILIZANDO FUNES DE GRUPO 1) SELECT DEPTNO, MAX(SAL) FROM EMP GROUP BY DEPTNO;

16

17

2) SELECT DEPTNO, SUM(SAL) FROM EMP GROUP BY DEPTNO;

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 TO_DATE TO_NUMBER Exemplo TO_CHAR(SYSDADE,YY) TO_DATE(15/05/90,DD/MM/YY) 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.

Usando && para substituir variavel Usando o duplo &, voc pode reusar uma varivel sem colocar no prompt a cada vez. EX: Select empno, ename, job, &&_nome_da_coluna From emp Order by &column_name

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

CREATE TABBLE EMPREGADO ( CD_EMPREGADO NUMBER (6,0) NOT NULL, ..................................................................... ..................................................................... CONSTRAINT PK_EMPREGADO PRIMARY KEY (CD_EMPREGADO) );

Nota : Quando o constraint for definido sem nome, o oracle define um nome para o mesmo - sys_c00n onde n um nmero seqencial crescente.

PRIMARY KEY CONSTRAINT Valor nico que identifica cada linha da tabela. Exemplo: CREATE TABLE EMPRESA ( .......................................................................................................... CONSTRAINT PK_EMPRESA PRIMARY KEY (CD_EMPRESA);

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

FOREIGN KEY CONSTRAINT * Deve estar associada a uma primary key ou unique key definida anteriormente. * Pode assumir valor nulo ou igual ao da chave referenciada. * No existe limite para um nmero de foreign keys. * Garante a consistncia com a primary key referenciada. * Pode fazer referncia a prpria tabela. * No pode ser criada para views, synonyns e remote table

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

constraint pk_filial primary key (cd_empresa, cd_filial));

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;

DELETE CASCADE ACTION Opo a ser utilizada quando da definio do constraint foreing key, para que quando deletamos registros da tabela pai os registros da tabela filho sejam automaticamente deletados. Exemplo create table empregado (................................ cd_depto number(2) constraint fk1_emp_dept references departamento on delete cascade ..........................);

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

6.5 PRINCIPAIS CARACTERSTICAS- PL/SQL

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

BLOCO PL/SQL COM SUB-BLOCO DECLARE DEFINIO DE VARIVEIS BEGIN COMANDOS DECLARE DEFINIO DE VARIVEIS BEGIN
23

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 Procedure name is Begin ....... Execption End;

Function Function name return datatype is Begin ....... Return value; Execption End;

UTILIZA COMANDOS SQL SELECT, INSERT, UPDADE, DELETE, ROLLBACK, COMMIT, SAVAPOINT

DECLARAO DE VARIVEIS E CONSTANTES DATATYPES MAIS UTILIZADOS CHAR VARCHAR2 INTERGER


24

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

EXEMPLO DE CONTROLE DE TRANSAO DECLARE <definies de variveis> BEGIN INSERT INTO TEMP VALUE (null,1,linha 1); SAVEPOINT PONTOUM; INSERT INTO TEMP VALUE (null,2,linha 2); SAVEPOINT PONTODOIS; INSERT INTO TEMP VALUE (null,3,linha 3); SAVEPOINT PONTOTRES; <COMANDOS> ROLLBACK SAVEPOINT PONTODOIS; <COMANDOS> COMMIT; END;

FUNES UTILIZADAS EM PL/SQL Podemos contar com o uso de funes de Caracteres, Numricas, Data, Converso, dentre outras. Exemplo:

Declare Cargo_atual char(10); Begin Select upper(substr(cargo,1,10)) into cargo_atual from funcionario where cd_func = 2150; End;

EM COMANDOS PL/SQL PODEMOS UTILIZAR AS SEGUINTES FUNES: FUNES DE ERRO sqlerrm, sqlcode FUNES DE CARACTERES ascii, chr, initcap, length, lower, lpad, rpad, ltrim, rtrim, substr, upper. FUNES NUMRICAS abs, ceil, floor,mod, power, round, sign, trunc, sqrt........

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

ELSIF QUANT >= 3000 THEN INSERT INTO ALERTA(PROD,ERRO) VALUES(30,MXIMO); ELSE INSERT INTO ALERTA(PROD,ERRO) VALUES(30,MNIMO); END IF; END;

COMANDOS DE REPETIO SO UTILIZADOS PARA EXECUTAR REPETIDAMENTE O CDIGO ESCRITO DENTRO DELES. LOOP FOR LOOPs WHILE LOOP CURSOR FOR LOOPs

EXEMPLO COMANDO LOOP DECLARE X NUMBER := 0; COUNTER NUMBER := 0; BEGIN LOOP X := X + 1000; COUNTER := COUNTER + 1; IF COUNTER > 4 THEN EXIT; END IF; DBMS_OUPUT.PUT_LINE (X || || COUNTER || LOOP); END LOOP; END; / EXEMPLO COMANDO FOR .. LOOP DECLARE A,B NUMBER(3):= 0; BEGIN
28

29

FOR A IN 1..25 LOOP B:= B + 1; DBMS_OUTPUT.PUT_LINE(LOOP1 - ||B); END LOOP; END; EXEMPLO COMANDO WHILE .. LOOP DECLARE X NUMBER(3); Y VARCHAR2(30); K DATE; J NUMBER(3); BEGIN X:= 0; WHILE X<= 100 LOOP K:= SYSDATE-X; Y := 30; INSERT INTO TESTE VALUES (X,Y,K); X := X + 1; END LOOP; COMMIT; END; CURSOR CURSOR < nome-cursor > [parmetro tipo,...] IS < comando select > EXEMPLO: CURSOR MEU_CURSOR IS SELECT ENAME, EMPNO, SAL FROM EMP ORDER BY SAL DESC; EXEMPLO DE PL/SQL UTILIZANDO CURSOR DECLARE CURSOR C1 IS SELECT ENAME, EMPNO, SAL FROM EMP ORDER BY SAL DESC; MY_ENAME CHAR(10); MY_EMPNO NUMBER (4); MY_SAL NUMBER (7,2); BEGIN OPEN C1; FOR I IN 1..100 LOOP FETCH C1 INTO MY_ENAME, MY_EMPNO, MY_SAL; EXIT WHEN C1%NOTFOUND;
29

30

DBMS_OUPUT.PUT_LINE (MY_SAL || || MY_EMPNO || || MY_ENAME); END LOOP; CLOSE C1; END;

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 Quando um select no retorna nenhuma linha

TOO_MANY_ROWS - Quando um select retorna mais de uma linha OTHERS - Qualquer tipo de erro DECLARE NOME CHAR(15); CARGO CHAR(10); BEGIN SELECT ENAME, JOB INTO NOME, CARGO FROM EMP WHERE EMPNO = 1111; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO PROBLEMA (ERRO,DTERRO) VALUES (REGISTRO INEXISTENTE,SYSDATE); WHEN TOO_MANY_ROWS THEN INSERT INTO PROBLEMA (ERRO,DTERRO)
30

31

VALUES (MUITOS REGISTROS,SYSDATE); WHEN OTHERS THEN INSERT INTO PROBLEMA (ERRO,DTERRO) VALUES (OUTRO ERRO QUALQUER,SYSDATE); END; OUTRO EXEMPLO DECLARE NM VARCHAR2(30); BEGIN SELECT NOME INTO NM FROM TESTE WHERE IDADE=30; DBMS_OUTPUT.PUT_LINE(NM); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('IDADE INEXISTENTE'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('MULTIPLAS LINHAS'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('OUTRA SAIDA'); END;

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 VARIABLES AND CONTANTS 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

. Disparado automaticamente quando a ocorrncia do Evento

PARTES DE UM DATABASE TRIGGER PARTE TRIGGER TYPE TRIGGERING EVENT TRIGGER RESTRICTION TRIGGER ACTION UTILIZAO DATABASE TRIGGERS TRIGGER TYPE BEFORE STATEMENT BEFORE ROW AFTER ROW AFTER STATEMENT EXEMPLO DE UTILIZAO Garantir segurana e integridade Calcular campos derivados para nova linha Auditoria a nvel de valor ou linha Auditoria em geral DESCRIO BEFORE / AFTER (comando, linha) INSERT / UPDATE / DELETE WHEN (clause opcional) PL/SQL BLOCK

PREDICADOS CONDICIONAIS EM DATABASE TRIGGERS INSERTING UPDATING DELETING

35

36

EXEMPLO DATABASE TRIGGER COM PREDICADO CONDICIONAL

CREATE TRIGGER TOTAL_SALARY AFTER DELETE OR INSERT OR UPDATE OF DEPTNO,SAL ON EMP FOR EACH ROW BEGIN IF DELETING THEN UPDATE DEPT_BUDGET SET TOTAL_SAL = TOTAL_SAL - : OLD.SAL WHERE DEPTNO =:OLD.DEPTNO; END IF; IF INSERTING THEN UPDATE DEPT_BUDGET SET TOTAL_SAL = TOTAL_SAL + :NEW.SAL WHERE DEPTNO =:NEW.DEPTNO; END IF; IF UPDATING THEN UPDATE DEPT_BUDGET SET TOTAL_SAL = TOTAL_SAL + (:NEW.SAL -:OLD.SAL); WHERE DEPTNO =:OLD.DEPTNO; END IF; END; ATIVANDO E DESATIVANDO DATABASE TRIGGER Quando criamos um database trigger ele fica automaticamente ativado. As vezes temos necessidade de desativ-los como por exemplo: . Os objetos referenciados pelo database trigger no esto disponveis; . Vamos recuperar dados da Tabela Podemos desativar/ativar um database trigger isoladamente ou todos relacionados a uma tabela especfica.

ALTER TRIGGER [schema.] trigger_name {ENABLE | DISABLE } EXEMPLO: ALTER TRIGGER TRG_EMPRESA DISABLE; ALTER TRIGGER TRG_EMPRESA ENABLE; ALTER TABLE [schema.] table_name { ENABLE | DISABLE } ALL TRIGGERS

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

DATABASE TRIGGER REPLICAO DE TABELA

CREATE TRIGGER REP_EMPRESA BEFORE INSERT OR UPDATE OR DELETE ON EMPRESA FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO EMPRESA@SPAULO VALUES (:NEW.CD_EMPRESA,:NEW.NM_RAZAO_SOCIAL); ELSIF UPDATING THEN UPDATE EMPRESA@SPAULO SET NM_RAZAO_SOCIAL =:NEW.NM_RAZAO_SOCIAL; WHERE CD_EMPRESA =:OLD.CD_EMPRESA ELSE DELETE FROM EMPRESA@SPAULO WHERE CD_EMPRESA =:OLD.CD_EMPRESA; END IF; END;

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

You might also like