A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Conceitos básicos de SQL e ORACLE SQL* PLUS. O Comando SELECT SELECT[DISTINCT] {*, column [alias],...} FROMtable; –SELECT identifica as colunas –FROM.

Apresentações semelhantes


Apresentação em tema: "Conceitos básicos de SQL e ORACLE SQL* PLUS. O Comando SELECT SELECT[DISTINCT] {*, column [alias],...} FROMtable; –SELECT identifica as colunas –FROM."— Transcrição da apresentação:

1 Conceitos básicos de SQL e ORACLE SQL* PLUS

2 O Comando SELECT SELECT[DISTINCT] {*, column [alias],...} FROMtable; –SELECT identifica as colunas –FROM identifica as tabelas

3 Selecionando linhas SQL> SELECT * 2 FROM depto; SQL> SELECT depto_num, depto_loc 2 FROM depto; SQL> SELECT enome, sal, sal FROMemp; SQL> SELECT enome, sal, 12*sal FROM emp;

4 Definindo Alias para Colunas SQL> SELECT enome AS nome, sal AS salario 2 FROM emp; NOME SALARIO SQL> SELECT enome "Nome", 2 sal*12 Salario Anual" 3 FROM emp; Nome Salario Anual

5 Eliminando Linhas Duplicadas SQL> SELECT DISTINCT depto_num 2 FROM emp; DEPTO_NUM –DISTINCT

6 SQL*Plus

7 SQL Plus n Aplicação cliente para conexão com Oracle. n Localização: –Start Programs Banco de dados Oracle OraHome81 Application Development SQL Plus –Usuário e senha são idênticos

8 Interface gráfica do SQL Plus

9 Configurações n Opcoes ambiente –Linesize – modifica a quantidade de caracteres por linha. Escolher personalizado. Escolhar ativar. Especificar 1000 caracteres. Aumentar largura do buffer para 1000.

10 Listando a Estrutura de Tabelas SQL> DESCRIBE depto Name Null? Type DEPTO_NUM NOT NULL NUMBER(2) DEPTO_NOM VARCHAR2(14) DEPTO_LOC VARCHAR2(13)

11 Executando um script no SQL

12 Restringindo consultas e ordenando resultados

13 Utilizando a Cláusula WHERE SQL> SELECT enome, cargo, depto_num 2 FROM emp 3 WHERE cargo='CAIXA'; ENOME CARGO DEPTO_NUM RONALDO CAIXA 30 MANUEL CAIXA 20 PAULO CAIXA 20 LUCIANO CAIXA 10

14 Operadores de Comparação Operador = > >= < <= <> Significado Igual a Maior que Maior ou igual a Menor que Menor ou igual a Diferente de

15 Outros Operadores Operador BETWEEN...AND... IN(lista) LIKE IS NULL Significado Entre dois valores (inclusive) Satisfaz uma lista de valores Satisfaz um padrão de caracteres É um valor nulo (null)

16 Operador BETWEEN ENOME SAL MARIA 1250 SERGIO 1500 MATHEUS 1250 PAULO 1100 LUCIANO 1300 SQL> SELECTenome, sal 2 FROM emp 3 WHEREsal BETWEEN 1000 AND 1500; limite inferior limite superior

17 Operador IN SQL> SELECTenum, enome, sal, ger 2 FROM emp 3 WHEREger IN (7902, 7566, 7788); ENUM ENOME SAL GER JOSE MANUEL FABIO PAULO

18 SQL> SELECTenome 2 FROM emp 3 WHEREenome LIKE M%'; Operador LIKE –Utilize o operador LIKE para realizar pesquisas por padrões (wildcards). % substitui zero ou mais caracteres _ substitui um único caracter

19 SQL> SELECT enome, ger 2 FROM emp 3 WHERE ger IS NULL; ENOME GER CARLOS Operador IS NULL –Testando valores nulos (null)

20 Operadores Lógicos Operador AND OR NOT Significado Retorna TRUE se a condição de ambos os componentes for TRUE Retorna TRUE se a condição de um dos componentes for TRUE Retorna TRUE se a condição for FALSE (vise-versa)

21 Operador NOT SQL> SELECT enome, cargo 2 FROM emp 3 WHERE cargo NOT IN('CAIXA','GERENTE','ANALISTA'); ENOME CARGO CARLOS PRESIDENTE MARIA VENDEDOR CELSO VENDEDOR SERGIO VENDEDOR MATHEUS VENDEDOR

