Beruflich Dokumente
Kultur Dokumente
SQL> SELECT *
2 FROM depto;
NOME SALARIO
------------- ---------
...
DEPTO_NUM
---------
10
20
30
SQL*Plus
SQL Plus
■ Aplicação cliente para conexão com Oracle.
■ Localização:
– Start Programs Banco de dados Oracle OraHome81
Application Development SQL Plus
– Usuário e senha são idênticos
Interface gráfica do SQL Plus
Configurações
■ Opcoes ambiente
– Linesize – modifica a quantidade de caracteres por linha.
Escolher personalizado. Escolhar ativar. Especificar 1000
caracteres. Aumentar largura do buffer para 1000.
Listando a Estrutura de Tabelas
SQL> DESCRIBE depto
@caminho_completo
Restringindo consultas e
ordenando resultados
Utilizando a Cláusula WHERE
SQL> SELECT enome, cargo, depto_num
2 FROM emp
3 WHERE cargo='CAIXA';
= Igual a
<> Diferente de
Outros Operadores
Operador Significado
ENOME SAL
limite limite
---------- ---------
MARIA 1250 inferior superior
SERGIO 1500
MATHEUS 1250
PAULO 1100
LUCIANO 1300
Operador IN
SQL> SELECT enum, enome, sal, ger
2 FROM emp
3 WHERE ger IN (7902, 7566, 7788);
ENOME GER
---------- ---------
CARLOS
Operadores Lógicos
Operador Significado
ENOME CARGO
---------- ---------
CARLOS PRESIDENTE
MARIA VENDEDOR
CELSO VENDEDOR
SERGIO VENDEDOR
MATHEUS VENDEDOR
Cláusula ORDER BY
MIN(DTINI MAX(DTINI
--------- ---------
17-DEZ-80 12-JAN-83
Função COUNT
– COUNT(*) retorna o número de linhas na
tabela
COUNT(*)
---------
6
Função COUNT
– COUNT(coluna) retorna o número de
linhas não nulas da tabela
COUNT(COMIS)
------------
4
Criando Grupos de Dados
EMP
DEPTO_NUM SAL
--------- ---------
10 2450
10 5000 2916.6667
10 1300
20 800 DEPTO_NUM
20 1100 “média salarialAVG(SAL)
20 3000 2175 por
---------
20 3000 departamento”
20 2975 ---------
30 1600 10
30 2850
30 1250 1566.6667 2916.6667
30 950 20
30 1500 2175
30 1250
30
1566.6667
Criando Grupos de Dados:
A Cláusula GROUP BY
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
AVG(SAL)
---------
2916.6667
2175
1566.6667
Utilizando GROUP BY em
Múltiplas Colunas
SQL> SELECT depto_num, cargo, sum(sal)
2 FROM emp
3 GROUP BY depto_num, cargo;
– Objetos
SQL> SELECT DISTINCT object_type
2 FROM user_objects;
ENOME
----------
CARLOS
JOSE
FABIO
Regras para Subqueries
– Utilize subqueries entre parênteses.
– As subqueries vêem sempre à direita do
operador de comparação.
– Não utiliza a cláusula ORDER BY em
subqueries.
– Uma subquery retorna uam tabela sobre a
qual pode-se realizar qualquer uma das
operações vista anteriormente.
Melhorando a apresentação
dos resultados no SQL*PLUS
Substituindo Variáveis com o &
– Utilize uma variável prefixada com um &
para ler um valor de entrada.
– Define o cabeçalho
SQL> TTITLE ‘Relatório de|Empregados'
– Define o rodapé
SQL> BTITLE 'Confidencial'
Exemplo de Relatório
Sex Out 24 pág. 1
Relatório de
Empregados
Confidencial
Stored Procedures
Stored Procedures
■ Procedimantos que permanecem
armazenados no banco, de forma
compilada.
■ Servem para executar alguma
computação quando invocados
Sintaxe
CREATE OR REPLACE PROCEDURE NOME
( NOME TIPO[,NOME TIPO] )
IS BEGIN
[DECLARE]
<CORPO>
COMMIT;
EXCEPTION
WHEN OTHERS THEN
<CORPO>
END NOME;
/
Sintaxe (exemplo)
CREATE OR REPLACE PROCEDURE AJUSTE
(VALOR REAL, CAD INTEGER)
IS BEGIN
UPDATE acf_EMPREGADO SET salario=salario +
salario*VALOR WHERE cadastro=CAD;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO acf_ERROS values(SYSDATE,'Erro na
execucao de ajuste');
END AJUSTE;
/
Execução
EXECUTE AJUSTE(0.1, 21);
IS BEGIN
DECLARE
--cursor para guardar os funcionarios
CURSOR c_diario_func is
SELECT llma_funcionarios.cod_func,
llma_funcionarios.nome_func,
FROM llma_funcionarios
WHERE depto_func = codDepto;
ou
DECLARE
datainicial llma_contratos.dataini%TYPE;
BEGIN
SELECT to_char(dataini,'dd/mm/yyyy') into datainicial
FROM llma_contratos
WHERE cod_con = :new.cod_con;
END;
/
Sintaxe (exemplo)
BEGIN
IF :NEW.data < sysdate THEN
RAISE_APPLICATION_ERROR ('-20000', 'Data já passou');
END IF;
END;
/
Sintaxe (exemplo)
CREATE or REPLACE TRIGGER TG_AlteraItemColeta
AFTER insert or update or delete on xitemcoleta FOR EACH ROW
BEGIN
IF DELETING THEN
UPDATE XCOLETA SET PESO = (PESO - :OLD.PESO),
QUANTIDADE = (QUANTIDADE - :OLD.QUANTIDADE),
VOLUME = (VOLUME - :OLD.VOLUME)
WHERE COLETA = :OLD.COLETA;
ELSIF INSERTING THEN
UPDATE XCOLETA
SET PESO = (PESO + :NEW.PESO),
QUANTIDADE = (QUANTIDADE + :NEW.QUANTIDADE),
VOLUME = (VOLUME + :NEW.VOLUME)
WHERE COLETA = :NEW.COLETA;
ELSIF UPDATING THEN
UPDATE XCOLETA
SET PESO = (PESO + :NEW.PESO - :OLD.PESO),
QUANTIDADE=(QUANTIDADE+ :NEW.QUANTIDADE- :OLD.QUANTIDADE),
VOLUME = (VOLUME + :NEW.VOLUME - :OLD.VOLUME)
WHERE COLETA = :OLD.COLETA;
END IF;
END;
/
Triggers
■ Triggers são salvos em um arquivo .sql e
compiladas no Oracle com o comando
@caminho_completo do SQL Plus
■ Caso ocorra algum erro de compilação o
trigger não funciona corretamente
■ Erros de compilação podem ser vistos com o
comando show_errors do SQL Plus.
■ Gatilhos podem ser utilizados para
implementar regras de negócio