Você está na página 1de 104

INTRODUO AO ORACLE 11g

Introduo ao Oracle SQL 11g

INDICE
CONCEITO DE BANCO DE DADOS RELACIONAL ......................................................................................................................6 Conceitos do Modelo Relacional ...................................................................................................................................... 6 Funes do Banco de Dados Relacional ........................................................................................................................... 6 Regras Gerais.................................................................................................................................................................... 6 Propriedades do Banco de Dados Relacional .........................................................................................................................6 Lista Resumida dos Objetos do Banco de Dados .............................................................................................................. 7 Objeto .............................................................................................................................................................................. 7 Table................................................................................................................................................................................. 7 Constraints de Integridade dos dados .............................................................................................................................. 7 Tipo de Constraint ............................................................................................................................................................ 7 Descrio .......................................................................................................................................................................... 7 Recursos do SQL ............................................................................................................................................................... 8 Recursos do SQL*Plus ...................................................................................................................................................... 8 Categorias de Comandos SQL ........................................................................................................................................... 9 Categoria de SQL ....................................................................................................................................................................9 Descrio................................................................................................................................................................................9 Categoria de SQL ....................................................................................................................................................................9 Descrio................................................................................................................................................................................9 Categorias de Comandos SQL*Plus ........................................................................................................................................9 Categoria ................................................................................................................................................................................9 Comando ................................................................................................................................................................................9 Comandos de execuo .........................................................................................................................................................9 , EXECUTE, RUN ......................................................................................................................................................................9 Comandos de edio ..............................................................................................................................................................9 LIST, APPEND, CHANGE, DEL, INPUT, EDIT .............................................................................................................................9 Comandos de Sistema ............................................................................................................................................................9 SET, SHOW, PAUSE .................................................................................................................................................................9 Comandos de formatao ......................................................................................................................................................9 COLUMN, CLEAR, BREAK, COMPUTE, TTITLE, BTITLE .............................................................................................................9 Comandos para manipulao de arquivos .............................................................................................................................9 SAVE, GET, START, @ , SPOOL ................................................................................................................................................9 Comandos interativos ............................................................................................................................................................9 PROMPT, ACCEPT, DEFINE, VARIABLE, PRINT ........................................................................................................................9

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

Comandos para acesso ao banco de dados ...........................................................................................................................9 CONNECT, DISCONNECT ........................................................................................................................................................9 Comandos em geral ...............................................................................................................................................................9 EXIT, HELP, DESCRIBE (DESC), HOST, QUIT .............................................................................................................................9 FUNDAMENTOS DE SQL .......................................................................................................................................................12 Operadores aritmticos ................................................................................................................................................. 12 Operador ........................................................................................................................................................................ 12 Operador de concatenao ............................................................................................................................................ 12 Operadores de comparao ........................................................................................................................................... 12 Operadores lgicos ........................................................................................................................................................ 13 Operadores de conjunto ................................................................................................................................................ 13 UNION ....................................................................................................................................................................... 13 UNION ALL ................................................................................................................................................................ 13 INTERSECT ................................................................................................................................................................. 14 MINUS ....................................................................................................................................................................... 14 Escrevendo pesquisas simples com o comando SELECT ......................................................................................................14 Selecionando apenas as colunas desejadas .........................................................................................................................15 Mostrando nomes especficos para colunas ........................................................................................................................15 Removendo linhas duplicadas..............................................................................................................................................15 Exibindo linhas especficas de dados ...................................................................................................................................16 Ordenando resultados .........................................................................................................................................................16 Tabela DUAL .........................................................................................................................................................................17 Comando ........................................................................................................................................................................ 19 Salvando comandos SQL em arquivos de Script ............................................................................................................. 19 Retornando o arquivo salvo para o SQL*Buffer ............................................................................................................. 19 Executando o arquivo de script ...................................................................................................................................... 19 Entrando com valores em tempo de execuo .............................................................................................................. 20 PROMPT: Permite apresentar um texto para o usurio. ...................................................................................... 21

Variveis de configurao do ambiente SQL*Plus ......................................................................................................... 22 REALIZANDO CALCULO COM DADOS ...................................................................................................................................24 Funes numricas simples .................................................................................................................................................25 RESULTADO ..........................................................................................................................................................................25 ARREDONDA M PARA N CASAS DECIMAIS ...........................................................................................................................25 TRUNCA N PARA M CASAS DECIMAIS ..................................................................................................................................25 RESTO DA DIVISAO M POR N ...............................................................................................................................................25 RETORNA VALOR ABSOLUTO DE N.......................................................................................................................................25

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

RETORNA O CO-SENO DE ARCO ...........................................................................................................................................25 RETORNA O CODIGO ASCII DO CARACTER INFORMADO .....................................................................................................25 RETORNA A RAIZ QUADRADA DE N......................................................................................................................................25 Realizando clculos com NULL:NVL .....................................................................................................................................26 EXPRESSO ..................................................................................................................................................................... 27 Exemplo: ..............................................................................................................................................................................27 Funes simples de data ......................................................................................................................................................28 FUNO ......................................................................................................................................................................... 28 SELECT ROUND(TO_DATE(27-OCT-1992),YEAR) EXEMPLO DE ROUND ........................................................................28 REALIZAR ADIO DE MESES ATRAVS DA FUNO ADD_MONTHS...................................................................................29 ELEMENTO ..................................................................................................................................................................... 31 MANUPULAO DE CARACTERES ........................................................................................................................................33 FUNO ......................................................................................................................................................................... 33 MANIPULAR PARTES DE UM VALOR CARATER COM A FUNO SUBSTR. ...........................................................................37 MOSTRAR DADOS COM A FUNO RPAD............................................................................................................................39 MANIPULAR DADOS COM A FUNO TRIM.........................................................................................................................39 MOSTRAR E MANIPULAR CARACTERES COM A FUNO LTRIM ..........................................................................................39 MOSTRAR E MANIPULAR CARACTERES COM A FUNO CHR .............................................................................................40 MANIPULAR DADOS COM A FUNO CONCAT ...................................................................................................................40 FUNES DE GRUPO SIMPLES .............................................................................................................................................41 FUNO ......................................................................................................................................................................... 41 CRIAR TABELAS A PARTIR DE SUBCONSULTAS .....................................................................................................................75 DELETAR LINHAS A PARTIR DE SUBCONSULTAS ..................................................................................................................76 INSERIR LINHAS DE DADOS A PARTIR DE SUBCONSULTAS ...................................................................................................77 OPERADORES DE CONJUNTO ...............................................................................................................................................78 OPERADOR ...........................................................................................................................................................................78 RETORNA ........................................................................................................................................................................ 78 MINUS ..................................................................................................................................................................................79 ORACLE DATATYPES .............................................................................................................................................................80 Character Datatype ........................................................................................................................................................ 80 Numeric Datatype .......................................................................................................................................................... 80 Date Datatype ................................................................................................................................................................ 80 Datatype ......................................................................................................................................................................... 81 Descrio ........................................................................................................................................................................ 81 Outros Datatypes ........................................................................................................................................................... 81 ANSI/DB2/SQL-DS Datatype ........................................................................................................................................... 82

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

CRIANDO TABELAS NO BANCO DE DADOS ...........................................................................................................................82 CONSTRAINTS ......................................................................................................................................................................85 CRIANDO SEQUENCES ..........................................................................................................................................................87 SIMPLIFICANDO O ACESSO AOS DADOS ATRAVS DE VISES .............................................................................................89 MELHORAR A PERFORMANCE DAS CONSULTAS ATRAVS DE NDICES ...............................................................................90 HISTRICO DE NOVIDADES POR VERSES DO ORACLE .......................................................................................................91

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

CONCEITO DE BANCO DE DADOS RELACIONAL


Os conceitos do modelo relacional foram descritos pela primeira vez pelo Dr. E. F. Codd (do laboratrio de pesquisas da IBM) em um artigo de julho de 1970 chamado A Relational Model of Data for Large Shared Data Banks. (Um Modelo Relacional de Dados par a Grandes Bancos de Dados Compartilhados). Nesse artigo, o Dr. Codd props o modelo relacional para sistemas de banco de dados. Os modelos mais populares, naquela poca, eram os hierrquicos e de rede, ou mesmo simples estruturas de dados de arquivos planos. Os sistemas de gerenciamento de bancos de dados relacionais, ou RDBMS, logo se tornaram bem populares em pouco tempo, devido, especialmente a sua facilidade de uso e flexibilidade de estrutura. Alm disso, houve vrios distribuidores inovadores, como a Oracle, que acrescentaram ao RDBMS um pacote de poderosos produtos de desenvolvimento de aplicativos e produtos para o usurio, proporcionando uma soluo total. Conceitos do Modelo Relacional Colees de objetos ou relaes armazenam os dados. Um conjunto de operadores pode atuar nas relaes para produzir outras relaes. Um banco de dados relacional deve possuir integridade de dados, de modo que esses devem ser precisos e consistentes.

Um exemplo de uma relao uma tabela. Para recuperar os dados de tabelas, use os comandos SQL de operaes relacionais. Funes do Banco de Dados Relacional Gerenciar o armazenamento de dados Controlar o acesso as dados Fornecer um meio para recuperar e modificar os dados

Regras Gerais Valores duplicados no so permitidos em uma chave primria. Em geral, as chaves primrias no podem ser alteradas. Chaves estrangeiras so baseadas em valores de dados e so ponteiros puramente lgicos, no fsicos. O valor de uma chave estrangeira deve coincidir com um valor de chave primria existente ou, ento, deve ser NULL.

Propriedades do Banco de Dados Relacional Um banco de dados relacional baseado em uma percepo do mundo real, que consistem em uma coleo de objetos bsicos, chamados de tabelas, e em relacionamentos entre esses objetos. Uma tabela um conjunto nico de atributos ou caractersticas, chamadas de colunas. Por exemplo, os atributos conta e saldo descrevem uma conta particular em um banco.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

Um relacionamento uma associao entre duas tabelas. Por exemplo, um relacionamento cliente-conta relaciona um cliente a cada conta que ele possui. Os bancos de dados relacionais permitem o relacionamento entre as tabelas por meio da definio de chaves de acesso, visando principalmente evitar inconsistncias e duplicao de informaes. Alguns tipos de chaves de acesso so: Chave primria: a principal chave de acesso a uma tabela. A criao desta chave faz com que, automaticamente, a tabela seja ordenada por esta chave e que no seja permitida duplicidade em seu valor. Chave nica: alm da chave primria, uma tabela pode possuir tantas chaves nicas quantas forem necessrias. Elas chave possibilita que no sejam inseridos dados duplicados em campos que no fazem parte da chave primria. Por exemplo, se na tabela Pessoa a chave primria for o cdigo interno da pessoa, podem ser criadas chaves nicas para o nmero do CPF/CGC e para o nmero da previdncia social. Chave secundria: a chave auxiliar de acesso a uma tabela. A chave secundria tambm possui ndices relacionados que so utilizados em campos nos quais se efetua constante pesquisa ou acesso. Chave estrangeira: permite o acesso e a validao de outras tabelas. Esta chave possibilita que se estabeleam os relacionamentos em um banco de dados. A chave estrangeira deve ser compatvel com sua correspondente chave (primria ou nica) na outra tabela.

Para acessar o banco de dados, execute um comando SQL (Structured Query Language), que a linguagem padro do American National Standards Institute (ANSI) para operao em bancos de dados relacionais. A linguagem contm um vasto conjunto de operadores para combinao e particionamento de relaes. O banco de dados pode ser facilmente modificado, com o uso de comandos SQL. O modelo relacional permite total independncia de dados. Lista Resumida dos Objetos do Banco de Dados

Objeto Table View Sequence Index Synonym Program unit

Descrio Unidade bsica de armazenamento composta de linhas e colunas Representa, logicamente, subconjuntos de dados de uma ou mais tabelas Gera valores de chave primria Melhora o desempenho de algumas consultas Nome alternative para um objeto Procedimento, funo, ou pacote de commandos SQL e PL/SQL

Constraints de Integridade dos dados Assegura que os usurios somente realizem operaes que mantenham um estado correto e consistente do banco de dados, com constraints de integridade de dados. Todas as constraints de integridade de dados devem ser reforadas pelo servidor de banco de dados ou pelo software de aplicao.

Tipo de Constraint Entidade

Descrio Nenhuma parte de uma chave primria pode ser NULL e o valor deve ser nico

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

Referencial Coluna Definido pelo usurio

Os valores das chaves estrangeiras devem corresponder a uma chave primria ou devem ser NULL Os valores na coluna devem corresponder ao tipo de dados definido (datatype) Os valores devem estar de acordo com as regras de negcio da empresa

SQL, SQL*PLUS, PL/SQL E ORACLE SQL DEVELOPER Os comandos SQL, SQL*Plus, e PL/SQL so usados para acessar e tratar dados armazenados em um banco de dados Oracle. SQL uma linguagem de comandos para comunicaes como o Oracle Server a partir de qualquer ferramenta ou aplicao. O Oracle SQL contm vrias extenses. SQL*PLUS consiste na ferramenta Oracle que reconhece e submete comandos SQL e PL/SQL para execuo no servidor Oracle, possuindo tambm sua prpria linguagem de comandos. PL/SQL representa a linguagem procedural Oracle que amplia o SQL ao incluir lgica na aplicao ORACLE SQL DEVELOPER ferramenta grfica que aumenta a produtividade e simplifica as atividades de desenvolvimento do banco de dados Oracle. Recursos do SQL Pode ser usado por vrios usurios, incluindo os que tm pouca ou nenhuma experincia em programao. uma linguagem no-procedural Reduz o tempo exigido para a criao e manuteno de sistemas uma linguagem parecida com o ingls

Recursos do SQL*Plus Aceita a entrada de comandos ad hoc (como e quando necessria) Aceita entradas SQL e PL/SQL dos arquivos Edita os comandos SQL com um editor de linha Controla as definies de ambiente Formata os resultados das consultas em relatrios bsicos Interage com os usurios finais Acessa bancos de dados remotos

Especificaes do Oracle SQL Developer Desenvolvido em Java Suporta Windows, Linux e Mac OS X No requer instalador Conecta a qualquer banco de dados Oracle com verso acima de 9.2

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

Ferramenta gratuita disponvel para download no site http://www.oracle.com Necessita do JDK 1.5 que pode ser obtido no site http://java.sun.com

Categorias de Comandos SQL

Categoria de SQL DDL (Data Definition Language)

DML (Data Manipulation Language)

Transaction Control

Categoria de SQL Session Control System Control

Descrio Usado para definir, alterar ou eliminar objetos do banco de dados. Ex: CREATE TABLE, ALTER INDEX, GRANT, REVOKE, TRUNCATE, etc. Comandos usados para acessar, criar ou manipular dados em estruturas existentes. Ex: SELECT, INSERT, UPDATE, DELETE, etc. Controla as alteraes realizadas atravs dos comandos DML, permitindo salv-las ou discartlas. Ex: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION Descrio Permitem gerenciar as propriedades da sesso do usurio. Ex: SET ROLE, ALTER SESSION Usados no gerenciamento das propriedades do banco de dados atravs do comando ALTER SYSTEM.

Categorias de Comandos SQL*Plus Categoria Comandos de execuo Comandos de edio Comandos de Sistema Comandos de formatao Comandos para manipulao de arquivos Comandos interativos Comandos para acesso ao banco de dados Comandos em geral Comando / , EXECUTE, RUN LIST, APPEND, CHANGE, DEL, INPUT, EDIT SET, SHOW, PAUSE COLUMN, CLEAR, BREAK, COMPUTE, TTITLE, BTITLE SAVE, GET, START, @ , SPOOL PROMPT, ACCEPT, DEFINE, VARIABLE, PRINT CONNECT, DISCONNECT EXIT, HELP, DESCRIBE (DESC), HOST, QUIT

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

TABELAS EXEMPLOS DO CURSO

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

10

Introduo ao Oracle SQL 11g

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

11

Introduo ao Oracle SQL 11g

FUNDAMENTOS DE SQL Operadores aritmticos Operador + * / Propsito Adio Subtrao Multiplicao Diviso Exemplo 2+4 30.4 8 5 * 10 7.9 / 3

