Apostila Introdução Oracle SQL e PL_SQL

download Apostila Introdução Oracle SQL e PL_SQL

of 92

Transcript of Apostila Introdução Oracle SQL e PL_SQL

Introduo ao Oracle: SQL e PL/SQLDEFINIO DE BANCO DE DADOS RELACIONAL Um banco de dados relacional um conjunto de relaes ou tabelas bidimensionais para armazenar informaes. Por exemplo, informaes sobre todos os funcionrios de uma empresa. Em um banco de dados relacional, voc cria vrias tabelas para armazenar informaes diferentes sobre funcionrios, como tabelas de funcionrios, departamentos e salrios. MODELO DE RELACIONAMENTO DE ENTIDADES Em um sistema eficiente, os dados so divididos em categorias ou entidades distintas. Um modelo de relacionamento de entidades (ER) uma ilustrao de vrias entidades em uma empresa e dos relacionamentos entre elas. Um modelo de relacionamento de entidades derivado de narrativas ou especificaes comerciais e criado durante a fase de anlise do ciclo de vida de desenvolvimento do sistema. Os modelos para relacionamento de entidades separam as informaes necessrias para uma empresa das atividades desempenhadas dentro dela. Embora as empresas possam alterar suas atividades, o tipo de informaes tende a permanecer constante. Portanto, as estruturas de dados tambm tendem a ser constantes. Benefcios do Modelo de Relacionamento de Entidades. Documenta as informaes da organizao em formato claro e preciso. Fornece uma imagem clara do escopo das necessidades de informaes. Fornece um mapa ilustrado facilmente compreendido para o desingn do banco de dados. Oferece uma estrutura eficiente para a integrao de vrias aplicaes.

Componentes-chave Entidade: Um item importante sobre o qual necessrio obter informaes. Os exemplos so departamentos, funcionrios e pedidos. Atributo: Um item que descreve ou qualifica uma entidade. Por exemplo, para a entidade de funcionrios, os atributos so o nmero, o nome e o cargo do funcionrio, alm do nmero do departamento e assim por diante. Cada um desses atributos necessrio ou opcional. Esse estado chamado de opcionalidade. Relacionamento: Uma associao nomeada entre entidades que demonstra opcionalidade e grau. Os exemplos so funcionrios e departamentos, alm de pedidos e itens.

ATRIBUTO IDENTIFICADOR Chave Primria: aquele atributo que identifica de forma nica cada ocorrncia na entidade linha preenchida na tabela. Empregado Chave primria (num-matricula) Atributos (nom-empregado, dat-nascimento, datadmisso, sal-bruto)

- Exemplo:

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

1

Introduo ao Oracle: SQL e PL/SQLChave concatenada ou composta: Quando o identificador formado por mais de um atributo na formao da chave primria. Dependente Chave primria (cod-dependente, empregado. num-matricula) Atributos (nom-empregado, dat-nascimento) Chave Estrangeira: um atributo importado de outra entidade, para implementar logicamente o relacionamento 1:N. Departamento Chave primria (cod-depto) Atributos (nom-depto, sgl-depto) Laboratrio Chave-primria (cod-laboratrio) Atributos (nom-laboratrio) Chave estrangeira (departamento.cod-depto) Exerccio: 1. - Um professor pode ministrar vrias disciplinas. - As disciplinas possuem apenas 1 professor. DER (Diagrama de Entidade e Relacionamento)

- Exemplo:

- Exemplo:

1 Professor 1 ministra

N 1 Disciplina

MER (Metodologia de Entidade e Relacionamento) Professor Cod_prof PK Nome_prof Idade_prof End_prof Tel_prof Disciplina Cod_disc PK Descr_disc carga_hor Cod_prof FK

1:N

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

2

Introduo ao Oracle: SQL e PL/SQL2. 3. Somente existe 1 candidato a presidncia por partido. Cada candidato a presidncia apoia pelo menos 1 candidato a governador. Cada candidato a governador apoia um nico candidato a presidncia. Cada partido apoia um nico senador. Cada candidato a governador apoia pelo menos 1 candidato a deputado federal. Cada candidato a deputado federal tem apoio de um nico candidato a governador. Os clientes podem fazer vrios pedidos. Os pedidos pertencem a um nico cliente. Um pedido pode conter vrios produtos. Cada produto pode estar em vrios pedidos.

Instrues SQL SELECT INSERT UPDATE DELETE CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVEPOINT GRANT REVOKE Recuperao de Dados DML (Data Manipulation Language)

DDL (Data Definition Language)

Controle de transao DCL (Data Control Language)

SELECT INSERT UPDATE DELETE CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVEPOINT

Recupera dados do Banco de Dados. Inclui novas linhas, alteras linhas (informaes) existentes e remove linhas indesejveis no Banco de dados, respectivamente. Cria novos objetos (usurios, tabelas, views, etc), altera objetos, mata objetos, renomeia tabelas e trunca as tabelas, respectivamente no Banco de Dados. Gerencia as alteraes feitas por instrues DML, confirmando ou cancelando. possvel agrupar as alteraes dos dados em transaes lgicas.

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

3

Introduo ao Oracle: SQL e PL/SQLGRANT REVOKE Fornece ou remove direitos de acesso ao banco de Dados e estrutura contidas ele para novos usurios de Banco.

Sobre PL/SQL O PL/SQL (Procedural Language/SQL) uma extenso de linguagem procedural da Oracle Corporation para SQL, a linguagem de acesso a dados padro para bancos de dados relacionais. O PL/SQL oferece recursos de engenharia de software modernos, como, por exemplo, a encapsulao de dados, o tratamento de excees, a ocultao de informaes, a orientao de objeto e assim por diante, trazendo os recursos de programao mais modernos para o Oracle Server. Tabelas que sero utilizadas neste Curso: EMP -> Traz informaes sobre os Empregados. DEPT -> Traz informaes sobre todos os Departamentos. SALGRADE -> Traz informaes sobre salrios de vrias classes. CRIANDO INSTRUES SQL BSICAS Instruo SELECT bsica SELECT [ DISTINCT ] { *, coluna [ apelido ],...} FROM tabela. Da forma mais simples, uma instruo SELECT deve incluir o seguinte: - SELECT especifica as colunas as serem exibidas. - FROM especifica a tabela que contm as colunas listadas na clusula SELECT. Na Sintaxe: SELECT uma lista de uma ou mais colunas DISTINCT suprime os itens duplicados * seleciona todas as colunas coluna seleciona uma ou mais colunas nomeadas (especficas) apelido fornece cabealhos diferentes s colunas selecionadas FROM tabela especifica a tabela contendo as colunas Criando e executando instrues SQL Instrues SQL no fazem distino entre maisculas e minsculas. Podem ser digitadas em uma ou mais linhas. Geralmente separadas para melhor visualizao. No podem ser divididas as palavras. Dentro do SQL*Plus, uma instruo SQL digitada no prompt SQL e as linhas subsequentes so numeradas, isso chama-se buffer de SQL. Coloque um ponto-e-vrgula ( ; ) no final da ltima clusula. Selecionando todas as colunas da tabela dept: SQL> Select * Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 4

Introduo ao Oracle: SQL e PL/SQL2 from dept;

Selecionando colunas especficas da tabela dept: Pode-se selecionar mais de um campo da tabela separando por vrgula. SQL> Select deptno, loc 2 from dept; Expresses aritmticas: Criar expresses com dados NUMBER e DATE usando operadores aritmticos. Operador + * / Descrio Adicionar Subtrair Multiplicar Dividir

Select ename, sal, sal+300 From emp; Precedncia do Operador A Multiplicao e a diviso tem prioridade sobre a adio e a subtrao. Os operadores com a mesma prioridade so avaliados da esquerda para a direita. Os parnteses so usados para forar a avaliao priorizada e para esclarecer as instrues. Select ename, sal, 12*sal+100 From emp; A Multiplicao ser executada antes da adio. Select ename, sal, 12*(sal+100) From emp; A adio ser executada antes da Multiplicao. Valores Nulos nas expresses aritmticas: Um valor NULO diferente de 0 e espao. Select ename, job, sal, comm from emp; ENAME --------KING BLAKE TURNER JOB ------------------------PRESIDENT MANAGER SALESMAN SAL -----------5000 2850 1500 COMM ----------0

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

5

Introduo ao Oracle: SQL e PL/SQLSelect ename, 12*sal+comm FROM emp Where ename=KING; ENAME --------KING 12*SAL+COMM --------------------

Se qualquer valor da coluna em uma expresso aritmtica for nulo, o resultado ser nulo. Por exemplo, se voc tentar executar uma diviso com zero, obter um erro. No entanto, se dividir um nmero por nulo, o resultado ser nulo ou desconhecido. Usando apelidos nas colunas Renomeia um cabealho de coluna. til para clculos. A clusula AS opcional. Segue imediatamente o nome da coluna. Necessita de aspas duplas caso contenha espaos ou caracteres especiais ou faa distino entre maisculas e minsculas.

Select ename Nome, sal * 12 as Salario Anual From emp; Nome --------Salario Anual --------------------

Operador de concatenao Concatena colunas ou strings de caractere a outras colunas representado por duas barras verticais ( || ) - pipe. Cria uma coluna resultante que uma expresso de caracteres. Select ename || job as Empregados From emp;

Empregados ---------------------KINGPRESIDENT BLAKEMANAGER ... Strings Literais de caracteres: Uma literal um caracter, um nmero ou uma data includa na lista SELECT. Os valores literais de caractere e data devem estar entre aspas simples. Cada string de caractere gerada uma vez para cada linha retornada.

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

6

Introduo ao Oracle: SQL e PL/SQLSelect ename || o || job As Detalhes de empregados From emp; Detalhes de empregados ---------------------KING o PRESIDENT BLAKE o MANAGER ... select ename || : || 1 || Salario Mensal = || sal As Mensal from emp; Mensal -----------------------------------KING : 1 Salario Mensal = 5000 BLAKE : 1 Salario Mensal = 2850 ... Eliminando linhas duplicadas Por default a exibio das consultas de todas as linhas, inclusive as duplicadas. Para elimin-las, deveremos utilizar a clusula DISTINCT. Select deptno From emp; DEPTNO ---------10 30 10 20 ... select distinct deptno from emp; DEPTNO ---------10 20 30 No exemplo mostrado, a tabela EMP contm na verdade, quatorze linhas, mas h somente trs nmeros de departamento exclusivos na tabela. Voc pode especificar vrias colunas aps o qualificador DISTINCT, o mesmo afeta todas as colunas selecionadas e o resultado representa uma combinao distinta das colunas. select distinct deptno, job from emp; Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 7

Introduo ao Oracle: SQL e PL/SQLDEPTNO --------10 10 10 20 ... JOB -------------------CLERK MANAGER PRESIDENT ANALYST SQL * PLUS o ambiente (ferramenta Oracle) onde estaremos manipulando todos os comandos SQL e PL/SQL. Para estabelecer login atravs de um ambiente Windows: 1- Clique em Iniciar -> Programas -> Oracle for Windows NT -> SQL*Plus 3.3 (8.0). 2- Preencha o nome de usurio (SCOTT) e senha do banco de dados (TIGER). 3- Host String - > uma string de conexo com o banco de dados que no necessita ser passada, pois estamos conectando localmente. Exibindo a estrutura da tabela Use o comando DESCRIBE para exibir esta estrutura. DESC [RIBE] nome da tabela. Ex.: Desc dept Name Null? ----------------- ---------------DEPTNO NOT NULL DNAME LOC Type ------------------------NUMBER(2) VARCHAR2(14) VARCHAR2(13)

Acima est a estrutura da tabela dept. No resultado:

Null? dados. Type

Indica se a coluna deve conter dados; NOT NULL indica que uma coluna deve conter Exibe o tipo de dado de uma coluna

Os tipos de dados so descritos na tabela a seguir: Tipo de dado NUMBER(P,S) VARCHAR2(S) DATE CHAR(S) Descrio Valor numrico que possui um nmero mximo de dgitos P, o nmero de dgitos direita do ponto decimal S. Valor de caracteres com comprimento varivel do tamanho mximo S. Valor de data e hora entre 1 de janeiro, 4712 A.C. e 31 de dezembro de 9999 D.C. Valores de caracteres com comprimento fixo do tamanho S. Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 8

