Laboratório de Banco de Dados Oracle

Apresentações semelhantes


Apresentação em tema: "Laboratório de Banco de Dados Oracle"— Transcrição da apresentação:

1 Laboratório de Banco de Dados Oracle
II SIMSIS/SECOMP Prof: Aline S Costa Ano: 2006

2 Conceito de SGBD Conjunto formado por um banco de dados mais as aplicações que o manipulam é chamado de sistema gerenciador de banco de dados.

3 Oracle - Histórico Na década de 70, o System R e o Ingress eram os melhores protótipos de modelos de dados relacionais. O System R era não-comercial. O Ingress se baseava em um sistema de pesquisa de BD desenvolvido na Universidade de Berkeley. Em 1977 surgiu a Software Development Laboratories, com analistas que, ao lerem e estudarem o Ingress e o System R, resolveram lançar a sua versão comercial de um produto similar.

4 Oracle - Histórico Em 1979 a empresa mudou o nome para RSI (Relational Software Incorporated) e nessa ocasião foi gerada a primeira versão do Oracle, conhecida como Oracle V2. Em 1983, a RSI alterou seu nome para Oracle. Em 1997, foi lançado o Oracle 8, que se tratava de um SGBD objeto-relacional que comporta um limite de 512 petabytes de informação. Em 1999, foi lançado o Oracle 8i, que tem como principal característica a integração de banco de dados com a Web.

5 Oracle - Histórico O Oracle 9i, lançado em 2001, tem o desempenho e a escalabilidade necessários para suportar os grandes sites da Internet. Segundo Fanderuff(2003), os dez principais sites de comércio eletrônico usam o Oracle.

6 Oracle Express Edition 10 g
Banco de dados Oracle, em uma versão mais leve para estudantes e desenvolvedores. Essa versão light do Oracle DB é uma tentativa da Oracle de popularizar seu banco de dados para pequenos desenvolvedores, assim como o MySQL vem fazendo há muito tempo. Sua limitação é a utilização de apenas 1 processador, 4Gb de espaço em disco e 1Gb de memória RAM.

7 Oracle 9i - Instalação Exigências de hardware para servidor -plataforma Intel: Pentium 200 96 MB de memória (recomendável 128 MB) 587 MB de espaço em disco(recomendável 720 MB) Exigências de hardware para cliente 32 MB de memória(recomendável 64 MB) 267 MB de espaço de disco

8

9 Identificação do BD Nome do Banco Global
SID – Oracle System Identifier, ou Oracle SID – nome exclusivo para cada instância do Oracle.

10

11 A ferramenta SQL*Plus O SQL*Plus é uma ferramenta da Oracle que tem por objetivo realizar a interface iterativa com o banco de dados, permitindo executar operações como: Edição, armazenamento, recuperação e execução dos comandos SQL e blocos PL/SQL

12 A ferramenta SQL*Plus Formatação, execução de cálculos, armazenamento e impressão de resultados de uma consulta Redação da definição de tabelas e views, Atribuição de valores para a execução de comandos

13 A ferramenta SQL*Plus Para o usuário se conectar ao SQL*Plus, é necessário que já esteja cadastrado. Na instalação, é inserido um usuário padrão chamado ‘scott’, cuja senha é ‘tiger’. Esse usuário traz algumas tabelas de exemplo com dados já cadastrados.

14 A ferramenta SQL*Plus String do host é para conexão remota

15 A ferramenta SQL*Plus Para sair digite exit

16 Criação e controle de usuários
Um usuário pode se conectar ao Oracle e pode manipular os objetos do banco Os objetos podem ser: tabelas, índices, visões, procedimentos, funções, gatilhos, etc. A lista de todos os usuários do Oracle fica na tabela ALL_USERS.

17 Contas padrões Scott SYS – possui o dicionário de dados do Oracle
Senha: tiger SYS – possui o dicionário de dados do Oracle Senha: CHANGE_ON_INSTALL SYSTEM – funções administrativas: fechamento, inicialização de um banco, criação de contas de usuários usadas para gerar objetos de banco de dados Senha: manager

18 Criação e controle de usuários
Criar usuário: CREATE USER teste IDENTIFIED BY senha; Remover usuário criado: DROP USER teste;

19 Exercícios Criar usuário teste e dar-lhe o privilégio de se conectar ao banco de dados: GRANT CREATE SESSION to teste;

20 Privilégios do usuário
Para que um usuário possa conectar ao banco ou até mesmo administrá-lo é preciso receber privilégios. Os privilégios podem ser de sistema ou de objeto. Exemplos de privilégios de sistema: CREATE SESSION CREATE ANY INDEX ALTER ANY TABLE CREATE TRIGGER ADMINISTER DATABASE TRIGGER EXECUTE ANY PROCEDURE Etc. GRANT create session TO teste

21 Privilégios do usuário
Privilégios de objeto: ALTER DELETE INDEX INSERT REFERENCES SELECT UPDATE EXECUTE GRANT insert ON aluno TO teste

22 Comando GRANT Para concessão de privilégios
GRANT nome_do_privilegio [,varios_nomes_de_privilegios] ON nome_do_objeto TO [nome_de_usuario [, varios_nomes_de_usuario] / ROLE / PUBLIC] [WITH ADMIN OPTION]

23 Comando REVOKE Para remoção de privilégios
REVOKE nome_do_privilegio [,varios_nomes_de_privilegios] ON nome_do_objeto FROM [nome_de_usuario [, varios_nomes_de_usuario] / ROLE / PUBLIC]

24 Criação e controle de usuários
Privilégios podem ser concedidos individualmente a uma ROLE (grupo de privilégios), a um ou mais usuários ou a todos os usuários do banco. Utiliza-se o comando GRANT A opção WITH ADMIN OPTION permite ao usuário que está recebendo o privilégio, que conceda-o a outros usuários. No entanto, se o privilégio for retirado dele, não será retirado de outros usuários.