Operador de concatenao
Utilizado para concatenar strings, representado por duas barras verticais (||), exemplo: Oracle9i || Database resulta em Oracle9iDatabase.

Operadores de comparao Operador = Propsito Testes de igualdade Exemplo SELECT * FROM emp WHERE last_name = SCOTT; SELECT * FROM emp WHERE first_name <> TIGER; SELECT last_name FROM emp WHERE salary < 2000; SELECT first_name, salary FROM emp WHERE salary > 10000; SELECT first_name, salary FROM emp WHERE first_name IN (JOHN, SAM, MARY); SELECT last_name FROM emp WHERE salary <= ANY ( SELECT salary FROM emp WHERE dept = 10); SELECT last_name FROM emp WHERE salary <= ALL(500,1200,800)

!= <> ^= < <= > >= [NOT] IN

As trs formas so usadas para testes de diferena Testar se valor menor ou menorigual a outro Testar se valor maior ou maiorigual a outro

Testar se determinado valor igual a qualquer elemento da lista. Caso o operador NOT seja usado, retornar TRUE caso o valor no esteja na lista ANY Compara o valor com cada elemento SOME da lista ou da sub-consulta. Deve ser usado aps algum dos operadores =,!=, >,<,>=,<= ALL Compara o valor com TODOS os elementos da Lista. Deve ser acompanhado por algum dos operadores =,!=, >,<,>=,<= [NOT] BETWEEN Compara se valor maior-igual a e SELECT last_name FROM a AND b menor-igual b emp WHERE salary BETWEEN 5000 and 10000; [NOT] EXISTS Retorna TRUE se a sub-consulta SELECT last_name FROM

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

12

Introduo ao Oracle SQL 11g

Operador [NOT] LIKE

IS [NOT] NULL

retorna alguma linha Propsito Comparaes parciais. O caracter curinga % usado para comparar qualquer valor e o caracter _ compara um caracter na posio desejada. A palavra-chave ESCAPE usada para tratar o caracter % ou _ como uma literal e no como um caracter especial que seu padro. O nico operador usado para testar valores NULOS (NULL)