Introduo ao Oracle: SQL e PL/SQL

Comandos de Edio do SQL*Plus Comando A[PPEND] texto C[HANGE] / antigo / novo C[HANGE] / texto / CL[EAR] BUFF[ER] DEL - DEL n - DEL m n I[NPUT] I[NPUT] texto L[IST] L[IST] n L[IST] m n R[UN] N N texto 0 texto Descrio Adiciona texto no final da linha atual. Altera o texto antigo para o novo na linha atual. Deleta o texto da linha atual. Deleta todas as linhas a partir do buffer de SQL. Deleta a linha atual. Deleta a linha n. Deleta linhas de m a n. Insere um nmero indefinido de linhas Insere uma linha consistindo em texto Lista todas as linhas no buffer de SQL Lista uma linha (especificada pelo n) Lista uma faixa de linha ( de m a n ) Exibe e executa a instruo SQL atual no buffer. Especifica a linha que deve se tornar a linha atual Substitui a linha n pelo texto Insere uma linha antes da linha 1.

Comandos de Edio do SQL*Plus Comando Descrio SAV[E] nome de arquivo [.ext] Salva o contedo atual do buffer de SQL para um arquivo. Use [REP[LACE]APP[END]] APPEND para adicionar um arquivo existente; use REPLACE para substituir um arquivo existente. A extenso .sql. GET nome do arquivo [.ext] Salva o contedo de um arquivo salvo anteriormente para o buffer de SQL. A extenso default para o nome de arquivo .sql. STA[RT] nome do arquivo [.ext] Executa um arquivo de comando salvo anteriormente. @ nome de arquivo Executa um arquivo de comando salvo anteriormente (o mesmo que START) ED[IT] Chama o editor e salva o contedo do buffer para um arquivo chamado afiedt.buf. ED[IT] nome do arquivo [.ext] Chama o editor para editar o contedo de um arquivo salvo. SPO[OL] [nome do arquivo ext]| Armazena os resultados da consulta em um arquivo. OFF fecha OFF|OUT] o arquivo perifrico. OUT fecha o arquivo perifrico e envia os resultados do arquivo para a impressora do sistema. EXIT Sai do cdigo SQL*Plus. Exerccios 1: 1. Inicie uma sesso SQL*Plus usando um ID e senha de usurio fornecidas anteriormente (SCOTT TIGER). 2. A instruo SELECT ser executada corretamente?

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

9

Introduo ao Oracle: SQL e PL/SQLSelect ename, job, sal Salary From emp; 3. H quatro erros de codificao nesta instruo. Voc pode identific-los? Select empno, ename Salary x 12 Salario Anual From emp; 4. 5. Mostre a estrutura da tabela DEPT. Selecione todos os dados da tabela DEPT. Mostre a estrutura da tabela EMP. Crie uma consulta para exibir o nome, o cargo, a data de admisso e o nmero do funcionrio para cada funcionrio com o nmero do funcionrio aparecendo primeiro. Salve a instruo SQL em um arquivo nomeado ex1.sql

6. Execute a consulta no arquivo ex1.sql 7. Crie uma consulta para exibir os cargos exclusivos a partir da tabela EMP. 8. Carregue o arquivo ex1.sql no Buffer de SQL. Nomeie os cabealhos das colunas como Emp#, Employee, Job e Date, respectivamente. Execute novamente a consulta.

9. Exiba o nome concatenado com o cargo (job), separado por uma vrgula e espao, e nomeie a coluna Employee and Title. 10. Crie uma consulta para exibir todos os dados a partir da tabela EMP. Separe cada coluna por uma vrgula. Nomeie a coluna como THE_OUTPUT.

RESTRIGINDO E CLASSIFICANDO DADOS Limitando linhas selecionadas (Clusula WHERE) SELECT [ DISTINCT ] { *, coluna [ apelido ],...} FROM tabela [WHERE condio(es)]; A clausula WHERE formada por trs elementos: Nome da coluna Operadores de comparao Nome da coluna, constante ou lista de valores. Usando a clusula WHERE No select abaixo ser recuperado o nome, cargo e nr. Do departamento de todos os funcionrios cujo cargo CLERK Select ename, job, deptno From emp Where job=CLERK; Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 10

Introduo ao Oracle: SQL e PL/SQLENAME JOB DEPTNO ----------------- ----------JAMES CLERK 30 SMITH CLERK 20 ADAMS CLERK 20 MILLER CLERK 10 Strings de Caractere e Datas As strings de caractere e valores de data aparecem entre aspas simples. Os valores de caractere fazem distino entre maisculas i minsculas e os valores de data diferenciam formatos. O formato de data default do Oracle DD-MON-YY Operadores de Comparao Operador = > >= < = 1500 ... where ename = SMITH select ename, sal, comm from emp where sal = 1100 AND job=CLERK;

EMPNO ENAME -------- ---------7876 ADAMS 7934 MILLER

JOB ---------CLERK CLERK

SAL ---------1100 1300

Usando o operador OR: Select empno, ename, job, sal From emp Where sal >= 1100 OR job=CLERK; Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 13

Introduo ao Oracle: SQL e PL/SQLEMPNO ENAME -------- ---------7839 KING 7698 BLAKE 7876 ADAMS ... 7934 MILLER ... JOB ---------PRESIDENT MANAGER CLERK CLERK SAL ---------5000 2850 1100 1300

Usando o operador NOT: Select ename, job From emp Where job NOT IN (CLERK, MANAGER,ANALYST); ENAME --------------KING MARTIN ALLEN TURNER WARD JOB -------------------PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN

Outros exemplos: ... WHERE sal NOT BETWEEN 1000 AND 1500 ... WHERE ename NOT LIKE %A ... WHERE comm IS NOT NULL Clusula ORDER BY Classifica as linhas no comando SELECT 1. ASC ordem crescente, DEFAULT. 2. DESC ordem decrescente. Quando utilizada a clusula ORDER BY, deve coloc-la por ltimo.

Select ename, job, hiredate From emp ORDER BY hiredate; ENAME --------------ADAMS SCOTT ... JOB -------------------CLERK ANALYST HIREDATE --------------09-DEC-82 12-JAN-83

Select ename, job, hiredate From emp Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 14

Introduo ao Oracle: SQL e PL/SQLORDER BY hiredate DESC; ENAME --------------SCOTT ADAMS ... JOB -------------------ANALYST CLERK HIREDATE --------------12-JAN-83 09-DEC-82

Classificando por Apelido de Coluna select empno, ename, sal * 12 Salrio_Anual from emp ORDER BY Salrio_Anual EMPNO ENAME -------- ---------7369 SMITH 7900 JAMES 7876 ADAMS ... SALRIO_ANUAL -------------------9600 11400 13200

Classificando por vrias colunas Voc pode classificar os resultados das consultas por mais de uma coluna. O limite de classificao o nmero de colunas de uma determinada tabela. Na clusula ORDER BY, especifique as colunas e separe seus nomes usando vrgulas. Se deseja inverter a ordem de uma coluna, especifique DESC aps seu nome. possvel ordenas por colunas que no esto includas na clusula SELECT.

select ename, deptno, sal from emp ORDER BY deptno, sal DESC; ENAME --------------KING CLARK MILLER FORD ... Exerccios 2: 1. Crie uma consulta para exibir o nome e o salrio dos funcionrios que recebem mais de R$ 2850. Salve a instruo SQL em um arquivo ex2_1.sql. Execute a consulta. DEPTNO ---------10 10 10 20 SAL ----------5000 2450 1300 3000

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

15

Introduo ao Oracle: SQL e PL/SQL2. Crie uma consulta para exibir o nome do funcionrio e o nmero do departamento para o nmero do funcionrio 7566. 3. Modifique o arquivo ex2_1.sql para exibir o nome e o salrio de todos os funcionrios cujos salrios no estejam na faixa entre R$ 1500 e R$ 2850. Salve novamente a instruo SQL em um arquivo nomeado ex2_3.sql. Execute novamente a consulta.

4. Exiba o nome do funcionrio, o cargo e a data de admisso dos funcionrios admitidos entre 20 de fevereiro de 1981 e 1 de maio de 1981. Ordene a consulta de modo crescente pela data inicial. 5. Exiba o nome do funcionrio e o nmero do departamento de todos os funcionrios entre os departamentos 10 e 30 por ordem alfabtica de nome. 6. Modifique o ex3_1.sql para listar o nome e o salrio dos funcionrios que recebem mais de R$ 1500 e que esto nos departamentos 10 ou 30. Nomeie as colunas Empregado e Salrio Mensal, respectivamente. Salve novamente a instruo SQL em um arquivo ex2_6.sql . Execute novamente a consulta.

7. Exiba o nome e a data de admisso de cada funcionrio admitido em 1982. 8. Exiba o nome e o cargo de todos os funcionrios que no possuem em gerente. 9. Exiba o nome, o salrio e a comisso de todos os funcionrios que recebem comisso. Classifique os dados em ordem decrescente de salrios e comisses. 10. Exiba os nomes de todos os funcionrios que possuem um A na terceira letra de seus nomes. 11. Exiba todos os funcionrios que possuem duas letras LL departamento 30 ou seu gerente seja o 7782. em seus nomes e esto no

12. Exiba o nome, o cargo e o salrio de todos os funcionrios cujos cargos seja Clerk ou Analyst e que seus salrios no sejam iguais a R$ 1000, R$ 3000 ou R$ 5000. 13. Modifique o ex2_6.sql para exibir o nome, o salrio e a comisso de todos os funcionrios cuja quantia de comisso seja maior que seus salrios com 10 % de aumento. Execute novamente a consulta. Salve novamente a consulta como ex2_13.sql. FUNES SQL As funes so um recurso avanado de SQL e podem ser usados para realizar o seguinte: Executar clculos usando dados. Modificar itens de dados individuais. Manipular sada para grupos de linhas. Formatar datas e nmeros para exibio. Converter tipos de dados de coluna.

As funes SQL podem aceitar argumentos e sempre retorna um valor. OBS.: A maioria das funes descritas nesta lio so especficas para a verso SQL da Oracle. Funes de Caracter (Converso de Maisculas e Minsculas) Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 16

Introduo ao Oracle: SQL e PL/SQLFuno LOWER UPPER INITCAP Objetivo Converte valores de caractere alfabtico para letras minsculas. Converte valores de caractere alfabtico para letras maisculas. Converte valores de caractere alfabtico para letras maisculas na primeira letra de cada palavra e todas as outras letras em minsculas.

Funes de Caracter (Manipulao de caractere) Funo CONCAT SUBSTR (coluna,m,n) LENGHT INSTR LPAD / RPAD (coluna,n,string) Objetivo Concatena o primeiro valor do caractere ao segundo valor do caractere, equivalente ao operador de concatenao ( || ). Retorna caracteres especficos a partir do valor de caractere comeando na posio m, at n caracteres depois. Retorna o nmero de caracteres do valor Retorna a posio numrica do caractere nomeado. Preenche o valor de caractere com a string, justificando (esquerda ou direita), preenchendo o tamanho de n posies faltantes da qtde da coluna.

Funes LOWER, UPPER e INITCAP Funo LOWER (SQL Curso) UPPER (SQL Curso) INITCAP (SQL Curso) Funes de Manipulao de Caractere Funo CONCAT (Good, String) SUBSTR (String, 1, 3) LENGTH (String) INSTR (String, r) LPAD (sal, 10, *) TRIM (S, FROM SSMITH) Funes numricas Funo ROUND(coluna, n) TRUNC(coluna, n) MOD(m, n) Resultado GoodString Str 6 3 ******5000 MITH Resultado sql curso SQL CURSO Sql Curso

Objetivo Arredonda a coluna, expresso ou valor para n casas decimais ou se n for omitido, nenhuma casa decimal (Se n for negativo, os nmeros esquerda do ponto decimal sero arredondados.) Trunca a coluna, expresso ou valor para n casas decimais ou se n for omitido, nenhuma casa decimal (Se n for negativo, os nmeros esquerda do ponto decimal sero truncados para zero.) Retorna o resto de m dividido por n.

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