25 Privilégios do usuário
Os privilégios podem ser agrupados em papéis (roles), que podem ser atribuídos de uma só vez a um ou mais usuários. create role nome_papel; CREATE ROLE estudante; GRANT CREATE SESSION TO estudante; GRANT SELECT, INSERT ON aluno TO estudante;

26 Privilégios do usuário
CREATE USER teste1 IDENTIFIED BY senha1; CREATE USER teste2 IDENTIFIED BY senha2; GRANT estudante TO teste1, teste2; Cria o usuário teste1 Cria o usuário teste2 Atribui a teste1 e teste2 os privilégios de estudante

27 Privilégios do usuário
CREATE USER teste3 IDENTIFIED BY senha3; GRANT estudante TO teste3 WITH ADMIN OPTION; Teste3 recebe os privilégios de estudante e pode propagálo

28 Privilégios do usuário
Só é possível revogar privilégios concedidos diretamente a um usuário. REVOKE estudante FROM teste1; REVOKE SELECT TO aluno FROM teste2; Revoga os privilégios de teste1 ERRO: não foi concedido diretamente tal privilégio para teste2

29 Privilégios do usuário
Para remover o privilégio de seleção de todos os usuários estudantes: REVOKE SELECT ON aluno FROM estudante;

30 Criação e controle de usuários
Com o usuário SYSTEM é possível ver e manipular todos os usuários Digite SELECT * FROM ALL_USERS;

31 Criação e controle de usuários
Modificar a senha de um usuário: ALTER USER usuario IDENTIFIED BY nova_senha; Pode-se suspender um usuário: Alter user usuario account lock; Para desbloquear: alter user usuario account unlock;

32 Exercício Criar um usuário com seu nome e conceder-lhe todos os privilégios CREATE USER seu_nome IDENTIFIED BY sua_senha; GRANT ALL PRIVILEGES TO seu_nome;

33 Tipos de Dados Char – alfanumérico de tamanho fixo, máximo de caracteres Varchar2 - alfanumérico de tamanho variável, máximo de caracteres CLOB (character long object) - alfanumérico de tamanho variável que pode ter até 4 GB. Existem funções especiais para manipulação deste tipo de campo.

34 Tipos de Dados Long - alfanumérico com tamanho máximo de 2 GB. Só pode existir um por tabela e não pode ser usado em consultas BLOB (binary long object) – binários de tamanho variável até 4 GB, utilizados para armazenar sons, imagens, vídeos, etc. Existem funções especiais para manipulação deste tipo de campo.

35 Tipos de Dados BFILE (binary file) – armazena uma referência a um arquivo externo ao BD Não permite referência remota Raw e Long Raw – armazena valores hexadecimais com tamanho variados NUMBER – numérico com tamanho máximo de 38 caracteres Number(4) – no máximo 4 dígitos numéricos (inteiros) Number(12,2) – no máximo 12 números (10 inteiros e 2 decimais) Number (-3,8) – 0 inteiros e 8 decimais, onde somente os 3 últimos podem conter valor.

36 Tipos de Dados DATE – sempre armazenados com século, ano, mês, dia, hora, minuto e segundo. Caso somente a data seja informada, a hora receberá 12:00:00 Caso somente a hora seja informada, a data receberá o primeiro dia do mês corrente. Formato-padrão: DD-MON-YY:26-APR-74 timestamp – além do que há em date, armazena ainda o milésimo de segundo.

37 SQL no Oracle

38 Criação de tabelas CREATE TABLE nome_da_tabela
(nome_da_coluna tipo_de_dado [(tamanho)] [DEFAULT expr] [restrições] [, nome_da_coluna tipo_de_dado [(tamanho)] [DEFAULT expr] [restrições] ] [, restrições]) Ao criar uma tabela é necessário fornecer: Nome da coluna (atributo) Tipo de dados Tamanho Restrições (para coluna ou linha)

39 Exemplo de tabela CREATE TABLE Fornecedor (Cd_Fornecedor number (4),
Nm_Fornecedor varchar2 (50), Ds_Endereco varchar2 (70), Nr_Fone number (12), Dt_Nascimento date, Id_sexo char (1), Id_Fisica_Juridica char (1), Cd_Situacao number (3))

40 Dados default A palavra DEFAULT seguido de uma expressão após o tamanho do campo de uma tabela indica que caso não seja atribuído explicitamente um valor para a coluna, a coluna será preenchida com o valor padrão. A expressão pode ser um valor fixo, uma expressão, uma função ou variável do sistema, como SYSDATE.

41 Dados default - Exemplo
CREATE TABLE Fornecedor ( ... ... Id_Fisica_Juridica char (1) DEFAULT F, ...) CREATE TABLE Nota_Fiscal Dt_Emissao DATE DEFAULT Sysdate,

42 Verificando a estrutura da tabela
É possível verificar a estrutura de uma tabela depois de ter sido criada usando o comando DESCRIBE (ou DESC) DESC nome_tabela

43 SQL> DESC fornecedor
Nome Nulo? Tipo Cd_Fornecedor number (4) Nm_Fornecedor varchar2(50) Ds_Endereco varchar2(70) Nr_Fone number(12) Dt_Nascimento date Id_sexo char(1) Id_Fisica_Juridica char (1) Cd_Situacao number(3) SQL>

44 Restrições Chave primária Chave única Chave estrangeira
Identificador de campo obrigatório Condição para valores permitidos para determinado campo A inclusão da restrição pode ser no momento de criação da tabela ou num momento posterior.

