Professional Documents
Culture Documents
O Comando SELECT
SELECT FROM [DISTINCT] {*, column [alias],...} table;
Selecionando linhas
SQL> SELECT * 2 FROM depto;
SQL> SELECT depto_num, depto_loc 2 FROM depto; SQL> SELECT enome, sal, sal+300 2 FROM emp;
------------- --------...
SQL> SELECT enome "Nome", 2 sal*12 Salario Anual" 3 FROM emp; Nome Salario Anual
------------- ------------...
DEPTO_NUM --------10 20 30
SQL*Plus
SQL Plus
Configuraes
Opcoes ambiente
Linesize modifica a quantidade de caracteres por linha. Escolher personalizado. Escolhar ativar. Especificar 1000 caracteres. Aumentar largura do buffer para 1000.
@caminho_completo
Operadores de Comparao
Operador
= > >= < <= <>
Significado
Igual a Maior que Maior ou igual a Menor que Menor ou igual a Diferente de
Outros Operadores
Operador BETWEEN ...AND... IN(lista) LIKE IS NULL Significado Entre dois valores (inclusive)
Satisfaz uma lista de valores Satisfaz um padro de caracteres um valor nulo (null)
Operador BETWEEN
SQL> SELECT 2 FROM 3 WHERE enome, sal emp sal BETWEEN 1000 AND 1500; limite superior
ENOME SAL ---------- --------MARIA 1250 SERGIO 1500 MATHEUS 1250 PAULO 1100 LUCIANO 1300
limite inferior
Operador IN
SQL> SELECT 2 FROM 3 WHERE enum, enome, sal, ger emp ger IN (7902, 7566, 7788);
ENOME SAL GER ---------- --------- --------JOSE 3000 7566 MANUEL 800 7902 FABIO 3000 7566 PAULO 1100 7788
Operador LIKE
Utilize o operador LIKE para realizar pesquisas por padres (wildcards).
% substitui zero ou mais caracteres _ substitui um nico caracter
SQL> SELECT 2 FROM 3 WHERE enome emp enome LIKE M%';
Operador IS NULL
Testando valores nulos (null)
SQL> SELECT 2 FROM 3 WHERE enome, ger emp ger IS NULL;
Operadores Lgicos
Operador AND OR Significado Retorna TRUE se a condio de ambos os componentes for TRUE Retorna TRUE se a condio de um dos componentes for TRUE Retorna TRUE se a condio for FALSE (vise-versa)
NOT
Operador NOT
SQL> SELECT enome, cargo 2 FROM emp 3 WHERE cargo NOT IN('CAIXA','GERENTE','ANALISTA');
Clusula ORDER BY
SQL> SELECT enome, cargo, depto_num, dtinicio 2 FROM emp 3 ORDER BY dtinicio DESC; ENOME CARGO DEPTO_NUM ---------- --------- --------PAULO CAIXA 20 FABIO ANALISTA 20 LUCIANO CAIXA 10 RONALDO CAIXA 30 JOSE ANALISTA 20 CARLOS PRESIDENTE 10 MARIA VENDEDOR 30 ... 14 rows selected. DTINICIO --------12-JAN-83 09-DEC-82 23-JAN-82 03-DEC-81 03-DEC-81 17-NOV-81 28-SEP-81
Manipulando dados
O Comando INSERT
Adicione linhas a uma tabela utilizando o comando INSERT.
INSERT INTO VALUES table [(column [, column...])] (value [, value...]);
No esquea o COMMIT
Inserindo Datas
Adicionando um novo empregado.
SQL> INSERT INTO 2 VALUES 3 4 1 row created. emp (2296,'ROMANO',VENDEDOR',7782, TO_DATE(03-02-1997','DD-MM-YYYY'), 1300, NULL, 10);
O Comando UPDATE
Modificando linhas existentes com o comando UPDATE.
UPDATE SET [WHERE table column = value [, column = value] condition];
Modifique mais de uma linha por vez especificando uma condio na clusula WHERE.
No esquea o COMMIT
Joins
Utilize uma juno para consultar dados de mais de uma tabela.
SELECT FROM WHERE table1.column, table2.column table1, table2 table1.column1 = table2.column2;
Especifique a condio de juno na clusula WHERE. Informe o nome da tabela junto com o nome da coluna, se tabelas diferentes possurem colunas com os mesmos nomes.
SQL> SELECT e.enum, e.enome, e.depto_num, 2 d.depto_num, d.depto_loc 3 FROM emp e, depto d 4 WHERE e.depto_num = d.depto_num;
MAX(SAL) --------5000
AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------1400 1600 1250 5600
Funo COUNT
COUNT(*) retorna o nmero de linhas na tabela
SQL> SELECT 2 FROM 3 WHERE COUNT(*) --------6 COUNT(*) emp depto_num = 30;
Funo COUNT
COUNT(coluna) retorna o nmero de linhas no nulas da tabela
SQL> SELECT 2 FROM 3 WHERE COUNT(COMIS) -----------4 COUNT(comis) emp depto_num = 30;
Divida as linhas de uma tabela em pequenos grupos usando a clusula GROUP BY.
A Clusula GROUP BY
Colunas utilizadas em funes de grupo no precisam estar listadas no GROUP BY.
SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY depto_num;
DEPTO_NUM CARGO SUM(SAL) --------- --------- --------10 CAIXA 1300 10 GERENTE 2450 10 PRESIDENTE 5000 20 ANALISTA 6000 20 CAIXA 1900 ... 9 rows selected.
Tabela
Unidade bsica de armazenamento da base de dados, formada por colunas e linhas (tuplas)
Criando Tabelas
Criando a tabela depto.
SQL> CREATE TABLE depto 2 (depto_num NUMBER(2), 3 depto_nom VARCHAR2(14), 4 depto_loc VARCHAR2(13)); Table created.
Objetos
SQL> SELECT 2 FROM DISTINCT object_type user_objects;
Subqueries
Subqueries
SELECT FROM WHERE select_list table expr operator (SELECT FROM
select_list table);
A subquery (inner query) geralmente executada antes da consulta principal. O resultado da subquery , ento, avaliado pelo da query principal (outer query).
SQL> SELECT enome, depto_num, sal*12 2 FROM emp 3 WHERE cargo = '&cargo'; Enter value for cargo: ANALISTA ENOME DEPTO_NUM SAL*12 ---------- --------- --------FABIO 20 36000 JOSE 20 36000
Enter value for nome_coluna: sal Enter value for condicao: sal>=3000 Enter value for ordenar_por: enome
Define o cabealho
SQL> TTITLE Relatrio de|Empregados'
Define o rodap
SQL> BTITLE 'Confidencial'
Exemplo de Relatrio
Sex Out 24 Relatrio de Empregados pg. 1
Cargo Empregado ----------------------- ----------------------CAIXA PAULO CAIXA RONALDO CAIXA LUCIANO CAIXA MANUEL GERENTE MARCOS GERENTE ANA GERENTE JOAO VENDEDOR CELSO VENDEDOR MARIA VENDEDOR SERGIO VENDEDOR MATHEUS
Salario ----------------R$1,100.00 R$950.00 R$1,300.00 R$800.00 R$2,850.00 R$2,450.00 R$2,975.00 R$1,600.00 R$1,250.00 R$1,500.00 R$1,250.00
Confidencial
Stored Procedures
Stored Procedures
Procedimantos que permanecem armazenados no banco, de forma compilada. Servem para executar alguma computao 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; /
Execuo
EXECUTE AJUSTE(0.1, 21); O procedimento executado. Caso algum erro ocorra, ento a tabela de erros ser atualizada.
Exemplo
CREATE OR REPLACE PROCEDURE Lista_Func (codDepto llma_funcionarios.depto_func%TYPE) 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; --declaracao das variaveis do cursor v_cod_func llma_funcionarios.cod_func%TYPE; v_nome_func llma_funcionarios.nome_func%TYPE;
Exemplo (cont)
--inicio da procedure BEGIN open c_diario_func; dbms_output.put_line('** Lista do Diario dos Funcionarios **'); loop fetch c_diario_func into v_cod_func, v_nome_func; dbms_output.put_line('Codigo do Funcionario : ' || v_cod_func); dbms_output.put_line('Nome Funcionario : ' || v_nome_func); dbms_output.put_line(''); dbms_output.put_line('---------------------------------'); dbms_output.put_line(''); exit when c_diario_func%NOTFOUND; end loop; close c_diario_func; END; --excecoes exception when no_data_found then dbms_output.put_line('Nenhuma registro foi encontrado'); when others then dbms_output.put_line('Erro desconhecido: ' || to_char(sqlcode)); END Lista_Func; /
Procedures
Prodecures no retornam valores A partir de uma procedure pode-se chamar outras procedures Procedures so salvas em um arquivo .sql e compiladas no Oracle com o comando @caminho_completo do SQL Plus Caso ocorra algum erro de compilao a procedure no funciona corretamente Erros de compilao podem ser vistos com o comando show_errors do SQL Plus.
Triggers
Triggers
Procedimantos especiais guardados no banco de forma compilada Acionados automaticamente pelo banco quando sua condio de ativao for veradeira
Sintaxe
CREATE OR REPLACE TRIGGER NOME CONDICAO DE ATIVACAO BEGIN <CORPO> END; / A CONDICAO DE ATIVACAO pode ser montada a partir de expresses lgicas: BEFORE DELETE ON NOME_TABELA ou AFTER DELETE OR INSERT OR UPDATE ON NOME_TABELA
Sintaxe (exemplo)
CREATE OR REPLACE TRIGGER LOG_FUNCIONARIO BEFORE DELETE OR INSERT OR UPDATE ON acf_EMPREGADO BEGIN INSERT INTO acf_LOG_funcionario VALUES(SYSDATE,'Tabela modificada'); END; /
Sintaxe (exemplo)
CREATE OR REPLACE TRIGGER t_verifica_data_contratos BEFORE insert on llma_diario for each row
into
datainicial
--faz a condicao se a data ta no periodo IF ((:new.datahoraini < datainicial) or (:new.datahoraini > datafinal)) then raise_application_error(-20500, 'Data Inicio tem que esta no periodo de: '|| to_char(datainicial,'dd/mm/yyyy') || ' a ' || to_char(datafinal,'dd/mm/yyyy')); END IF; END; /
Sintaxe (exemplo)
CREATE or REPLACE TRIGGER TG_DataColetaInvalida BEFORE INSERT ON xcoleta FOR EACH ROW
BEGIN IF :NEW.data < sysdate THEN RAISE_APPLICATION_ERROR ('-20000', 'Data j passou'); END IF; END; /
Triggers
Triggers so salvos em um arquivo .sql e compiladas no Oracle com o comando @caminho_completo do SQL Plus Caso ocorra algum erro de compilao o trigger no funciona corretamente Erros de compilao podem ser vistos com o comando show_errors do SQL Plus. Gatilhos podem ser utilizados para implementar regras de negcio