17

Introduo ao Oracle: SQL e PL/SQLROUND select ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) from DUAL; ROUND(45.923,2) --------------------45.92 TRUNC select TRUNC(45.923,2), TRUNC (45.923), TRUNC (45.923,-1) from DUAL; TRUNC (45.923,2) --------------------45.92 MOD select ename, sal, comm, MOD(sal, comm) from emp where job = SALESMAN; ENAME -------------MARTIN ALLEN TURNER WARD SAL COMM MOD(SAL,COMM) ------- -------- --------------------1250 1400 1250 1600 300 100 1500 0 1500 1250 500 250 TRUNC (45.923,0) --------------------45 TRUNC (45.923,-1) ---------------------40 ROUND(45.923,0) --------------------46 ROUND(45.923,-1) ---------------------50

Trabalhando com Datas Oracle armazena datas em um formato numrico interno: sculo, ano, ms, dia, horas, minutos e segundos. formato de data DEFAULT DD-MON-YY. SYSDATE uma funo de retorno de data e hora. DUAL uma tabela fictcia usada para visualizar SYSDATE. Resultado DATA DATA Nmero de dias DATA Descrio Adiciona um nmero de dias para uma data. Subtrai um nmero de dias de uma data. Subtrai uma data de outra. Adiciona um nmero de horas para uma data.

Operao Data + nmero Data - nmero Data - data Data + nmero/24

Usando operadores aritmticos com datas select ename, (sysdate hiredate) / 7 WEEKS Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 18

Introduo ao Oracle: SQL e PL/SQLfrom emp where deptno = 10; ENAME -------------KING CLARK MILLER ... WEEKS ------------830.93709 859.93709 821.36556

O exemplo exibe o nome e o nmero de semanas empregadas por todos os funcionrios do departamento 10. Ele subtrai a data atual (SYSDATE) a partir da data na qual o funcionrio foi admitido e divide o resultado por 7 a fim de calcular o nmero de semanas que o trabalhador est empregado. Funes de Data Funo MONTHS_BETWEEN(data1, data2) ADD_MONTHS(data, n) NEXT_DAY(data,char) LAST_DAY(data) Usando as funes: MONTHS_BETWEEN (01-SEP-95, 11-JAN-94) 19.6774194 ADD_MONTHS (11-JAN-94, 6) 11-JUL-94 NEXT_DAY (01-SEP-95, FRIDAY) 08-SEP-95 /* Prx. Sexta-feira da semana*/ LAST_DAY (01-SEP-95) 30-SEP-95 /* ltimo dia do ms em questo */ Descrio Localiza o nr. de meses entre a data1 e a data2 . Adiciona um nmero n de meses de calendrio data . O valor de n pode ser inteiro ou pode ser negativo. Localiza a data do prximo dias especificado da data seguinte da semana (char). O valor de char pode ser um nmero representando um dia ou uma string de caractere. Localiza a data do ltimo dia do ms que contm a data.

Funes de Converso: Existem funes de converso que so feitas IMPLCITAMENTE e converses que so feitas EXPLICITAMENTE. Converso IMPLCITA de tipo de dados: De VARCHAR2 ou CHAR Para NUMBER 19

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

Introduo ao Oracle: SQL e PL/SQLVARCHAR2 ou CHAR NUMBER DATE DATE VARCHAR2 VARCHAR2

Embora a converso implcita de tipo de dados esteja disponvel, recomendvel que voc realize a converso explcita de tipo de dados a fim de garantir a confiabilidade das instrues SQL.

Converso EXPLCITA de tipo de dados: TO_NUMBER TO_DATE

NUMBER

CARACTER

DATE

TO_CHAR

TO_CHAR Objetivo Converte nmeros ou datas para tipo de dados VARCHAR2. Converte um string de caractere contendo dgitos para um nmero no formato especificado pelo modelo de formato opcional fmt. Converte uma string de caractere representando uma data para um valor de data de acordo com o fmt especificado. Se o fmt for omitido, o formato DD-MON-YY.

Funo TO_CHAR(nmero/data, [fmt]) TO_NUMBER(caractere, [fmt]) TO_DATE (caractere, [fmt])

Funo TO_CHAR com Datas. Elemento Descrio SCC ou CC Sculo; Prefixos S data AC com Anos em datas YYYY ou SYYYY Ano; Prefixos S data AC com YYY ou YY ou Y ltimos trs, dois ou um dgito do ano Y,YYY Ano com vrgula nessa posio IYYY, IYY, IY, I Quatro, trs, dois ou um dgito do ano com base no padro ISO. SYEAR ou YEAR Ano inteiro; Prefixos S data AC com BC ou AD Indicador AC/DC B.C ou A.D. Indicador com pontos AC/DC Q Trimestre do ano MM Ms, valor de dois dgitos MONTH Nome do ms preenchido com espaos limitado a nove caracteres. MON Nome do ms, abreviao de trs letras RM Ms em nmeros romanos Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 20

Introduo ao Oracle: SQL e PL/SQLWW ou W DDD ou DD ou D DAY DY J Semana do ano ou ms Dia do ano, ms ou semana Nome do dia preenchido com espaos limitado a nove caracteres. Nome do dia; abreviao de trs letras Dia do calendrio juliano; o nmero de dias desde 31 de dezembro 4713 BC

Elementos para formatar a hora que est contida na data Formatos de hora Elemento AM ou PM AM ou P.M HH ou HH12 ou HH24 MI SS SSSSS Outros formatos Elemento /., de Descrio A pontuao reproduzida no resultado A string entre aspas reproduzida no resultado Descrio Indicador meridiano Indicador meridiano com pontos Horas do dia ou hora (1 a 12) ou hora (0 a 23) Minuto (0 a 59) Segundo (0 a 59) Segundos aps a meia-noite (0-86399)