45 Chave primária (primary key)
CREATE TABLE Cliente (Cd_cliente number(4) PRIMARY KEY, Nm_cliente varchar2(65), Ds_endereco varchar2(50), Cd_municipio number(5), Sg_estado char(2), Nr_cep varchar(8), Nr_ddd number(3), Nr_fone number(8), Id_sexo char(1))

46 Exercício – Criar a tabela:
CREATE TABLE Cliente (Cd_cliente number(4) PRIMARY KEY, Nm_cliente varchar2(65), Ds_endereco varchar2(50), Cd_municipio number(5), Sg_estado char(2), Nr_cep varchar(8), Nr_ddd number(3), Nr_fone number(8), Id_sexo char(1))

47 Chave primária (primary key)
A forma anterior somente é usada para chaves primárias simples. A seguir, um exemplo com a especificação de um nome padronizado pelo usuário para a chave primária: CONSTRAINT nome_da_regra PRIMARY KEY

48 Chave primária (primary key)
CREATE TABLE Cliente (Cd_cliente number(4) CONSTRAINT PK_CLIENTE PRIMARY KEY, Nm_cliente varchar2(65), Ds_endereco varchar2(50), Cd_municipio number(5), Sg_estado char(2), Nr_cep varchar(8), Nr_ddd number(3), Nr_fone number(8), Id_sexo char(1))

49 Chave primária (primary key)
A seguir é apresentada uma forma mais organizada em que, após definir todos os campos da tabela, define-se a restrição.

50 Chave primária (primary key)
CREATE TABLE Historico (Cd_cliente number(4), Dt_compra date, Vl_compra number(12,2), CONSTRAINT PK_HISTORICO PRIMARY KEY (Cd_cliente, Dt_compra))

51 Valor único (Unique) Especifica que uma coluna não pode ter valor repetido em mais de uma linha CREATE TABLE Estado (Sg_estado char(2) PRIMARY KEY, Nm_estado varchar(35) UNIQUE)

52 Valor único (Unique) Ou ainda dessa forma: CREATE TABLE Estado
(Sg_estado char(2) PRIMARY KEY, Nm_estado varchar(35), CONSTRAINT UN_ESTADO_NM_ESTADO UNIQUE (nm_estado));

53 References Define que uma coluna é chave primária ou única em outra tabela e só pode ser declarada junto à coluna. Nesse caso, o tipo de dado da coluna pode ou não ser especificado. Relaciona, automaticamente, a chave primária da tabela especificada.

54 References CREATE TABLE Cliente (Cd_cliente number(4) PRIMARY KEY, ...
Sg_estado char(2)CONSTRAINT FK_ESTADO_CLIENTE REFERENCES Estado, Nr_cep varchar(8), Nr_ddd number(3), Nr_fone number(8), Id_sexo char(1))

55 References CREATE TABLE Cliente (Cd_cliente number(4) PRIMARY KEY, ...
Nr_cep varchar(8), Nr_ddd number(3), Nr_fone number(8), Id_sexo char(1), Sg_estado CONSTRAINT FK_ESTADO_CLIENTE REFERENCES Estado)

56 Chave estrangeira Tem a mesma função de references, mas só pode ser declarado ao final de todas as colunas. Os tipos de dados da coluna inicial e da coluna referenciada devem ser os mesmos.

57 Chave estrangeira CREATE TABLE Cliente
(Cd_cliente number(4) PRIMARY KEY, ... Sg_estado char(2), Nr_cep varchar(8), Nr_ddd number(3), Nr_fone number(8), Id_sexo char(1), CONSTRAINT FK_ESTADO_CLIENTE FOREIGN KEY (Sg_estado) REFERENCES Estado)

58 Check Define um conjunto de valores permitidos ou condições para inserção de valores em uma coluna CREATE TABLE Cliente (Cd_cliente number(4) PRIMARY KEY, ... Nr_ddd number(3), Nr_fone number(8), Id_sexo char(1), CONSTRAINT CK_CLIENTE_ID_SEXO CHECK (Id_sexo in (‘F’, ‘M’)))

59 Não nulo CREATE TABLE Cliente (Cd_cliente number(4) PRIMARY KEY,
Nm_cliente varchar2(65) NOT NULL, Ds_endereco varchar2(50) NOT NULL, Cd_municipio number(5), Sg_estado char(2), Nr_cep varchar(8), Nr_ddd number(3), Nr_fone number(8), Id_sexo char(1))

60 Padronização Qualificador Significado Cd Nm Nr Vl Qt Tx Ds Sg Dt Hr Id
Im Código Nome Número Valor Quantidade Taxa ou percentual Descrição Sigla Data Horas Identificador Imagem

61 Padronização Restrição Padrão de nome Chave primaria Chave estrangeira
Chave única Chave de checagem PK_tabela FK_tabelaMae_tabelaFilha UN_tabela_campo CK_tabela_campo

62 Informações sobre restrições
No Oracle as informações sobre as restrições criadas para uma tabela são armazenadas na tabela de controle chamada USER_CONSTRAINTS A USER_CONSTRAINTS guarda informações como: OWNER – usuário que criou a restrição CONSTRAINT_NAME – nome da restrição CONSTRAINT_TYPE (P – primary key, R – foreign key, C - check, U - unique) TABLE_NAME – tabela a que a restrição se refere

63 Informações sobre restrições - exemplo
Ver as restrições sobre a tabela Cliente select * from USER_CONSTRAINTS where TABLE_NAME = ‘CLIENTE’; Ver as restrições definidas pelo o usuário ‘aline’ select * where OWNER = ‘ALINE’;

64 Alterando a estrutura de tabelas
Após a criação da estrutura de uma tabela, pode-se incluir (ADD), excluir (DROP) ou modificar (MODIFY) colunas ou constraints e desabilitar constraints dessa tabela. Essas operações podem ser realizadas a partir do comando ALTER TABLE.