emp A WHERE EXISTS( Exemplo SELECT last_name FROM emp WHERE last_name LIKE _HOR%

SELECT last_name FROM emp WHERE salary IS NULL;

Operadores lgicos So usados para combinar o resultado de duas ou mais condio de comparao produzindo um resultado nico ou invertendo o resultado da comparao.

Operador NOT

Propsito Inverte o resultado.

AND

OR

Exemplo SELECT * FROM emp WHERE NOT (salary < 1000); Retorna TRUE se todas as comparaes forem SELECT * FROM emp verdadeiras WHERE last_name = JACOB AND sal > 5000; Retorna TRUE se uma das comparaes forem SELECT * FROM emp verdadeiras WHERE last_name = JACOB OR last_name = THOMAS;

Operadores de conjunto Usados para combinar os resultados de duas ou mais pesquisas.

Operador UNION

UNION ALL

Propsito Exemplo Retorna todas as linhas das pesquisas. No SELECT last_name FROM retorna linhas duplicadas emp UNION SELECT first_name FROM emp; Retorna todas as linhas das pesquisas SELECT last_name FROM incluindo as duplicadas emp UNION ALL

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

13

Introduo ao Oracle SQL 11g

Operador INTERSECT

MINUS

SELECT first_name emp; Propsito Exemplo Retorna apenas as linhas existentes em SELECT last_name ambas as pesquisas emp INTERSECT SELECT first_name emp; Retorna as linhas da primeira pesquisa que SELECT last_name no existam na segunda emp MINUS SELECT first_name emp;

FROM

FROM

FROM FROM

FROM

Escrevendo pesquisas simples com o comando SELECT Sintaxe: SELECT <COLUNAS> FROM <TABELAS> WHERE <CONDIO> ORDER BY <EXPRESSO OU CHAVE> Ex:
SQL9i>select * from dept; DEPTNO ---------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON

Listando a estrutura da tabela


SQL9i>DESC EMP Name Null? ----------------------------------------- -------EMPNO NOT NULL ENAME JOB MGR HIREDATE SAL COMM DEPTNO Type --------------------NUMBER(4) VARCHAR2(10) VARCHAR2(9) NUMBER(4) DATE NUMBER(7,2) NUMBER(7,2) NUMBER(2)

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

14

Introduo ao Oracle SQL 11g

Selecionando apenas as colunas desejadas


SQL9i>select empno, ename from emp; EMPNO ---------7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

Mostrando nomes especficos para colunas


SQL9i>select empno Cod, ename As "Nome Func." from emp; COD ---------7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 Nome Func. ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

Removendo linhas duplicadas


SQL9i>select DISTINCT job from emp; JOB --------ANALYST CLERK

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

15

Introduo ao Oracle SQL 11g

MANAGER PRESIDENT SALESMAN

Exibindo linhas especficas de dados


SQL9i>select ename, job from emp where deptno=10; ENAME ---------CLARK KING MILLER JOB --------MANAGER PRESIDENT CLERK

SQL9i>select ename, sal, job from emp where sal > 3000; ENAME SAL JOB ---------- ---------- --------KING 5000 PRESIDENT SQL9i>select ename, sal, job from emp where ename like 'A%'; ENAME SAL JOB ---------- ---------- --------ALLEN 1600 SALESMAN ADAMS 1100 CLERK SQL9i>select ename, sal from emp where deptno=30 and comm is not null; ENAME SAL ---------- ---------ALLEN 1600 WARD 1250 MARTIN 1250 TURNER 1500

Ordenando resultados
SQL9i> select ename, sal 2 from emp 3 where job = 'SALESMAN' 4 order by sal DESC; ENAME SAL ---------- ---------ALLEN 1600 TURNER 1500 WARD 1250 MARTIN 1250

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

16

Introduo ao Oracle SQL 11g

SQL9i>select empno, ename, hiredate 2 from emp 3 where deptno = 20 4 order by 3; EMPNO ---------7369 7566 7902 7788 7876 ENAME ---------SMITH JONES FORD SCOTT ADAMS HIREDATE ---------17/12/1980 02/04/1981 03/12/1981 19/04/1987 23/05/1987

SQL9i>select empno cod, ename nome 2 from emp 3 where job='MANAGER' 4 order by cod; COD ---------7566 7698 7782 NOME ---------JONES BLAKE CLARK

SQL9i>select mgr, empno, ename 2 from emp 3 WHERE mgr is not null 4 order by mgr DESC, empno ASC; MGR EMPNO ENAME ---------- ---------- ---------7902 7369 SMITH 7839 7566 JONES 7839 7698 BLAKE 7839 7782 CLARK 7788 7876 ADAMS 7782 7934 MILLER 7698 7499 ALLEN 7698 7521 WARD 7698 7654 MARTIN 7698 7844 TURNER 7698 7900 JAMES 7566 7788 SCOTT 7566 7902 FORD

Tabela DUAL

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

17

Introduo ao Oracle SQL 11g

DUAL uma tabela criada automaticamente pelo Oracle atravs do dicionrio de dados. Ebora pertena ao usurio SYS, pode ser acessada por todos os usurios. Ela possui apenas uma coluna chamada DUMMY, definida como VARCHAR2(1) e contm uma linha com o valor X. A aplicao mais comum para a tabela DUAL selecionar variveis de sistema e computar expresses com o comando SELECT. Alternativamente, voc pode selecionar uma constante, funo ou uma expresso a partir de qualquer tabela, mas o valor ser retornado tantas vezes quanto o nmero de linhas da tabela.

Ex:
SQL9i>select 'Estou no curso de Introduo ao Oracle' as info from dual; INFO -------------------------------------Estou no curso de Introduo ao Oracle

SQL9i>select SYSDATE, USER from dual; SYSDATE USER ---------- -----------------------------13/04/2004 SCOTT

SQL9i>select SYSDATE, USER from dept; SYSDATE ---------13/04/2004 13/04/2004 13/04/2004 13/04/2004 USER -----------------------------SCOTT SCOTT SCOTT SCOTT

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

18

Introduo ao Oracle SQL 11g

Editando declaraes SQL


O SQL*Plus oferece alguns comandos para alterar seus comandos SQL contidos no SQL*Buffer.

Comando L(ist) A(ppend) DEL I(nput) C(hange) CLEAR BUFFER

Descrio Lista por completo a declarao SQL contida no SQL*Buffer Adiciona um texto ao final de uma linha corrente Elimina a linha corrente Adiciona uma nova linha em uma declarao SQL Alterar textos da linha corrente Limpa o buffer

Aps o trmino da edio do comando SQL no SQL*Buffer, utilize um dos comandos abaixo para executar sua declarao: / : para executar a declarao mostrando somente o resultado; RUN : exibe o comando e executa a declarao. Salvando comandos SQL em arquivos de Script Para salvar os comandos SQL a partir do buffer para um arquivo, podemos utilizar o comando SAVE: SAVE nome_do_arquivo [REPLACE] [APPEND] Retornando o arquivo salvo para o SQL*Buffer GET nome_do_arquivo Executando o arquivo de script @ nome_do_arquivo ou START nome_do_arquivo Voc tambm pode executar arquivos de script dentro de outros arquivos script utilizando o comando @@<nome_do_arquivo>. Assim, o SQL*Plus executar o arquivo procurando no mesmo diretrio do script que o chamou. Caso desejar comentar seus scripts, utilize o comando REM <texto_comentrio> ou entre com o comentrio de vrias linhas /* <texto_comentrio> */

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

19

Introduo ao Oracle SQL 11g

Entrando com valores em tempo de execuo


possvel criar variveis para tornar o comando SQL mais interativo. O smbolo & usado para definir variveis no SQL*Plus que so solicitadas no momento da execuo do comando. Para suprimir as mensagens de substituio da varivel pelo valor informado, utilize o comando SET VERIFY OFF. Voc tambm poder utilizar o comando DEFINE para definir e atribuir automaticamente um valor para uma varivel. O comando UNDEFINE desfaz a definio.

Exemplos:
SQL9i>select empno, ename 2 from emp 3 where deptno = &nr_depto; Entre o valor para nr_depto: 10 antigo 3: where deptno = &nr_depto novo 3: where deptno = 10 EMPNO ---------7782 7839 7934 ENAME ---------CLARK KING MILLER

SQL9i>set verify off SQL9i>select empno, ename 2 from emp 3 where deptno = &nr_depto; Entre o valor para nr_depto: 20 EMPNO ---------7369 7566 7788 7876 7902 ENAME ---------SMITH JONES SCOTT ADAMS FORD

SQL9i>define nr_depto = 30 SSQL9i>select empno, ename 2 from emp 3 where deptno = &nr_depto; EMPNO ---------7499 7521 7654 7698 7844 7900 ENAME ---------ALLEN WARD MARTIN BLAKE TURNER JAMES

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

20

Introduo ao Oracle SQL 11g

Utilizando variveis em arquivos de script


possvel substituir as variveis no momento da chamada do arquivo de script passando os valores como parmetros em suas respectivas posies. Para isso, substitua o nome da varivel por um nmero de parmetro.

Exemplo:
SQL9i>select empno, ename 2 from emp 3 where deptno = &1 4 and sal > &2 5 SQL9i>save c:\query1 Criado arquivo c:\query1.SQL SQL9i>@C:\query1 10 2000 EMPNO ---------7782 7839 ENAME ---------CLARK KING

O SQL*Plus possui tambm outros dois comandos usados para interagir com o usurio atravs de arquivos de script: PROMPT: Permite apresentar um texto para o usurio. ACCEPT: Permite receber valores para variveis atravs de uma mensagem desejada.

Exemplo: Contedo do arquivo QUERY2.SQL:


PROMPT ****************** PROMPT Teste de Script !! PROMPT ================== ACCEPT nr_depto NUMBER PROMPT "Informe o nr. do depto: " SET VERIFY OFF select empno, ename from emp where deptno = &nr_depto; SET VERIFY ON

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

21

Introduo ao Oracle SQL 11g

Executando o arquivo QUERY2.SQL:


SQL9i>@c:\QUERY2 ****************** Teste de Script !! ================== Informe o nr. do depto: 20 EMPNO ---------7369 7566 7788 7876 7902 ENAME ---------SMITH JONES SCOTT ADAMS FORD

Variveis de configurao do ambiente SQL*Plus


O SQL*Plus possui uma srie de variveis para configurao de seu ambiente. Essas variveis so definidas atravs do comando SET. O comando SHOW <varivel> pode ser usado para conhecer a configurao atual da varivel, SHOW ALL lista o ambiente corrente. STORE SET <nome_do_arquivo> cria um arquivo com a definio das variveis do ambiente corrente. Dentre as variveis de ambiente mais usadas, podemos citar:

Nome da varivel AUTO[COMMIT] AUTOT[RACE] ECHO EDITF[ILE] FEED[BACK] HEA[DING] LIN[ESIZE] LONG NEWP[AGE] NULL NUMF[ORMAT PAGES[IZE] PAU[SE] SERVEROUTPUT

SQLP[ROMPT] TERM[OUT]

Descrio Controla quando o Oracle confirma as alteraes. Commit automtico Exibe um relatrio de execuo dos comandos SQL DML Lista ou no os comandos de um arquivo de script executado com START ou @ Nome padro do arquivo para o comando EDIT Controla quando mostrar o nmero de registros retornados por uma pesquisa Exibe ou no os cabealhos de coluna nas pesquisas Nmero de caracteres exibidos por linha Mximo em bytes para visualizao de campos LONG, CLOB Nmero de linhas em branco exibidas a cada pgina Texto a ser apresentado para colunas de valor nulo Formatao padro para campos numricos Nmero de linhas por pgina Pausa entre pginas Exibe as mensages atravs da procedure DBMS_OUTPUT.PUT_LINE em blocos PL/SQL pelo SQL*Plus Define o prompt de comandos do SQL*Plus Exibe ou no os resultados gerados por arquivos de script

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

22

Introduo ao Oracle SQL 11g

TI[ME] Nome da varivel TIMI[NG] VER[IFY]

Apresenta a hora corrente a cada comando Descrio Exibe o tempo de execuo de cada comando SQL ou bloco PL/SQL Define quando exibir o comando SQL antes e aps a substituio dos valores das variveis

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

23

Introduo ao Oracle SQL 11g

REALIZANDO CALCULO COM DADOS

Modificar e apresentar dados em variedade de formas usando padres e funes aritmticas do SQL.

Realizar clculos com nmeros usando operadores aritmticos: Operadores Aritmticos. + SOMA - SUBTRAO * MULTIPLICAO / DIVISO

Use os operadores aritmticos em qualquer clusula SQL, exceto na clusula FROM.

Exemplo: SELECT SOBRENOME, SALARIO, PCT_COMISSAO, SALARIO * PCT_COMISSAO / 100 COMISSAO FROM EMPREGADO WHERE CARGO = Sales Representative ORDER BY SALARIO * PCT_COMISSAO / 100 ;

Especificando um critrio complexo coma clusula WHERE usando clculos. Exemplo: SELECT SOBRENOME, SALARIO, PCT_COMISSAO, SALARIO * PCT_COMISSAO / 100 COMISSAO FROM EMPREGADO WHERE CARGO = Sales Representative AND SALARIO * PCT_COMISSAO / 100 > 200 ORDER BY SALARIO * PCT_COMISSAO / 100 ;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

24

Introduo ao Oracle SQL 11g

Siga a precedncia dos operadores aritmticos quando formular expresses complexas. Regras de precedncia: * Operadores em uma expresso aritmtica so avaliados na seguinte ordem: 1 Multiplicao e Diviso ( * , / ). 2 Adio e Subtrao ( + , - ).

Exemplo: SELECT SOBRENOME, SALARIO, SALARIO * 12 + 100 FROM EMPREGADO WHERE COD_DEPTO = 41; SELECT SOBRENOME, SALARIO, (SALARIO + 100) * 12 FROM EMPREGADO WHERE COD_DEPTO = 41;

Funes numricas simples FUNO ROUND TRUNC MOD ABS ACOS ASCII EXEMPLO ROUND(M,N) TRUNC(N,M) MOD(M,N) ABS(N) ACOS(N) ASCII(CHARACTER) RESULTADO ARREDONDA M PARA N CASAS DECIMAIS TRUNCA N PARA M CASAS DECIMAIS RESTO DA DIVISAO M POR N RETORNA VALOR ABSOLUTO DE N RETORNA O CO-SENO DE ARCO RETORNA O CODIGO ASCII DO CARACTER INFORMADO RETORNA A RAIZ QUADRADA DE N

SQRT

SQRT(N)

Esta uma parte da lista de funes numricas.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

25

Introduo ao Oracle SQL 11g

Exemplo: SELECT SOBRENOME, SALARIO, SALARIO / 22, ROUND(SALARIO/22,0) FROM EMPREGADO WHERE COD_DEPTO = 32;

SELECT SOBRENOME, SALARIO, SALARIO / 22, TRUNC(SALARIO/22,0) FROM EMPREGADO WHERE COD_DEPTO = 32;

SELECT SOBRENOME, DT_ADMISSAO, SYSDATE, SYSDATE-DT_ADMISSAO TOTAL DIAS, TRUNC( (SYSDATE-DT_ADMISSAO) / 7,0) SEMANAS, ROUND(MOD( (SYSDATE-DT_ADMISSAO) / 7),0) SEMANAS,DIAS FROM EMPREGADO WHERE DT_ADMISSAO > 01-JAN-92;

Realizando clculos com NULL:NVL Representando perda, desconhecimento ou valor inapropriado com nulo, uma expresso ou funo contendo valor nulo avalia nulo. Exemplo: SELECT SOBRENOME, SALARIO * PCT_COMISSAO / 100 FROM EMPREGADO WHERE SALARIO > = 1500;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

26

Introduo ao Oracle SQL 11g

Este exemplo mostra que todo valor numrico que calculado ou manipulado com nulos, sempre retornara nulos.

Converter nulo para valor atual em um calculo com a funo NVL Sintaxe: NVL ( EXPR1 , EXPR2 ) Onde: EXPR1: o valor de original que deve conter null. EXPR2: o valor alvo que substituir os nulls. Exemplo: SELECT SOBRENOME, NVL(PCT_COMISSAO,0), SALARIO * NVL(PCT_COMISSAO,0) / 100 COMISSAO FROM EMPREGADO WHERE SALARIO >= 1500;

Realizar clculos com datas:

Realizando clculos com datas usando operadores aritmticos. EXPRESSO DESCRIO DATA+NMERO SOMA DATA NMEROS DE DIAS. DATA - NMERO SUBTRAI DATA NMERO DE DIAS. DATA-DATA RETORNA O NMERO DE DIAS ENTRE AS DATAS.

Exemplo: SELECT SOBRENOME, DT_ADMISSAO, DT_ADMISSAO + 90 FROM EMPREGADO WHERE COD_DEPTO = 42;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

27

Introduo ao Oracle SQL 11g

CALCULAR O NMERO DE DIAS DE UMA DATA OU DA DATA CORRENTE USANDO A FUNO SYSDATE.

Funes simples de data FUNO EXEMPLO SYSDATE SYSDATE ADD_MONTHS ADD_MONTHS(D,N) LAST_DAY LAST_DAY(D) NEXT_DAY NEXT_DAY(D,CHAR)

MONTHS_BETWEEN MONTHS_BETWEEN.

ROUND TRUNC

ROUND(TO_DATE (DATA)) TRUNCT(TO_DATE (DATA))

RESULTADO A DATA E A HORA CORRENTES ADICIONA N MESES A DATA D DATA DO ULTIMO DIA DO MS DA DATA D DEVOLVE O PRIMEIRO DIA DA SEMANA DETERMINADO POR CHAR (MONDAY, FRIDAY ...). O NUMERO DE MESES EXISTENTES (D,E) ENTRE AS DATAS D e E ARREDONDA UMA DATA EM DIA, MS OU ANO. TRUNCA UMA DATA EM DIA,MS OU ANO.

Exemplo de ROUND para Data: SELECT ROUND(TO_DATE(27-OCT-1992),YEAR) EXEMPLO DE ROUND FROM DUAL;

Exemplo de TRUNC para Data: SELECT TRUNC(TO_DATE(27-OCT-1992), YEAR) EXEMPLO DE TRUNC FROM DUAL;

CALCULAR O NMERO DE DIAS A PARTIR DA DATACORRENTE USANDO A FUNO SYSDATE. Exemplo: SELECT SOBRENOME, (SYSDATE DT_ADMISSAO) / 7 SEMANAS

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

28

Introduo ao Oracle SQL 11g

FROM EMPREGADO WHERE COD_DEPTO = 43;

REALIZAR ADIO DE MESES ATRAVS DA FUNO ADD_MONTHS Exemplo: SELECT SOBRENOME, DT_ADMISSAO, ADD_MONTHS( DT_ADMISSAO, 6 ) DT_FUTURA FROM EMPREGADO WHERE COD_DEPTO = 45;

DETERMINAR O LTIMO DIA DO MS PARTIR DE UMA DATA USANDO A FUNO LAST_DAY. Sintaxe: LAST_DAY ( D ) Onde: D, corresponde a data no qual devera ser extrado o valor desejado. Exemplo: SELECT CODIGO, DT_ADMISSAO, LAST_DAY(DT_ADMISSAO) FROM EMPREGADO;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

29

Introduo ao Oracle SQL 11g

DETERMINAR O PRXIMO DIA DA SEMANA PARTIR DE UMA DATA USANDO A FUNO NEXT_DAY.

Sintaxe:

NEXT_DAY( D,CHAR ) Onde: D- Ser a data determinada para retorno do valor desejado. CHAR Ser o dia da semana desejada.

Exemplo: SELECT CODIGO, DT_ADMISSAO, NEXT_DAY( DT_ADMISSAO, MONDAY ) PROXIMA_DATA FROM EMPREGADO;

Determinar o nmero de meses entre duas datas pela utilizao da funo MONTHS_BETWEEN

Exemplo: SELECT CODIGO, DT_ADMISSAO, MONTHS_BETWEEN( SYSDATE, DT_ADMISSAO) MESES PASSADOS

FROM EMPREGADO;

REFORMATAO DE DATAS

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

30

Introduo ao Oracle SQL 11g

Formato de datas. ELEMENTO DD DY DAY DDSP MM MON MONTH YY YYYY HH:MI:SS FM HH24 TH AM OU PM DESCRIO DIA DO MS NOME DO DIA ABREVIADO COM 3 LETRAS NOME DO DIA COM 9 LETRAS NMERO DO DIA DO MS POR EXTENSO NMERO DO MS NOME DO MS ABREVIADO, COM 3 LETRAS NOME DO MS ABREVIADO, COM 9 LETRAS DOIS DGITOS ANO QUATRO DIGITOS ANO HORA, MINUTOS E SEGUNDOS RETIRA ESPAO EXTRA EM CADA ELEMENTO DA MSCARA HORA DO DIA (0-23) NMERO ORDINAL INDICADOR MERIDIANO

MUDAR O FORMATO PARA MOSTRAR DATAS USANDO O COMANDO TO_CHAR

Sintaxe:

TO_CHAR ( DATE_VALUE , FORMAT_MASK )

Onde:

DATA_VALUE - a coluna ou constante que possue um valor data ou numrico. FORMAT_MASKL, o formato para data.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

31

Introduo ao Oracle SQL 11g

Exemplo: SELECT CODIGO, TO_CHAR(DT_PEDIDO, MM/YY ) PEDIDOS FROM PEDIDO WHERE COD_REPR = 11;

FORMATAR O DISPLAY DE VALORES DO TIPO DATA COM A FUNO DE CONVERSO TO_CHAR.

Exemplo: SELECT SOBRENOME, TO_CHAR( DT_ADMISSAO, FMDD OF MONTH YYYY ) ADMISSAO FROM EMPREGADO WHERE COD_DEPTO = 45;

MUDAR O FORMATO PARA ENTREDA DE DATA COM A FUNO DE CONVERSO TO_DATE.

Sintaxe:

TO_DATE ( CHARACTER_VALUE, FORMAT_MASK )

Onde: CHACARACTER_VALUE: a coluna ou constante que est com o tipo caracter FORMAT_MASK: o formato para o valor caracter.

Exemplo:

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

32

Introduo ao Oracle SQL 11g

SELECT TO_DATE(070393,MMDDYY) FROM DUAL;

MUDAR O FORMATO DE ENTRADA E SAIDA PARA NUMEROS QUE ESTEJAM NO FORMATO CARACTER COM A FUNO DE CONVERSO TO_NUMBER.

Sintaxe:

TO_NUMBER ( CHARACTER_VALUE)

Onde:

CHARACTER_VALUE: a coluna ou constante que est com o tipo de caracter.

MANUPULAO DE CARACTERES Combinar strings de caracteres junto com o operador de concatenao ( || ).

Exemplo: SELECT NOME| | | |SOBRENOME NOME FROM EMPREGADO WHERE COD_DEPTO = 41; FUNES SIMPLES CARACTER FUNO INITCAP EXEMPLO INITCAP(NAME) RESULTADO RETORNA NAME COM O

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

33

Introduo ao Oracle SQL 11g

UPPER

LOWER

SUBSTR

LENGTH LPAD

RPAD

TRIM

LTRIM

RTRIM

CONCAT

CHR

REPLACE

PRIMEIRO CARACTER DE CADA PALAVRA EM MAISCULA UPPER(NAME) CONVERTE TODOS OS CARACTERES DE NAME PARA MAISCULA LOWER(NAME) CONVERTE TODOS OS CARACTERES DE NAME PARA MINUSCULA SUBSTR(C,M,[N]) A SUBSEQUENCIA DE C COM INICIO NA POSIO M COM N CARACTERES. CASO N SEJA OMITIDO, RETORNA DA POSIO M AT O FIM. LENGTH(NAME) NMERO DE CARACTERES EM NAME LPAD(CHAR1, N, CHAR2) PREENCHE A ESQUERDA DE CHAR1 AT O TAMANHO DE N COM O CHAR2 RPAD(CHAR1,N,CHAR2) PREENCHE A DIREITA DE CHAR1 AT O TAMANHO DE N COM O CHAR 2. TRIM(CHAR1 FROM CHAR2) A FUNO IR REMOVER QUALQUER CARACTER IGUAL A CHAR1 A PARTIR DA STRING DE CHAR2 LTRIM(CHAR1, CHAR2) A FUNO IR REMOVER A ESQUERDA DE CHAR1 O CARACTER IGUAL A CHAR2 RTRIM(CHAR1, CHAR2) A FUNO IR REMOVER A DIREITA DE CHAR1 O CARACTER IGUAL A CHAR2 CONCAT(CHAR1,CHAR2) RETORNA A CONCATENAO DE CHAR1 C/ CHAR2 EQUIVALENTE AO OPERADOR || CHR(N) RETORNA PARA O CARACTER TENDO O EQUIVALENTE BINRIO DE N REPLACE(CHAR1,CHAR2,CHAR3) RETORNA A SUBSTITUIO DE CHAR 2 POR CHAR3 A PARTIR DA STRING CHAR1

TRABALHANDO COM A EXPRESSAO DECODE;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

34

Introduo ao Oracle SQL 11g

DECODE (expr, search, result, default )

Onde: Para avaliar a expresso, o Oracle compara expr para cada valor de search, um a um. Se expr igual a search, o Oracle retorna o result correspondente. Se no achou, o Oracle retorna o default, ou se o default omitido, retorna null.

Se expr e search contm dados caracter, o Oracle vai compar-los semanticamente.

Exemplo: SELECT cod_depto, decode(cod_depto,10,Finance, 31,SALES, 32,SALES, 33,SALES, 34,SALES, 35,SALES, 41,OPERATION, 42,OPERATION, 43,OPERATION, 44,OPERATION, 45,OPERATION, Administration) Nome Depto FROM empregado;

MOSTRAR VALORES CARACTER COM INICIAIS MAISCULAS COM FUNO INITCAP Exemplo:

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

35

Introduo ao Oracle SQL 11g

SELECT INITCAP(COD_USUARIO) USUARIO, CARGO FROM EMPREGADO WHERE CARGO LIKE VP%; Mostar o sobrenome e salrio do presidente:

SELECT SOBRENOME, SALARIO FROM EMPREGADO WHERE INITCAP(CARGO) = Presidente;

MOSTRAR E MANIPULAR CARACTERES EM MAISCULAS COM A FUNO UPPER. Exemplos: SELECT NOME, SOBRENOME FROM EMPREGADO WHERE SOBRENOME = PATEL; NO ROWS SELECTED

SELECT NOME, SOBRENOME FROM EMPREGADO WHERE UPPER(SOBRENOME) = PATEL; NOME _____ SOBRENOME ___________

Vikram Patel Radha Patel MOSTRAR VALORES CARACTER EM MINSCULAS COM A FUNO LOWER.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

36

Introduo ao Oracle SQL 11g

Exemplo: SELECT LOWER(NOME) , LOWER( SOBRENOME) , LOWER(CARGO) FROM EMPREGADO WHERE COD_DEPTO = 50;

SELECT NOME FROM PRODUTO WHERE LOWER(NOME) LIKE %ski%;

MANIPULAR PARTES DE UM VALOR CARATER COM A FUNO SUBSTR.

Sintaxe: SUBSTR( CHAR, M [,N] ) Onde: CHAR- especifica o valor caracter. M- especifica a partir de que posio ele comea a pegar. N- especifica quantas posies ir pegar a partir do elemento M. Exemplo:

SELECT NOME FROM PRODUTO WHERE SUBSTR (NOME, 1,3) = ACE;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

37

Introduo ao Oracle SQL 11g

SELECT NOME | | | | SOBRENOME | |SUBSTR(CARGO,3) VICE PRESIDENTES FROM EMPREGADO WHERE CARGO LIKE VP%;

DETERMINAR O NMERO DE CARACTERES EM UM VALOR CARACTER PELO USO DA FUNO LENGHT

Exemplo: SELECT SOBRENOME, LENGHT(SOBRENOME) FROM EMPREGADO WHERE COD_DEPTO = 50;

SOBRENOME -----------------VELASQUEZ SMITH

LENGTH (SOBRENOME) --------------------------------9 5

MOSTRAR E MANIPULAR CARACTERES COM A FUNO LPAD.

Exemplo: SELECT LPAD( Page 1, 15, *. ) exemplo LPAD FROM DUAL;

LPAD -------*.*.*.*.*Page 1

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

38

Introduo ao Oracle SQL 11g

MOSTRAR DADOS COM A FUNO RPAD

Exemplo: SELECT RPAD (MORRISON, 12 , ab) exemplo o RPAD FROM DUAL;

RPAD ---------MORRISONabab

MANIPULAR DADOS COM A FUNO TRIM

Exemplo: SELECT TRIM ( 0 FROM 009872348900) Exemplo TRIM FROM DUAL; TRIM ---------98723489

MOSTRAR E MANIPULAR CARACTERES COM A FUNO LTRIM

Exemplo: SELECT LTRIM(xyxXxyLASTWORD,xy) LTRIM example FROM DUAL; LTRIM ----------XxyLASTWORD

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

39

Introduo ao Oracle SQL 11g

MOSTRAR E MANIPULAR CARACTERES COM A FUNO RTRIM Exemplo: SELECT RTRIM(BROWNINGyxXxy,xy) RTRIM

FROM DUAL;

RTRIM _______ BROWNINGyxX

MOSTRAR E MANIPULAR CARACTERES COM A FUNO CHR Exemplo: SELECT CHR(67) | |CHR(65)| |CHR(84) GATO FROM DUAL;

GATO -------CAT

MANIPULAR DADOS COM A FUNO CONCAT Exemplo: SELECT CONCAT(CONCAT(nome, um ) cargo) cargo FROM empregado WHERE cdigo = 7900;

Cargo ----------

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

40

Introduo ao Oracle SQL 11g

JAMES um balconista

FUNES DE GRUPO SIMPLES FUNO EXEMPLO AVG AVG(SALARIO) MAX MIN SUM COUNT MAX(SALARIO) MIN(SALARIO) SUM(SALARIO) COUNT(SALARIO) COUNT(*)

RESULTADO Mdia de Salrio; Ignora Valores Nulos Maior Valor de Salrio Menor Valor de Salrio Soma dos Valores de Salrio Nmero de linhas para o salrio no nulo O * faz contar todas as linhas

Obs: apenas uma parte da lista de funes de grupo.

EXIBIR TOTALIZAO DE RESULTADOS PARA GRUPOS DE LINHAS COM AS CLUSULAS GROUP BY E HAVING.

Declaraes select com novas clusulas.

Sintaxe: SELECT NOME_COLUNA [ NOME_COLUNA ] FROM NOME_TABELA WHERE CONDICAO GROUP BY EXPRESSO_GROUP_BY

Onde:

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

41

Introduo ao Oracle SQL 11g

EXPRESSO_GROUP_BY = especifica a(s) coluna(s) pelos quais sero agrupados pela funo de grupo.

Exemplo: SELECT CREDITO, COUNT(*) NUMERO DE CLIENTES FROM CLIENTE GROUP BY CREDITO;

CREDITO NUMERO DE CLIENTES ------------ --------------------------------EXCELLENT 8 GOOD 3 POOR 3

SELECT COD_DEPTO, COUNT(*) NUMERO DE FUNCIONARIOS FROM EMPREGADO GROUP BY COD_DEPTO;

COD_DEPTO ----------------10 31 32

NUMERO DE FUNCIONARIOS -------------------------------------------1 2 1

Obs: Sempre que for utilizado uma funo de grupo dever ser utilizado a clusula GROUP BY.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

42

Introduo ao Oracle SQL 11g

NUNCA SELECIONE UMA COLUNA SIMPLES COM UMA FUNO DE GRUPO SEM A CLUSULA GROUP BY:

Exemplo: SELECT COD_DEPTO, CARGO, COUNT(*) FROM EMPREGADO;

SELECT COD_DEPTO, CARGO, COUNT(*) ERROR AT LINE 1: ORA-00937: NOT A SINGLE-GROUP GROUP FUNCTION Obs: Devemos ento obrigatoriamente incluir todas as colunas na clusula GROUP BY;

Exemplo: SELECT COD_DEPTO, CARGO, COUNT(*) FROM EMPREGADO GROUP BY COD_DEPTO, CARGO;

COD_DEPTO -----------------10 31 31

CARGO ---------VP, FINANCE SALES REPRESENTATIVE STOCK CLERK

COUNT(*) -----------1 1 2

MOSTRAR LINHAS ESPECFICAS OU GRUPOS ESPECFICOS UTILIZANDO A CLUSULA HAVING.

Sintaxe:

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

43

Introduo ao Oracle SQL 11g

SELECT NOME_COLUNA [NOME_COLUNA] FROM NOME_TABELA WHERE CONDIO GROUP BY EXPRESSO_GROUP_BY HAVING CONDIO Onde: HAVING CONDIO = > restringe o grupo de linhas retomadas daqueles grupos para especificar uma condio TRUE. Exemplo:

SELECT CARGO, 12 * AVG(SALARIO) FROM EMPREGADO GROUP BY CARGO HAVING 12* AVG(SALARIO) > 10000;

CARGO 12* ----------------PRESIDENT STOCK CLERK

AVG(SALARIO) -------------------34115.28 11388

Exemplo: SELECT CARGO, SUM(SALARIO) SOMA SALARIO FROM EMPREGADO WHERE CARGO NOT LIKE VP% GROUP BY CARGO HAVING SUM(SALARIO) > 5000

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

44

Introduo ao Oracle SQL 11g

ORDER BY SUM(SALARIO);

CARGO -----------WAREHOUSE MANAGER SALES REPRESENTATIVE STOCK CLERK

SOMA SALARIO ----------------------6157 7380 9490

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

45

Introduo ao Oracle SQL 11g

MOSTRAR DADOS A PARTIR DE MLTIPLAS TABELAS: OVERVIEW


JOINS Um join uma query que combina linhas a partir de duas ou mais tabelas ou vises. O Oracle realiza um join sempre que mltiplas tabelas so consultadas nas querys a partir da clausula FROM. A lista no select das consultas podem selecionar quaisquer colunas a partir destas tabelas. Se qualquer uma das tabelas possuem uma coluna com nome em comum, voc deve qualificar todas as referencias destas colunas na query, com nome da tabela antes das colunas para eliminar ambigidade.

CONDIES DE JOINS

Consultas com joins devem conter condies com a clausula WHERE que comparam duas colunas, cada uma de tabela diferente. Tal condio chamada condio Join. Para executar um join, Oracle combina pares de linhas, cada uma contendo linha de cada tabela, para que possa avaliar para VERDADE a condio de join. As colunas na condio de join no precisam aparecer ta,bem na lista do select.

Para executar um join de trs ou mais tabelas, Oracle primeira une duas das tabelas baseadas nas condies de join comparando suas colunas e ento une o resultado para outra tabela em condies de join contendo colunas das tabelas unidas e a nova tabela. Oracle continua este processo ate que todas as tabelas sejam unidas no resultado. O otimizador determina a ordem em que o Oracle une tabelas baseadas nas condies do join, ndices nas tabelas, etc.

Alm condies de joins, a clausula WHERE de um join pode conter tambm outras condies que se referem as colunas de s uma tabela. Estas condies podem adicionar restries as linhas retornadas pelo join da query.

EXISTEM QUATRO TIPOS DE JOINS:

NOEQUIJOINS
Um noequijoins uma condio contendo um operador igualdade. Um noequijoins conbina linhas que tem valores equivalentes para as colunas especificadas s que comparando a partir de uma regio de dados, como se estivesse fazendo um IN ou um BETWEEN. Dependendo do algoritmo interno o otimizador escolhe o join a executar.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

46

Introduo ao Oracle SQL 11g

EQUIJOINS
Um equijoin um join com uma condio contendo um operador igualdade.Um equijoin combina linhas que tem valores equivalentes para as colunas especificadas. Dependendo do algoritmo interno o otimizador escolhe o join a executar.

SELF JOINS
Um selfjoin um join de uma tabela com ela mesma. Esta tabela aplica duas vezes na clausula FROM seguindo por um alias na tabela que qualifica nomes de colunas na condio join. Para realizar um selfjoin, o Oracle combina e retorna linhas da tabela que satisfaam a condio join.

OUTER JOINS
Um outer join extende o resultado de um join simples. Um outer join retorna todas as linhas que satisfaam a condio joine aquelas linhas a partir de uma tabela que no satisfaam a condio de join da outra tabela. Tais linhas no so retornadas pelo join simples. Para escrever uma consulta que realiza um outer join de tabelas A e B e retorna todas as linhas a partir da A, deve-se aplicar o operador (+) para todas as colunas de B na condio join. Para todas as linhas em A que no tiver linhas em B, o Oracle retorna null para qualquer lista selecionada contendo colunas B.

PRODUTO CARTESIANO
Se duas tabelas em um join no teve sua condio join escrita, o Oracle retorna um produto Cartesiano, ou seja, Oracle combina cada linha de uma tabela com cada linha da outra tabela, Um produto cartesiano permite gerar muitas linhas e raramente usado, Por exemplo, o produto cartesiano de duas tabelas, cada com 100 linhas, tem 10000 linhas.

MOSTRAR LINHAS DE DUAS OU MAIS TABELAS ESCREVENDO UMA CONDIO SIMPLES DE LIGAO NA CLAUSULA WHERE.

Especificao de ligao em consulta simples. EQUIJOIN (SIMPLE JOIN) Sintaxe: SELECT TABELA.COLUNA, TABELA.COLUNA .. FROM TABELA1 , TABELA2 .............. WHERE TABELA1.COLUNA = TABELA2.COLUNA

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

47

Introduo ao Oracle SQL 11g

Onde: TABELA.COLUNA: a tabela e a coluna do dado que ser retornado. TABELA1.COLUNA: a condio dos joins ou relaes. TABELA2.COLUNA: das tabelas juntas, o nome da tabela dever aparecer antes que o nome da coluna. Quando escrever uma declarao select que ligue tabelas, preceda o nome da coluna com o nome da tabela para maior clareza. SELECT EMPREGADO.SOBRENOME,EMPREGADO.COD_DEPTO, DEPARTAMENTO.NOME FROM EMPREGADO, DEPARTAMENTO WHERE EMPREGADO.COD_DEPTO = DEPARTAMENTO.CODIGO;

SELECT DISTINCT DEPTO.CODIGO COD. DEPTO, REG.CODIGO CODIGO REGIAO, REG.NOME NOME REGIAO FROM DEPARTAMENTO DEPTO, REGIAO REG WHERE DEPTO.COD_REGIAO = REG.CODIGO

NOSTRAR LINHAS ESPECIFICAS A PARTIR DE TABELAS RELACIONADAS. Exibir linhas especificas de tabelas especificando condies de consulta em adio condio na clusula WHERE.

Exemplo: SELECT EMPREGADO.SOBRENOME, DEPARTAMENTO.NOME FROM EMPREGADO, DEPARTAMENTO WHERE EMPREGADO.COD_DEPTO = DEPARTAMENTO.CODIGO AND EMPREGADO.SOBRENOME = MENCHU ; EMPREGADO.COD_DEPTO,

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

48

Introduo ao Oracle SQL 11g

SOBRENOME -----------------MENCHU

COD_DEPTO ----------------420

NOME ---------------PERATIONS

MOSTRAR DADOS ATRAVS DE UM NOEQUIJOIN


Retornar linhas de uma tabela que tenha ligao direta com as linhas de uma outra tabela com um NOEQUIJOIN.

Sintaxe: SELECT TABELA.COLUNA, TABELA.COLUNA... FROM TABELA1, TABELA2 WHERE TABELA1.COLUNA AND TABELA2.COLUNA BETWEEN TABELA2.COLUNA

MOSTRAR DADOS SEM UMA RELAO DIRETA. Retornar linhas de uma tabela que no tenha ligao direta com as linhas de uma outra tabela com um OUTER JOIN.

Sintaxe:

SELECT TABELA.COLUNA, TABELA.COLUNA . . . FROM TABELA1, TABELA2 WHERE TABELA1.COLUNA = TABELA2.COLUNA(+)

OU SELECT TABELA.COLUNA, TABELA.COLUNA . . .

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

49

Introduo ao Oracle SQL 11g

FROM TABELA1, TABELA2 WHERE TABELA1.COLUNA(+) = TABELA2.COLUNA

Onde: (+) o operador especial para juno externa, ou seja, se um dado existir somente em uma tabela, com este smbolo ser possvel retornar esta linha faltando o outro valor. Acrescentar o smbolo OUTER JOIN seguido ao nome da tabela que no tem linhas correspondentes.

Exemplo: SELECT EMPREGADO.SOBRENOME, EMPREGADO.CODIGO, CLIENTE.NOME FROM EMPREGADO, CLIENTE WHERE EMPREGADO.CODIGO(+) = CLIENTE.COD_REPR ORDER BY EMPREGADO.CODIGO

MOSTRAR DADOS DE LINHAS DIFERENTES NA MESMA TABELA

Ligando uma tabela consigo mesma como se fosse duas tabelas separadas com um SELFJOIN.

Exemplo: SELECT TRABALHADOR.SOBRENOME| GERENTE.SOBRENOME EMPREGADOS | TRABALHA PARA| |

FROM EMPREGADO TRABALHADOR, EMPREGADO GERENTE WHERE TRABALHADOR.COD_GERENTE = GERENTE.CODIGO;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

50

Introduo ao Oracle SQL 11g

MOSTRAR DADOS A PARTIR DE MLTIPLAS TABELAS Mostrar dados a partir de tabelas relacionadas

Equijoins

Self Joins

Outer Joins

NoEquijoins

Um equijoin um join com uma condio contendo um operador igualdade. Um eguijoin combina linhas que tem valores equivalentes para as colunas especificadas. Dependendo do algoritimo interno o otimizador ecolhe o join executar. Um self join um join de uma tabela com ela mesma. Esta tabela aplica duas vezes na clausula FROM seguido por um alias na tabela que qualifica nomes de colunas na condio join. Para realizar um self join, o Oracle combina e retorna linhas da tabela que satisfaam a condio join. Um outer join extende o resultado de um join simples. Um outer join retorna todas a linhas que satisfaam a condio join e aquelas linhas a partir de uma tabela que no satisfaam a condio de join de outra tabela. Tais linhas no so retornadas pelo join simples. Para escrever uma consulta que realiza um outer join de tabelas A e B e retorna todas as linhas a partir A, deve-se aplicar o operador(+) para todas as colunas de B na condio join. Para todas as linhas em A que no tiver linhas em B, o Oracle retorna null para qualquer lista selecionada contendo colunas B Um noequijoin um join com uma condio contendo um operador igualdade. Um noequijoin combina linhas que tem valores equivalentes para as colunas especificadas, usando uma regio de valores com operador BETWEEN. Dependendo do algoritimo interno o otimizador escolhe o join a executar.

Especificao de ligao em consulta simples. EQUIJOIN (SIMPLEJOIN)

Sintaxe: SELECT TABELA.COLUNA, TABELA.COLUNA . . . FROM TABELA1, TABELA2 . . . WHERE TABELA1.COLUNA = TABELA2.COLUNA

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

51

Introduo ao Oracle SQL 11g

Retornar linhas de uma tabela que no tenha ligao direta com as linhas de uma outra tabela com um OUTER JOIN. Sintaxe: SELECT TABELA.COLUNA, TABELA.CONULA . . . FROM TABELA1, TABELA2 WHERE TABELA1.COLUNA = TABELA2.COLUNA(+) OU

SELECT TABELA.COLUNA, TABELA.CONULA . . . FROM TABELA1, TABELA2 WHERE TABELA1.COLUNA(+) = TABELA2.COLUNA

Onde: (+) o operador especial para juno externa, ou seja, se um dado existir somente em uma tabela, com este smbolo ser possvel retornar esta linhas faltando o outro valor.

Ligando uma tabela consigo mesma como se fosse duas tabelas separadas com um SELFJOIN.

Sintaxe: SELECT ALIAS1.COLUNA, ALIAS2.COLUNA. . . FROM TABELA1 ALIAS1, TABELA2 ALIAS2 WHERE ALIAS1.COLUNA = ALIAS2.COLUNA

PASSANDO VALORES ENTRE CONSULTAS

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

52

Introduo ao Oracle SQL 11g

1. PASSAR UMA LINHA DE DADO DE UMA CONSULTA PRINCIPAL PARA SUBCONSULTA. 2. PASSAR MLTIPLAS LINHAS DE DADOS DE UMA CONSULTA PRINCIPAL PARA SUBCONSULTA. 3. ANINHAR MLTIPLAS SUBCONSULTAS COM UMA CONSULTA PRINCIPAL.

PASSANDO VALORES ENTRE CONSULTAS OVERVIEW


Mostrar dados com uma query que dependa dos resultados de outras QUERYS escrevendo subconsultas. Justificativas Para Se Escrever Subconsultas

Mostrar dados quando o valor constante para uma condio de clusula WHERE no informada. Mostrar dados quando uma funo de grupo deve ser usado para restringir linhas na clusula WHERE. Mostrar dados baseados sobre condies complexas que requer mltiplas subconsultas.

ANINHAR SUBCONSULTAS QUE RETORNEM UMA NICA LINHA. Restringir linhas a serem exibidas pela QUERY principal dependendo de uma linha retornada pela subconsulta. Sintaxe: SELECT COLUMN_NAME, [ COLUMN_NAME ] FROM TABLE_NAME WHERE EXPRESSION OPERATOR ( SELECT COLUMN_NAME, [,COLUMN_NAME] FROM TABLENAME)

Onde: OPERATOR = consiste em um operador de comparao como por exemplo: = , < , > , IN.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

53

Introduo ao Oracle SQL 11g

Exemplo: SELECT SOBRENOME, CARGO FROM EMPREGADO WHERE CARGO = (SELECT CARGO FROM EMPREGADO WHERE SOBRENOME = Smith ) ;

Uma subconsulta dever ser includa em parnteses. Linhas simples de subconsultas usa os seguintes operadores: = , <>, >=, > , <, OR <= Se uma subconsulta for retornar somente uma linha pode-se utilizar o operador =, no entanto, se a mesma for retornar mais de uma linha dever ser utilizado o operador IN. Poder se aplicar na clusula WHERE vrias condies, cada uma utilizando uma ou mais subconsultas.

Exemplo: SELECT SOBRENOME, CARGO, COD_DEPTO FROM EMPREGADO WHERE COD_DEPTO = (SELECT COD_DEPTO FROM EMPREGADO WHERE UPPER(SOBRENOME) = BIRI );

Mostrar dados com uma consulta principal a partir de uma outra tabela com subconsulta.

Exemplo:

SELECT CODIGO, DT_PEDIDO FROM PEDIDO

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

54

Introduo ao Oracle SQL 11g

WHERE COD_CLIENTE = (SELECT CODIGO FROM CLIENTE WHERE UPPER(NOME) = MUNCH SPORTS );

Mostrar dados a partir de uma QUERY Principal usando uma funo de grupo em uma subconsulta que retorne uma nica linha.

Exemplo: SELECT SOBRENOME, CARGO, SALARIO FROM EMPREGADO WHERE SALARIO > (SELECT AVG(SALARIO) FROM EMPREGADO);

ANINHAR SUBCONSULTAS QUE RETORNEM MULTIPLAS LINHAS


Restringir linhas a serem mostradas pela consulta principal dependendo do retorno de vrias linhas da subconsulta. Por exemplo: Mostrar os empregados que trabalhem em departamentos que pertenam a regio 2

Exemplo: SELECT CODIGO, SOBRENOME, SALARIO, COD_DEPTO FROM EMPREGADO WHERE COD_DEPTO IN ( SELECT CODIGO FROM DEPARTAMENTO WHERE COD_REGIAO = 2 );

Uma subconsulta que retorne vrias linhas deve usar um operador compatvel para comparao de vrios valores.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

55

Introduo ao Oracle SQL 11g

Exemplos: SELECT CODIGO, SOBRENOME, COD_DEPTO FROM EMPREGADO WHERE COD_DEPTO = (SELECT COD_DEPTO FROM EMPREGADO WHERE UPPER(SOBRENOME) = PATEL); ERROR: ORA-01427: SINGLE-ROW SUBQUERY RETURNS MORE THAN ONE ROW. ---------------------------------------------------------------

SELECT CODIGO, SOBRENOME, COD_DEPTO FROM EMPREGADO WHERE COD_DEPTO IN (SELECT COD_DEPTO FROM EMPREGADO WHERE UPPER(SOBRENOME) = PATEL );

Mostrar dados baseados em condies complexas que requerem mltiplas subconsultas em uma nica declarao SELECT.

Exemplo: SELECT CODIGO, SOBRENOME, DT_ADMISSAO FROM EMPREGADO WHERE SALARIO < (SELECT AVG(SALARIO) FROM EMPREGADO) AND COD_DEPTO IN (SELECT COD_DEPTO FROM EMPREGADO WHERE UPPER(SOBRENOME) = PATEL); Exemplo: SELECT CODIGO, NOME, CREDITO

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

56

Introduo ao Oracle SQL 11g

FROM CLIENTE WHERE COD_REGIAO IN (SELECT CODIGO FROM REGIAO WHERE NOME = NORTH AMERICA) OR COD_REPR = (SELECT CODIGO FROM EMPREGADO WHERE UPPER(SOBRENOME) = NAGAYAMA);

UTILIZANDO SUBQUERYS EM SUBSTITUIO A TABELAS CLAUSULA FROM:


Podemos ao invs de buscar dados em uma tabela indicada na clausula FROM, podemos escrever uma subquery no qual ir retornar linhas e colunas, sendo utilizado como se fosse uma tabela fsica. Exemplo: Select b.cod_depto depto, b.sal_depto, a.sal_empresa, Round((b.sal_depto / a.sal_empresa) * 100,2) %sal depto em rel.empresa From (select sum(salrio) sal_empresa from empregado) a, (select cod_depto, sum(salrio) sal_depto from empregado group by cod_depto) b depto SAL_DEPTO SAL_EMPRESA %sal depto em rel.empresa Exemplo: select a.cdigo depto, b.nome emp from (select cdigo from departamento) a, (select cod_depto, nome from empregado ) b where a.cdigo = b.cod_depto;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

57

Introduo ao Oracle SQL 11g

MANIPULANDO DADOS
1. 2. 3. 4. 5. 6. Adicionar novas linhas ao Banco de Dados. Gerar automaticamente valores de chaves para novas linhas. Modificar linhas existentes dentro da tabela. Remover linhas existentes na tabela. Controlar mudanas de dados nas tabelas. Executar a mesma declarao SQL repetidamente com diferentes valores.

MANIPULAR DADOS DENTRO DO BANCO DE DADOS COM DECLARAES SQL. Declaraes de manipulao de dados. DECLARAO DESCRIO INSERT ADICIONA UMA NOVA LINHA TABELA UPDATE MODIFICA LINHAS EXISTENTES DELETE REMOVE LINHAS EXISTENTES COMMIT TORNA TODAS MUDANAS DE DADOS PENDENTES EM PERMANENTES ROLLBACK DESFAZ TODAS MUDANAS DE DADOS PENDENTES

INSERIR DADOS
Adicionar uma nova linha tabela com a declarao INSERT. Sintaxe: INSERT INTO TABELA (COLUNA) VALUES (VALORES)

Onde: Tabela: o nome da tabela. Coluna: o nome da coluna. Valores: o valor correspondente para a coluna.

Obs:

Uma tabela deve ser criada antes de inserir dados; Separe os valores com vrgulas; Use o comando DESCRIBE para mostrar ordem e tipo de colunas; Cada valor deve ser comparado ao tipo de dado da coluna alvo. Feche os valores VARCHAR2, CHAR, DATE em aspas simples.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

58

Introduo ao Oracle SQL 11g

Exemplo: Gravar informaes sobre um novo depto de finanas.

DESC DEPARTAMENTO NOME CODIGO NOME REGIAO NULL? NOT NULL NOT NULL TYPE NUMBER(7) VARCHAR2(25) NUMBER(7)

INSERT INTO DEPARTAMENTO VALUES (11,FINANCE,2);


OBS: Digite os valores de acordo com a ordem DEFAULT de colunas na tabela. Inclua caracteres e valores de data dentro de aspas simples, no inclua aspas entre valores numricos.

Liste os nomes de colunas na clusula INSERT para: Entre com os dados em uma seqncia especifica; Os valores devem ser listados na ordem especifica pela clusula INSERT.

Exemplo: Inserir um novo empregado, mas somente assinar o cdigo do empregado, o ltimo nome, o primeiro nome, o cdigo de usurio, a data corrente, o cdigo do gerente e o cdigo do depto.

INSERT INTO EMPREGADO (CODIGO, SOBRENOME , NOME , COD_USUARIO, DT_ADMISSAO, COD_CLIENTE, COD_DEPTO) VALUES (26, HERING,ELIZABETH,EHERING,12-DEC-85,2,32); Obs: Digite valores de acordo com a ordem em que as colunas esto digitadas. Insira a data e hora corrente na nova linha com a funo SYSDATE.

INSERIR VALORES ESPECIAIS

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

59

Introduo ao Oracle SQL 11g

Inserindo NULLS MTODO EXPLICITO EXPLICITO DESCRIO ESPECIFIQUE O NULL NA LISTA DE INSERO PARA CARACTERES STRINGS E DO TIPO DATA SOMENTE, ESPECIFIQUE UMA STRING VAZIA DENTRO DE ASPAS SIMPLES NA LISTA DE INSERO OMITA A COLUNA LISTA DE INSERO

IMPLICITO

Exemplo: DESC CLIENTES MOME CODIGO NOME EMPRESA ENDERECO FONE DEBITO NULL? TYPE NUMBER(5) VARCHAR2(30) VARCHAR2(30) VARCHAR2(30) VARCHAR2(15) NUMBER(10)

INSERT INTO CLIENTES VALUES (220,ESPORTES EM AO,NULL, NULL, NULL, NULL);

Obs: A coluna selecionada DEVE permitir valores NULL como visualizado com o comando DESCRIBE. ATUALIZAR DADOS Modificar linha(s) existente(s) com a declarao UPDATE.

Sintaxe:

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

60

Introduo ao Oracle SQL 11g

UPDATE TABELA SET COLUNA = VALOR WHERE CONDIO

Onde: TABELA: O NOME DA TABELA A SER ATUALIZADA COLUNA: O NOME DA COLUNA A SER ATUALIZADA VALOR: O NOVO VALOR PARA A COLUNA. CONDIO: IDENTIFICA A LINHA OU LINHAS A SEREM ATUALIZADAS. Obs: Verifique os nomes da colunas com o comando DESCRIBE Confirme a operao de atualizao pela visualizao das linhas a serem atualizadas com a declarao SELECT]

Atualizar uma nica linha identificando-a na clusula WHERE Exemplos: UPDATE EMPREGADO SET COD_DEPTO = 20 WHERE CODIGO = 2;

UPDATE EMPREGADO SET COD_DEPTO = 32, SALARIO = 3200, WHERE CODIGO = 5; DELETANDO DADOS Remova linha(s) existentes(s) com a declarao DELETE.

Sintaxe: DELETE FROM TABELA WHERE CONDIO]

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