Especificando Sufixos para Influenciar Exibio de Nmero Elemento TH SP SPTH ou THSP Exemplos: Select ename, TO_CHAR(hiredate, fmDD Month YYYY) DATA_ENTRADA From emp; ENAME -----------KING BLAKE ... DATA_ENTRADA -----------------------------------17 November 1981 1 May 1981 Descrio Nmero ordinal (por exemplo, DDTH para 4TH) Nmero por extenso (por exemplo, DDSP para FOUR Nmeros ordinais por extenso (por exemplo, DDSPTH para Fourth)

Obs.: O fm Alinha as informaes das colunas. select ename, to_char (hiredate, fmDdspth de Month YYYY fmHH:MI:SS AM ) DATA_ENTRADA Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 21

Introduo ao Oracle: SQL e PL/SQLfrom emp; ENAME -----------KING BLAKE ... DATA_ENTRADA ------------------------------------------------------------Seventeenth de November 1981 12:00:00 AM First de May 1981 12:00:00 AM

Note que o ms segue o formato do modelo de formato especificado, ou seja, a primeira letra em maiscula e o restante em minscula. Funo TO_CHAR com Nmeros. Elemento 9 0 $ L . , MI PR EEEE V B Exemplo: select TO_CHAR(sal, $99,999`) SALARIO from emp WHERE ename = SCOTT; SALARIO ----------$3,000 Funes TO_NUMBER e TO_DATE Converte uma string de caractere para um formato de nmero usando a funo TO_NUMBER. TO_NUMBER (carac[, fmt]) Converter uma string de caractere para um formato de data usando a funo TO_DATE. TO_DATE(carac[, fmt]) select ename, hiredate from emp Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 22 Descrio Posio numrica (nmero de 9s determinam o tamanho da exibio) Exibe zeros esquerda Sinal de dlar flutuante Smbolo da moeda local flutuante (Moeda do Banco) Ponto decimal na posio especificada Vrgula na posio especificada Sinais de menos direita (valores negativos) Coloca nmeros negativos entre parnteses Notao cientfica (formato deve especificar quatro Es) Multiplica por 10 n vezes (n = nmero de 9s aps o V) Exibe valores de zero como espao, no 0 Exemplo 999999 099999 $99999 L99999 999999.99 999,999 999999MI 999999PR 99.999EEEE 9999V99 B9999.99 Resultado 1234 001234 $1234 FF1234 1234.00 1,234 1234(1234) 1.234E+03 123400 1234.00

Introduo ao Oracle: SQL e PL/SQLwhere hiredate = TO_DATE(February 22, 1981, Month dd, YYYY); ENAME ----------WARD Funo NVL Converte um valor NULO para um valor real. Os tipos de dados que podem ser usados so: datas, caracteres e nmeros. NVL(expr1, expr2) expr1 -> o valor de origem ou expresso que pode conter nulo. Expr2 -> o valor de destino para a converso de nulo. Exemplo de Converso NVL ( column_number, 9) NVL (column_date, 01-JAN-95) NVL (column_caracter, No preenchido`) HIREDATE --------------22-FEB-81

Tipo de dados NUMBER DATE CHAR ou VARCHAR2 Exemplo: select ename, comm from emp; ENAME -----------KING BLAKE MARTIN COMM --------1400

select ename, NVL(comm, 0) from emp; ENAME -----------KING BLAKE MARTIN COMM --------0 0 1400

Funo DECODE Facilita pesquisas condicionais realizando o trabalho de uma instruo CASE ou IF-THEN-ELSE.

DECODE (col/expresso, pesquisa1, resultado1 [, pesquisa2, resultado2,...,] [, default ])

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

23

Introduo ao Oracle: SQL e PL/SQLNa instruo a seguir o valor JOB est decodificado. Se JOB for ANALYST, o aumento de salrio de 10%; se JOB for CLERK, o aumento de salrio de 15%; se JOB for MANAGER, o aumento de salrio de 20%. Para todas as outras funes de trabalho no h aumento de salrio. select job, sal, DECODE(job, ANALYST, SAL*1.1, CLERK, SAL*1.15, MANAGER, SAL*1.20, SAL) SALARIO_REVISADO from emp; JOB --------------PRESIDENT MANAGER MANAGER ... SAL -------5000 2850 2450 SALARIO_REVISADO ------------------------5000 3420 2940

A mesma instruo pode ser escrita como uma instruo IF-THEN-ELSE: IF job = ANALIST THEN sal = sal*1.1 IF job = CLERK THEN sal = sal*1.15 IF job = MANAGER THEN sal = sal*1.20 ELSE sal = sal Aninhando Funes As funes de uma nica linha podem ser aninhadas em qualquer nvel. Funes aninhadas so avaliadas a partir do nvel mais interno para o nvel mais externo.

F3 ( F2 ( F1 (col, arg1 ), arg2 ), arg3 )Etapa 1 = Result 1 Etapa 2 = Result 2 Etapa 3 = Result 3

Exemplo: select ename, NVL(TO_CHAR(mgr), Sem Gerente ) from emp where mgr IS NULL; Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 24

Introduo ao Oracle: SQL e PL/SQLENAME -------------KING NVL(TO_CHAR(mgr), Sem Gerente ) --------------------------------------------Sem Gerente

Para mostrar a data da prxima sexta-feira, que fica seis meses aps a data de admisso. A data resultante deve aparecer como Friday, March 12th, 1982. Ordenar os resultados por data de admisso. select TO_CHAR ( NEXT_DAY (ADD_MONTHS( hiredate, 6), FRIDAY), fmdDay, Month ddth, YYYY) Rever depois de 6 meses from emp order by hiredate; Exerccios 3: 1. Crie uma consulta para exibir a data atual. Coloque um label na coluna como Data. Exiba o nmero do funcionrio, o nome, o salrio e o aumento salarial de 15% expresso como nmero inteiro. Coloque um label na coluna como Novo Salario. Salve a instruo SQL em um arquivo nomeado ex3_1.sql Execute a consulta no arquivo ex3_1.sql. Modifique o arquivo ex3_1.sql para adicionar uma coluna que subtrair o salrio antigo do novo salrio. Coloque um label na coluna Incremento. Execute novamente a consulta.

2.

3. 4.

5. Exiba o nome do funcionrio, a data de admisso que a primeira segunda-feira aps seis meses de servio. Coloque um label na coluna REVISO. Formate as datas que aparecem em formato semelhante a Sunday, the Seventh of September, 1981. 6. Para cada funcionrio exiba o nome do mesmo e calcule o nmero de meses entre hoje e a sua data de admisso. Coloque um label na coluna MESES_TRABALHADOS. Ordene os resultados por nmero de meses empregado. Arredonde para cima o nmero de meses para o nmero inteiro mais prximo. 7. Crie uma consulta que produza as seguintes informaes para cada funcionrio: recebe mensalmente mas deseja . Coloque um label na coluna, como Sonho salarial. 8. Crie uma consulta que exiba o nome e o salrio de todos os funcionrios. Formate o salrio para ter 15 caracteres e apresentar o sinal $ esquerda. Coloque um label na coluna como SALRIO. 9. Crie uma consulta que exibir o nome do funcionrio com a primeira letra maiscula e todas as outras minsculas, bem como o tamanho de seus nomes, para todos os funcionrio cujo nome comea com J, A ou M. Fornea cada coluna um label apropriado.

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

25

Introduo ao Oracle: SQL e PL/SQL10. Exiba o nome, a data de admisso e o dia da semana em que o funcionrio comeou a trabalhar. Coloque um label na coluna DAY. Ordene os resultados por dia da semana, iniciando por Segunda. EXIBINDO DADOS DE VRIAS TABELAS Definindo Junes: Quando so necessrios dados de uma ou mais tabelas no banco de dados, usa-se uma condio de juno (JOIN). As linhas de uma tabela podem ser unidas s linhas de outra tabela de acordo com os valores comuns existentes nas colunas correspondentes, isto , em geral colunas de chave primria e estrangeira. Select tabela1.coluna, tabela2.coluna From tabela1, tabela2 Where tabela.coluna1 = tabela2.coluna2; Produto cartesiano Uma condio de juno estiver omitida. Uma condio de juno estiver invlida. Todas as linhas na primeira tabela esto unidas a todas as linhas da segunda tabela. Para evitar um produto Cartesiano, sempre inclua uma condio de juno vlida em uma clusula WHERE. Tipos de Junes Juno Idntica (EQUIJOIN) Juno no-idntica (NON-EQUIJOIN) Juno Externa (OUTER JOIN) Autojuno (SELF JOIN)

O que uma Juno idntica (EQUIJOIN)? Para determinar o nome do departamento de um funcionrio, compare o valor na coluna DEPTNO na tabela EMP com os valores DEPTNO da tabela DEPT. O Relacionamento entre as tabelas EMP e DEPT uma juno idntica ou seja, os valores da coluna DEPTNO das duas tabelas devem ser iguais. Com freqncia, essa juno envolve complementos de chave primria e estrangeira. Obs.: As junes idnticas tambm so chamadas de junes simples ou junes internas. EMP EMPNO ENAME DEPTNO --------- ----------------- ----------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 ... DEPT DEPTNO DNAME ---------- --------------10 ACCOUNTING 30 SALES 10 ACCOUNTING ... LOC ---------------NEW YORK CHICAGO NEW YORK

SELECT emp.empno, emp.ename, dept.deptno, dept.loc FROM emp, dept

emp.deptno,

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

26

Introduo ao Oracle: SQL e PL/SQLWHERE emp.deptno = dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC -------- --------- ---------- ---------- --------------7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS Usando apelidos de tabelas SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno; O que uma Juno no-idntica (NON-EQUIJOIN)? O relacionamento entre a tabela EMP e a tabela SALGRADE uma juno no-idntica, o que significa que nenhuma coluna da tabela EMP corresponde diretamente a uma coluna da tabela SALGRADE. O relacionamento entre as duas tabelas que a coluna SAL da tabela EMP est entre a coluna LOSAL e HISAL da tabela SALGRADE. O relacionamento obtido usando um outro operador que no o igual ( = ). EMP EMPNO ENAME -------- --------------7839 KING 7698 BLAKE 7782 CLARK ... SAL --------5000 2850 2450 SALGRADE GRADE LOSAL -------- -------1 700 2 1201 3 1401 ... HISAL --------1200 1400 2000

O salrio na tabela EMP est entre salrio inferior e salrio superior na tabela SALGRADE. SELECT e.ename, e.sal, s.grade FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal; ENAME SAL ------------- -------JAMES 950 SMITH 800 ADAMS 1100 ... GRADE --------1 1 1

O que uma Juno externa (OUTER JOIN)? Se uma linha no satisfizer uma condio de juno, a linha no aparecer no resultado da consulta. Por exemplo, na condio de juno idntica (equijoin) das tabelas EMP e DEPT, o departamento OPERATIONS no aparece porque ningum trabalha neste departamento. Para trazer este departamento preciso usar o OUTER JOIN. Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 27

Introduo ao Oracle: SQL e PL/SQLSELECT e.ename, d.deptno, d.dname FROM emp e, dept d WHERE e.deptno (+) = d.deptno ORDER BY e.deptno; ENAME -------------KING CLARK ... DEPTNO ----------10 10 40 DNAME --------------ACCOUNTING ACCOUNTING OPERATIONS

O que uma Autojuno (SELF JOIN)? Algumas vezes ser necessrio unir uma tabela a ela mesma. Para localizar o nome do gerente de cada funcionrio, necessrio unir a tabela EMP a ela mesma ou executar uma autojuno. Por exemplo, para localizar o nome do gerente de Blake, necessrio: Localizar Blake na tabela EMP consultando a coluna ENAME. Localizar o nmero do gerente de Blake consultando a coluna MGR. O nmero do gerente de Blake 7839. Localizar o nome do gerente como o EMPNO 7839 consultando a coluna ENAME. O nmero do funcionrio King 7839, ento King gerente de Blake. SELECT worker.ename || trabalha para || manager.ename FROM emp worker, emp manager WHERE worker.mgr = manager.empno; worker.ename || trabalha para || manager.ename -------------------------------------------------------------BLAKE trabalha para KING CLARK trabalha para KING MARTIN trabalha para BLAKE Exerccios 4: 1. Crie uma consulta para exibir o nome, o nmero e o nome do departamento de todos os funcionrios. 2. Crie uma lista nica de todos os cargos existentes no departamento 30. Inclua a localizao do departamento 30 na sada. 3. Crie uma consulta para exibir o nome do funcionrio, o nome do departamento e a localizao de todos os funcionrios que recebem uma comisso. 4. Exiba o nome do funcionrio e o nome do departamento para todos os funcionrios que possuem um A em seus nomes. Salve a instruo SQL no arquivo nomeado ex4_4.sql.

5. Crie uma consulta para exibir o nome, o cargo, o nmero e o nome do departamento para todos os funcionrio que trabalham em DALLAS.

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

28

Introduo ao Oracle: SQL e PL/SQL6. Exiba o nome e o nmero do funcionrio junto com o nome e o nmero do gerente. Coloque um label nas colunas Employee, Emp#, Manager e Mgr#, respectivamente. Salve a instruo SQL em um arquivo nomeado ex4_6.sql. Modifique o ex4_6.sql para exibir todos os funcionrios incluindo King, que no possuem um gerente. Salve-o novamente como ex4_7.sql. Execute o ex4_7.sql

7.

8. Crie uma consulta que exibir o nome dos funcionrios, o nmero do departamento e todos os funcionrios que trabalham no mesmo departamento de um determinado funcionrio. Fornea a cada coluna um label apropriado. 9. Mostra a estrutura da tabela SALGRADE. Crie uma consulta que exiba o nome, o cargo, o nome do departamento, o salrio e a classificao de todos os funcionrios. 10. Crie uma consulta para exibir o nome e a data de admisso de qualquer funcionrio admitido aps o funcionrio Blake. 11. Exiba todos os nomes de funcionrios e as datas de admisso junto com o nome e a data de admisso do gerente para todos os funcionrios admitidos antes de seus gerentes. Coloque um label nas colunas Employee, Emp Hiredate, Manager e Mgr Hiredate, respectivamente. USANDO FUNES DE GRUPO De modo diferente das funes de uma nica linha, as funes de grupo operam em conjuntos de linhas para fornecer um resultado por grupo. Esses conjuntos podem ser a tabela inteira ou a tabela dividida em grupos. Tipos de funes de Grupo Funo AVG ([DISTINCT] n ) COUNT ({*|[DISTINCT]EXPR}) MAX([DISTINCT]expr) MIN([DISTINCT]expr) SUM([DISTINCT]expr) Funes AVG,SUM,MIN e MAX SELECT AVG(sal), MAX(sal), MIN(sal), SUM(sal) FROM emp WHERE job LIKE SALES%; AVG(sal) MAX(sal) MIN(sal) SUM(sal) ---------- ---------- ----------- ---------1400 1600 1250 5600 Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 29 Descrio Valor mdio de n, ignorando valores nulos Nmero de linhas, onde expr avalia para algo diferente de nulo (Conte todas as linhas selecionadas usando *, inclusive duplicadas e linhas com nulos.) Valor mximo de expr , ignorando valores nulos Valor mnimo de expr , ignorando valores nulos Valores somados de n , ignorando valores nulos

Introduo ao Oracle: SQL e PL/SQLVoc pode usar as funes AVG,SUM,MIN e MAX com colunas que possam armazenar dados numricos. O exemplo no slide exibe os salrios maior, mdio, menor e a soma dos salrios mensais de todos os vendedores. Funo COUNT A Funo COUNT tem dois formatos: COUNT(*) -> Retorna o nmero de linhas em uma tabela, inclusive linhas duplicadas e linhas contendo valores nulos em qualquer uma das colunas. Se uma clusula WHERE estiver includa na instruo SELECT, COUNT(*) retornar o nmero de linhas que satisfizer a condio na clusula WHERE. COUNT(expr) -> retorna o nmero de linhas no nulas na coluna identificada por expr. SELECT COUNT(*) FROM emp WHERE deptno = 30; O exemplo acima exibe o nmero de funcionrios no departamento 30. SELECT COUNT(deptno) FROM emp; COUNT(deptno) ------------------14 Funes de Grupo e valores NULOS SELECT AVG (comm) FROM emp; AVG(COMM) -------------550 (no calcula a mdia, pois acha valor nulo) SELECT AVG (NVL(comm,0)) FROM emp; AVG (NVL(comm,0)) ------------------------157.14286 SELECT COUNT(DISTINCT(deptno)) FROM emp; COUNT(DISTINCT(deptno)) ---------------------------------3

Criando Grupos de Dados: At o momento, todas as funes de grupo trataram a tabela como um grande grupo de informaes. s vezes, necessrio dividir a tabela de informaes em grupos menores. Isso pode ser feito usando a clusula GROUP BY. Todas as colunas na lista SELECT que no estejam em funes de grupo devem estar na clusula GROUP BY. SELECT deptno, AVG(sal) FROM emp GROUP BY deptno; DEPTNO AVG(sal) ---------- ------------10 2916.6667 20 2175 30 1566.6667 (traz o salrio mdio na tabela EMP para cada departamento). Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 30

Introduo ao Oracle: SQL e PL/SQLSELECT deptno, job, SUM(sal) FROM emp GROUP BY deptno, job; DEPTNO ---------10 10 10 20 20 JOB AVG(sal) ----------------- ------------CLERK 1300 MANAGER 2450 PRESIDENT 5000 ANALYST 6000 CLERK 1900

(traz a soma de salrios na tabela EMP para cada cargo, agrupados por departamento). Excluindo Resultados do Grupo: Clusula HAVING Use a clusula HAVING para restringir grupos As linhas so agrupadas. A funo de grupo aplicada. Os grupos que correspondem clusula HAVING so exibidos. A clusula HAVING pode preceder a clusula GROUP BY, mas recomenda-se que voc coloque a clusula GROUP BY primeiro, por ser mais lgico.

SELECT FROM GROUP BY HAVING DEPTNO ---------10 20

deptno, max(sal) emp deptno max(sal) > 2900; MAX(SAL) -----------5000 3000

O exemplo exibe os nmeros de departamentos e o salrio mximo para os departamentos cujo salrio mximo seja maior que R$ 2.900. Exerccios 5: Determine a validade das afirmaes a seguir. Marque Verdadeiro ou Falso. 1. As funes de grupo operam em muitas linhas para produzir um resultado por grupo. Verdadeiro/Falso 2. As funes de grupo incluem nulos nos clculos. Verdadeiro/Falso 3. A clusula WHERE restringe as linhas antes da incluso em um clculo de grupo. Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 31

Introduo ao Oracle: SQL e PL/SQLVerdadeiro/Falso 4. Exiba os salrios maior, mdio, menor e a soma de todos os salrios de todos os funcionrios. Coloque um label nas colunas Mximo, Mnimo, Soma e Mdia, respectivamente. Arredonde os resultados para o nmero inteiro mais prximo. Salve a instruo SQL em um arquivo chamado ex5_4.sql. Modifique o ex5_4.sql para exibir o salrio maior, mdio, menor e a soma de todos os salrios para cada tipo de cargo. Salve novamente o arquivo com o nome ex5_5.sql . Execute novamente a consulta.

5.

6. Crie uma consulta para exibir o nmero de pessoas com o mesmo cargo. 7. Determine o nmero de gerentes sem list-los. Coloque um label na coluna Nmero de Gerentes. 8. Crie uma consulta para exibir a diferena entre os maiores e menores salrios. Coloque um label na coluna DIFERENA. 9. Exiba o nmero do gerente e o salrio do funcionrio com menor pagamento sob a superviso desse gerente. Exclua todos cujo gerente no seja conhecido. Exclua todos os grupos em que o salrio mnimo seja menor do que R$ 1.000. Classifique a sada em ordem decrescente de salrio. 10. Crie uma consulta para exibir o nome do departamento, o nome do local, o nmero de funcionrios e o salrio mdio de todos os funcionrios nesse departamento. Coloque um label nas colunas NOME_DEPT, LOCAL, NR DE PESSOAS e SALARIO, respectivamente. Arredonde o salrio mdio para duas casas decimais. 11. Crie uma consulta que exiba o nmero total de funcionrios e, desse total, o nmero total de funcionrios contratados em 1980,1981,1982 e 1983. Coloque os cabealhos apropriados nas colunas. 12. Crie uma consulta matriz para exibir o cargo, o salrio desse cargo baseado no nmero do departamento e o salrio total desse cargo para todos os departamentos, colocando em cada coluna um cabealho apropriado. SUBCONSULTAS Voc poder criar subconsultas na clusula WHERE de outra instruo SQL para obter valores baseados em um valor condicional desconhecido. Esta lio abrange as subconsultas de uma nica linha e de vrias linhas. Coloque as subconsultas entre parnteses. Coloque as subconsultas no lado direito do operador de comparao. No adicione uma clusula ORDER BY a uma subconsulta. Use operadores de uma nica linha com subconsultas de uma nica linha. Use operadores de vrias linhas com subconsultas de vrias linhas. Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 32

Introduo ao Oracle: SQL e PL/SQLConsulta principal Que funcionrios tem um salrio maior que o salrio de Jones? SubConsulta Qual o salrio de Jones? Para resolver este problema, so necessrias duas consultas: uma consulta para descobrir quanto Jones recebe e outra para descobrir quem recebe mais que essa quantia. Voc pode resolver combinando as duas consultas, colocando uma consulta dentro da outras consulta. A consulta interna ou a subconsulta retorna um valor que usado pela consulta externa ou pela consulta principal. Usar uma subconsulta equivale a executar duas consultas seqenciais e usar o resultado da primeira como o valor de pesquisa na segunda consulta. SELECT FROM WHERE ename emp sal > (SELECT sal FROM emp WHERE empno = 7566); -- Result.: 2975

ENAME -------------KING FORD SCOTT SubConsultas de nica linha Select para exibir funcionrios cujo cargo o mesmo que o do funcionrio 7369 e cujo salrio maior que o do funcionrio 7876. SELECT FROM WHERE AND ename, job emp job = (SELECT job FROM emp WHERE empno = 7369) sal > (SELECT sal FROM emp WHERE empno = 7876);

-- Result.: CLERK -- Result.: 1100

SubConsultas de vrias linhas Voc pode usar um operador de vrias linhas, em vez de um operador de uma nica linha, com uma subconsulta de vrias linhas. O operador de vrias linhas espera um ou mais valores. SELECT FROM WHERE ename, sal, deptno emp sal IN (SELECT MIN(sal) FROM emp GROUP BY deptno);

-- Result.: (800, 950, 1300)

Exerccios 6:

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

33

Introduo ao Oracle: SQL e PL/SQL1. Crie uma consulta para exibir o nome e a data de admisso de todos os funcionrios no mesmo departamento que Blake. Exclua Blake. 2. Crie uma consulta para exibir o nmero e o nome de todos os funcionrios que recebam mais que o salrio mdio. Classifique os resultados, por salrio, em ordem decrescente. Crie uma consulta para exibir o nmero e o nome de todos os funcionrios que trabalhem em um departamento com qualquer funcionrio cujo nome contenha um T . Salve sua instruo SQL em um arquivo chamado ex6_3.sql.

3.

4. Exiba o nome do funcionrio, o nmero do departamento e o cargo de todos os funcionrios cuja localizao do departamento seja Dallas. 5. Exiba o nome e o salrio dos funcionrios que se reportem a King. 6. Exiba o nmero do departamento, o nome e o cargo de todos os funcionrios do departamento de Vendas. Modifique ex6_3.sql para exibir o nmero, o nome e o salrio de todos os funcionrios que recebam mais que o salrio mdio e trabalhem em um departamento com qualquer funcionrio cujo nome contenha um T. Salve novamente como ex6_7.sql . Execute novamente a consulta. SUBCONSULTAS DE VRIAS COLUNAS Aos pares PRODID QTY 101863 100 100861 100 102130 10 100890 5 100870 500 101860 50 Sem ser aos pares PRODID QTY 101863 100 100861 100 102130 10 100890 5 100870 500 101860 50

7.

Subconsulta de comparao PAR. SELECT FROM WHERE ordid, prodid, qty item (prodid, qty) IN (SELECT prodid, qty FROM item WHERE ordid = 605) ordid 605; PRODID ---------------100861 100870 QTY ----------100 500 34

AND ORDID --------617 617

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

Introduo ao Oracle: SQL e PL/SQL616 102130 10

A sada mostra que h trs itens em outras ordens que contm o mesmo nmero do produto e a mesma quantidade que um item na ordem 605. Por exemplo, a ordem 617 solicitou uma quantidade 500 do produto 100870, assim como a ordem 605. Subconsulta de comparao que No seja os Pares. SELECT FROM WHERE ordid, prodid, qty item prodid IN (SELECT prodid FROM item WHERE ordid = 605) qty IN (SELECT qty FROM item WHERE ordid = 605) ordid 605;

AND

AND

ORDID PRODID -----------------------609 100870 616 100861 616 102130 ... 617 100861 617 100870 616 102130 ... 16 rows selected.

QTY ----------5 10 10 100 500 10

Obs.: Na subconsulta quando achar algum valor NULO, a consulta no retornar nenhuma linha. Usando subconsulta na Clusula FROM. SELECT FROM WHERE AND a.ename, a.sal, a.deptno, b.salavg emp a, (SELECT deptno, avg(sal) salavg FROM emp GROUP BY deptno) b a.deptno = b.deptno a.sal > b.salavg;

O exemplo acima exibe nomes de funcionrios, salrios, nmeros de departamento e salrios mdios de todos os funcionrios que recebem mais que o salrio mdio nos seus departamentos. Exerccios 7:

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

35

Introduo ao Oracle: SQL e PL/SQL1. Crie uma consulta para exibir o nome, o nmero do departamento e o salrio de qualquer funcionrio cujo nmero do departamento e salrio correspondam ao nmero do departamento e salrio de qualquer funcionrio que receba comisso. 2. Exiba o nome, o nome do departamento e o salrio de qualquer funcionrio cujo salrio e cuja comisso correspondam ao salrio e comisso de qualquer funcionrio localizado em Dallas. 3. Crie uma consulta para exibir o nome, a data de admisso e o salrio de todos os funcionrios que tenham o mesmo salrio e a mesma comisso que Scott. 4. Crie uma consulta para exibir os funcionrios que recebem um salrio maior que o de todos os escriturrios. Classifique os resultados sobre salrios do maior para o menor. PRODUZINDO UMA SADA LEGVEL COMO O SQL*PLUS Variveis de Substituio 1. 2. 3. Use as variveis de substituio do SQL*Plus para armazenar valores temporriamente. E comercial nico (&) E comercial duplo (&&) Comandos DEFINE e ACCEPT Passe os valores da varivel entre instrues SQL. Altere dinamicamente cabealhos e rodaps.

Varivel de substituio &. Use a varivel precedida de um e comercial (&) para solicitar um valor ao usurio. SELECT empno, ename, sal, deptno FROM emp WHERE empno = &nr_empregado; Enter value for nr_empregado: 7369 EMPNO ENAME SAL DEPTNO -------- ----------------- --------- ----------7369 SMITH 800 20 Usando o comando SET VERIFY SET VERIFY ON --Habilita mostrar OLD e NEW (antigo e novo valor) SET VERIFY OFF --Desabilita. SET VERIFY ON SELECT empno, ename, sal, deptno FROM emp WHERE empno = &nr_empregado;

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

36

Introduo ao Oracle: SQL e PL/SQLEnter value for nr_empregado: 7369 old 3: WHERE empno = &nr_empregado new 3: WHERE empno = 7369 ... Valores de Caractere e Data com Variveis de Substituio Use aspas simples para valores de caractere e data. SELECT FROM WHERE ename, deptno, sal * 12 emp job = &nome_funcao;

Obs.: Voc tambm pode usar funes tais como UPPER e LOWER com o e comercial. Use UPPER(&nome_funcao) para que o usurio no precise informar o cargo em maisculas. Especificando Nomes de Coluna, Expresses e Texto em Tempo de Execuo SELECT empno, ename, job, &nome_coluna FROM emp WHERE &condicao ORDER BY &ordem_coluna; Enter value for nome_coluna: sal Enter value for condicao: sal >= 3000 Enter value for ordem_coluna: ename EMPNO ENAME -------- --------7902 FORD 7839 KING 7788 SCOTT JOB ----------------ANALYST PRESIDENT ANALYST SAL --------3000 5000 3000

Varivel de substituio &&. Use o e comercial duplo (&&) se desejar reutilizar o valor da varivel sem precisar solicitar sempre o usurio. O SQL*Plus armazena o valor fornecido usando o comando DEFINE. Ele o utilizar novamente sempre que voc fizer referncia ao nome da varivel de usurio, voc precisar usar o comando UNDEFINE para delet-la. SELECT FROM ORDER BY empno, ename, job, &&nome_coluna emp &nome_coluna; --assume o valor da varivel acima. DEPTNO --------10 10 10

EMPNO ENAME JOB -------- --------- ----------------7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK

Definindo as variveis de Usurio

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

37

Introduo ao Oracle: SQL e PL/SQLComando ACCEPT (sintaxe a seguir) DEFINE varivel = valor DEFINE varivel DEFINE Descrio L uma linha da entrada do usurio e armazena em uma varivel Cria uma varivel de usurio de tipo de dados CHAR e atribui um valor a ela Exibe a varivel, seu valor e seu tipo de dados Exibe todas as variveis de usurio com o valor e o tipo de dados

Comando ACCEPT Cria um prompt personalizado durante a aceitao do entrada do usurio ACCEPT varivel [tipo de dados] [FORMAT formato] [PROMPT texto] [HIDE] Na sintaxe:

Varivel Tipo de dados [FORMAT formato] [PROMPT texto HIDE

o nome da varivel que ser criada. pode ser NUMBER, CHAR ou DATE. modelo de formato Ex: A10 ou 9.999 exibe o texto antes do usurio informar o valor suprime o que o usurio informar Ex.: uma senha.

ACCEPT dept_name PROMPT Digite o nome do departamento: SELECT * FROM dept WHERE dname = UPPER(&dept_name) / Digite o nome do departamento: Sales DEPTNO DNAME LOC --------------------------- -------------30 SALES CHICAGO Comandos DEFINE e UNDEFINE DEFINE -> Define uma varivel. Pode-se verificar as alteraes com este comando. UNDEFINE -> Limpa uma varivel ou saia do SQL*Plus. DEFINE deptname = Sales -- criada a varivel DEFINE deptname DEFINE DEPTNAME = sales (CHAR) -- verificando a varivel SELECT FROM WHERE * dept dname = UPPER(&deptname); -- usando a varivel

UNDEFINE deptname -- limpando a varivel.

Variveis do comando SET

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

38

Introduo ao Oracle: SQL e PL/SQLValores e Varivel de SET COLSEP {_|text } FEED[BACK] {n |OFF|ON} HEAD[DING] {OFF|ON} LIN[ESIZE] {80|n} LONG {80|n } PAGES[IZE] {24|n } PAU[SE] {OFF|ON|text } TEM[OUT] {OFF|ON} Descrio Define o texto a ser impresso entre colunas( o default um espao) Exibe o nmero de registros retornados por uma consulta quando a consulta seleciona no mnimo n registros. Determina se os cabealhos da coluna so exibidos nos relatrios. Define o nmero de caracteres por linha como n para relatrios Define a largura mxima para a exibio de valores LONG Especifica o nmero de linhas por pginas de sada Permite controlar a rolagem do seu terminal (Voc deve pressionar [Return] aps ver cada pausa.) Determina se a sada (resultado) exibida na tela.

Salvando as Personalizaes no Arquivo login.sql O arquivo login.sql contm o comando SET standard e outros comandos do SQL*Plus que so implementados no login. Voc pode modificar o login.sql para conter comandos SET adicionais. Comandos de Formato do SQL*Plus Comando COL[UMN][opo de coluna ] TTI[TLE] [texto |OFF|ON] Descrio Controla formatos de coluna Especifica um cabealho para aparecer na parte superior de cada pgina BTI[TLE] [texto |OFF|ON] Especifica um rodap para aparecer na parte inferior de cada pgina do relatrio. BRE[AK] [ON report_element] Suprime valores duplicados e seciona linhas de dados com alimentao de linha. O comando COLUMN Controla a exibio de uma coluna Opo CLE[AR] FOR[MAT] formato HEA[DING] texto JUS[TIFY] {alinhamento} NOPRI[NT] NUL[L] texto PRI[NT] Usando o comando COLUMN COLUMN ename HEADING Nome | Empregado FORMAT A15 COLUMN sal JUSTIFY LEFT FROMAT $99,990.00 COLUMN mgr FORMAT 999999999 NULL Sem Gerente Comando COL[UMN] coluna COL[UMN] Descrio Exibe as configuraes atuais para a coluna especificada Exibe as configuraes atuais para todas as colunas Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 39 Descrio Limpa qualquer formato de coluna Altera a exibio dos dados da coluna Define o cabealho da coluna (uma linha vertical(|) forar uma alimentao de linha no cabealho se voc no justificar.) Justifica o cabealho da coluna (no os dados) esquerda, ao centro ou direita Oculta a coluna Especifica o texto a se exibido para valores nulos Mostra a coluna

Introduo ao Oracle: SQL e PL/SQLCOL[UMN] coluna CLE[AR] CLE[AR] COL[UMN] Limpa as configuraes para a coluna especificada Limpa as configuraes para todas as colunas

Modelos de Formato COLUMN Elemento An 9 0 $ L . , Descrio Define uma largura de exibio n Dgito de supresso de um nico zero Aplica o zero esquerda Cifro flutuante Moeda local Posio do ponto decimal Separador de milhar Exemplo N/A 999999 099999 $9999 L9999 9999.99 9,999 Resultado N/A 1234 01234 $1234 L1234 1234.00 1,234

Usando o comando BREAK Seciona linhas em valores de quebra. BREAK ON ename ON job BREAK On ename SKIP 4 ON job SKIP 2 -- Para no nome e pula 4 linhas... Usando os comandos TTITLE e BTILE Cabealho TTITLE Salary | Report Rodap BTITLE Confidential Exemplo de Relatrio Crie um arquivo de script para elaborar um relatrio que exiba o cargo, o nome e o salrio de todo funcionrio cujo salrio seja menor que US$ 3.000. Adicione um cabealho centralizado de duas linhas em que se leia Employee Report e um rodap centralizado em que se leia Confidential. Renomeie a coluna do cargo como Job Category dividida em duas linhas. Renomeie a coluna do nome do funcionrio como Employee. Renomeie a coluna do salrio como Salary e formate-a como US$ 2.500,00 SET PAGESIZE 37 SET LINESIZE 60 SET FEEDBACK OFF TTITLE Employee|Report BTITLE Confidential BREAK ON job COLUMN job HEADING Job|Category FORMAT A15 COLUMN ename HEADING Employee FORMAT A15 COLUMN sal HEADING Salary FORMAT $99,999.99 REM ** Insert SELECT.. --comentrio SELECT job, ename, sal FROM emp Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 40

Introduo ao Oracle: SQL e PL/SQLWHERE sal < 3000 ORDER BY job, ename / SET FEEDBACK ON REM clear all formatting commands... Exerccios 8: 1. Uma varivel de substituio de e comercial nico pedida no mximo uma vez. Verdadeiro/Falso 2. O comando ACCEPT um comando SQL Verdadeiro/Falso 3. Crie um arquivo de script para exibir o nome do funcionrio, o cargo e a data de admisso de todos os funcionrios que tenham iniciado entre determinada faixa. Concatene o nome e o cargo juntos, separados por um espao e uma vrgula, e coloque um label na coluna Employee. Pea que o usurio fornea as duas faixas usando o comando ACCEPT. Use o formado MM/DD/AAAA. Salve o arquivo de script como ex7_3.sql. 4. Crie um script para exibir o nome do funcionrio, o cargo e o nome do departamento para uma determinada localizao. A condio de pesquisa deve aceitar pesquisas sem distino entre maisculas i minsculas para a localizao do departamento. Salve o arquivo de script como ex8_4.sql. 5. Modifique ex8_4.sql para criar um relatrio que contenha o nome do departamento, o nome do funcionrio, a data de admisso, o salrio e o salrio anual de cada funcionrio para todos os funcionrios em uma determinada localizao. Pea a localizao ao usurio. Coloque um label nas colunas DEPARTMENT NAME, EMPLOYEE NAME, START DATE, SALARY e ANNUAL SALARY, colocando os labels em vrias linhas. Salve novamente o script como ex8_5.sql. MANIPULANDO DADOS DML (INSERT, UPDATE e DELETE) A instruo INSERT Adicionar novas linhas em uma tabela. INSET INTO tabela [(coluna [, coluna...])] VALUES (valor [, valor...]); Na sintaxe:

Tabela Coluna ValorExemplos:

o nome da tabela o nome da coluna a ser preenchida o valor correspondente para a coluna

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

41

Introduo ao Oracle: SQL e PL/SQL Preencher todos os campos da tabela dept (50,DESENVOLVIMENTO,DETROIT);

INSERT INTO VALUES

Inserir linhas com valores Nulo Implcito INSERT INTO VALUES dept (deptno, dname) (60,MIS);

Explcito INSERT INTO dept VALUES (60,FINANCE, NULL); Obs.: Podem ser usadas variveis (&) para fornecer os valores na clusula VALUES. Copiando linhas a partir de outra tabela No usa a clusula VALUES. INSERT INTO managers (id, name, salary, hiredate) SELECT empno, ename, sal, hiredate FROM emp WHERE job = MANAGER;

A instruo UPDATE Modifica linhas existentes em uma tabela. UPDATE tabela SET coluna = valor [, coluna = valor, ... ] [WHERE condio];

Na sintaxe:

Tabela Coluna Condio

o nome da tabela o nome da coluna a ser preenchida identifica as linhas a serem atualizadas e composto de nomes de colunas expresses, constantes, subconsultas e operadores de comparao.

Exemplos: Atualizando todas as linhas da tabela omitindo a clusula WHERE.

UPDATE employee SET deptno = 20;

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

42

Introduo ao Oracle: SQL e PL/SQL Modificando uma linha especfica utilizando a clusula WHERE.

UPDATE emp SET deptno = 20 WHERE empno = 7782; Atualizando com subconsulta de vrias colunas.

UPDATE emp SET (job,deptno) = (SELECT job, deptno FROM emp WHERE empno = 7499) WHERE empno = 7698; A instruo DELETE Remove linhas indesejadas existentes em uma tabela. DELETE [FROM] tabela [WHERE condio]; Na sintaxe:

Tabela Condio

o nome da tabela identifica as linhas a serem deletadas e composto de nomes de colunas, expresses, constantes, subconsultas e operadores de comparao.

Exemplos: Deletando todas as linhas da tabela omitindo a clusula WHERE.

DELETE FROM department; Deletando linhas especficas utilizando a clusula WHERE.

DELETE FROM department WHERE dname = DESENVOLVIMENTO; Deletando linhas baseadas em outra tabela.

DELETE FROM employee Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 43

Introduo ao Oracle: SQL e PL/SQLWHERE deptno = (SELECT deptno FROM dept WHERE dname = SALES);

Transaes de Banco de Dados Comea quando for executada a primeira instruo SQL executvel. Termina com um dos seguintes eventos: o COMMIT ou ROLLBACK emitida o Instruo DDL ou DCL executada (commit automtico) o O usurio sai do SQL*Plus o O sistema cai

Instruo COMMIT

Descrio Finaliza a transao atual tornando permanentes todas as alteraes de dados pendentes SAVEPOINT nome Marca um ponto de gravao dentro da transao atual ROLLBACK [TO ROLLBACK finaliza a transao atual descartando todas as alteraes de SAVEPOINT nome] dados pendentes;ROLLBACK TO SAVEPOINT descarta a transao atual para o ponde de gravao especfico, descartando assim o ponto de gravao e quaisquer alteraes subseqentes. Se voc omitir essa clusula, a instruo ROLLBACK descarta toda a transao. Controlando Transaes

Transao INSERT UPDATE Savepoint A COMMIT INSERT DELETE Savepoint B

ROLLBACK para Savepoint B

ROLLBACK para Savepoint A

ROLLBACK completo

Estado dos dados antes de COMMIT ou ROLLBACK O Estado anterior dos dados pode ser recuperado Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 44

Introduo ao Oracle: SQL e PL/SQL O usurio atual pode revisar os resultados das operaes DML usando a instruo SELECT. Outros usurios no podero ver resultados das instrues DML do usurio atual. As linhas afetadas so bloqueadas, outros usurios no podero alterar os dados dentro das linhas afetadas.

Estado dos dados aps COMMIT As alteraes nos dados so feitas permanentemente no banco de dados. O estado anterior dos dados perdido permanentemente. Todos os usurios podem ver os resultados. As linhas afetadas so desbloqueadas, essas linhas esto disponveis para serem manipuladas por outros usurios. Todos os savepoints so apagados. Submetendo dados a COMMIT UPDATE SET WHERE COMMIT; Commit complete. Estado dos dados aps o ROLLBACK Descarte todas as alteraes pendentes usando a instruo ROLLBACK. As alteraes nos dados so desfeitas. O estado anterior dos dados restaurado. As linhas afetadas so desbloqueadas. Exemplo Ao tentar remover um registro da tabela TEST, voc pode acidentalmente esvaziar a tabela. Voc pode corrigir o erro, emitir novamente a instruo apropriada e tornar permanentes as alteraes dos dados. DELETE FROM test; 25.000 rows deleted. ROLLBACK; Rollback complete. DELETE FROM test WHERE id = 100; 1 row deleted. SELECT * FROM test WHERE id = 100; No rows selected. emp deptno = 10 empno = 7782;

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

45

Introduo ao Oracle: SQL e PL/SQLCOMMIT; Commit complete. Fazendo ROLLBACK de alteraes para um marcador Crie um marcador um uma transao atual usando a instruo SAVEPOINT. Faa um roll back do marcador usando a instruo ROLLBACK TO SAVEPOINT. UPDATE.... SAVEPOINT update_done; Savepoint created. INSERT.... ROLLBACK TO update_done; Rollback complete. Exerccio 9: 1. Crie uma tabela nomeada MY_EMPLOYEE com a seguinte estrutura. Name ------------------------ID LAST_NAME FIRST_NAME USERID SALARY Null? Type ----------------- -------------------NOT NULL NUMBER(4) VARCHAR2(25) VARCHAR2(25) VARCHAR2(25) NUMBER(9,2)

2. Adicione a primeira linha de dados tabela MY_EMPLOYEE a partir dos dados do exemplo a seguir. No liste as colunas na clusula INSERT. ID 1 2 3 4 5 LAST_NAME Patel Dancs Biri Newman Ropeburn FIRST_NAME Ralph Betty Ben Chad Audry USERID rpatel bdancs bbiri cnewman aropebur SALARY 795 860 1100 750 1550

3. Preencha a tabela MY_EMPLOYEE com uma Segunda linha de dados de exemplo da lista anterior. Desta vez, liste as colunas explicitamente na clusula INSERT. 4. Confirme a adio tabela. Crie um script chamado loademp.sql para carregar linhas na tabela MY_EMPLOYEE de modo interativo. Solicite ao usurio a identificao, o nome, o sobrenome e o salrio do funcionrio. Concatene a primeira letra do primeiro nome e os sete primeiros caracteres do ltimo nome para produzir a identificao do usurio.

5.

6. Preencha a tabela com as duas linhas de dados de exemplo a seguir, executando o script que voc criou. 7. Confirme as adies tabela. Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 46

Introduo ao Oracle: SQL e PL/SQL8. Torne essas condies permanentes. 9. Altere o sobrenome do funcionrio 3 para Drexler. 10. Altere o salrio para 1000 de todos os funcionrios que ganhem menos de 900. 11. Verifique as alteraes na tabela. 12. Delete Betty Dancs da tabela MAY_EMPLOYEE. 13. Confirme as alteraes na tabela. 14. Faa um commit de todas as alteraes pendentes. 15. Preencha a tabela com a ltima linha de dados de exemplo, executando o script que voc criou na etapa 6. 16. Confirme a adio tabela. 17. Marque um ponto intermedirio no processamento da transao. 18. Esvazie a tabela inteira. 19. Confirme se a tabela est vazia. 20. Descarte a operao DELETE mais recente sem descartar a operao INSERT anterior. 21. Confirme se a nova linha ainda est inalterada. 22. Torne a adio de dados permanente. CRIANDO E GERENCIANDO TABELAS Deve comear com uma letra. Pode ter de 1 a 30 caracteres. Deve conter somente A-Z,a-z,0-9,_,$ E #. No deve duplicar o nome de outro objeto de propriedade do mesmo usurio. No deve ser uma palavra reservada pelo Oracle Server.

A instruo CREATE TABLE CREATE [GLOBAL TEMPORARY ] TABLE [esquema.] tabela (tipo de dados da coluna [DEFAULT expr] [, ...]); Na sintaxe: Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 47

Introduo ao Oracle: SQL e PL/SQLGLOBAL TEMPORARYEspecifica que a tabela temporria e que sua definio est visvel em todas as sesses. Os dados em uma tabela temporria so visveis somente na sesso que insere dados na tabela. o mesmo nome do proprietrio o nome da tabela especifica um valor default se um valor estiver omitido na instruo INSERT o nome da coluna o tipo de dados e o comprimento da coluna

Esquema tabela DEFAULT expr Coluna Tipo de dados

Tipo de dado NUMBER(P,S) VARCHAR2(S) DATE CHAR(S) LONG CLOB BLOB Criando tabelas

Descrio Valor numrico que possui um nmero mximo de dgitos P, o nmero de dgitos direita do ponto decimal S. ( P de 1 a 38 e S de 84 a 127) Valor de caracteres com comprimento varivel do tamanho mximo S (mnimo 1 e mximo 4000) Valor de data e hora entre 1 de janeiro, 4712 A.C. e 31 de dezembro de 9999 D.C. Valores de caracteres com comprimento fixo do tamanho S. (mnimo 1 mximo 2000) Dados de caractere de comprimento varivel at 2 gigabytes Dados de caractere de um byte at 4 gigabytes Dados binrios de at 4 gigabytes (imagens, sons)

CREATE TABLE dept (deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13)); Criando uma tabela usando uma Subconsulta CREATE TABLE dept30 AS SELECT empno, ename, sal*12 SALARIO_ANUAL, hiredate FROM emp WHERE deptno = 30;

DESC dept30 Name ------------------------Null? Type ----------------- -------------------48

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

Introduo ao Oracle: SQL e PL/SQLEMPNO ENAME ANNSAL HIREDATE NOT NULL NUMBER(4) VARCHAR2(10) NUMBER DATE

Obs.: O comando acima mostra a criao da tabela DEPT30 contendo os detalhes de todos os funcionrios que trabalham no departamento 30. Observe que os dados da tabela DEPT30 vm da tabela EMP. Para criar somente a estrutura da tabela, coloque uma clusula invlida como: WHERE 1 = 2. Tabelas no Banco de Dados Oracle Tabelas do Usurio Conjunto de tabelas criadas e mantidas pelo usurio Contm informaes sobre o usurio Dicionrio de Dados Conjunto de tabelas criadas e mantidas pelo Oracle server (propriedades do usurio SYS). Contm informaes sobre o banco de dados Descrio Estas views contm informaes sobre objetos de propriedade do usurio. Estas views contm informaes sobre todas as tabelas (de objetos e relacionais ) acessveis ao usurio. Estas views so restritas. Somente podem ser acessadas por pessoas que tenham sido atribudas o DBA total. Estas views contm informaes sobre views de desempenho dinmico, desempenho do servidor do banco de dados e bloqueio.

Prefixo USER_ ALL_ DBA_ V$_

Consultando o Dicionrio de Dados SELECT * FROM user_tables; Descreve tabelas de propriedades do usurio. SELECT DISTINCT object_type FROM user_objects; Exibe tipos de objetos distintos de propriedade do usurio. SELECT * FROM user_catalog; Exibe tabelas, views, sinnimos de propriedade do usurio. A instruo ALTER TABLE Talvez aps criar a tabela voc precise alterar as estruturas da mesma porque omitiu uma coluna ou a definio da coluna precisa ser alterada. Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 49

Introduo ao Oracle: SQL e PL/SQL

ALTER TABLE tabela ADD (tipo de dados da coluna,... ) ALTER TABLE tabela MODIFY (tipo de dados da coluna,... ) Adicionando uma coluna na tabela ( ADD ) ALTER TABLE dept30 ADD (job VARCHAR2(9)); Modificando uma Coluna ( MODIFY ) ALTER TABLE dept30 MODIFY (ename VARCHAR2(15)); * No modifico o nome da Coluna. Eliminando uma COLUNA ALTER TABLE dept30 DROP COLUMN job; Opo SET UNUSED A opo SET UNUSED marca uma ou mas colunas como no usadas para que possa ser eliminadas quando a demanda nos recursos do sistemas for menos. ALTER TABLE tabela SET UNUSED (coluna ); -- Torna a coluna invisvel para o usurio

ALTER TABLE tabela DROP UNUSED COLUMNS; -- Dropa todas colunas com UNUSED.

Eliminando uma TABELA DROP TABLE dept30; Alterando o nome de um Objeto RENAME dept TO department;

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

50

Introduo ao Oracle: SQL e PL/SQLTruncando uma Tabela Remove as linhas de uma tabela com COMMIT implcito. No tem ROLLBACK. Similar ao DELETE. TRUNCATE TABLE department;

Adicionando comentrios a uma Tabela. / Eliminando comentrios da tabela COMMENT ON TABLE emp IS Informaes de Empregados ; COMMENT ON TABLE emp IS ;

Obs.: Os comentrio podem ser exibidos atravs das view do dicionrio de dados. ALL_COL_COMMENTS Mostra comentrios das colunas das tabelas de propriedade do usurio logado e das tabelas que ele tem acesso. USER_COL_COMMENTS -> Mostra comentrios das colunas das tabelas do usurio logado. ALL_TAB_COMMENTS -> Comentrios das tabelas de propriedade do usurio logado e das tabelas que ele tem acesso. USER_TAB_COMMENTS -> Comentrios das tabelas de propriedade do usurio logado. ->

Exerccio 10: 1. Crie uma tabela DEPARTMENT de acordo com ao tabela de exemplo a seguir. Informe a sintaxe em um script chamado ex10_1.sql e execute o script para criar a tabela. Confirme se ela foi criada. Id Number 7 Name Varchar2 25

Column name Datatype Lenght

2. Preencha a tabela DEPARTMENT com os dados a partir da tabela DEPT. Inclua somente colunas que voc precisar. 3. Crie a tabela EMPLOYEE de acordo com a tabela de exemplo a seguir. Informe a sintaxe em um script chamado ex10_3.sql e execute o script para criar a tabela. Confirme se a tabela foi criada. Column name Datatype Lenght ID Number 7 LAST_NAME Varchar2 25 FIRST_NAME DEPT_ID Varchar2 Number 25 7

4. Modifique a tabela EMPLOYEE para aceitar os sobrenomes longos dos funcionrios. Confirme as modificaes. 5. Confirme se as tabelas DEPARTMENT e EMPLOYEE foram armazenadas no dicionrio de dados. (Dica: USER_TABLES)

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

51

Introduo ao Oracle: SQL e PL/SQL6. Crie a tabela EMPLOYEE2 de acordo com a estrutura da tabela EMP. Inclua apenas as colunas EMPNO, ENAME e DEPTNO. Nomeie as colunas com ID, LAST_NAME e DEPT_ID na nova tabela, respectivamente. 7. Elimine a tabela EMPLOYEE. 8. Renomeie a tabela EMPLOYEE2 para EMPLOYEE. 9. Adicione um comentrio s definies das tabelas DEPARTMENT e EMPLOYEE, descrevendo as tabelas. Confirme as adies ao dicionrio de dados. 10. Elimine a coluna LAST_NAME da tabela EMPLOYEE. Confirme a modificao verificando a descrio da tabela. Crie a tabela EMPLOYEE2 de acordo com a estrutura da tabela EMP. Inclua apenas as colunas EMPNO, ENAME e DEPTNO. Nomeie as colunas como ID, LAST_NAME e DEPT_ID na nova tabelas, respectivamente. Marque a coluna DEPT_ID na tabela EMPLOYEE2 como UNUSED. Confirme a modificao, verificando a descrio da tabela. Elimine todas as colunas UNUSED a partir da tabela EMPLOYEE2. Confirme a modificao, verificando a descrio da tabela. INCLUINDO RESTRIES O que so Restries? As restries impem regras no nvel da tabela. As restries evitam que uma tabela seja deletada se houver dependncias. Os seguintes tipos de restries so vlidas no Oracle: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK Descrio Especifica que esta coluna no pode conter um valor nulo Especifica uma coluna ou combinao de colunas cujos valores devem ser exclusivos para todas as linhas na tabela Identifica exclusivamente cada linha da tabela (Chave primria) Estabelece e impe um relacionamento de chave estrangeira entre a coluna e a coluna da tabela referenciada Especifica uma condio que deve ser verdadeira

11.

12.

Restrio NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK

Definindo Restries CREATE TABLE emp ( empno NUMBER(4), ename VARCHAR2(10), Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 52

Introduo ao Oracle: SQL e PL/SQL... deptno NUMBER(2) NOT NULL, -- restrio NVEL DE COLUNA. CONSTRAINT emp_empno_pk PRIMARY KEY (EMPNO)); -- Restrio a nvel de Tabela (quando criada depois das colunas). Restrio NOT NULL Assegura que valores nulos no sejam permitidos para as colunas. CREATE TABLE emp ( empno NUMBER(4), ename VARCHAR2(10) NOT NULL, ...); O exemplo acima aplica a restrio NOT NULL coluna ENAME da tabela EMP. Como essas restries no possuem nome, o Oracle Server criar nomes para elas na seguinte forma SYS_Cn, onde n um nmero inteiro para criar um nome de restrio exclusivo. Voc pode especificar o nome da restrio ao especific-la. ... deptno NUMBER(7,2) CONSTRAINT emp_deptno_nn NOT NULL ... Restrio UNIQUE KEY Uma restrio de integridade UNIQUE KEY requer que cada valor em uma coluna ou conjunto de colunas seja exclusivo. Esse tipo de restrio permite a entrada de valor nulo a menos que voc defina as restries NOT NULL para as mesmas colunas. CREATE TABLE dept ( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13), CONSTRAINT dept_dname_uk UNIQUE (dname)); Restrio PRIMARY KEY Uma restrio PRIMARY KEY cria uma chave primria para a tabela. Somente uma chave primria pode ser criada para cada tabela. A restrio PRIMARY KEY uma coluna ou conjunto de colunas que identifica exclusivamente cada linha em uma tabela. Essa restrio impe a exclusividade da coluna ou combinao de colunas e assegura que nenhuma coluna que seja parte da chave primria possa conter um valor nulo. CREATE TABLE dept ( deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13), CONSTRAINT dept_dname_uk UNIQUE (dname), Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 53