65 Alterando a estrutura de tabelas
ALTER TABLE nome_da_tabela ADD (nome_da_coluna tipo_dado [restrições] [, nome_da_coluna tipo_dado [restrições]) MODIFY (nome_da_coluna [tipo_dado [(tamanho)]] [, nome_da_coluna [tipo_dado [(tamanho)]]]) DROP COLUMN nome_da_coluna DROP CONSTRAINT nome_da_restrição

66 Alterando a estrutura de tabelas
ALTER TABLE historico DROP COLUMN (vl_compra); ALTER TABLE Cliente ADD (CONSTRAINT CK_CLIENTE_FIS_JUR CHECK (Ie_fisica_juridica in (‘F’, ‘J’)));

67 Alterando a estrutura de tabelas
ALTER TABLE empresa DISABLE CONSTRAINT un_empresa; ALTER TABLE Pais DROP CONSTRAINT UN_PAIS;

68 Inserir dados em tabelas
Para inserir dados em uma tabela é usado o comando INSERT INSERT INTO nome_da_tabela [(nome_da_coluna [, nome_da_coluna])] VALUES (valor_da_coluna [, valor_da_coluna]) INSERT INTO Pais (Cd_pais, nm_pais) VALUES (1, ‘Brasil’);

69 Inserir dados em tabelas
INSERT ALL INTO Estado (Sg_Estado, Nm_Estado, Cd_Pais) VALUES (‘BA’, ‘Bahia’, 1) INTO Estado (Sg_Estado, Nm_Estado, Cd_Pais) VALUES (‘SP’, ‘São Paulo’, 1) INTO Estado (Sg_Estado, Nm_Estado, Cd_Pais) VALUES (‘RJ’, ‘Rio de Janeiro’, 1);

70 Consulta de dados SELECT [DISTINCT] */nome_da_coluna
FROM nome_da_tabela [WHERE...] [GROUP BY ...] [HAVING ...] [ORDER BY ...]

71 Conteúdo do buffer Os comandos digitados no SQL *Plus permanecem no buffer SQL, até que outro comando seja utilizado. List – o conteúdo do buffer ou parte dele pode ser visualizado com list L[IST] [linha] [linha_inicial linha_final] [linha_inicial *] [*linha_final] [linha_incial L[AST]] [L[AST]] * Indica a linha atual

72 Conteúdo do buffer Input – quando se deseja inserir uma nova linha no buffer I[NPUT] [texto] Exemplo: L 3 3* nm_fornecedor varchar2(50), I

73 Conteúdo do buffer Change – alterar linha do buffer
C[HANGE] /texto_antigo[/texto_novo[/]] Exemplo: L 3 3* nm_fornecedor varchar2(50), C /50/65

74 Conteúdo do buffer DEL – deleta a linha corrente do buffer Exemplo:

75 Conteúdo do buffer APPEND– acrescenta ao final da linha corrente um texto ou caractere A[PPEND] [texto/caractere] Exemplo: 3* nm_fornecedor varchar2(50), A ).

76 Conteúdo do buffer O conteúdo do buffer pode ser executado de três maneiras: SQL terminator: a variável sqlt[erminator] define o caractere que representa o final de um comando e sua execução imediata. O valor padrão é ; SET SQLT “+”

77 Conteúdo do buffer O conteúdo do buffer pode ser executado de três maneiras: A barra(/) : executa o comando do buffer sem a sua exibição RUN : executa o comando do buffer com a sua exibição

78 Exercício Criar uma pasta “tmpcurso” para os exercícios
Editar o seguinte comando no buffer: CREATE TABLE cliente (cd_cliente number (4), Nm_cliente varchar2(35), ds_endereco varchar2(50), dt_nascimento date)

79 Manipulações entre buffer e arquivo
O comando SAVE salva as instruções digitadas em <ORACLE_HOME>\BIN. A extensão padrão do arquivo é .sql SAV[E] [caminho] nome_do_arquivo[.extensao] [REPLACE]

80 Manipulações entre buffer e arquivo
O comando SAVE salva as instruções digitadas. Se o diretório não for especificado, o arquivo é salvo em <ORACLE_HOME>\BIN. A extensão padrão do arquivo é .sql SAV[E] [caminho] nome_do_arquivo[.extensao] [REPLACE] Exemplo: SAVE C:\TMPCURSO\CLIENTE

81 Manipulações entre buffer e arquivo
O comando GET executa os comandos de um arquivo GET [caminho] nome_do_arquivo[.extensao] Exemplo: GET C:\TMPCURSO\CLIENTE

82 Manipulações entre buffer e arquivo
O comando START também executa os comandos de um arquivo STA[RT] [caminho] nome_do_arquivo[.extensao] Exemplo: START C:\TMPCURSO\CLIENTE @ C:\TMPCURSO\CLIENTE

83 PL/SQL

84 Introdução ao PL/SQL PL/SQL (Program Language SQL) é uma linguagem de programação da Oracle que tem por objetivo processar informações do banco de dados. Operações permitidas: Criar variáveis e constantes herdando o tipo de dados e o tamanho de outras variáveis e constantes ou de objetos do banco de dados

85 Introdução ao PL/SQL Tratar erros
Utilizar comando de repetição e comparação Criar labels para controlar o fluxo de execução Desenvolvimento de procedures, triggers e functions

86 Introdução ao PL/SQL PL/SQL extende o SQL adicionando construções encontradas em linguagens procedurais, resultando em uma linguagem estrutural que é mais poderosa do que SQL. A unidade básica em PL/SQL é um bloco. Todos os programas em PL/SQL são compostos por blocos, que podem estar aninhados uns dentro dos outros. Geralmente, cada bloco efetua uma ação lógica no programa. Um bloco tem a seguinte estrutura:

87 PL/SQL DECLARE BEGIN EXCEPTION END;
/* Seção declarativa: variáveis, tipos e subprogramas locais. */ BEGIN /* Seção Executável: aqui vão instruções procedurais e SQL. */ /* Esta é a única seção do bloco que é indispensável. */ EXCEPTION /* Seção de tratamento de exceção: aqui vão instruções de tratamento de erro. */ END;

88 PL/SQL As únicas instruções SQL permitidas em um programa PL/SQL são SELECT, INSERT, UPDATE, DELETE e várias outras instruções de manipulação de dados mais algum controle de transação. Instruções de definição de dados como CREATE, DROP ou ALTER não são permitidas. A seção executável também contém construções tais como atribuições, desvios, loops, chamadas a procedimentos e triggers. PL/SQL não é caso sensitivo. Comentários (/* ... */) podem ser usados.

89 Variáveis e Tipos As informações são transmitidas entre um programa PL/SQL e o banco de dados através de variáveis. Toda variável tem um tipo específico associado a ela. Este tipo pode ser: um dos tipos usados pelo SQL para colunas do banco de dados; um tipo genérico usado no PL/SQL tal como NUMBER; declarado para ser o mesmo tipo de alguma coluna do banco de dados. O tipo genérico mais comumente usado é o NUMBER> Variáveis do tipo NUMBER podem armazenar ou um número inteiro ou um número real.

90 Variáveis e Tipos O tipo string de caracteres mais usado é o VARCHAR(n), onde n é o tamanho máximo da string em bytes. Este tamanho é necessário, e não há valor default. Por exemplo, podemos declarar: DECLARE price NUMBER; myBeer VARCHAR(20);

91 Variáveis e Tipos Em muitos casos, uma variável do PL/SQL será usada para manipular dados armazenados em uma relação existente. Neste caso, é essencial que a variável tenha o mesmo tipo da coluna da relação. Se houver algum tipo incompatível, atribuições de/para variáveis e comparações podem não funcionar da forma esperada. Para garantir, em vez de codificar seriamente o tipo de uma variável, deve-se usar o operador %TYPE. Exemplo: DECLARE myBeer Clients.name%TYPE; dá a variável myBeer do PL/SQL qualquer tipo que tenha sido declarado para a coluna name na relação Clients.

92 Variáveis e Tipos O valor inicial de qualquer variável, independente de seu tipo, é NULL. Podemos atribuir valores às variáveis, usando o operador ":=". A atribuição pode ocorrer ou imediatamente depois do tipo da variável ser declarado, ou em qualquer lugar na porção executável do programa. Um exemplo: DECLARE a NUMBER := 3; BEGIN a := a + 1; END; . run;

93 Programas Simples em PL/SQL
A forma mais simples de um programa tem algumas declarações seguidas por uma seção executável consistindo de uma ou mais instruções SQL com as quais somos familiares. A forma da instrução SELECT é diferente da sua forma SQL. Depois da cláusula SELECT, devemos ter uma cláusula INTO listando variáveis, uma para cada atributo na cláusula SELECT, dentro da qual os componentes da tupla retornada deve ser colocada.

94 Programas Simples em PL/SQL
A instrução SELECT no PL/SQL funciona apenas se o resultado da consulta contém uma única tupla. Se a consulta retorna mais do que uma tupla, será preciso usar um cursor

95 Programas Simples em PL/SQL
CREATE TABLE T1 ( e INTEGER, f INTEGER ); DELETE FROM T1; INSERT INTO T1 VALUES(1, 3); INSERT INTO T1 VALUES(2, 4); /* Acima está o SQL comum; abaixo está o programa PL/SQL. */ DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a,b FROM T1 WHERE e>1; INSERT INTO T1 VALUES(b,a); END; . run;

96 Programas Simples em PL/SQL
A PL/SQL não tem nenhuma funcionalidade de entrada ou de saída construída diretamente na linguagem. Para retificar isso, o SQL*Plus, em combinação com o pacote DBMS_OUTPUT, fornece a capacidade de dar saída para mensagens em tela. Isso é feito em dois passos: 1. Permitir a saída no SQL*Plus com o comando set serveroutput on : SET SERVEROUTPUT {ON | OFF} [SIZE n] Onde o n é o tamanho do buffer de saída. Seu valor padrão é bytes

97 Programas Simples em PL/SQL
2. Dentro do seu programa PL/SQL, utilize a procedure DBMS_OUTPUT.PUT_LINE(msg). Exemplo: SQL> SET SERVEROUTPUT ON SQL> begin 2 DBMS_OUTPUT.PUT_LINE('Teste de pl/sql!!!'); 3 end; 4 /

98 Fluxo de Controle no PL/SQL
Uma instrução IF se parece com: IF <condition> THEN <statement_list> ELSE <statement_list> END IF; A parte do ELSE é opcional. Se desejar ramificar para várias direções: IF <condition_1> THEN ... ELSIF <condition_2> THEN ELSIF <condition_n> THEN ... ELSE ... END IF;

99 Fluxo de Controle no PL/SQL
Exemplo: DECLARE a NUMBER; b NUMBER; BEGIN SELECT e,f INTO a,b FROM T1 WHERE e>1; IF b=1 THEN INSERT INTO T1 VALUES(b,a); ELSE INSERT INTO T1 VALUES(b+10,a+10); END IF; END; . run;

100 Fluxo de Controle no PL/SQL
Laços: LOOP <loop_body> /* Uma lista de instruções. */ END LOOP; Pelo menos uma das instruções em <loop_body> deve ser uma instrução EXIT da forma EXIT WHEN <condition>; O laço termina se <condition> for verdadeiro.