22 Cláusula ORDER BY SQL> SELECT enome, cargo, depto_num, dtinicio 2 FROM emp 3 ORDER BY dtinicio DESC; ENOME CARGO DEPTO_NUM DTINICIO PAULO CAIXA JAN-83 FABIO ANALISTA DEC-82 LUCIANO CAIXA JAN-82 RONALDO CAIXA DEC-81 JOSE ANALISTA DEC-81 CARLOS PRESIDENTE NOV-81 MARIA VENDEDOR SEP rows selected.

23 Manipulando dados

24 O Comando INSERT –Adicione linhas a uma tabela utilizando o comando INSERT. –O comando INSERT insere apenas uma linha por vez. Não esqueça o COMMIT INSERT INTOtable [(column [, column...])] VALUES(value [, value...]);

25 –Insira uma nova linha informando os valores para cada coluna da tabela. –Liste os valores na mesma ordem das colunas na tabela. –Opcionalmente, liste as colunas na cláusula do INSERT. –Strings e datas devem ser informando entre aspas simples. Inserindo Novas Linhas SQL> INSERT INTO depto (depto_num, depto_nome, depto_loc) 2 VALUES (50, 'DESENVOLVIMENO', RECIFE'); 1 row created.

26 SQL> INSERT INTOdepto (depto_num, depto_nome ) 2 VALUES(60, REC HUMANOS'); 1 row created. SQL> INSERT INTOdepto 2 VALUES(70, JURIDICO', NULL); 1 row created. Inserindo Linhas com Nulls –Implicitamente: omita o nome da coluna da lista de colunas. –Explicitamente: especifique o valor NULL.

27 Inserindo Data e Hora do Sistema –A função SYSDATE informa a data e a hora corrente. SQL> INSERT INTOemp (enum, enome, cargo, 2ger, dtinicio, sal, comis, 3depto_num) 4 VALUES(7196, ANTONIO', VENDEDOR', 57782, SYSDATE, 2000, NULL, 610); 1 row created.

28 Inserindo Datas –Adicionando um novo empregado. SQL> INSERT INTO emp 2 VALUES (2296,'ROMANO',VENDEDOR',7782, 3 TO_DATE( ','DD-MM-YYYY'), , NULL, 10); 1 row created. –Verificando a data de admissão. ENUM ENOME CARGO GER DTINICIO SAL COMIS DEPTO_NUM ROMANO VENDEDOR FEB

29 O Comando UPDATE –Modificando linhas existentes com o comando UPDATE. –Modifique mais de uma linha por vez especificando uma condição na cláusula WHERE. Não esqueça o COMMIT UPDATEtable SETcolumn = value [, column = value] [WHERE condition];

30 Atualizando linhas em uma tabela –Linhas específicas podem ser modificadas utilizando a cláusula WHERE. –Todas as linhas da tabela são modificadas se a cláusula WHERE for omitida. SQL> UPDATE emp 2 SET depto_num = 20 3 WHERE enum = 7782; 1 row updated. SQL> UPDATE emp 2 SET depto_num = 20; 14 rows updated.

31 –Linhas específicas podem ser eliminadas utilizando a cláusula WHERE. –Todas as linhas da tabela são eliminadas se a cláusula WHERE for omitida. Eliminando Linhas de uma Tabela SQL> DELETE FROMdepto 2 WHERE depto_nome = 'DESENVOLVIMENTO'; 1 row deleted. SQL> DELETE FROMdepto; 4 rows deleted.

32 Exibindo dados de múltiplas tabelas

33 Joins –Utilize uma junção para consultar dados de mais de uma tabela. –Especifique a condição de junção na cláusula WHERE. –Informe o nome da tabela junto com o nome da coluna, se tabelas diferentes possuírem colunas com os mesmos nomes. SELECTtable1.column, table2.column FROMtable1, table2 WHEREtable1.column1 = table2.column2;

34 Criando Alias para Tabelas SQL> SELECT emp.enum, emp.enome, emp.depto_num, 2 depto.depto_num, depto.depto_loc 3 FROM emp, depto 4 WHERE emp.depto_num = depto.depto_num; 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;

35 Funções de Grupo (Agregação)