Introduo ao Oracle: SQL e PL/SQLCONSTRAINT dept_deptno_pk PRIMARY KEY(deptno)); Restrio FOREIGN KEY FOREIGN KEY, ou uma restrio de integridade referencial, designa uma coluna ou combinao de colunas como a chave estrangeira e estabelece um relacionamento entre a chave primria ou uma chave exclusiva na mesma tabela ou uma tabela diferente. No exemplo DEPTNO ser definida como chave estrangeira na tabela EMP (tabela filha ou dependente); ela faz referncia coluna DEPTNO da tabela DEPT (tabela me ou referenciada). Um valor de chave estrangeira deve corresponder a um valor existente na tabela me ou ser NULL. Existe uma palavra chave para FOREIGN KEY. ON DELETE CASCADE -> indica que ando a linha na tabela me deletada, as linhas dependentes na tabela filha tambm sero deletadas, desde que esta opo seja colocada na FK. CREATE TABLE emp ( empno NUMBER(4), ename VARCHAR2(10) NOT NULL, job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(7,2) NOT NULL, CONSTRAINT emp_empno_fk FOREIGN KEY (deptno) REFERENCES dept (deptno));

-- restrio NVEL DE TABELA.

CREATE TABLE emp (.... deptno NUMBER(2) CONSTRAINT emp_deptno_fk REFERENCES dept (deptno), .... ); -- restrio NVEL DE COLUNA. Restrio CHECK A restrio CHECK define uma condio que cada linha deve satisfazer. A condio pode usar as mesmas construes que as condies de consulta. Uma nica coluna pode ter vrias restries CHECK que fazem referncia coluna na sua definio. No h limite no nmero de restries CHECK que voc pode definir em uma coluna. ..., deptno NUMBER(2), CONSTRAINT emp_deptno_ck CHECK (DEPTNO BETWEEN 10 AND 99), ... Adicionando restrio em uma tabela ALTER TABLE emp Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 54