101 Fluxo de Controle no PL/SQL
Por exemplo, aqui está uma forma de inserir cada um dos pares (1, 1) até (100, 100) dentro da T1 dos dois exemplos acima: DECLARE i NUMBER := 1; BEGIN LOOP INSERT INTO T1 VALUES(i,i); i := i+1; EXIT WHEN i>100; END LOOP; END; . run;

102 Fluxo de Controle no PL/SQL
Um laço WHILE pode ser formado com WHILE <condition> LOOP <loop_body> END LOOP; Um laço FOR simples pode ser formado com: FOR <var> IN <start>..<finish> LOOP Aqui, <var> pode ser qualquer variável; ela é local para o laço-for e não precisa ser declarada. E, <start> e <finish> são constantes.

103 O exemplo seguinte verifica quantos códigos vagos existem na tabela de produtos;
DECLARE cd_inicial Produto.cd_produto%Type :=1; cd_final cd_inicial%Type; aux_codigo cd_inicial%Type:=0; ie_existe number(1); BEGIN select nvl(max(cd_produto),0)+1 into cd_final from produto; for codigo in cd_inicial..cd_final loop select count(*) into ie_existe from produto where cd_produto = codigo; if ie_existe < 1 then DBMS_OUTPUT.PUT_LINE(‘Disponível: ‘|| codigo); aux_codigo:=aux_codigo+1; end if; end loop; DBMS_OUTPUT.PUT_LINE (‘Exitem ‘ ||aux_codigo|| ‘disponíveis’); End;

104 Cursores Um cursor é uma variável que passa sobre as tuplas de alguma relação. Essa relação pode ser uma tabela armazenada, ou pode ser a resposta para alguma consulta. Levando para dentro do cursor cada tupla da relação, podemos escrever um programa para ler e processar o valor de cada tupla. Se a relação está armazenada, podemos também atualizar ou apagar as tuplas na posição corrente do cursor.

105 Cursores O exemplo seguinte ilustra um laço de cursor. Ele usa nossa relação exemplo T1(e,f) cujas tuplas são pares de inteiros. O programa apagará toda tupla cujo primeiro componente for menor que o segundo, e inserir a tupla oposta em T1.

106 DECLARE a T1.e%TYPE; b T1.f%TYPE; /* Declaração do cursor: */ CURSOR T1Cursor IS SELECT e, f FROM T1 WHERE e < f FOR UPDATE; BEGIN OPEN T1Cursor; LOOP FETCH T1Cursor INTO a, b; /* Se não houver mais linhas para buscar, sai do laço: */ EXIT WHEN T1Cursor%NOTFOUND; /* Apaga a tupla corrente: */ DELETE FROM T1 WHERE CURRENT OF T1Cursor; /* Insere a tupla oposta: */ INSERT INTO T1 VALUES(b, a); END LOOP; /* Libera o cursor usado pela consulta. */ CLOSE T1Cursor; END; . run;

107 Procedures Procedures PL/SQL comportam-se muito semelhantemente aos procedures em outras linguagens de programação. São subprogramas que têm por objetivo executar uma ação específica. Elas não retornam valores.

108 Procedures Estrutura: CREATE OR REPLACE PROCEDURE nome_proc
(argumento1 modo tipo_de_dados, Argumento2 modo tipo_de_dados, Argumenton modo tipo_de_dados) IS ou AS Variáveis locais BEGIN Bloco PL/SQL END nome_proc;

109 Procedures Pode existir qualquer número de parâmetros, cada um seguido por um modo e um tipo. Os modos possíveis são IN (entrada), OUT (saída) INOUT (entrada/saída). Nota: Diferente do especificador de tipo em uma declaração de variável PL/SQL, o especificador de tipo em uma declaração de parâmetro não deve ter restrições. Por exemplo, CHAR(10) e VARCHAR(20) são ilegais; CHAR ou VARCHAR deve ser usadas em seus lugares. O tamanho real de um parâmetro depende do argumento correspondente que é passado quando o procedure é invocado.

110 Procedures IN (entrada)- passa um valor do ambiente chamador para o subprograma. Esse valor não pode ser alterado dentro do subprograma. OUT (saída) – passa um valor do subprograma para um ambiente chamador INOUT (entrada/saída) – passa um valor do ambiente chamador para o subprograma. Esse valor pode ser alterado dentro do subprograma e retornado com o valor atualizado para o ambiente chamador.

111 Procedures O exemplo seguinte é de um procedure PL/SQL addtuple1 que, dado um inteiro i, insere a tupla (i, 'xxx') dentro da seguinte relação exemplo:

112 Procedures CREATE TABLE T2 ( a INTEGER, b CHAR(10) );
CREATE PROCEDURE addtuple1(i IN NUMBER) AS BEGIN INSERT INTO T2 VALUES(i, 'xxx'); END addtuple1; . run;

113 Procedures Seguindo os argumentos está a palavra-reservada AS (IS é um sinônimo). Então vem o corpo, que é essencialmente um bloco PL/SQL. A repetição do nome do procedure depois do END é opcional. Contudo, a seção DECLARE não deve começar com a palavra-reservada DECLARE. Em vez disso, seguindo AS tem-se:

114 Procedures ... AS <local_var_declarations>
BEGIN <procedure_body> END; . run; O run no final executa a instrução que cria o procedure; ele não executa o procedure. Para executar o procedure, use uma outra instrução PL/SQL, na qual o procedure é invocado como uma instrução executável.

115 Procedures Por exemplo: BEGIN addtuple1(99); END; . run; Ou então:
Execute addtuple1(50);

116 Procedures O procedure a seguir também insere uma tupla em T2, mas ele toma ambos os componentes como argumentos: CREATE PROCEDURE addtuple2( x T2.a%TYPE, y T2.b%TYPE) AS BEGIN INSERT INTO T2(a, b) VALUES(x, y); END addtuple2; . run;