61

Introduo ao Oracle SQL 11g

Onde: TABELA: o nome da tabela. CONDIO: Identifica a linha ou linhas a serem EXCLUDAS.

Obs: Verifique os nomes das colunas com o comando DESCRIBE. Confirme a operao de excluso pela visualizao da linhas a serem excludas com a declarao SELECT.

DELETAR UMA LINHA SIMPLES PELA IDENTIFICAO NA CLUSULA WHERE Exemplo: DELETE FROM DEPARTAMENTO WHERE CODIGO = 52;

Obs: Remova vrias linhas pela identificao de um grupo de linhas na clusula WHERE. Nunca omita a clusula WHERE, pois ser deletada toda a tabela.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

62

Introduo ao Oracle SQL 11g

TRANSAES COMMIT E ROLLBACK

Controlar as transaes lgicas com declaraes COMMIT e ROLLBACK, uma transao uma srie de operaes de manipulaes de dados relacionadas entre si.

Controle Lgico de Transaes DECLARAO COMMIT DESCRIO FINALIZA A TRANSAO CORRENTE TORNANDO PERMANENTE TODAS AS MUDANAS PENDENTES NO BANCO DE DADOS. FINALIZA A TRANSAO CORRENTE DESCARTANDO TODAS AS MUDANAS PENDENTES.