Introduo ao Oracle: SQL e PL/SQLADD CONSTRAINT emp_mgr_fk FOREIGN KEY (mgr) REFERENCES emp (empno); Eliminando uma restrio ALTER TABLE emp DROP CONSTRAINT emp_mgr_fk Remove a restrio do gerente da tabela EMP. ALTER TABLE dept DROP PRIMARY KEY CASDADE Desativando Restries ALTER TABLE emp DISABLE CONSTRAINT emp_empno_pk CASCADE; A clusula CASCADE desativa restries de integridade dependentes. Mata as FKS ligadas a ela. Ativando Restries ALTER TABLE emp ENABLE CONSTRAINT emp_empno_pk; Essa restrio atualmente desabilitada ser novamente ativada, um ndice UNIQUE KEY ou PRIMARY KEY ser automaticamente criado. Ser habilitada somente a PK. As FKs desligadas anteriormente devem ser ligadas separadamente. Verificando restries SELECT constraint_name, constraint_type, search_condition FROM user_constraints WHERE table_name = EMP; CONSTRAINT_NAME ------------------------SYS_C00674 SYS_C00675 EMP_EMPNO_PK ... C -C C P SEARCH_CONDITION --------------------------EMPNO IS NOT NULL DEPTNO IS NOT NULL