117 Procedures Agora, para adicionar uma tupla (10, 'abc') a T2:
BEGIN addtuple2(10, 'abc'); END; . run;

118 Procedures O código a seguir ilustra o uso de um parâmetro OUT:
CREATE TABLE T3 ( a INTEGER, b INTEGER ); CREATE or replace PROCEDURE addtuple3(a NUMBER, b OUT NUMBER) AS BEGIN b := 4; INSERT INTO T3 VALUES(a, b); END; . run;

119 Procedures Uma constante ou um argumento literal não deve ser passado para um parâmetro OUT/INOUT. DECLARE v NUMBER; BEGIN addtuple3(10, v); END; . run;

120 Procedures CREATE OR REPLACE PROCEDURE NR_FONE (v_fone IN varchar2) Is
nv_fone varchar2(10); Begin nv_fone:=substr(v_fone,1,4)||’-’||substr(v_fone,5,4); dbms_output.put_line(nv_fone); End nr_fone;

121 Functions Também podemos escrever funções em vez de procedures.
Em uma declaração de função, seguimos a lista de parâmetros por RETURN e o tipo do valor de retorno:

122 Functions CREATE OR REPLACE FUNCTION nome_funcao
Estrutura: CREATE OR REPLACE FUNCTION nome_funcao (argumento1 IN tipo_dados, Argumento2 IN tipo_dados, Argumenton IN tipo_dados) RETURN tipo_de_dado IS ou AS declarações BEGIN Bloco PL/SQL END nome_função;

123 Functions Estrutura: CREATE OR REPLACE function NR_FONE2
(fone IN number) Return varchar2 Is v_fone varchar2(10); Begin v_fone:=to_char(fone); return substr(v_fone,1,4)||’-’||substr(v_fone,5,4); End nr_fone2;

124 Functions Exemplo: Select nr_fone2(34250497) from dual;
Para executar a função criada: Select nome_funcao (lista_de_parametros) from dual; Exemplo: Select nr_fone2( ) from dual;

125 Functions Create or replace function prinome
(ds_nome in cliente.nm_cliente%type) Return varchar2 Is Posicao number(2):=0; Nome varchar2(65); Begin Posicao:=instr(ltrim(ds_nome),' '); if posicao=0 then nome:=ds_nome; else nome:=substr(ltrim(ds_nome),1,posicao-1); end if; return nome; end prinome;

126 Functions Para descobrir quais procedures e funções você criou, use a seguinte consulta SQL: select object_type, object_name from user_objects where object_type = 'PROCEDURE' or object_type = 'FUNCTION'; Para excluir um stored procedure/função: drop procedure <procedure_name>; drop function <function_name>;

127 Triggers Triggers são blocos PL/SQL disparados automaticamente sempre que ocorrer um evento associado a uma tabela Trigger é uma maneira prática de implementar rotinas para garantia de integridade de dados ou de operações. Um trigger pode ser disparado quando um comando INSERT, DELETE ou UPDATE é executado em uma tabela.

128 Triggers O trigger pode ser row- level (do nível de uma linha) ou statement-level (do nível de uma instrução), onde o primeiro dispara uma vez para cada linha afetada pela instrução que disparou o trigger e o segundo dispara uma vez para toda a instrução. Uma trigger statement-level não permite acesso às linhas atualizadas por meio dos prefixos: OLD e NEW

129 Triggers Se o gatilho estiver marcado como FOR EACH ROW então é chamado uma vez para cada linha modificada pela operação. Por exemplo, um comando DELETE afetando 10 linhas faz com que todos os gatilhos ON DELETE da relação de destino sejam chamados 10 vezes, uma vez para cada linha excluída.

130 Triggers Por outro lado, um gatilho marcado como FOR EACH STATEMENT somente executa uma vez para uma determinada operação, a despeito de quantas linhas sejam modificadas; em particular, uma operação que não modifica nenhuma linha ainda assim resulta na execução de todos os gatilhos FOR EACH STATEMENT aplicáveis.

131 Estrutura das triggers
CREATE [OR REPLACE] TRIGGER nome_trigger {BEFORE / AFTER} {DELETE | INSERT |UPDATE} [OF (nome_coluna1, nome_coluna2, ...)] ON nome_tabela [FOR EACH { ROW | STATEMENT } WHEN (<trigger_condition>)] /*<trigger_body>*/ DECLARE variáveis, constantes, etc. BEGIN ... END;

132 Estrutura das triggers
Se FOR EACH ROW for especificado, o trigger é row-level; do contrário, o trigger será statement-level. Para um trigger row-level, uma restrição pode ser especificada na cláusula WHEN, envolvida por parênteses. A restrição do trigger é uma condição SQL que deve ser satisfeita para que o Oracle dispare o trigger. Esta condição não pode conter subconsultas. Sem a cláusula WHEN, um trigger é disparado por todo evento engatilhado.

133 Triggers CREATE TABLE T4 (a INTEGER, b CHAR(10));
CREATE TABLE T5 (c CHAR(10), d INTEGER); O trigger criada que deve inserir uma tupla em T5 quando uma tupla for inserida em T4. Especificamente, o trigger checa se a nova tupla tem um primeiro componente menor ou igual a 10, e se sim insere a tupla oposta em T5: CREATE TRIGGER trig1 AFTER INSERT ON T4 FOR EACH ROW WHEN (NEW.a <= 10) BEGIN INSERT INTO T5 VALUES(:NEW.b, :NEW.a); END trig1; . run;

134 Triggers Acrescentar na tabela produto a coluna vl_custo_medio number(4,2) Criar tabela tmp_preco_produto(cd_produto, vl_custo_medio_antigo,vl_custo_medio_novo) Criar gatilho para guardar em tmp_custo_medio as alterações feitas no valor do custo médio