ROLLBACK

Todas mudanas de dados efetuadas durante a transao temporria at que a transao seja efetivada, ou seja, dado um COMMIT.

ESTADO DOS DADOS ANTES DO COMMIT OU ROLLBACK As operaes de manipulao de dados primeiramente afetam o BUFFER do banco de dados. O estado anterior dos dados pode ser recuperado. O usurio corrente pode rever os resultados das operaes de manipulao de dados com a declarao SELECT. Outros usurios no podem ver os resultados das operaes de manipulao de dados do usurio corrente. As linhas afetadas esto TRAVADAS (LOCKED); outros usurios no podem mudar os dados dentro das linhas afetadas. PERMANENTE COM A

FAA TODAS AS MUDANAS PENDENTES TORNAREM-SE DECLARAO COMMIT.

Estado dos dados Aps Os dados alterados foram escritos nos arquivos do banco de dados. O estado anterior Ao COMMIT dos dados permanentemente perdido. Todos usurios podem ver os resultados da transao. As TRAVAS (LOCKS) em efeito so liberadas; as linhas agora esto disponveis para outros usurios para realizarem novas mudanas de dados. TODAS MUDANAS PENDENTES COM A DECLARAO

DESCARTANDO ROLLBACK.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

63

Introduo ao Oracle SQL 11g

Estado dos Dados Aps o ROLLBACK.

As mudanas de dados so desfeitas. O estado anterior dos dados rearmazenado. As travas em efeito so liberadas; as linhas agora esto disponveis para outros usurios para realizar novas mudanas de dados.

ROLLBACK TO SAVEPOINT A COMMIT Altere a lgica de transaes com os SAVEPOINTS. Um SAVEPOINT (PONTO SALVO) marca um ponto intermedirio no processamento de uma transao.

Altere a lgica de transao.

COMANDO SAVEPOINT ROLLBACK SAVEPONT

DESCRIO MARCA UM SAVEPOINT DENTRO DA TRANSAO CORRENTE. TO DESCARTA AS MUDANAS PENDENTES EFETUADAS LOGO APS ONDE "SAVEPONT FOI MARCADO.

Exemplo: Este exemplo mostra a criao de SAVEPOINT antes de se realizar a operao de COMMIT. INSERT INTO DEPARTAMENTO (CODIGO, NOME, COD_RELIGIAO) VALUES (55, EDUCAO, 3); SAVEPOINT A; SAVEPOINT CREATED. INSERT INTO DEPARTAMENTO (CODIGO, NOME, COD_REGIAO) VALUES (56,EDUCAO, 4);

SAVEPOINT B ; SAVEPOINT CREATED.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

64

Introduo ao Oracle SQL 11g

INSERT INTO DEPARTAMENTO (CODIGO, NOME, COD_REGIAO) VALUES (S_DEPT_ID.NEXT,EDUCAO,5);

Esta parte desfaz os ltimos dois relacionamentos, mas deixa a primeira insero intacta; aps isso efetua o COMMIT.

ROLLBACK TO SAVEPOINT A; ROLLBACK COMPLETE.

COMMIT; COMMIT COMPLETE. VERIFICAR O ROLLBACK: SELECT * FROM DEPARTAMENTO WHERE NOME = EDUCAO NOTE AS CIRCUNSTNCIAS NO QUAL O ORACLE REALIZA UM COMMIT OU ROLLBACK IMPLICITAMENTE.

Processamento de Transao Implcito CIRCUNSTNCIA COMANDO DDL EDITADO TAL COMO O CREATE TABELA SADA NORMAL DO SQL*PLUS SEM EDITAR EXPLICITAMENTE O COMMI OU ROLLBACK SADA ANORMAL DO SQL*PLUS, OU FALHA NO SISTEMA Obs: Explicitamente edite COMMIT ou ROLLBACK, para evitar processamento de transao implcita. RESULTADO COMMITAUTOMTICO COMMIT AUTOMTICO ROLLBACK AUTOMTICO

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

65

Introduo ao Oracle SQL 11g

CRIAR SCRIPTS PARA MANIPULAR DADOS


Criar um arquivo BATCH para carregar uma grande quantidade de dados de uma nica vez incluindo o nmero de declaraes INSERT dentro dele.

Exemplo: Este exemplo mostra a utilizao de um arquivo BATCH com alguns comandos INSERT, para inserir dados na tabela REGIAO.

SET ECHO OFF INSERT INTO REGIAO (CODIGO, NOME) VALUES (1, NORTH AMARICA) / INSERT INTO REGIAO (CODIGO, NOME) VALUES (2, SOUTH AMARICA) / INSERT INTO REGIAO (CODIGO, NOME) VALUES (3, ASIA) / COMMIT / Obs:
SET ECHO OFF ocultar a visualizao de commandos durante a execuo. Oculte a reapario de mensagens (POR EX: 1 ROW CREATED.) Incluindo SET FEEDBACK OFF no incio do arquivo BATCH.

@LOAD_REG 1 ROW CREATED. 1 ROW CREATED. 1 ROW CREATED. COMMIT COMPLETE.


CRIE UM ARQUIVO TEXTO PARA CARREGAR DADOS INTERATIVAMENTE PELA INCLUSO DE PARMETROS DE SUBSTITUIO SQL*PLUS DENTRO DA DECLARAO INSERT.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

66

Introduo ao Oracle SQL 11g

Exemplo:
Este exemplo mostra a passagem de parmetros para a clusula VALUES do comando INSERT, fornecidos pelo usurio.