-- Mata as FKS ligadas a ela.

C -> CHECK P -> PRIMARY KEY

Consulte a view USER_CONSTRAINTS para ver todos os nomes e definies de restrio.

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

55

Introduo ao Oracle: SQL e PL/SQLVerificando colunas associadas com Restries SELECT FROM WHERE constraint_name, column_name user_cons_columns table_name = EMP; COLUMN_NAME -------------------DEPTNO EMPNO MGR EMPNO DEPTNO

CONSTRAINT_NAME ------------------------EMP_DEPTNO_FK EMP_EMPNO_PK EMP_MGR_FK SYS_C00674 SYS_C00675

-- So as restries NOT NULL criadas pelas PKs.

Exerccio 11: 1. Adicione uma restrio no nvel de tabela PRIMARY KEY tabela EMPLOYEE, usando a coluna ID. A restrio deve ser nomeada quando for criada. 2. Crie uma restrio PRIMARY KEY na tabela DEPARTMENT usando a coluna ID. A restrio deve ser nomeada quando for criada. 3. Adicione uma referncia de chave estrangeira na tabela EMPLOYEE que ir assegurar que o funcionrio no seja atribudo a um departamento no existente. 4. Confirme se as restries foram adicionadas, consultado USER_CONSTRAINTS. Observe os tipos e nomes das restries. Salve o texto da instruo em um arquivo chamado ex11_4.sql.