36 O que são Funções de Grupo? –Funções de grupo operam em conjuntos de linhas, produzindo um resultado por grupo. EMP o maior salário da tabela EMP DEPTO_NUM SAL MAX(SAL)

37 Tipos de Funções de Grupo –AVG (média) –COUNT (contagem) –MAX (máximo) –MIN (mínimo) –STDDEV –SUM (soma) –VARIANCE (variação)

38 Utilizando Funções de Grupo SELECTcolumn, group_function(column) FROMtable [WHEREcondition] [ORDER BYcolumn];

39 AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) SQL> SELECTAVG(sal), MAX(sal), 2MIN(sal), SUM(sal) 3FROMemp 4WHEREcargo LIKE VEND%'; Funções AVG e SUM –Utilize o AVG e SUM apenas para dados numéricos

40 SQL> SELECTMIN(dtinicio), MAX(dtinicio) 2 FROMemp; MIN(DTINI MAX(DTINI DEZ JAN-83 Funções MIN e MAX –Utilize MIN e MAX para qualquer tipo de dado

41 COUNT(*) SQL> SELECTCOUNT(*) 2 FROMemp 3 WHEREdepto_num = 30; Função COUNT –COUNT(*) retorna o número de linhas na tabela

42 COUNT(COMIS) SQL> SELECTCOUNT(comis) 2 FROMemp 3 WHEREdepto_num = 30; Função COUNT –COUNT(coluna) retorna o número de linhas não nulas da tabela

43 Criando Grupos de Dados EMP média salarial por departamento DEPTO_NUM SAL DEPTO_NUM AVG(SAL)

44 Criando Grupos de Dados: A Cláusula GROUP BY SELECTcolumn, group_function(column) FROMtable [WHEREcondition] [GROUP BYgroup_by_expression] [ORDER BYcolumn]; –Divida as linhas de uma tabela em pequenos grupos usando a cláusula GROUP BY.

45 SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY depto_num; –Colunas utilizadas em funções de grupo não precisam estar listadas no GROUP BY. AVG(SAL) A Cláusula GROUP BY

46 SQL> SELECT depto_num, cargo, sum(sal) 2 FROM emp 3 GROUP BY depto_num, cargo; Utilizando GROUP BY em Múltiplas Colunas DEPTO_NUM CARGO SUM(SAL) CAIXA GERENTE PRESIDENTE ANALISTA CAIXA rows selected.

47 Criando e Manipulando Tabelas

48 Tabela –Unidade básica de armazenamento da base de dados, formada por colunas e linhas (tuplas)

49 Criando Tabelas SQL> CREATE TABLE depto 2(depto_num NUMBER(2), 3 depto_nom VARCHAR2(14), 4 depto_loc VARCHAR2(13)); Table created. –Criando a tabela depto. –Listando a estrutura da tabela criada. SQL> DESCRIBE depto Name Null? Type DEPTO_NUM NOT NULL NUMBER(2) DEPTO_NOME VARCHAR2(14) DEPTO_LOC VARCHAR2(13)

50 Consultando o Dicionário de Dados –Tabelas do usuário –Objetos –Tabelas, visões, sinônimos e seqüências SQL> SELECT* 2FROMuser_tables; SQL> SELECTDISTINCT object_type 2FROM user_objects; SQL> SELECT* 2FROMuser_catalog;

51 Descartando uma Tabela –Todos os dados e a estrutura da tabela são destruídos. –Qualquer transação pendente é encerrada. –Todos os índices são descartados. Essa operação não pode ser desfeita. SQL> DROP TABLE depto30; Table dropped.

52 Renomeando Objetos da Base SQL> RENAME depto TO departamento; Table renamed. –Tabelas, visões, sinônimos e seqüências

53 Truncando uma Tabela –Remove todas as linhas da tabela liberando o espaço ocupado Essa operação não pode ser desfeita SQL> TRUNCATE TABLE departamento; Table truncated.

54 Subqueries

55 –A subquery (inner query) geralmente é executada antes da consulta principal. –O resultado da subquery é, então, avaliado pelo da query principal (outer query). SELECTselect_list FROMtable WHEREexpr operator (SELECTselect_list FROMtable);

56 2975 SQL> SELECT enome 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE enum=7566); Utilizando uma Subquery ENOME CARLOS JOSE FABIO

57 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.

58 Melhorando a apresentação dos resultados no SQL*PLUS

59 Substituindo Variáveis com o & –Utilize uma variável prefixada com um & para ler um valor de entrada. SQL> SELECTenum, enome, sal, depto_num 2 FROMemp 3 WHEREenum = &num_empregado; 7369 Enter value for num_empregado: 7369 ENUM ENOME SAL DEPTO_NUM MANUEL

60 –Utilize aspas simples para datas e strings. ANALISTA Enter value for cargo: ANALISTA ENOME DEPTO_NUM SAL* FABIO JOSE Substituindo Variáveis com o & SQL> SELECT enome, depto_num, sal*12 2 FROM emp 3 WHERE cargo = '&cargo';

61 SQL> SELECTenum, enome, cargo, &nome_coluna 2 FROMemp 3 WHERE&condicao 4 ORDER BY&ordenar_por; Especificando Nomes de Colunas, Expressões e Textos em Tempo de Execução sal Enter value for nome_coluna: sal sal>=3000 Enter value for condicao: sal>=3000 enome Enter value for ordenar_por: enome ENUM ENOME CARGO SAL JOSE ANALISTA CARLOS PRESIDENTE FABIO ANALISTA 3000

62 Utilizando o Comando TTITLE e o BTITLE –Exibe cabeçalhos e rodapés –Define o cabeçalho –Define o rodapé TTI[TLE] [texto|OFF|ON] SQL> TTITLE Relatório de|Empregados' SQL> BTITLE 'Confidencial'

63 Exemplo de Relatório Sex Out 24 pág. 1 Relatório de Empregados Cargo Empregado Salario CAIXA PAULO R$1, CAIXA RONALDO R$ CAIXA LUCIANO R$1, CAIXA MANUEL R$ GERENTE MARCOS R$2, GERENTE ANA R$2, GERENTE JOAO R$2, VENDEDOR CELSO R$1, VENDEDOR MARIA R$1, VENDEDOR SERGIO R$1, VENDEDOR MATHEUS R$1, Confidencial

64 Stored Procedures

65 n Procedimantos que permanecem armazenados no banco, de forma compilada. n Servem para executar alguma computação quando invocados

66 Sintaxe CREATE OR REPLACE PROCEDURE NOME ( NOME TIPO[,NOME TIPO] ) IS BEGIN [DECLARE] COMMIT; EXCEPTION WHEN OTHERS THEN END NOME; /

67 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; /

68 Execução EXECUTE AJUSTE(0.1, 21); O procedimento é executado. Caso algum erro ocorra, então a tabela de erros será atualizada.

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

70 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; /

71 Procedures n Prodecures não retornam valores n A partir de uma procedure pode-se chamar outras procedures n Procedures são salvas em um arquivo.sql e compiladas no Oracle com o do SQL Plus n Caso ocorra algum erro de compilação a procedure não funciona corretamente n Erros de compilação podem ser vistos com o comando show_errors do SQL Plus.

72 Triggers

73 n Procedimantos especiais guardados no banco de forma compilada n Acionados automaticamente pelo banco quando sua condição de ativação for veradeira

74 Sintaxe CREATE OR REPLACE TRIGGER NOME CONDICAO DE ATIVACAO BEGIN END; / A CONDICAO DE ATIVACAO pode ser montada a partir de expressões lógicas: BEFORE DELETE ON NOME_TABELA ou AFTER DELETE OR INSERT OR UPDATE ON NOME_TABELA

75 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; /

76 Sintaxe (exemplo) CREATE OR REPLACE TRIGGER t_verifica_data_contratos BEFORE insert on llma_diario for each row 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; --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; /

77 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; /

78 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; /

79 Triggers n Triggers são salvos em um arquivo.sql e compiladas no Oracle com o do SQL Plus n Caso ocorra algum erro de compilação o trigger não funciona corretamente n Erros de compilação podem ser vistos com o comando show_errors do SQL Plus. n Gatilhos podem ser utilizados para implementar regras de negócio


Carregar ppt "Conceitos básicos de SQL e ORACLE SQL* PLUS. O Comando SELECT SELECT[DISTINCT] {*, column [alias],...} FROMtable; –SELECT identifica as colunas –FROM."

Apresentações semelhantes


Anúncios Google