SET ECHO OFF INSERT INTO REGIAO (CODIGO,NOME) VALUES (&COD_REGIAO,&NOME_REGIAO) / @LOAD2 ENTER VALUE FOR COD_REGIAO: 6 ENTER VALUE FOR NOME_REGIAO: CALIFORNIA OLD 2: VALUES (&COD_REGIAO,&NOME_REGIAO) NEW 2: VALUES(6, CALIFORNIA) Obs: Prefixe o parmetro de substituio SQL*PLUS com o & quando referenci-lo na declarao SQL. PARMETRO DE

PERSONALIZAR A MENSAGEM PROMPT PARA O SUBSTITUIO COM O COMANDO SQL*PLUS ACCEPT. Sintaxe: ACCEPT PARAMETRO_SUBSTITUIO PROMPT MENSAGEM Onde:

PARAMETRO_SUBSTITUIO- o nome do parmetro de substituio SQL*PLUS MENSAGEM- a mensagem que aparece na linha de entrada de dados do usurio. Exemplo:

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

67

Introduo ao Oracle SQL 11g

Este exemplo mostra que o comando ACCEPT, personaliza a solicitao de valor no PROMPT para as variveis de passagem de parmetro.

SET ECHO OFF ACCEPT COD_REGIAO PROMPT ENTRE COM O CODIGO DA REGIAO : ACCEPT NOME_REGIAO PROMPT ENTRE COM O NOME DA REGIAO :

INSERT INTO REGIAO (CODIGO,NOME) VALUES (&COD_REGIAO,&NOME_REGIAO) /

&LOAD3 ENTRE COM O CODIGO DA REGIAO: 7 ENTRE COM O NOME DA REGIAO: TEXAS OLD 2: VALUES (&COD_REGIAO,&NOME_REGIAO) NEW 2: VALUES (7,TEXAS) 1 ROW CREATED.

Obs: No prefixe o parmetro de substituio SQL*PLUS com o & quando referenci lo no comando ACCEPT.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

68

Introduo ao Oracle SQL 11g

CONSTRUINDO RELATRIOS USANDO SQL*PLUS


1. Controlar o ambiente de relatrio para uma sesso SQL*Plus. 2. Formatar um relatrio. 3. Salvar os comandos para produzir um relatrio, bem como sua sada, para um arquivo texto.

CONSTRUIR RELATRIOS COM SQL*PLUS: OVERVIEW. Construir um relatrio simples com comandos SQL*PLUS. CATEGORIA COMANDOS DE SISTEMA DESCRIO COMANDOS QUE AFETAM O PROCEDIMENTO DO SQL. AMBIENTE SQL*PLUS COMANDOS QUE CONTROLAM OS RELATRIOS. COMANDOS QUE ARMAZENAM INFORMAES EM ARQUIVO TEXTO.

COMANDOS DE FORMATAO COMANDOS DE ARQUIVOS

CONTROLAR O AMBIENTE DENTRO DA SESSO.

Controlar variveis de sistema afetando o procedimento geral da declarao SQL pelo comando SET da sesso SQL*PLUS.

Sintaxe: SET SYSTEM_VARIABLE VALUE

Onde: VALUE = valor para a varivel de sistema. SYSTEM_VARIABLE = variveis de controle do sistema.

Obs:

No necessrio terminar o comando SQL*PLUS usando(;).

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

69

Introduo ao Oracle SQL 11g

VARIVEIS DE SISTEMA SQL*PLUS VARIVEIS DE SISTEMA FEEDBACK N DESCRIO CONTROLA QUANDO EXIBIR O NMERO DE REGISTROS RETORNADOS POR UMA QUERY. O VALOR DEFAULT 6. DETERMINA SE O FEEDBACK ESTAR ON OU OFF; O VALOR DEFAULT ON. EXIBE MENSAGEM. DETERMINA SE A PAUSA ESTAR ON OU OFF; O VALOR DEFAULT OFF, OU SEJA EST DESABILITADA A PAUSA.

FEEDBACK ON/OFF PAUSE MESSAGE PAUSE ON/OFF

Obs:

Mostrar os sets correntes das variveis de sistema usando o comando do SQL*PLUS chamado SHOW ALL DESCRIO DETERMINA SE O CABEALHO DA COLUNA SER EXIBIDA NO RELATRIO. SETA O NMERO DE LINHAS POR PAGINA DO RELATRIO; VALOR DEFAULT 14. SETA O NMERO DE CARACTERES POR LINHA DO RELATORIO; O VALOR DEFAULT 80. SETA O NMERO DE ESPAOS ENTRE COLUNAS DE SADA, VALOR MXIMO 10; VALOR DEFAULT 1. DETERMINA SE UM COMANDO CONTIDO NUM ARQUIVO SER LISTADO OU NO QUANDO O ARQUIVO FOR SER EXECUTADO; VALOR DEFAULT ON. DETERMINA SE SER MOSTRADO VALORES ANTERIORES E ATUAIS DOS PARMETROS DE SUBSTITUIO APS A EXECUO DE UM COMANDO SQL QUE TENHA CONTIDO NELE 70

VARIVEIS DE SISTEMA HEADNG ON/OFF

PAGESIZE N

LINESIZE N

SPACE N

ECHO ON/OFF

VERIFY ON/OFF

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

ESSES PARMETROS. CENRIO PARA CONTROLE DE CONFIGURAES NO SQL*PLUS.

SET FEEDBACK 10

Quando mudar o valor da varivel de sistema, o mesmo ser mantido em memria. Cada ambiente permanece ativo at o final do sesso SQL*PLUS, ou at o ambiente ser reescrito ou limpo

CONTROLE DO AMBIENTE DA SESSO Seguindo a conveno para tratar as regras do SQL-PLUS, recomponha as variveis de sistema para o valor DEFAULT aps rodar um relatrio. SQL> SET PAGESIZE 10 SQL> SET PAUSE PRESSIONE QUALQUER TECLA PARA CONTINUAR .. SQL> SET PAUSE ON SQL> SELECT SOBRENOME FROM EMPREGADO; PRESSIONE QUALQUER TECLA PARA CONTINUAR . SOBRENOME VELASQUEZ NGAO NAGAYAMA MENCHU PRESSIONE QUALQUER TECLA PARA CONTINUAR . BIRI HAVEL

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

71

Introduo ao Oracle SQL 11g

MAGEE Voltar para os valores padro (DEFAULT): SQL> SET PAUSE OFF SQL> SET PAGESIZE 24 FORMATANDO RELARRIOS Controlar o formato de relatrios com os comandos SQL*PLUS. Comandos de formatao do SQL*PLUS: COMANDOS TTITLE BTITLE COLUMN BREAK COMPUTE DESCRIO Define o ttulo do relatrio, ocupa espao no topo de cada pgina. Define no rodap do relatrio, ocupa espao no rodap de cada pgina. Controla como ser dado o display de cada coluna Define quebras no relatrio. Utilizada para calcular, gerando subtotais e totais gerais ao nvel de relatrio, etc....

O resultado de cada comando de formatao valer para toda a sesso enquanto estiver aberta, ou for replicado um novo valor para a sesso.

EXIBINDO CABEALHOS E RODAP Usando TTITLE e BTITLE para relatrios. Sintaxes: TTITLE(MESSAGE) SQL> TTITLE RELATRIOS|EMPREGADOS A sintaxe para TTITLE e BTITLE so idnticos. Por DEFAULT, o comando TTITLE centraliza o cabealho, mostrando a data no lado superior esquerdo e o nmero da pgina no lado superior direito.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

72

Introduo ao Oracle SQL 11g

Controlar o cabealho e o rodap, exibindo as regras correntes e limpando-as se for necessrio.

Tratando cabealhos e montando rodap

COMANDOS TTITLE TTITLE OFF BTITTLE BTITLE OFF

DESCRIO Exibe a configurao corrente para o cabealho. Desabilita o cabealho. Exibe a configurao corrente para o rodap Desabilita o rodap

Exemplo: SQL> SET PAGESIZE 14 SQL> SET LINESIZE 60 SQL> SET FEEDBACK OFF SQL > TTITLE RELATORIO | EMPREGADO SQL> BTITLE CONFIDENCIAL CONTROLAR E EXIBIR ATRIBUTOS DE COLUNAS PARA RELATRIO DO SQL*PLUS Sintaxes: COLUMN NOME_COLUNA HEADING CABEALHO Onde: NOME_COLUNA: o nome da coluna CABEALHO: o texto do cabealho do relatrio Exemplo: COLUMN COD_REPR HEADING VENDEDOR A coluna com nome COD_REPR ser substituda por VENDEDOR na hora da

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

73

Introduo ao Oracle SQL 11g

formatao e execuo do relatrio.

CONTROLE DE QUEBRA USANDO A CLUSULA ORDER BY E CLUSULA SELECT. Sintaxe: SELECT ............... FROM ............. ORDER BY BREAK_COLUMN Onde: BREAK_COLUN nome da coluna usada no comando BREAK ON. Controla e quebra para exibio do BREAK corrente e limpa se necessrio. COMANDOS BREAK CLEAR BREAKS DESCRIO Exibe o BREAK corrente(comando) Desabilita o BREAK corrente

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

74

Introduo ao Oracle SQL 11g

EXECUTANDO ATUALIZAES A PARTIR DE SUBCONSULTAS: Voc pode usar uma subconsulta em comandos UPDATE para alterar valores em uma tabela baseados em valores de outra tabela. Sintaxe: UPDATE NOME_TABELA SET NOME_COLUNA = ( SELECT NOME_COLUNA FROM NOME_TABELA WHERE CONDIO ) WHERE NOME_COLUNA = ( SELECT NOME_COLUNA FROM NOME_TABELA WHERE CONDIO ) Exemplo: UPDATE EMPREGADO SET COD_DEPTO = ( SELECT COD_DEPTO FROM EMPREGADO WHERE CODIGO = 1 ) WHERE CARGO = ( SELECT CARGO FROM EMPREGADO WHERE CODIGO = 1 ) ;

CRIAR TABELAS A PARTIR DE SUBCONSULTAS

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

75

Introduo ao Oracle SQL 11g

Voc pode usar uma subconsulta em um comando CREATE TABLE para inserir linhas nesta nova tabela baseados em valores de uma tabela. Sintaxe: CREATE TABLE NOME_TABELA AS SELECT NOME_COLUNA, NOME_COLUNA, COME_COLUNA ....... FROM NOME_TABELA WHERE NOME_COLUNA = ( SELECT NOME_COLUNA FROM NOME TABELA WHERE CONSIO ) Exemplo: CREATE TABLE SALARIO AS SELECT NOME, CARGO, COD_DEPTO FROM EMPREGADO WHERE SALARIO < ( SELECT SALARIO FROM EMPREGADO WHERE NOME = EDDIE ); A partir das verses 8i j possvel criar tabelas a partir de consultas com linhas ordenadas, basta colocar a clusula ORDER BY

DELETAR LINHAS A PARTIR DE SUBCONSULTAS Voc pode usar subconsultas em uma comando DELETE para remover linhas a partir de valores baseados em outras tablas.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

76

Introduo ao Oracle SQL 11g

Sintaxe: DELETE FROM NOME_TABELA WHERE NOME_COLUNA = ( SELECT NOME_COLUNA FROM NOME_TABELA WHERE CONDIO )

Exemplo: DELETE FROM EMPREGADO WHERE PCT_COMISSAO = 10 AND COD_DEPTO = ( SELECT CODIGO FROM DEPARTAMENTO WHERE NOME = SALES );

INSERIR LINHAS DE DADOS A PARTIR DE SUBCONSULTAS Voc pode usar subconsultas em um comando INSERT para inserir dados a partir de valores baseados em outras tabelas. Sintaxe: INSERT INTO NOME_TABELA ( NOME_COLUNA, NOME_COLUNA ...... ) SELECT NOME COLUNA, NOME_COLUNA ......... FROM NOME_TABELA WHERE NOME_COLUNA = ( SELECT FROM NOME_COLUNA FROM NOME_TABELA WHERE CONDIO ) Exemplo:

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

77

Introduo ao Oracle SQL 11g

CREATE TABLE STOCK AS SELECT CODIGO, NOME, CARGO, SALARIO FROM EMPREGADO WHERE 1=2;

INSERT INTO STOCK ( CODIGO, NOME, CARGO, SALARIO) SELECT CODIGO, NOME, CARGO, SALARIO FROM EMPREGADO;

OPERADORES DE CONJUNTO Operador de conjunto combina o resultado componente de duas consultas a partir de um simples resultado. Consultas contendo operadores de conjunto so chamados de Consultas Compostas. A tabela abaixo lista os operadores de Conjunto. OPERADOR UNION UNION ALL RETORNA Todas as linhas selecionadas por qualquer uma das consultas Todas as linhas selecionadas por qualquer uma das consultas, incluindo todas as duplicadas Todas as linhas distintas selecionadas por ambas as consultas Todas as linhas distintas selecionadas pela primeira consulta e no pela segunda.

INTERSECT MINUS

Todos os operadores de Conjunto possuem procedncia igual.

Exemplo: UNION SELECT PART, PARTNUM, TO_DATE(NULL) DATE_IN

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

78

Introduo ao Oracle SQL 11g

FROM ORDERS_LIST1 UNION SELECT PART, TO_DATE(NULL) DATE_IN FROM ORDERS_LIST2

UNION ALL SELECT PART FROM ORDERS_LIST1 UNION ALL SELECT PART FROM ORDERS_LIST2 Note que o operador UNION retorna somente linhas distintas que aparece em um resultado, enquanto o operador UNION ALL retorna todas as linhas;

Exemplo: INTERSECT SELECT PART FROM ORDERS_LIST1 INTERSECT SELECT PART FROM ORDERS_LIST2 MINUS SELECT PART

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

79

Introduo ao Oracle SQL 11g

FROM ORDERS_LIST1 MINUS SELECT PART FROM ORDERS_LIST2

ORACLE DATATYPES Quando voc cria uma tabela para armazenar informaes em seu banco de dados voc necessita especificar o tipo de dados para cada coluna de sua tabela. O Oracle possui diferentes tipos de dados (datatypes) para atender suas necessidades, que so divididos nas seguintes categorias: CHARACTER, NUMBER, DATE, LOB. Character Datatype Usados para armazenar dados alfanumricos. CHAR(<n>) armazena string de tamanho fixo. Tamanho default 1, mximo 2000 . VARCHAR2(<n>) armazena string de tamanho varivel. possvel armazenar string de at 4000 bytes. VARCHAR(<n>) sinnimo para o tipo VARCHAR2. NCHAR(<n>) e NVARCHAR2(<n>) possuem as mesmas caractersticas dos tipos CHAR e VARCHAR2 e so usados para armazenar dados NLS (National Language Support). A arquitetura Oracle NLS permite armazenar, processar e recuperar informaes em linguagens nativas. LONG um tipo de dados que se tornou obsoleto com a chegada dos tipos LOB (Large Object). O tipo LONG armazena strings de tamanho varivel e pode armazenar at 2GB de dados. Dentre as restries do tipo LONG, podemos citar: No pode ser usada em clusulas WHERE, GROUP BY, ORDER BY ou CONNECT BY e nem ser usado com operador DISTINCT. Uma tabela no pode possuir mais de uma coluna com o tipo LONG.

Numeric Datatype Usado para armazenar dados numricos com preciso de at 38 digitos. NUMBER(<x>, <y>) onde <X> corresponde ao nmero de dgitos e <Y> o nmero de casas decimais. Valores inseridos em colunas numricas com nmero de casas decimais menor que o dado inserido sero arredondados.

Date Datatype O tipo DATE permite valores de data e hora. O formato padro definido pelo parmetro NLS_DATE_FORMAT. O Oracle armazena internamente a data em formato de nmero juliano

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

80

Introduo ao Oracle SQL 11g