5. Exiba os tipos e nomes de objeto a partir da view de dicionrio de dados USER_OBJECTS para as tabelas EMPLOYEE e DEPARTMENT. Voc pode desejar formatar as colunas para torna-las mais legveis. Observe se as novas tabelas e o novo ndice foram criados. 6. Modifique a tabela EMPLOYEE. Adicione a coluna SALARY do tipo de dados NUMBER, preciso 7. CRIANDO VIEWS O que uma View? Voc pode apresentar combinaes ou subconjuntos lgicos de dados criando views de tabelas. Uma view uma tabela lgica baseada em uma tabela ou outra view. Uma view no contm dados prprios mas como uma janela atravs da qual os dados das tabelas podem ser vistos ou alterados. As tabelas nas quais uma view baseada so chamadas tabelas-base. A view armazenada como uma instruo SELECT no dicionrio de dados. Por que usar Views? Para restringir o acesso a dados. Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 56

Introduo ao Oracle: SQL e PL/SQL Para facilitar consultas complexas. Para permitir independncia de dados. Para apresentar diferentes views dos mesmos dados.

Views Simples e Views Complexas View simples: Cria dados a partir de somente uma tabela. No contm funes ou grupos de dados. Pode executar a DML atravs da view. View complexa: Cria dados a partir de vrias tabelas. Contm funes ou grupos de dados. Nem sempre executa a DML atravs da view. Criando uma VIEW CREATE [OR REPLACE] view [(apelido [, apelido ]...)] AS subconsulta [WITH CHECK OPTION [CONSTRAINT restrio]] [WITH READ ONLY]; Na Sintaxe: OR REPLACE View Apelido Recria a view se ela j existir o nome da view especifica nomes para as expresses selecionadas pela consulta da view (O nmero de apelidos deve corresponder ao nmero de expresses selecionadas pela view). Subconsulta uma instruo SELECT completa (Voc pode usar apelidos para as colunas na lista SELECT). WITH CHECK OPTION especifica que somente linhas acessveis view podem ser inseridas ou atualizadas. Restrio o nome atribudo restrio CHECK OPTION WITH READ ONLY assegura que as operaes DML no possam ser executadas nesta view. Criando uma VIEW CREATE VIEW empvu10 AS SELECT empno, ename, job FROM emp WHERE deptno = 10; Criando uma VIEW com apelidos de coluna na subconsulta

Seja um Profissional Aprendendo com Profissionais. www.3way.com.br

57

Introduo ao Oracle: SQL e PL/SQLCREATE VIEW empvu30 AS SELECT empno NUMERO_EMPREGADO, ename NOME, sal SALARIO FROM emp WHERE deptno = 30;

Recuperando dados de uma VIEW SELECT * FROM empvy10; NUMERO_EMPREGADO ---------------------------7698 7654 7499 ... NOME ---------------BLAKE MARTIN ALLEN SALARIO -------------2850 1250 1600

View no dicionrio de Dados Depois que a view for criada, voc pode consultar a tabela do dicionrio de dados chamada USER_VIEWS para ver o nome e a definio da view. O texto da instruo SELECT que constitui a view armazenado em uma coluna LONG. Modificando uma VIEW CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT empno, ename, job FROM emp WHERE deptno = 10;

Criando uma View Complexa Criando uma view complexa que contenha funes de grupo para exibir os valores a partir de duas tabelas. CREATE VIEW dept_sum_vy (name, minsal, maxsal, avgsal) AS SELECT d.dname, MIN(e.sal), MAX(e.sal),AVG(e.sal) FROM emp e, dept d WHERE e.deptno = d.deptno GROUP BY d.dname Regras para Executar Operaes DML em uma VIEW. Poder executar as operaes DML(insert, update, delete) em views simples. Voc NO poder remover uma linha se a view contiver: - Funes de grupo Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 58

Introduo ao Oracle: SQL e PL/SQLUma clusula GROUP A palavra-chave DISTINCT Voc NO poder modificar dados em uma view se ela contiver: - Uma das condies anteriores - Colunas definidas por expresso. Por exemplo, sal * 12. Voc NO poder adicionar dados em uma view se ela contiver: - Uma das condies anteriores - Houver colunas NOT NULL nas tabelas-base que no forem selecionadas pela view. Usando a clusula WITH CHECK OPTION Garante que o domnio WHERE no ser alterado. CREATE OR REPLACE VIEW empvu20 AS SELECT * FROM emp WHERE deptno = 20 WITH CHECK OPTION CONSTRAINT empvu20_ck; UPDATE empvu20 SET deptno = 10 WHERE emp = 7788; Retornar um erro. Negando operaes DML Ningum conseguir fazer INSERT, UPDATE ou DELETE. CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT empno, ename, job FROM emp WHERE deptno = 10 WITH READ ONLY; DELETE FROM empvu10 WHERE employee_number = 7782; Retornar um erro.

Removendo uma VIEW. DROP VIEW empvu10;

View dropped.

Exerccio 12: Seja um Profissional Aprendendo com Profissionais. www.3way.com.br 59

Introduo ao Oracle: SQL e PL/SQL1. Crie uma view chamada EMP_VU baseada no nome e nmero do funcionrio e nmero de departamento na tabela EMP. Altere o cabealho do nome do funcionrio para EMPLOYEE. 2. Exiba o contedo da view EMP_VU. 3. Selecione o texto e o nome da view a partir do dicionrio de dados USER_VIEWS. 4. Usando sua vis EMP_VU, insira uma consulta para exibir todos os nomes dos funcionrios e os nmeros de departamento. 5. Crie uma view nomeada DEPT20 que contenha o nmero e o nome do funcionrio e o nmero de departamento de todos os funcionrios no departamento 20. Coloque um label na coluna da vis de EMPLOYEE_ID, EMPLOYEE, e DEPARTMENT_ID. No permita que um funcionrio seja retribudo a um outro departamento na view. 6. Exiba a estrutura e o contedo da view DEPT20. 7. Tente retribuir Smith ao departamento 30. 8. Crie uma view chamada SALARY_VU baseada no nome do funcionrio, nome do departamento, salrio e grau de salrio de todos os funcionrios. Coloque um label nas colunas de Employee, Department, Salary e Grade, respectivamente.

OUTROS OBJETOS DE BANCO DE DADOS Objeto Seqncia ndice Sinnimo Descrio Gera valores de chave primria Melhora o desempenho de algumas consultas Nome alternativo para um objeto

O que uma Seqncia? Gera nmeros exclusivos automatica