Comandos SQL e Banco de Dados Relacional
Comandos SQL e Banco de Dados Relacional
Sumário
Unidade 1 .................................................................................................................................. 8
Comando INSERT ................................................................................................................... 8
OBJETIVOS........................................................................................................................... 8
O que é Banco de Dados? ...................................................................................................... 8
RDBMS (Relational Database Management System) ........................................................... 9
Modelo Relacional ............................................................................................................... 10
Propriedades de um Banco de Dados Relacional ................................................................. 11
Arquitetura de Produtos Oracle ............................................................................................ 12
SQL ...................................................................................................................................... 13
Características do SQL ......................................................................................................... 13
O que é SQL*Plus ................................................................................................................ 14
PL/SQL................................................................................................................................. 15
Conjunto de Comandos SQL................................................................................................ 16
Incluindo novas Linhas em uma Tabela ............................................................................... 17
Comando UPDATE ................................................................................................................ 18
OBJETIVOS......................................................................................................................... 18
Alterando Linhas de uma Tabela ......................................................................................... 18
Comando DELETE ................................................................................................................ 20
OBJETIVOS......................................................................................................................... 20
Removendo Linhas de uma Tabela ...................................................................................... 21
Comandos SQL*Plus ............................................................................................................. 22
OBJETIVOS......................................................................................................................... 22
Edição de Comandos ............................................................................................................ 22
Operadores e Substituição de Variáveis............................................................................... 25
OBJETIVOS......................................................................................................................... 25
Operadores Aritméticos........................................................................................................ 25
Operadores de Caracteres ..................................................................................................... 26
Operadores de Comparação ................................................................................................. 26
Operadores Lógicos.............................................................................................................. 28
Substituição de Variáveis ..................................................................................................... 28
Unidade 2 ................................................................................................................................ 30
Group by e Order by .............................................................................................................. 30
OBJETIVOS......................................................................................................................... 30
Ordenação de Resultados ..................................................................................................... 30
Cláusula Group By ............................................................................................................... 30
Cláusula HAVING ............................................................................................................... 31
Join e Outer join ..................................................................................................................... 31
OBJETIVOS......................................................................................................................... 31
Junção de Tabelas................................................................................................................. 32
Auto Relacionamento e Consulta Hierárquica .................................................................... 35
OBJETIVOS......................................................................................................................... 35
Auto Relacionamento ........................................................................................................... 35
Consultas Hierárquicas ......................................................................................................... 35
Subquery ................................................................................................................................. 38
OBJETIVOS......................................................................................................................... 38
Consultas Encaixadas ........................................................................................................... 38
5
Funções .................................................................................................................................... 39
OBJETIVOS......................................................................................................................... 39
Funções Numéricas .............................................................................................................. 39
Funções de Caracter ............................................................................................................. 42
Funções de Conversão .......................................................................................................... 45
Funções que aceitam qualquer tipo de Dado como Entrada ................................................ 47
Funções de Datas .................................................................................................................. 48
Unidade 3 ................................................................................................................................ 52
Estrutura de Dados ................................................................................................................ 52
OBJETIVOS......................................................................................................................... 52
Estrutura de Dados Oracle.................................................................................................... 52
Criando uma Tabela ............................................................................................................. 52
Tipos de Colunas .................................................................................................................. 53
A Opção NULL e NOT NULL ............................................................................................ 54
Cláusula CONSTRAINT...................................................................................................... 54
Parâmetros da CONSTRAINT ............................................................................................. 56
CREATE TABLE ................................................................................................................ 57
Views ........................................................................................................................................ 58
OBJETIVOS......................................................................................................................... 58
Manipulação de Visões ........................................................................................................ 58
PL/SQL .................................................................................................................................... 62
OBJETIVOS......................................................................................................................... 62
O QUE É PL/SQL? ............................................................................................................. 63
AS VANTAGENS DO PL/SQL .......................................................................................... 63
ESTRUTURA DO PL/SQL ................................................................................................. 65
DEFININDO UM BLOCO ANÔNIMO .............................................................................. 65
CARACTERÍSTICAS DO PL/SQL .................................................................................... 66
SINTAXE BÁSICA DO PL/SQL ........................................................................................ 66
DECLARANDO VARIÁVEIS E CONSTANTES ............................................................. 67
SENTENÇA IF .................................................................................................................... 67
SENTENÇA FOR ................................................................................................................ 68
SENTENÇA WHILE ........................................................................................................... 68
Herança de Variáveis ............................................................................................................. 69
OBJETIVOS......................................................................................................................... 69
O ATRIBUTO %TYPE ....................................................................................................... 69
O ATRIBUTO %ROWTYPE .............................................................................................. 69
Cursor ...................................................................................................................................... 71
OBJETIVOS......................................................................................................................... 71
O QUE É UM CURSOR? .................................................................................................... 71
CONTROLE SOBRE CURSORES EXPLÍCITOS ............................................................. 71
O COMANDO CURSOR .................................................................................................... 73
Unidade IV .............................................................................................................................. 74
Procedure ................................................................................................................................ 74
OBJETIVOS......................................................................................................................... 74
Procedures ............................................................................................................................ 74
Trocando Valores entre diferentes Ambientes através de Argumentos. .............................. 75
Função ..................................................................................................................................... 75
OBJETIVOS......................................................................................................................... 75
Funções................................................................................................................................. 75
Gerenciando Exceções............................................................................................................ 76
6
OBJETIVOS......................................................................................................................... 76
Gerenciando Exceções em Tempo de Execução .................................................................. 76
Executando Objetos ............................................................................................................... 77
OBJETIVOS......................................................................................................................... 77
Executando PROCEDURES ................................................................................................ 77
Executando FUNCTIONS.................................................................................................... 78
Benefícios das Procedures e Funções................................................................................... 78
Unidade V................................................................................................................................ 80
Gerenciando Procedures e Functions ................................................................................... 80
OBJETIVOS......................................................................................................................... 80
Gerenciando Procedures e Funções...................................................................................... 80
Documentando Procedures e Funções.................................................................................. 81
Gerenciando Procedures e Funções...................................................................................... 84
Gerenciando Dependências ................................................................................................... 84
OBJETIVOS......................................................................................................................... 84
Gerenciando as Dependências entre Procedures .................................................................. 84
Existem dois tipos distintos de dependência: Direta e Indireta ............................................ 85
Dependência remota ............................................................................................................ 85
Dependências Locais ............................................................................................................ 85
Gerenciando Dependências Locais ...................................................................................... 87
Mecanismo de Dependência Remota Automático ............................................................... 88
Package .................................................................................................................................... 89
..................................................................................................................................... O
BJETIVOS ............................................................................................................... 89
Desenvolvendo e Utilizando PACKAGES .......................................................................... 90
Especificação do Package e seu Corpo ................................................................................ 91
Criando PACKAGES ........................................................................................................... 93
Packages já fornecidas ......................................................................................................... 93
Benefícios do Package ......................................................................................................... 94
Trigger ..................................................................................................................................... 95
OBJETIVOS......................................................................................................................... 95
Desenvolver Triggers ( gatilhos ) do Banco de Dados......................................................... 95
Criando Comandos e Triggers de Linha .............................................................................. 96
Comando CREATE TRIGGER ........................................................................................... 96
Criando TRIGGERS de Linha ............................................................................................. 97
GERENCIANDO TRIGGERS ............................................................................................ 97
Executar Operações de Dados Válidos ................................................................................ 98
7
Unidade I
Comando INSERT
OBJETIVOS
8
Controle de acesso e integridade (segurança).
Hierárquico.
Lista invertida.
Rede.
Relacional.
9
de Dados da ORACLE é relacional. Por essa razão, nós estaremos nos
concentrando unicamente no acesso relacional ao Gerenciador de
Banco de Dados.
Modelo Relacional
Tabelas.
Colunas.
Linhas.
Campos.
TABELA
Campo
Coluna
10
Um conjunto de ações que agem no relacionamento
produzindo novos relacionamentos.
11
Arquitetura de Produtos Oracle
Interpretar SQL.
12
SQL
Características do SQL
13
Consulta aos dados.
Inserir, atualizar e remover linhas de uma tabela.
Criar, modificar e remover objetos do Banco de Dados.
Controlar o acesso ao Banco de Dados e seus objetos.
Garantir a consistência do Banco de Dados.
O que é SQL*Plus
SQL*PLUS
SQL + Parâmetros de DB
controle de ORACLE
comandos Formatação
de controle
Características principais:
14
PL/SQL
Declaração de variáveis.
Atribuições ( X := Y + Z).
Gerenciamento de exceções.
Aumenta produtividade.
O PL/SQL oferece:
Aumento de Performance
15
comandos SQL combinados com construtores PL/SQL
são enviados e processados pelo RDBMS uma única
vez. Esta característica aumenta a performance
especialmente em sistemas cliente/servidor.
Aumento de Produtividade
PL/SQL adiciona o poder do processamento procedural
no desenvolvimento de aplicativos. Adicionalmente
aplicativos escritos em PL/SQL são portáveis para
qualquer computador ou sistema operacional que
execute o ORACLE RDBMS.
16
estrutura de dados. São também
conhecidos como comandos DDL (Data
Definition Language).
* Sintaxe:
,
VALUES ( expr )
,
( column ) subquery_2
Onde:
17
VALUES Especifica uma linha de valores a serem
inseridos na tabela ou visão.
subsquery_2 É uma subconsulta que retorna linhas que
são inseridas na tabela. A lista selecionada
desta consulta tem que ter o mesmo número
de colunas da lista do comando INSERT.
* Para você inserir linhas em uma tabela, a tabela tem que ser
sua ou você tem que ter privilégios sobre ela.
Comando UPDATE
OBJETIVOS
Para você atualizar linhas em uma tabela, a tabela tem que ser
sua ou você tem que ter privilégios sobre ela.
18
Sintaxe:
UPDATE
,
table
snapshot
( subquery_1 )
,
,
column = expr
( subquery_3 )
WHERE condição
Onde:
19
localizada. Se você omitir dblink, o Oracle
assume que a tabela ou visão está em um
banco de dados local.
alias É um nome diferente para a tabela, visão ou
subconsulta para ser referenciada no
comando.
subquery_1 É uma subconsulta que o Oracle trata da
mesma maneira que uma visão.
column É o nome de uma coluna para a tabela ou
visão que está sendo atualizada. Se você
omitir a coluna da tabela na cláusula SET, o
valor da coluna permanece inalterado.
expr É o novo valor atribuído a coluna
correspondente.
subquery_2 É uma subconsulta que retorna novos valores
que são atribuídos para colunas
correspondentes.
subquery_3 É uma subconsulta que retorna um novo
valor que está atribuído a coluna
correspondente.
where Restrição para atualizar as linhas. Se essa
cláusula for omitida, o Oracle atualiza todas
as linhas na tabela ou visão.
Comando DELETE
OBJETIVOS
20
Removendo Linhas de uma Tabela
Sintaxe:
DELETE table
( subquery )
WHERE condição
Onde:
Para você apagar linhas em uma tabela, a tabela tem que ser
sua ou você tem que ter privilégios sobre ela.
Edição de Comandos
SQL> list
qualquer um desses comandos
ou pode ser utilizado
SQL> l
1 SELECT
2 empno, ename
3 FROM emp
4* WHERE empno = 7902
SQL> del
SQL> l
1 SELECT
2 empno, ename
3* FROM emp
ou
22
SQL> list deixe um linha em branco
3 job, para terminar a inserção
4 sal
5
SQL> list
1 SELECT
2 empno, ename
3 job,
4 sal
5* FROM emp;
SQL> list 2
2* empno, ename
SQL> append, mgr,
ou
SQL> a, mgr,
SQL> list
1 SELELCT
2 empno, ename, mgr,
3 job,
4 sal
5* FROM emp;
SQL> list 2
2* empno, ename, mgr,
SQL> change/mgr/sal/
ou
SQL> c/mgr/sal/
SQL> list
1 SELECT
2 empno, ename, sal,
3 job,
4 sal
5* FROM emp
SQL> run
ou
23
SQL> r
ou
SQL> /
SQL> edit
24
ou
SQL> @arquivo
Operadores e Substituição de
Variáveis
OBJETIVOS
Operadores Aritméticos
25
SELECT 2*X+10
... WHERE X > Y / 2
SELECT 2 * X + 1
... WHERE X > Y - Z
Operadores de Caracteres
Operadores de Comparação
26
Os operadores de comparação são usados em condições que
comparam duas expressões. Assim como as condições, os resultados
das comparações entre expressões podem ser verdadeiro ou falso. A
tabela a seguir lista os operadores de comparação:
27
as linhas serão avaliadas como falso se qualquer
membro da lista de valores referenciada pelo operador
NOT IN for nulo.
Operadores Lógicos
Substituição de Variáveis
28
Uma variável começa sempre com o caracter & e é sempre
temporária. Para definir uma variável permanente deve-se utilizar &&.
29
Unidade II
Group by e Order by
OBJETIVOS
Ordenação de Resultados
Cláusula Group By
30
SQL> SELECT deptno, count(*)
2 FROM emp função de grupo
3 GROUP BY deptno;
DEPTNO COUNT(*)
10 3
20 5
30 6
Cláusula HAVING
31
Junção de Tabelas
A,
B, C X 1,2
(A,1), (A,2),
(B,1), (B,2),
(C,1), (C,2)
tab1 tab2
col1 col2 col3 col4 col5
A 3 B 2 E
32
Para saber o nome do departamento onde cada empregado
trabalha:
produto cartesiano
ENAME DNAME
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING
33
ALLEN RESEARCH 30 20
WARD RESEARCH 30 20
JONES RESEARCH 20 20
MARTIN RESEARCH 30 20
BLAKE RESEARCH 30 20
CLARK RESEARCH 10 20
SCOTT RESEARCH 20 20
KING RESEARCH 10 20
TURNER RESEARCH 30 20
ADAMS RESEARCH 20 20
JAMES RESEARCH 30 20
FORD RESEARCH 20 20
MILLER RESEARCH 10 20
SMITH SALES 20 30
ALLEN SALES 30 30
WARD SALES 30 30
JONES SALES 20 30
MARTIN SALES 30 30
BLAKE SALES 30 30
CLARK SALES 10 30
SCOTT SALES 20 30
KING SALES 10 30
TURNER SALES 30 30
ADAMS SALES 20 30
JAMES SALES 30 30
FORD SALES 20 30
MILLER SALES 10 30
SMITH OPERATIONS 20 40
ALLEN OPERATIONS 30 40
WARD OPERATIONS 30 40
JONES OPERATIONS 20 40
MARTIN OPERATIONS 30 40
BLAKE OPERATIONS 30 40
CLARK OPERATIONS 10 40
SCOTT OPERATIONS 20 40
KING OPERATIONS 10 40
TURNER OPERATIONS 30 40
ADAMS OPERATIONS 20 40
JAMES OPERATIONS 30 40
FORD OPERATIONS 20 40
MILLER OPERATIONS 10 40
34
Auto Relacionamento e Consulta
Hierárquica
OBJETIVOS
Auto Relacionamento
Consultas Hierárquicas
75 / PRESIDENTE
36
110 / DIRETOR 230 / SECRETÁRIA 189 / DIRETOR
37
Subquery
OBJETIVOS
Consultas Encaixadas
Subqueries podem:
Agrupar tabelas.
38
Para saber quais empregados ganham mais que a média dos
salários:
Funções
OBJETIVOS
Funções Numéricas
As funções numéricas recebem um número como parâmetro e
retornam outro valor numérico.
Função ABS
ABS (numero)
Função FLOOR
FLOOR(expr)
39
SELECT FLOOR(10.7) FROM DUAL;
Função CEIL
CEIL(expr)
Função MOD
MOD(numero1, numero2)
Função POWER
POWER(numero1,numero2)
Função ROUND
40
Retorna o valor do primeiro número arredondado para o segundo
número de casas a direita do ponto decimal. Se o segundo número for
omitido, arredonda o primeiro número sem casas decimais. O segundo
número pode assumir valores negativos, sendo que nesse caso o
primeiro número será arredondado à esquerda do ponto decimal. O
segundo número deve ser um inteiro.
ROUND(numero1,numero2)
Função SQRT
SQRT(numero)
Função TRUNC
TRUNC(numero1,numero2)
41
SELECT TRUNC(15.79,1) FROM DUAL;
Funções de Caracter
Função INITICAP
INITICAP(CHAR)
Função INSTR
INSTR(CHAR1,CHAR2,NUM1,NUM2)
Função LENGTH
Função LOWER
LOWER(CHAR)
Função LPAD
LPAD(CHAR1,NUM,CHAR2)
Função RPAD
RPAD(CHAR1,NUM,CHAR2)
Função LTRIM
43
Remove todos os caracteres especificados em char2 que
constarem à esquerda da string de caracteres char1, até que um dos
caracteres seja diferente dos especificados. Esta função é semelhante à
função RTRIM.
LTRIM(CHAR1,CHAR2)
Função RTRIM
RTRIM(CHAR1,CHAR2)
Função SUBSTR
SUBSTR(CHAR,NUM1,NUM2)
SELECT SUBSTR('DSFEMDC39DKDBS3EID39DKW',12,3)
FROM DUAL
Função UPPER
44
Transforma a string de caracteres char em letras maiúsculas.
UPPER(CHAR)
Função REPLACE
REPLACE (coluna/valor,string,string_substituto)
Funções de Conversão
Função TO_CHAR
45
TO_CHAR(NUM | DATE, FORMATO)
Função TO_DATE
TO_DATE(CHAR, FORMATO)
Função TO_NUMBER
TO_NUMBER(CHAR)
UPDATE emp
SET SAL = SAL + TO_NUMBER(‘250’);
FORMATOS:
SYEAR ou YEAR Ano por extenso, o prefixo S substitui data AC por ‘-’.
Q Trimestre.
46
MM Mês.
J Data Juliana.
AM ou PM Indicador Meridiano.
MI Minutos.
SS Segundos.
Função DECODE
DECODE (coluna/expressão,
escolha1, resultado1, escolha2, resultado2, ..., default )
Função GREATEST
GREATEST (coluna/valor1,coluna/valor2,...)
Função LEAST
LEAST (coluna/valor1,coluna/valor2,...)
Função ADD_MONTHS
ADD_MONTHS(DAT,NUM)
48
SELECT HIREDATE, ADD_MONTHS(HIREDATE, 12) FROM emp;
Função NEXT_DAY
NEXT_DAY(dat1,char1)
LAST_DAY(dat1)
Função ROUND
ROUND (dat1,’MONTH’/’YEAR’)
49
Função TRUNC
TRUNC(dat1,’MONTH’/’YEAR’)
Função MONTHS_BETWEEN
MONTHS_BETWEEN (DAT1,DAT2)
Função SYSDATE
SYSDATE
50
51
Unidade III
Estrutura de Dados
OBJETIVOS
52
4. Deve ter no máximo 30 caracteres.
Tipos de Colunas
Quando criar uma tabela, você deve especificar os tipos das
colunas. Os mais utilizados são:
53
DATE São valores tipo data. Ex.: December 31, 4712
BC. Usa 7 bytes.
Cláusula CONSTRAINT
O Banco de Dados Oracle suporta documentação para
integridade armazenando informações sobre verificação de integridade
no dicionário de dados. Uma Constraint de integridade é uma regra que
define um relacionamento entre tabelas de um banco de dados. Por
exemplo, uma constraint de integridade pode definir que um funcionário
não esteja contido em dois ou mais departamentos.
54
O objetivo de uma constraint é definir um intervalo de valores
válidos. Para que os comandos INSERT, UPDATE e DELETE sejam
executados com sucesso, devem obedecer as regras de constraint
estabelecidas.
* Constraints de tabela
* Constraints de coluna
55
PRYMARY KEY ( projeto, funcionario);
Parâmetros da CONSTRAINT
CONSTRAINT Define o nome da constraint. Este parâmetro é
nome_da_constraint
opcional. Se não definir o nome da constraint,
ela receberá um nome default no formato
SYS_Cn, onde n é um inteiro e único
identificador da constraint.
56
FOREIGN KEY Identifica que essa é uma chave estrangeira da
tabela do usuário definida. Deve sempre estar
referenciada a uma tabela e não a uma visão.
CREATE TABLE
O comando CREATE TABLE é usado para criar novas tabelas
no banco de dados.
Sintaxe:
( coluna tipo )
table_constraint
AS subquery
Onde:
57
Tipo É o tipo da coluna.
Default Especifica um valor a ser atribuído para a
coluna se um comando INSERT subsequente
for omitido para o valor da coluna. O tipo da
expressão tem que ser o mesmo tipo da
coluna.
Column_constraint Define uma integridade de constraint como
parte da definição da coluna.
Table_constraint Define uma integridade de constraint como
parte da definição da tabela.
As subquery Insere as linhas retornadas por uma
subconsulta na tabela que será criada.
Views
OBJETIVOS
Manipulação de Visões
Uma visão é como uma janela que permite visualizar ou
modificar seletivamente informações armazenadas em tabelas.
Tabela Emp
58
7788 SCOTT …20
7839 KING …10
7844 TURNER …30
7876 ADAMS …20
7900 JAMES …30
7902 FORD …20
7934 MILLER …10
Visão Emp_10
EMPNO ENAME …DEPTNO
7521 WARD …30
7782 CLARK …10
59
Emp_Dept NOME NUM NUM_DEPT NOME_DEPTO
O
SMITH 7369 20 RESEARCH
ALLEN 7499 30 SALES
WARD 7521 30 SALES
JONES 7566 20 RESEARCH
MARTIN 7654 30 SALES
BLAKE 7698 30 SALES
CLARK 7782 10 ACCOUNTING
SCOTT 7788 20 RESEARCH
KING 7839 10 ACCOUNTING
TURNER 7844 30 SALES
ADAMS 7876 20 RESEARCH
JAMES 7900 30 SALES
FORD 7902 20 RESEARCH
MILLER 7934 10 ACCOUNTING
NO FORCE
60
AS subquery
( alias )
WITH
READ ONLY
CHECK OPTION
CONSTRAINT constraint
Onde:
61
tabela(s) que a visão está baseada. A
consulta da visão pode ser qualquer
comando SELECT sem a cláusula
ORDER BY ou FOR UPDATE. A lista
selecionada pode ter no máximo 254
expressões.
WITH READ ONLY Especifica que apagar, inserir ou
atualizar não pode ser executado pela
visão
WITH CHECK OPTION Especifica que não será permitido a
execução de um INSERT ou UPDATE
através da VIEW a não ser que uma
específica constraint seja definida.
CONSTRAINT É o nome atribuído para a constraint
CHECK OPTION. Se você omitir este
identificador, o Oracle automaticamente
atribui a constraint um nome desta
forma: SYS_Cn. Onde n é um número
inteiro.
PL/SQL
OBJETIVOS
62
O QUE É PL/SQL?
63
Controle de Fluxo Parâmetros condicionais (IF-THEN-ELSE-ELSIF),
repetições de grupo de comandos e desvios podem
ser empregados para controlar o fluxo de um
programa.
Portabilidade O PL/SQL é nativo do ORACLE, portanto os
programas PL/SQL podem ser transportados para
qualquer ambiente que suportem o ORACLE.
Integração Pode-se utilizar blocos PL/SQL desenvolvidos para
uma ferramenta ORACLE e também para o ORACLE
RDBMS.
Performance O uso do PL/SQL pode ajudar a melhorar a
performance de uma aplicação. Os benefícios diferem
dependendo do ambiente utilizado.
64
ESTRUTURA DO PL/SQL
Toda unidade do PL/SQL é compreendida em um ou mais blocos. Estes
blocos podem estar completamente separados ou próximos. No entanto, um bloco
pode representar uma pequena parte de um outro bloco.
DECLARE
.... declaracoes
BEGIN
.... sentenças
EXCEPTION
.... manusear excessoes
END;
DECLARE
... definição dos objetos PL/SQL que serão utilizados neste bloco
BEGIN
.... ações executáveis
EXCEPTION
.... o que fazer se um ação executada causar um erro
END;
65
CARACTERÍSTICAS DO PL/SQL
66
Comentários podem estar entre /* e */ que pode se estender por muitas
linhas ou utilizar ‘-’ para comentar uma linha.
Atribuição de Valores
identificador := expressão;
contador := contador + 1;
salario_anual := salario * 13 + NVL(comissao,0);
nivel := 6;
cargo := ‘JOGADOR’;
data_de_hoje := SYSDATE;
SENTENÇA IF
IF condicao THEN
acoes
ELSIF condicao THEN
acao
ELSE
acao
END IF;
Exemplo:
declare
67
v_sal number(10,2);
v_ename varchar2(20);
begin
select ename,sal into v_ename,v_sal from emp
where empno = 7369;
if v_sal < 5000 then
dbms_output.put_line('O '||v_ename||' recebe um salário razoável !!!');
elsif v_sal = 5000 then
dbms_output.put_line('O '||v_ename||' recebe um bom salário!!!');
else
dbms_output.put_line('O '||v_ename||' recebe um salário ótimo !!!');
end if;
end;
SENTENÇA FOR
declare
x number;
begin
for x in 1..10
loop
dbms_output.put_line(x);
end loop;
end;
SENTENÇA WHILE
WHILE condicao
68
declare
x number := 0;
begin
while x < 10
loop
dbms_output.put_line(x);
x := x + 1;
end loop;
end;
Herança de Variáveis
OBJETIVOS
O ATRIBUTO %TYPE
O atributo %TYPE é utilizado para declarar um registro baseado numa
coluna de uma tabela ou visão.
identificador tabela_de_referencia.campo%TYPE;
DECLARE
v_ename [Link]%TYPE;
BEGIN
SELECT ename INTO v_ename FROM emp WHERE empno = 1234;
...
END;
O ATRIBUTO %ROWTYPE
69
Os registros são definidos na sessão DECLARE.
identificador tabela_de_referencia%ROWTYPE;
DECLARE
reg_fun emp%ROWTYPE;
BEGIN
SELECT * INTO reg_fun FROM emp WHERE num_func = 1234;
...
END;
70
Cursor
OBJETIVOS
O QUE É UM CURSOR?
O Oracle utiliza uma área de trabalho chamada ‘Private SQL Area’ (Área
Privativa do SQL) para executar comandos SQL e armazenar informações
de processamento. Um cursor é uma construção PL/SQL que permite dar
nomes a essas áreas de trabalho e acessar as informações armazenadas
nela.
71
chamadas de “active set”, estão disponíveis para
serem pesquisadas.
FETCH Faz a leitura dos valores da linha corrente colocando
o resultado dentro das variáveis. A linha corrente é a
linha que o cursor está apontando. Cada FETCH
causa a movimentação do cursor para a próxima
linha no “active set” .
CLOSE Libera a área de trabalho que as linhas produziram
pela última execução do comando OPEN.
72
O COMANDO CURSOR
O comando CURSOR é utilizado para definir um cursor explícito.
Parâmetros podem ser definidos para permitir a substituição de valores dentro de
uma pesquisa quando o cursor é inicializado (OPEN).
73
Unidade IV
Procedure
OBJETIVOS
Procedures
Criar uma nova procedure com o comando CREATE PROCEDURE. Com
uma lista de argumentos, são definidas as ações que serão executadas por um
bloco PL/SQL.
Sintaxe:
74
Obs.: A cláusula REPLACE é utilizada quando a procedure já existe. Nunca
utilize a cláusula DECLARE no início do bloco PL/SQL.
Função
OBJETIVOS
Funções
Para criar uma função ou procedure dependerá de que forma será chamada e
de que forma espera-se os valores.
Criar uma nova função com o comando CREATE FUNCTION, a qual declara
uma lista de argumentos, declara o argumento que irá retornar e define as ações
que serão realizadas utilizando blocos PL/SQL.
Sintaxe:
75
CREATE OR REPLACE FUNCTION nome_da_funcao
( argumento mode tipo_do_argumento)
RETURN tipo_do_dado
IS/AS
bloco_pl/sql
Gerenciando Exceções
OBJETIVOS
RAISE_APPLICATION_ERROR(numero_erro, texto_erro)
76
END IF;
COMMIT;
END exclui_funcionario;
Executando Objetos
OBJETIVOS
Executando PROCEDURES
De qualquer ambiente PL/SQL, basta simplesmente chamar a procedure com
uma chamada direta.
DECLARE
v_empno NUMBER := 7654;
BEGIN
...
exclui_funcionario (v_empno);
...
END;
77
Exemplo: Executando uma procedure de outro usuário.
Para uma procedure que contenha vários argumentos, existe três métodos
para especificar seus valores :
DECLARE
v_empno NUMBER := 7654;
v_sal NUMBER;
BEGIN
...
v_sal := pesquisa_salario(v_emp_no);
...
END;
78
Controle sobre acessos indiretos aos objetos de banco de dados
executados por funcionários sem privilégios.
Assegurar que ações relacionadas sejam executadas conjuntamente.
Melhorar Performance
Conservar a Memória
Melhorar Manutenções
79
Unidade V
Gerenciando Procedures e
Functions
OBJETIVOS
Informações
Código Fonte Texto da Procedure Visão do dicionário de dados
USER_SOURCE ou pelo
comando DECRIBE.
Código Objeto Código compilado Não há.
Erro Compilação Erros de sintaxe Visão de dicionário de dados
USER_ERRORS ou pelo
comando SHOW ERRORS.
Informações Mensagens sobre Procedures DBMS_OUTPUT
80
execução variáveis especificadas pelo
usuário.
Coluna Descrição
OBJECT_NAME Nome do objeto.
OBJECT_ID Identificador interno do objeto.
OBJECT_TYPE Tipo do objeto (PROCEDURE, FUNCTION, PACKAGE ou
PACKAGE BODY).
CREATED Data da criação do objeto.
LAST_DDL_TIME Data de modificação do objeto.
TIMESTAMP Data de recompilação do objeto.
STATUS VALID ou INVALID.
Coluna Descrição
NAME Nome do objeto.
TYPE Tipo do objeto (PROCEDURE, FUNCTION, PACKAGE ou
PACKAGE BODY).
LINE Número de linha do código fonte.
TEXT Texto da linha do código fonte.
81
Para saber algumas informações adicionais, como quem é o proprietário do
objeto, pesquise as visões do banco de dados ALL_SOURCE e DBA_SOURCE.
SELECT text
FROM user_source
WHERE type = ‘PROCEDURE’
AND name = ‘EXCLUI_FUNCIONARIO’
ORDER BY line;
Coluna Descrição
NAME Nome do objeto.
TYPE Tipo do objeto (PROCEDURE,
FUNCTION, PACKAGE ou PACKAGE
BODY).
LINE Número de linha do código fonte onde
ocorreu o erro.
POSITION Posição da linha que o erro ocorreu.
TEXT Texto da mensagem de erro.
82
SHOW ERRORS PROCEDURE log_execucao
SET serveroutput ON
DBMS_OUTPUT.PUT_LINE(‘texto’);
83
Gerenciando Procedures e Funções
Tarefa Estratégia
Obter documentação. Exibir as visões do dicionário de dados
USER_OBJECTS e USER_SOURCE.
Eliminar erros de compilação. Pesquisar a visão do dicionário de dados
USER_ERRORS.
Gerenciando problemas. Explorar as rotinas DBMS_OUTPUT privadas pela
execução Oracle.
Facilitar o desenvolvimento. Produzir scripts SQL*Plus.
Controlar a segurança. Definir privilégios para o proprietário e usuários,
Gerenciando Dependências
OBJETIVOS
Procedure View
Tabela
INVALID INVALID
Procedure Procedure
Alterações na
definição
84
INVALID INVALID
Dependência remota
Dependências Locais
85
Coluna Descrição
NAME Nome do objeto dependente.
TYPE Tipo do objeto dependente (PROCEDURE,
FUNCTION, PACKAGE ou PACKAGE BODY).
REFERENCED_OWNER Usuário do objeto referenciado.
REFERENCED_NAME Nome do objeto referenciado.
REFERENCED_TYPE Tipo do objeto referenciado.
Para recompilar uma procedure, o usuário deve ser dono da procedure ou ter
o privilégio ALTER ANY PROCEDURE.
86
Procedure Lista de argumento. Erros.
Procedure PL/SQL Sem erros.
Visão Nome das colunas. Erros.
VALID indica que o objeto foi compilado com sucesso e está pronto
para ser executado.
87
3. Se a existência ou especificação de um objeto de banco de dados alterar, o
Oracle marca todos os objetos dependentes como INVALID.
88
1. O Oracle registra o ‘timestamp’ dentro do código objeto de todas as procedures
quando compilada.
3. Se a procedure local, que está marcada como INVALID, é chamada pela segunda
vez, o Oracle recompilará a procedure antes de executá-la de acordo com o
mecanismo de dependência local automático.
Package
OBJETIVOS
89
Desenvolvendo e Utilizando PACKAGES
PACKAGE
Variáveis Cursor
Constante Excessões
PROCEDURE FUNÇÃO
Construção Descrição
Variáveis Identificador que armazena valores atualizáveis.
Cursor Identificador associado a comandos SQL.
Constantes Identificador que armazena valores fixos.
Exceções Identificador de uma condição anormal.
Procedure Rotina de argumentos.
Função Rotina com argumentos que retorna somente um valor.
90
Especificação do Package e seu Corpo
PACKAGE
Variável
Pública
Procedure A Procedure
DeclaraçãoPública
Especificação PACKAGE
Variável
Privada
Procedure B Procedure
Definição Privada
Procedure A Procedure
Definição Pública
Variável
Local Corpo do Package
91
Criar um Package em duas partes : a especificação do package e o seu
corpo. Faça algumas construções de packages públicas declarando-as dentro da
especificação do package; faça outra construção privada declarando somente dentro
do corpo do package.
Desenvolvendo um Package
92
Criando PACKAGES
Sintaxe:
Packages já fornecidas
Package Funcionalidade
DBMS_OUTPUT Saída de informações de procedures armazenadas.
DBMS_DDL Compila procedures, funções e packages e obtém uma
estatística de performance através do comando ANALYZE.
DBMS_SESSION Altera a sessão do usuário, define a regra para o usuário e
93
reinicializa o estado do package.
DBMS_TRANSACTION Controla transações lógicas e melhora a performance.
DBMS_MAIL Liga o ORACLE Server diretamente com Oracle*Mail.
DBMS_PIPE Envia mensagem do banco de dados para a aplicação.
DBMS_ALERT Envia um sinal se um evento ocorrer no banco de dados.
DBMS_LOCK Efetua a sincronização dos locks.
Benefícios do Package
Melhorar performance.
94
Trigger
OBJETIVOS
Aplicação
BEFORE
INSERT
row
BANCO DE DADOS
95
Desenvolver um trigger de banco de dados pedindo para executar um bloco
PL/SQL somente quando um comando de manipulação especifica e executado em
uma certa tabela.
Decida qual momento e em qual evento o trigger deve ser executado antes de
codificá-lo.
Tabela DEPT
Sintaxe:
onde,
96
Criando TRIGGERS de Linha
GERENCIANDO TRIGGERS
Tarefas Triggers
Documentação Examine a visão do dicionário de dados
USER_TRIGGERS.
Erros Explore a procedure DBMS_OUTPUT.
Segurança para o desenvolvedor Obter privilégios para criar triggers, para
acessar os objetos referenciados pela
trigger e alterar as tabelas associadas.
Segurança para o usuário Não precisa de privilégio especial.
Coluna Descrição
TRIGGER_NAME O nome da trigger.
TRIGGER_TYPE O momento em que o trigger será executado
(BEFORE/AFTER).
TRIGGERIMG_EVENT O comando de manipulação de dado que causa a
execução do trigger (INSERT, UPDATE ou DELETE).
TABLE_OWNER O dono da tabela associada ao trigger.
TABLE_NAME Nome da tabela associada ao trigger.
WHEN Condição de restrição.
STATUS Disponibilidade do trigger (ENABLED/DISABLED).
TRIGGER_BODY Texto do bloco PL/SQL.
97
Executar Operações de Dados Válidos
98