com a parte fracionria usada para controlar a hora. Uma data Juliana corresponde ao nmero de dias desde 1 de Janeiro de 4712 A.C. Para operaes aritmticas com datas no Oracle, basta adicionar ou subtrair nmeros inteiros ou fracionrios. Por exemplo, SYSDATE + 1 para somar uma dia, 1/24 para acrescentar uma hora, 1/(24x60) ou 1/1440 para acrescentar 1 minuto e 1/(24x60x60) ou 1/86400 para um segundo. Alm do tipo DATE, outros o Oracle tambm possui 5 outros tipos de dados para armazenar tipos de data: TIMESTAMP semelhante ao tipo DATE, com a diferena de armazenar frao de segundos com preciso de at 9 digitos. TIMESTAMP WITH TIME ZONE armazena data/hora com informaes de fuso horrio. TIMESTAMP WITH LOCAL TIME ZONE armazena data/hora no fuso horrio do servidor. Quando o usurio seleciona os dados, o valor ajustado para as configuraes da sua sesso. INTERVAL YEAR TO MONTH usado para armazenar espao de tempo em anos e meses. INTERVAL DAY TO SECOND permite especificar intervalos em dias, horas, minutos e segundos.

LOB Datatypes
Large Object (LOB) datatypes so usado para armazenar dados no estruturados como imagens, arquivos binrios. Os tipos LOBs podem armazenar at 4GB de informao. A manipulao dos tipos LOB feita atravs da package DBMS_LOB.

Datatype BLOB Binary Large Object CLOB Character Large Object BFILE Binary File

Descrio Armazena at 8~128TB de dados binrios no banco Armazena at 8~128TB de dados carter Armazena at 8~128TB de dados em arquivos binrios externos. Uma coluna BFILE armazena um ponteiro para o arquivo armazenado no sistema operacional.

Outros Datatypes
RAW um tipo para dados binrios, no interpretados pelo banco. Podem armazenar at 2000 bytes de informao e seus dados no passam por converso de conjunto de caracteres entre cliente e servidor. LONGRAW semelhante ao tipo LONG, um tipo de dados obsoleto que pode armazenar at 2GB de dados. Seu uso foi depreciado pelos tipos BLOB e BFILE. ROWID Oracle utiliza o datatype ROWID para armazenar o endereo de cada linha no banco de dados. Toda tabela contm uma coluna oculta chamada ROWID que retorna um identificador nico do endereo da linha no banco de dados no formato OOOOOOFFFBBBBBBRRR onde O representa o nmero do objeto,

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

81

Introduo ao Oracle SQL 11g

F o nmero do datafile, B a identificao do bloco Oracle e R a identificao da linha no bloco. UROWID Universal ROWID, suporta todos os tipos de ROWID (fsicas ou lgicas) bem como de tabelas no Oracle acessadas atravs de gateway.

ANSI, DB2 e SQL/DS Datatypes Comandos SQL para criao de tabelas que usam a notao de tipos ANSI ou de produtos IBM DB2 e SQL/DS. O Oracle reconhece alguns nomes de datatypes dos padres citados e converte para seus tipos internos conforme tabela a seguir: ANSI/DB2/SQL-DS Datatype CHARACTER(n) CHARACTER VARYING(n) CHAR VARYING(n) NATIONAL CHARACTER(n) NATIONAL CHAR(n) NATIONAL CHARACTER VARYING(n) NATIONAL CHAR VARYING(n) NCHAR VARYING(n) NUMERIC(x,y) DECIMAL(x,y) INTEGER INT SMALLINT FLOAT DOUBLE PRECISION REAL LONG VARCHAR(n) Oracle Datatype CHAR(n) VARCHAR(n) NCHAR(n) NVARCHAR2(n)

NUMBER(x,y) NUMBER(38)

NUMBER

LONG

CRIANDO TABELAS NO BANCO DE DADOS

CRIAR TABELAS PARA ARMAZENAR DADOS COM O COMANDO SQL CREATE TABLE Sintaxe: CREATE (GLOBAL TEMPORARY) TABLE NOME_TABELA ({ NOME_COLUNA DATATYPE | DEFAULT | CONTRAINT TABLE ] [,{ NOME_COLUNA DATATYPE | DEFAULT | CONTRAINT TABLE }] ) ON COMMIT (DELETE |PRESERVE) ROWS

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

82

Introduo ao Oracle SQL 11g

Onde: NOME_TABELA o nome da tabela. NOME_COLUNA o nome da coluna.

GLOBAL TEMPORARY especifica que a tabela temporria e que sua definio visvel por todas as sesses. O dado na tabela temporria visvel somente a sesso que inseriu os dados na tabela. Uma tabela temporria tem definio da mesma forma que uma tabela normal., mas contm as opes session-specific e transaction-specific. Voc especifica se os dados so session-ortransaction-specific com a palavra chave ON COMMIT(abaixo). DATATYPE o tipo de dado da coluna DEFAULT especifica um valor a ser atribudo para a coluna se a declarao INSERT omitir um valor para a coluna. O datatype da expresso deve ser igual ao datatype da coluna. Uma expresso DEFAULT no pode conter referencias de outras colunas, a pseudocolunas CURRVAL, NEXTVAL, LEVEL, e ROWNUM, ou constantes data que no completamente especificadas. CONSTRAINT_TABELA a CONSTRAINT de dado para a coluna ON COMMIT pode ser especificado somente se estiver criando uma tabela temporria. Esta clausula determina a permanncia dos dados na tabela temporria. Se ter durao de uma transao ou uma sesso. DELETE ROWS Especifica que a tabela temporria para uma transao especifica ( esta default). Oracle ir truncar a tabela, ou seja, remover todas as linhas aps cada linha comitada. PRESERVE ROWS Especifica que a tabela temporria para uma sesso especifica. Oracle ir truncar a tabela quando terminar a sesso.

REGRAS DE NOMEAO
Os nomes das tabelas e colunas deve ser de 1-30 caracteres; o primeiro caracter deve ser alfabtico. Os nomes devem contem somente caracteres de a-z, A-Z, 0-9 , _(underscore), $ e # (mas seu uso no e recomendado). Os nomes no podem ser iguais s palavras reservadas do Oracle. O nome da tabela no pode ser igual ao nome de um outro objeto criado pelo mesmo usurio Oracle.

DEFINIR CONSTRAINTS DE INTEGRIDADE DE DADOS

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

83

Introduo ao Oracle SQL 11g

CONSTRAINT NOT NULL UNIQUE

PRIMARY KEY FOREIGN KEY REFERENCES

CHECK

DESFRIO Especifica que esta coluna no pode conter valores nulos Especifica que a coluna ou combinao de colunas que tero seus valores nicos na tabela. Identifica a unicidade de cada linha na tabela. Estabelece e fora um relacionamento de chave tabela(nome da coluna) estrangeira entre esta coluna e a chave primaria da tabela referenciada. Especifica uma condio que deve ser verdadeira obedecendo uma regra de negcio.

Exemplo: SQL> CREATE TABLE REGIAO ( CODIGO NUMBER(7), NOME BARCHAR2(30) CONSTRAINT REGIAO_NOME_NN NOT NULL, CONSTRAINT REGIAO_CODIGO_PK PRIMARY LEY(CODIGO), COSNTRAINT REGIAO_NOME_UK UNIQUE (NOME) ); ADICIONAR UMA COLUNA TABELA Adicionar uma coluna a tabela com o comando ALTER TABLE. ALTER TABELA REGIAO ADD ( COMENTARIOS CARVAR2(255) CONSTRAINT REGIA_COMENTARIOS_NN NOT NULL ) ; MODIFICAR UMA COLUNA Modificar a definio de uma coluna com o comando ALTER TABLE.

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

84

Introduo ao Oracle SQL 11g

ALTER TABLE EMPREGADO MODIFY ( SOBRENOME VARCHAR2(30)); REMOVER UMA COLUNA Modificar a definio de uma coluna com o comando ALTER TABLE. ALTER TABLE EMPREGADO DROP COLUMN ( SOBRENOME ); REMOVER UMA TABELA DROP TABLE EMPREGADO MARCANDO UMA COLUNA COMO UNUSED ALTER TABLE EMPREGADO SET UNUSED COLUMN SOBRENOME; REMOVENDO UMA COLUNA UNUSED ALTER TABLE EMPREGADO DROP UNUSED COLUMNS;

CONSTRAINTS

ADIAR CHECAGEM DE CONSTRAINT Pode uma constraint ser adiada? NOT DEFERRABLE (DEFAULT) DEFERRABLE

Comportamento Default de uma constraint: INITIALLY IMMEDIATE (DEFAULT) INITIALLY DEFERRED 85

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

Use SET CONSTRAINTS ou ALTER SESSION SET CONSTRAINT para alterar o comportamento default de uma constraint.

SET CONSTRAINT(S) Propsito Para especificar, em uma transao particular, se a checagem da constraint adiada ou a cada declarao UML ou quando a transao comitada. Pr-Requisitos Para especificar quando a constraint ir checar, voc deve ter privilgios de SELECT sobre a tabela no qual a constraint aplicada, a menos que a tabela esteja em seu schema.

PALAVRAS CHAVES E PARAMETROS Constraint ALL IMMEDIATE Nome de uma ou mais constraints de inetgridade Seta toas as constraints desta transao Esta condio indica que uma constraint ou todas ser checadas imediatamente apos cada declarao SQL DEFERRED Esta condio indica que a constraint ser checada quando a transao for comitada. Voc pode verificar o sucesso das aes das constraints,antes mesmo do commit pelo comando SET CONSTRAINTS ALL IMMEDIATE

Validando Constraints
ENABLE / DISABLE afeta futuras alteraes: ENABLE para checar futuras alteraes DISABLE para no checar futuras alteraes

VALIDADE / NOVALIDADE afeta dados da tabela corrente: VALIDADE para checar o dado da tabela corrente NOVALIDADE para evitar a checagem do dado na tabela corrente

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

86

Introduo ao Oracle SQL 11g

Exemplos:

ALTER TABLE ESTADO ADD PRIMARY KEY (COD_ESTADO) DISABLE NOVALIDADE; -ALTER TABLE CIDADE ADD FOREIGN KEY (COD_ESTADO) REFERENCES ESTADO(COD_ESTADO) DISABLE NOVALIDADE; -CREATE TABLE CONTA ( NR_CONTA NUMBER(10), COD_CLIENTE NUMBER(10), COMENTARIO_CONTA VARCHAR2(200), CONSTAINT PK_CID_AID PRIMARY KEY ( COD_CLIENTE, NR_CONTA) DISABLE) ; CRIANDO SEQUENCES Sequences so usadas para gerar valores nicos, normalmente armazenados em colunas de chave primria. Sintaxe: CREATE SEQUENCE sequence_name [INCREMENT BY n] [START WITH n] [ {MINVALUE n | NOMINVALUE} ] [ {MAXVALUE n | NOMAXVALUE} ] [ {CYCLE | NOCYCLE} ] [ {CACHE n | NOCACHE} ] Onde:

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

87

Introduo ao Oracle SQL 11g

SEQUENCE_NAME - o nome do gerador de seqncia a ser criado. INCREMENT BY especifica o intervalo entre o nmero da seqncia. O default 1. START WITH especifica o primeiro nmero da seqncia a ser gerado. O default 1. MINVALUE menor valor que ser gerado pela seqncia, ou valor limite para seqncias decrescentes. O default NOMINVALUE. NOMINVALUE O Oracle converte para 1 para seqncias positivas e -1026 para seqncias negativas. MAXVALUE especifica o valor mximo gerado pela seqncia. NOMAXVALUE especifica o valor mximo de 1027 CYCLE especifica se a seqncia continuar a gerar nmeros aps atingir o valor mximo ou mnimo. CACHE especifica a quantidade de nmeros o oracle ir alocar e manter em memria no servidor. Por default, o Oracle alocar o valor de 20. NOCACHE fora os dados de dicionrio Oracle serem atualizados a cada seqncia gerada.

Exemplo: CREATE SEQUENCE DEPTO_CODIGO MAXVALUE 999999 INCREMENT BY 1 START WITH 51 NOCACHE; Utilize a view USER_SEQUENCES para obter informaes sobre as sequences. Referenciando valores de sequences Voc pode referenciar seqncias em comandos DMLs para gerar valores nicos automaticamente atravs de suas pseudo-colunas: Expresso Descrio sequence_name.NEXTVAL Retorna automaticamente o prximo valor disponvel da seqncia. Ir retornar um valor nico a cada vez que for referenciado, mesmo para diferentes usurios utilizando a mesma seqncia. sequence_name.CURRVAL Retorna o ltimo valor da seqncia obtido pela sesso corrente atravs do NEXTVAL. Enquanto NEXTVAL no for referenciado pelo menos uma vez, CURRVAL no estar disponvel. Exemplo: INSERT INTO REGIAO(cod_regiao, nome) VALUES(seq_regiao.NEXTVAL, Centro Sul);

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

88

Introduo ao Oracle SQL 11g