135 Triggers Create trigger verifica_produto Before update
Of vl_custo_medio On produto For each row Begin insert into tmp_preco_prod values (:old.cd_produto,:old.vl_custo_medio,:new.vl_custo_medio) End;

136 Triggers No corpo do trigger, NEW e OLD deve ser precedidas por um dois pontos (":"), mas na cláusula WHEN, elas não tem um dois pontos precedendo- as! Para ver informações sobre as triggers criadas: select trigger_name from user_triggers; select trigger_type, table_name, triggering_event from user_triggers where trigger_name = '<trigger_name>';

137 Triggers Criar a seguinte tabela: CREATE TABLE CONCEITO
(cd_aluno number(4) primary key, Nota1 number(4,2), Nota2) number(4,2));

138 Exemplo 1 Criar uma trigger para verificar se as notas inseridas ou atualizadas estão entre o intervalo 0 (zero) e 10(dez).

139 CREATE OR REPLACE TRIGGER Verifica_nota
BEFORE INSERT OR UPDATE OF NOTA1, NOTA2 ON CONCEITO FOR EACH ROW BEGIN IF :new.nota1 < 0 or :new.nota1>10 THEN RAISE_APPLICATION_ERROR (-20000, 'VALOR INVALIDO'); END IF; IF :new.nota2 < 0 or :new.nota2>10 THEN END;

140 Exemplo 1 SQL> *UPDATE conceito SET NOTA1=11 WHERE CD_ALUNO=2;
ERRO na linha 1: ORA-20000: VALOR INVALIDO ORA-06512: em "ACADEMICO.VERIFICA_NOTA", line 3 ORA-04088: erro durante a execução do gatilho 'ACADEMICO.VERIFICA_NOTA'

141 Exemplo 2 Criar uma tabela aluno_antigo para guardar os dados dos alunos deletados da tabela aluno. create table aluno_antigo( cd_aluno int, cd_curso int, nm_aluno varchar (50), ds_endereco varchar(60));

142 Exemplo CREATE OR REPLACE TRIGGER Aluno_del BEFORE DELETE ON ALUNO
FOR EACH ROW BEGIN INSERT INTO aluno_antigo (cd_aluno, cd_curso, nm_aluno, ds_endereco) values (:old.cd_aluno, :old.cd_curso, :old.nm_aluno, :old.ds_endereco); END;

143 Exemplo SQL> select * from aluno_antigo; não há linhas selecionadas
SQL> delete from aluno where cd_aluno=10; 1 linha deletada. SQL> select cd_aluno, nm_aluno from aluno_antigo; CD_ALUNO NM_ALUNO 10 MARINA CARVALHO

144 Triggers Dentro das triggers são disponibilizados predicados para testar o evento chamada da trigger no banco de dados. Esses predicados são: Inserting Updating deleting

145 Exemplo Create or replace trigger exemplo2
Before insert or delete or update ... Begin if inserting then comandos em caso de inserção elseif deleting then comandos em caso de exclusão else comandos em caso de alteração end if; End;

146 Triggers Para eliminar uma trigger utiliza-se o comando DRP TRIGGER
DROP TRIGGER nome_da_trigger As triggers podem ser habilitadas ou desabilitadas ALTER TRIGGER nome_da_trigger ENABLE ALTER TRIGGER nome_da_trigger DISABLE ALTER TABLE nome_da_tabela ENABLE ALL_TRIGGERS ALTER TABLE nome_da_tabela DISABLE ALL_TRIGGERS

147 Triggers As informações sobre triggers de banco de dados podem ser recuperadas a partir da tabela USER_TRIGGERS

148 Descobrindo Erros O PL/SQL nem sempre comunica sobre erros de compilação. Em vez disso, ele dá uma mensagem oculta tal como "procedure created with compilation errors". Se você não vê o que está errado imediatamente, tente usar o comando: show errors procedure <procedure_name>; Da mesma forma, você pode obter os erros associados a um trigger criado por show errors trigger <trigger_name>; Além disso, "SHO ERR" é uma abreviação para "SHOW ERRORS", e você pode omitir "PROCEDURE ..." ou "TRIGGER ..." se você quiser ver apenas o erro de compilação mais recente.

149 Funções de Conversão Conversão Numéricas e de Data no Oracle
As funções pré-definidas pelo Oracle são de grande importância para o desenvolvedor e o DBA que as utiliza, reduzindo e facilitando o desenvolvimento de aplicações com acesso ao banco Oracle.

150 Funções Descrição NVL(x,y)
Retorna x se diferente de NULO e y se X igual a NULO TO_CHAR(n1 ou data, formato) Converte um número ou data para o formato caractere. TO_DATE (string, formato) Converte string para data. TO_NUMBER(string, formato) Converte string para número LOWER (string) Retorna string em minúsculas UPPER (string) Retorna string em maiúsculas SUBSTR(string, n, m) Retorna uma sub-string de tamanho n a partir da posição m LPAD(String, n, ‘Tipo de caractere') Retorna uma string de tamanho n, complementando com o caractere especificado à esquerda.

151 Funções Descrição RPAD(String, n, ‘Tipo de caractere')
Retorna uma string de tamanho n, complementando com o caractere especificado à direita. LENGHT(string) Retorna o número de caracteres de string

152 Exemplos de funções Select lower (nm_cliente) from clientes;
Select nm_cliente, NVL(uf, 'Estado não cadastrado') "ESTADO" from clientes; Select distinct lpad (nm_cliente, 20, '*') from clientes; Select 'O tamanho é: ' || length ('Kneipp') from cliente; select cidade, substr(cidade,3,5) from clientes;

153 Criação de um novo BD Abrir o Database Assistant Configuration


Carregar ppt "Laboratório de Banco de Dados Oracle"
Anúncios Google