INSERT INTO DEPARTAMENTO(cod_depto, nome, cod_regiao) VALUES(seq_depto.NEXTVAL, Crdito e cobrana, seq_regiao.CURRVAL); Removendo uma seqncia DROP SEQUENCE sequence_name; SIMPLIFICANDO O ACESSO AOS DADOS ATRAVS DE VISES
Uma view uma representao customizada dos dados de uma ou mais tabela, podendo ser considerada como uma query armazenada ou uma tabela virtual. Apenas a pesquisa (SELECT ... FROM ...) armazenada no dicionrio de dados Oracle. Sintaxe: CREATE [OR REPLACE] [FORCE/NOFORCE] VIEW view_name [(alias, [alias] ...)] AS consulta [WITH CHECK OPTION [CONSTRAINT constraint] [WITH READ ONLY] Onde: VIEW_NAME - o nome da viso ALIAS especifica nomes para as colunas selecionadas pelas querys da viso. O nmero de aliases deve ser igual ao nmero de expresses selecionadas pela viso. CONSULTA uma clusula SELECT completa. WITH CHECK OPTION verifica se INSERTs E UPDATEs realizados atravs da viso respeitam a clusula WHERE da query. WITH READ ONLY no permite DMLs na view CONSTRAINT o nome da constraint assinalada ao CHECK OPTION OR REPLACE permite recriar a view FORCE cria a viso no importando se as tabelas relacionadas no SELECT existam ou se o proprietrio possui privilgio sobre tais tabelas. NO FORCE o default, cria a viso somente se as tabelas do SELECT existir e o proprietrio possuir privilgios sobre elas.

Exemplo: CREATE VIEW visao10 AS SELECT EMP.CODIGO ID_NUMBER, EMP.SOBRENOME EMPLOYEE, EMP.CARGO JOB, EMP.COD_DEPTO DEPTO, DEP.NOME NOME_DEPT FROM EMPREGADO EMP, DEPARTAMENTO DEP WHERE EMP.COD_DEPTO IN (20, 30,40) AND EMP.COD_DEPTO = DEP.CODIGO; Utilize a view USER_VIEWS para obter informaes sobre views

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

89

Introduo ao Oracle SQL 11g

Removendo uma view DROP VIEW view_name;


MELHORAR A PERFORMANCE DAS CONSULTAS ATRAVS DE NDICES Criar ndice para uma ou mais colunas se: A coluna frequentemente usada na clusula WHERE ou em algum JOIN A tabela grande e muitas consultas retornam menos de 10-15% das linhas A coluna no sobre muitas alteraes

O Oracle mantm os ndices automaticamente. No h impacto na sintaxe SQL, contudo, pode haver impacto na performance se os dados so frequentemente alterados.

Sintaxe de criao de ndices: CREATE [UNIQUE] INDEX nome_indice ON nome_tabela (nome_coluna[, nome_coluna] ...) A palavra-chave UNIQUE especifica que o ndice no conter valores duplicados, garantindo que duas linhas da tabela no contenham mesmo valor para a coluna ou colunas indexadas. Exemplo:

CREATE INDEX INDX_EMP_SOBRENOME ON EMPREGADO(SOBRENOME); CREATE UNIQUE INDEX INDX_CLIENTE_CPF ON CLIENTE(NR_CPF); No Oracle, ndices nicos so criados automaticamente pelo sistema para forar a chave primria (primary key) e unique constraints. Removendo um ndice DROP INDEX nome_indice;

Utilize as views USER_INDEXES e USER_IND_COLUMNS para obter informaes sobre os ndices

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

90

Introduo ao Oracle SQL 11g

HISTRICO DE NOVIDADES POR VERSES DO ORACLE 11g DDL TIMEOUT


ALTER SESSION SET ddl_lock_timeout=30; ALTER TABLE lock_tab ADD ( description VARCHAR2(50) );

INVISIBLE INDEXES
CREATE INDEX index_name ON table_name(column_name) INVISIBLE; ALTER INDEX index_name INVISIBLE; ALTER INDEX index_name VISIBLE;

READ ONLY TABLES


ALTER TABLE table_name READ ONLY; ALTER TABLE table_name READ WRITE;

VIRTUAL COLUMNS
CREATE TABLE employees ( id NUMBER, first_name VARCHAR2(10), last_name VARCHAR2(10), salary NUMBER(9,2), comm1 NUMBER(3), comm2 NUMBER(3), salary1 AS (ROUND(salary*(1+comm1/100),2)), salary2 NUMBER GENERATED ALWAYS AS (ROUND(salary*(1+comm2/100),2)) VIRTUAL, CONSTRAINT employees_pk PRIMARY KEY (id) );

SELECT PIVOT AND UNPIVOT


CREATE TABLE pivot_test ( id NUMBER, customer_id NUMBER, product_code VARCHAR2(5), quantity NUMBER ); INSERT INTO pivot_test VALUES (1, 1, 'A', 10); INSERT INTO pivot_test VALUES (2, 1, 'B', 20);

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

91

Introduo ao Oracle SQL 11g

INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO COMMIT;

pivot_test pivot_test pivot_test pivot_test pivot_test pivot_test pivot_test pivot_test

VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES

(3, 1, 'C', 30); (4, 2, 'A', 40); (5, 2, 'C', 50); (6, 3, 'A', 60); (7, 3, 'B', 70); (8, 3, 'C', 80); (9, 3, 'D', 90); (10, 4, 'A', 100);

SELECT * FROM pivot_test; ID CUSTOMER_ID PRODU QUANTITY ---------- ----------- ----- ---------1 1 A 10 2 1 B 20 3 1 C 30 4 2 A 40 5 2 C 50 6 3 A 60 7 3 B 70 8 3 C 80 9 3 D 90 10 4 A 100 10 rows selected.

SELECT * FROM (SELECT customer_id, product_code, quantity FROM pivot_test) PIVOT (SUM(quantity) AS sum_quantity FOR (product_code) IN ('A' AS a, 'B' AS b, 'C' AS c)) ORDER BY customer_id; CUSTOMER_ID A_SUM_QUANTITY B_SUM_QUANTITY C_SUM_QUANTITY ----------- -------------- -------------- -------------1 10 20 30 2 40 50 3 60 70 80 4 100 4 rows selected.

SQL*PLUS ERROR LOGGING


SET ERRORLOGGING ON SELECT TIMESTAMP, USERNAME, SCRIPT, IDENTIFIER, STATEMENT, MESSAGE FROM SPERRORLOG; ------CREATE TABLE MY_sperrorlog(username VARCHAR(256), timestamp TIMESTAMP,

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

92

Introduo ao Oracle SQL 11g

script identifier message statement commit;

VARCHAR(1024), VARCHAR(256), CLOB, CLOB);

SET ERRORLOGGING ON TABLE MY_sperrorlog

10g RECYCLEBIN Drop table clientes purge; Drop table; Purge recyclebin; Show recyclebin (sql*plus) FLASHBACK TABLE Flashback table clientes to before drop; Flashback table clientes to before drop rename to cli001; Flashback table caixa to timestamp systimestamp 1; FLASHBACK VERSIONS QUERY select cod, nome, versions_starttime, versions_endtime, versions_xid, versions_operation from cliente versions between timestamp minvalue and maxvalue FLASHBACK TRANSACTION QUERY select logon_user, operation, undo_sql from flashback_transaction_query where table_name = 'CLIENTE' MODEL SQL SELECT country,prod,year,s FROM sales_view_ref MODEL PARTITION BY (country) 93

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

DIMENSION BY (prod, year) MEASURES (sale s) RULES ( s[prod='Mouse Pad', year=2001] = s['Mouse Pad', 1999] + s['Mouse Pad', 2000], s['Standard Mouse', 2002] = s['Standard Mouse', 2001] ) ORDER BY country, prod, year;

MERGE MERGE INTO bonuses D USING (SELECT employee_id, salary, department_id FROM employees WHERE department_id = 80) S ON (D.employee_id = S.employee_id) WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01 DELETE WHERE (S.salary > 8000) WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus) VALUES (S.employee_id, S.salary*0.1) WHERE (S.salary <= 8000);

PARTITIONED OUTER JOINS select v.periodo, nvl(v.valor,0) vlrR$, c.cod, c.nome from v_movimento_cliente v partition by (periodo) right outer join cliente c on c.cod = v.cod_cliente

EXPRESSES REGULARES

REGEXP_LIKE() SELECT zip FROM zipcode WHERE REGEXP_LIKE(zip, '[^[:digit:]]')); SELECT last_name FROM employees 94

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i'); alter table cliente add constraint chk_formato_cpf check (REGEXP_LIKE(cpf, '^([[:digit:]]{3}.[[:digit:]]{3}.[[:digit:]]{3}[[:digit:]]{2})$'));

Oracle 9iR2 FLASHBACK QUERY select * from clientes INTERVAL 20 MINUTE; AS OF TIMESTAMP SYSDATE

ALTER TABLE alter table NR_TELEFONE; clientes rename column NRFONE sys_c00344 to to

alter table clientes fk_cliente_cidade; ANSI JOINS

rename

constraint

select * from cliente NATURAL JOIN departamento; select * from cliente JOIN departamento USING (cod_dep); select a.codigo, b.nome from cliente a join cidade b ON (a.cod_cidade=b.codigo); select * from cliente LEFT JOIN departamento ON (a.cod_dept = b.codigo); select * from cliente RIGHT JOIN departamento ON (a.cod_dept = b.codigo); select * from cliente FULL JOIN departamento ON (a.cod_dept = b.codigo); Select * from empregado a INNER JOIN empregado b ON (a.cod_gerente = b.cod_empregado); 95

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

Introduo ao Oracle SQL 11g

Oracle 9iR1 SELECT FOR UPDATE


SELECT * FROM employees WHERE empno = 20 FOR UPDATE WAIT 30;

SELECT * FROM employees WHERE empno = 20 FOR UPDATE SKIP LOCKED;

EXTERNAL TABLES CREATE TABLE emp_ext ( empcode NUMBER(4), empname VARCHAR2(25), deptname VARCHAR2(25), hiredate date ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tables ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY ',' MISSING FIELD VALUES ARE NULL ) LOCATION ('emp_ext1.dat','emp_ext2.dat') ) REJECT LIMIT UNLIMITED;

DATATYPES INTERVAL YEAR TO MONTH INTERVAL DAY TO SECOND TIMESTAMP

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

96

Introduo ao Oracle SQL 11g

EXPRESSES DATA

Select systimestamp AT TIME ZONE -04:00 from dual; EXPRESSES DE INTERVALO

Select sysdate + interval 3 minute from dual; Select sysdate interval 3 1:30:20 day to second from dual; Select systimestamp + interval 3 month from dual;

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

97

Introduo ao Oracle SQL 11g

EXPRESSO CASE Searched: select CASE when sysdate between '01-jan-05' and 31-Dec-05 then 'Ano 2005' when 1=2 then 'Invlido' else '...' END from dual

MERGE

merge into clientes destino using txt_cli origem on (destino.cod = origem.codcli) when matched then update set destino.nome = origem.nome, destino.cidade=origem.cidade when not matched then insert (destino.cod, destino.nome) values(origem.codcli, origem.nome);

DEFAULT VALUES create table t2(col1 number(3), col2 char default S);

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

98

Introduo ao Oracle SQL 11g

Insert into t2 values(1, DEFAULT); Update t2 Set col2 = DEFAULT where col1=1;

TRANSACTION NAME

Set transaction name Atualizaao Noturna; MULTITABLE INSERT


INSERT ALL INTO sales (prod_id, cust_id, time_id, amount) VALUES (product_id, customer_id, weekly_start_date, sales_sun) INTO sales (prod_id, cust_id, time_id, amount) VALUES (product_id, customer_id, weekly_start_date+1, sales_mon) INTO sales (prod_id, cust_id, time_id, amount) VALUES (product_id, customer_id, weekly_start_date+2, sales_tue) INTO sales (prod_id, cust_id, time_id, amount) VALUES (product_id, customer_id, weekly_start_date+3, sales_wed) INTO sales (prod_id, cust_id, time_id, amount) VALUES (product_id, customer_id, weekly_start_date+4, sales_thu) INTO sales (prod_id, cust_id, time_id, amount) VALUES (product_id, customer_id, weekly_start_date+5, sales_fri) SELECT product_id, customer_id, weekly_start_date, sales_sun, sales_mon, sales_tue, sales_wed, sales_thu, sales_fri, sales_sat FROM sales_input_table;

Condicional, Insert all: INSERT ALL WHEN order_total < 1000000 THEN INTO small_orders WHEN order_total > 1000000 AND order_total < 2000000 THEN INTO medium_orders WHEN order_total > 2000000 THEN INTO large_orders

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

99

Introduo ao Oracle SQL 11g

SELECT order_id, order_total, sales_rep_id, customer_id FROM orders; Condicional, Insert First:
INSERT FIRST WHEN ottl < 100000 THEN INTO small_orders VALUES(oid, ottl, sid, cid) WHEN ottl > 100000 and ottl < 200000 THEN INTO medium_orders VALUES(oid, ottl, sid, cid) WHEN ottl > 290000 THEN INTO special_orders WHEN ottl > 200000 THEN INTO large_orders VALUES(oid, ottl, sid, cid) SELECT o.order_id oid, o.customer_id cid, o.order_total ottl, o.sales_rep_id sid, c.credit_limit cl, c.cust_email cem FROM orders o, customers c WHERE o.customer_id = c.customer_id;

GROUP BY Alm do CUBE() e ROLLUP() da verso 8i no Oracle 9i temos tambm a GROUPING SETS()
CUBE(a, b, c)

Equivale a:
GROUPING SETS ((a, b, c), (a, b), (a, c), (b, c), (a), (b), (c), ()) ROLLUP(a, b, c)

Equivale a:
GROUPING SETS ((a, b, c), (a, b), ())

Clusula WITH WITH channel_summary AS ( SELECT channels.channel_desc, SUM(amount_sold) AS channel_total FROM sales, channels WHERE sales.channel_id = channels.channel_id GROUP BY channels.channel_desc

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

100

Introduo ao Oracle SQL 11g

) SELECT channel_desc, channel_total FROM channel_summary WHERE channel_total > ( SELECT SUM(channel_total) * 1/3 FROM channel_summary); Oracle 8i Relatrios em HTML no SQL*Plus SET ECHO OFF SET MARKUP HTML ON SPOOL ON SPOOL c:\test.html SELECT * FROM test; SPOOL OFF SET MARKUP HTML OFF SET ECHO OFF sqlplus -s -m "HTML ON" us/pw @c:\test.sql>test.html

CASE Simples : select CASE extract(day from sysdate) when 1 then 'Primeiro' when 1 then 'Segundo' else '...' END As Dia from dual ANALYTIC FUNCTIONS
{SUM|AVG|MAX|MIN|COUNT|STDDEV|VARIANCE|FIRST_VALUE|LAST_VALUE} ({<value expression1> | *}) OVER ([PARTITION BY <value expression2>[,...]] ORDER BY <value expression3> [collate clause>] [ASC| DESC] [NULLS FIRST | NULLS LAST] [,...] ROWS | RANGE {{UNBOUNDED PRECEDING | <value expression4> PRECEDING} | BETWEEN {UNBOUNDED PRECEDING | <value expression4> PRECEDING} AND{CURRENT ROW | <value expression4> FOLLOWING}}

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

101

Introduo ao Oracle SQL 11g

RANK() OVER ( [PARTITION BY <value expression1> [, ...]] ORDER BY <value expression2> [collate clause] [ASC|DESC] [NULLS FIRST|NULLS LAST] [, ...] )

ROW_NUMBER() OVER ([PARTITION BY <value expression1> [, ...]] ORDER BY <value expression2> [collate clause] [ASC|DESC] [NULLS FIRST | NULLS LAST] [, ...])

{SUM | AVG | MAX | MIN | COUNT | STDDEV | VARIANCE} ([ALL | DISTINCT] {<value expression1> | *}) OVER ([PARTITION BY <value expression2>[,...]])

{LAG | LEAD} (<value expression1>, [<offset> [, <default>]]) OVER ([PARTITION BY <value expression2>[,...]] ORDER BY <value expression3> [collate clause>] [ASC | DESC] [NULLS FIRST | NULLS LAST] [,...])

SELECT s_productkey, s_amount, RANK() OVER (ORDER BY s_amount) AS default_rank, RANK() OVER (ORDER BY s_amount DESC NULLS LAST) AS custom_rank FROM sales; SELECT Acct_number, Trans_date, Trans_amount, SUM(Trans_amount) OVER (PARTITION BY Acct_number ORDER BY Trans_date ROWS UNBOUNDED PRECEDING) AS Balance FROM Ledger ORDER BY Acct_number, Trans_date; SELECT Account_number, Trans_date, Trans_amount, AVG (Trans_amount) OVER (PARTITION BY Account_number ORDER BY Trans_date RANGE INTERVAL '7' DAY PRECEDING) AS mavg_7day; SELECT Account_number, Trans_date, Trans_amount, AVG (Trans_amount) OVER (PARTITION BY Account_number ORDER BY Trans_date RANGE BETWEEN INTERVAL '1' MONTH PRECEDING

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

102

Introduo ao Oracle SQL 11g

AND INTERVAL '1' MONTH FOLLOWING) as c_avg FROM Ledger; SELECT NRGUIA, DTREFERENCIA, VLPAGO, SUM(VLPAGO) OVER(ORDER BY NRGUIA ROWS BETWEEN 1 PRECEDING AND CURRENT ROW ) FROM MOVIMENTO_PRESTADOR WHERE NRREGISTRO_PREST= 19994 AND NRPERIODO_COMPET = 200412; SELECT t_timekey, s_amount, FIRST_VALUE(s_amount) OVER (ORDER BY t_timekey ROWS 1 PRECEDING) AS LAG_physical, SUM(s_amount) OVER (ORDER BY t_timekey ROWS 1 PRECEDING) AS MOVINGSUM, FROM sales, time WHERE sales.s_timekey = time.t_timekey ORDER BY t_timekey; SELECT t_timekey, s_amount, LAG(s_amount,1) OVER (ORDER BY t_timekey) AS LAG_amount, LEAD(s_amount,1) OVER (ORDER BY t_timekey) AS LEAD_amount FROM sales, time WHERE sales.s_timekey = time.t_timekey ORDER BY t_timekey; SELECT p_productkey, s_amount, ROW_NUMBER() (ORDER BY s_amount DESC NULLS LAST) AS srnum FROM product, sales WHERE p_productkey = s_productkey; CUBE(), ROLLUP() e GROUPPING() SELECT Time, Region, Department, SUM(Profit) AS Profit, GROUPING (Time) as T, GROUPING (Region) as R, GROUPING (Department) as D FROM Sales GROUP BY ROLLUP (Time, Region, Department);

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

103

Introduo ao Oracle SQL 11g

SELECT decode(grouping(Time), 1, 'All Times', Time) AS Time, decode(grouping(region), 1, 'All Regions', 0, null)) AS Region, sum(Profit) AS Profit FROM Sales group by CUBE(Time, Region); SELECT Time, Region, Department, SUM(Profit) AS Profit, GROUPING (Time) AS T, GROUPING (Region) AS R, GROUPING (Department) AS D FROM Sales GROUP BY CUBE (Time, Region, Department) HAVING (GROUPING(Department)=1 AND GROUPING(Region)=1 AND GROUPING(Time)=1) OR (GROUPING(Region)=1 AND (GROUPING(Department)=1) OR (GROUPING(Time)=1 AND GROUPING(department)=1);

Rua Campo Grande, 533, Centro, Cuiab/MT | http://www.tdstecnologia.com.br

104

Você também pode gostar