Académique Documents
Professionnel Documents
Culture Documents
Março - 2006
Objetivo
Este treinamento destina-se a treinando que querem conhecer a filosofia de banco de dados
relacionais, e também a linguagem padrão do Oracle que é a SQL, seus comando principais.
O Objetivo, ao término do curso, é de que os treinandos estejam aptos a começar o trabalho com
o Oracle e suas ferramentas, quer no desenvolvimento de aplicações ou na administração do
Oracle.
Modelo Conceitual
Conceitos
Conjuntos – Conjuntos existem para permitir armazenar informações uma única vez. Os fatos
serão dissociados e relacionados preservando o seu conteúdo.
Ex.: Conjunto de alunos de uma turma, conjunto de pessoas de uma cidade.
Entidade Fraca – São entidades que não tem vida própria. Sua existência dependerá da
existência de uma entidade principal. Exemplo.: Funcionário e Dependente estão unidos por
dependência, ou seja, todo Dependente deve estar associado a um e somente um funcionário.
Atributo Multivalorado – É o atributo que guarda em si repetidos valores. Pode assumir mais de
um valor para cada ocorrência.
Ex.: telefone, formação.
Atributo identificador – É (são) o(s) atributo(s) que diferencia(m) uma ocorrência das demais
dentro de um conjunto. Se nenhum dos atributos naturais serve como Identificador da
ocorrência, um atributo identificador suplementar deve ser acrescentado.
Ex.: código, matrícula.
Existe uma analogia entre o atributo identificador de uma Entidade-tipo e a chave-primária do
arquivo que esta Entidade-tipo vai gerar. O mesmo Não acontece com Relacionamento-tipo. Um
atributo identificador nunca poderá estar vazio.
Um banco de dados relacional pode ser definido como um banco de dados que aparece ao usuário
como uma coleção de tabelas. A característica mais fundamental num banco de dados relacional
é a de que temos que identificar univocamente seus registros (que chamamos de linhas), ou seja,
devemos definir um campo (ou mais de um) dentre os vários campos do registro, para ser o
atributo identificador do mesmo (chave primária).
O Oracle é um SGBD Relacional - Sistema de Gerenciamento de Banco de Dados Relacional
(RDBMS - Relational Database Management System) e foi um dos primeiros sistemas de banco
de dados a utilizar a Linguagem de Pesquisa Estruturada (SQL - Structured Query Language)
como interface do usuário sendo, talvez, por este motivo, agora um dos principais sistemas de
gerenciamento de banco de dados.
Conceitos
No estudo de banco de dados convém sabermos algumas definições importantes:
Tabelas - São as unidades básicas de um SGBD Relacional. É formada por linhas e colunas,
onde as linhas representam os registros e as colunas os campos da tabela. São muito conhecidas
como Tabelas-Base.
Exemplo:
Tabela T_Funcionario
Cod_Funcionario - CHAR(06)
Cod_Departamento - CHAR(05)
Nome_Funcionario - VARCHAR2(40)
Data_Nascimento -- DATE
Colunas - Um nome de coluna é o nome que o usuário informará para representar os valores de
dados que serão entrados sob cada coluna.
Toda tabela num banco de dados relacional tem que possuir uma Chave Primária. As tabelas
poderão também ter chaves estrangeiras, que são campos que relacionam as tabelas do banco de
dados, fazendo referência entre uma e outra tabela.
Definição
SQL - onde a pronuncia é "ess-kiú-éll" ou "sequel" que é como a maioria das pessoas pronunciam
- "Structured Query Language" (linguagem estruturada de pesquisa) , é composta por um grupo
de facilidades para definição, manipulaçao e controle de dados em um banco de dados relacional.
Em 1970 , E.F.Codd, nessa ocasião membro do Laboratório de pesquisa da IBM em San Jose,
Califórnia, publicou um trabalho agora clássico, "A Relational Model of Data for Large Shared
Data Banks" - um modelo relacional de dados para grandes bancos de dados compartilhados -
(Communications of the ACM, Vol.13, No. 6, junho de 1970), em que se estabeleceu um grupo
de princípios abstratos sobre gerência de banco de dados: o assim chamado modelo relacional.
Todo o campo da tecnologia de banco de dados relacional tem suas origens nesses trabalho. As
idéias de Codd incentivaram experiências e pesquisas em universidades, laboratóriosde pesquisa
industrial e estabelecimentos semelhantes, que resultaram em diversos produtos relacionais agora
disponíveis no mercado.
abastrato. Diversas dessas linguagens foram criadas no início e no meio dos anos 70. Uma
dessas linguagens em particular foi a chamada SEQUEL ("Structured English Query Language"
- Linguagem de Pesquisa em inglês estruturado), definida por D.D. Chamberlin e outros (1974)
no laboratório de Pesquisas da IBM em San Jose, Califórnia, e inicialmente implementada em um
protótipo da IBM chamado SEQUEL-SRM (1974-75).
Em parte como resultado da experiência com o SEQUEL-XRM, foi definida em 1976-77 uma
versão revisada do SEQUEL, chamada SEQUEL/2. (O nome foi subsequentemente alterado para
SQL por razões legais). Começou o trabalho em outro protótipo mais ambicioso da IBM,
chamado System R. O System R., uma implementação de um grande subconjunto da linguagem
SEQUEL/2 (ou SQL) , tornou-se operacional em 1977 e foi subsequentemente instalado em uma
série de estabelecimentos, usuários, tanto internos à IBM quanto (sob um grupo de acordos
comerciais de estudo) clientes selecionados da IBM.
* Uma série de mudanças posteriores foram feitas à linguagem SQL durante a vida útil de projeto
do System R, em parte como resposta a sugestões de ususários. Por exemplo, foi incluída uma
função EXISTS para testar se um dado especificado existia no banco de Dados. Vamos a um
exemplo prático:
* Existe outra forma de fazer este query. Porém esta é a forma mais rápida de acesso ao Banco
Em grande parte, graças ao sucesso do System R, tornou-se aparente ao final dos anos 70 que a
IBM provavelmente desenvolveria um ou mais produtos baseados na tecnologia do System R -
especificamente, produtos que implementassem a linguagem SQL. Como resultado, outros
vendedores também começaram a construir seus próprios produtos baseados no SQL. De fato,
pelo menos um desses produtos, a saber o ORACLE, da Relational Software Inc. (que passou a
se chamar Oracle Corporation), foi introduzido no mercado antes dos próprios produtos da IBM.
Depois, em 1981, a IBM anunciou um produto SQL, chamado SQL/DS para o ambiente
DOS/VSE. A seguir a IBM anunciou uma poutra versão do SQL/DS para o ambiente VM/CMS
(1982), e outra para MVS chamada DB2, altamente compatível com o SQL/DS (1983).
Nos anos seguintes , diversos outros vendedores também anunciaram produtos baseados no SQL.
Esses produtos incluíam tanto produtos inteiramente novoscomo o DG/SQL (Data General
Corporation, 1984) e SYBASE (Sybase Inc., 1986), quanto interfaces do SQL para produtos
estabelecidos como o INGRES (Relational Technology INc. , 1981, 1985) e o IDM (Britton-Lee
Inc., 1982). Há atualmente muitos produtos no mercado que dão suporte a algum dialetodo SQL,
rodando em máquinas que cobrem toda a faixa desde microcomputadores até de grande porte. O
SQL se tornou o padrão no mundo do banco de dados relacional.
Padrão ANSI
O SQL também se tornou o padrão oficial. Em 1982, o American National Standards Institute
(ANSI) encarregou seu Comitê de Banco de Dados (chamado X3H2) de desenvolver uma
proposta para uma linguagem relacional padrão.
Funcionalidade
A função da linguagem SQL é dar suporte a definição , manipulação e controle dos dados em um
banco de dados relacional. Um banco de dados relacional é simplesmente um banco de dados que
é percebido pelo usuário como um grupo de tabelas onde tabela é uma coleção de linhas e
colunas.
SQL Interativa
Onde os comandos SQL são digitados interativamente, ou seja, logo após a digitação do comando
vemos sua execução.
SQL Embutida
Neste modo os comandos SQL ficam embutidos no programa-fonte de uma linguagem de
programação. Tal linguagem é normalmente chamada linguagem hospedeira. Linguagens de
programação como COBOL, C, PASCAL, PL/1, etc, admitem a SQL Embutida.
Tem como objetivo definir, alterar e eliminar as tabelas usadas para armazenar os dados.
CREATE, ALTER, DROP, RENAME, são comandos de definição de dados, dentre outros.
Sintaxe (Básica):
Onde:
NOT NULL – Pode ser especificado em qualquer coluna da tabela. Faz com que a coluna não
admita nulos, isto é, qualquer tentativa de se introduzir um nulo em tal coluna será rejeitada.
UNIQUE – Pode ser especificado para qualquer coluna ou combinação de coluna da tabela.
Cada uma dessas colunas, ou cada coluna em uma combinação de colunas, também deve Ter a
especificação de NOT NULL. Qualquer tentativa de se introduzir uma linha na tabela, contendo
um valor igual à mesma coluna em alguma outra linha, será rejeitada. Se UNIQUE não for
especificado para uma dada coluna (ou combinação), então essa coluna (ou combinação) pode
conter valores duplicados.
Obs.: O comando CREATE TABLE apenas cria a tabela, ou seja, apenas cria a estrutura da
tabela. Elas precisam, num segundo passo, serem povoadas.
A DCL (Data Control Language) contém elementos que serão úteis num sistema multiusuário,
onde a privacidade das informações é importante, a segurança das tabelas, bem como o controle
dos privilégios dos usuários do BD. Os comandos Grant, Revoke, Audit, No Audit, Lock são
comandos da DCL.
Exemplos:
Exemplos:
INSERT INTO T_ALUNO
VALUES (‘001’,’Joao da Silva’);
UPDATE T_SALARIO
SET VAL_SALARIO_MINIMO = VAL_SALARIO_MINIMO * 1.2;
C:\>SQLPLUS<Enter>
SQL>
SQL>exit
OBS.:
O comando DESCRIBE exibe a estrutura da tabela especificada, isto é, o nome, tipo, tamanho e
se o campo é de preenchimento obrigatório ou não.
EX.:
DESCRIBE T_ALUNO
CHAR
O tipo CHAR armazena seqüência de caracteres de tamanho fixo que consistem de letras,
números, caracteres especiais. O tamanho não pode ultrapassar 255 bytes. Em SQL Padrão,
quando um dado possui um tamanho menor que o especificado para a coluna, espaços em branco
são acrescentados à direita. O tamanho default é 1. (Não é aconselhável este tipo de dados
apartir do Banco Oracle 8i).
VARCHAR2
Armazena seqüências de caracteres de tamanho variável que consistem de letras, números,
caracteres especiais. O tamanho máximo é de 4000. O tamanho default é 1.
VARCHAR
Idem ao VARCHAR2
NUMBER(T,D)
Onde T significa o tamanho do campo e D a quantidade de casas decimais (se for o caso).
DATE
Tipo de dado usado para datas e horas (intervalo: 01 de janeiro de 4712 AC e 31 de dezembro de
4712 DC).
LONG
Idem ao VARCHAR2, mas com tamanho máximo de 2 Gigabytes.
CLOB
Tipo de Dado usado para armazenamento de caracteres de grandes objetos. O Tamanho máximo
é de 4 Gb.
BLOB
Tipo de Dado usado para armazenamento binário de grandes objetos. O Tamanho máximo é de 4
Gb.
BFILE
Tipo de Dado que contém a localização de um arquivo binário armazenado fora do banco de
dados. Tamanho máximo de 4Gb.
* Existem outros tipos de dados, mas estes são variações dos tipos apresentados acima.
O comando mais fundamental da linguagem SQL para manipulação dos dados é o SELECT.
Com ele é que produzimos as “Queries”, ou seja ,as pesquisas no Banco de Dados.
Sua sintaxe é:
Exemplos de “Queries”:
1)SELECT * FROM ALUNO;
Retorna todas as linhas e todas as colunas da tabela ALUNO.
OBS.:
a)O predicado LIKE (exemplo 7) determina que a pesquisa será feita em todos os nomes que
comecem com JOAO. O caractere % pode ser colocado também antes da palavra. EX.: ... LIKE
‘%MARIA%’.
EXPRESSÕES ARITMÉTICAS
Operadores Descrições
+ Adição
- Subtração
* Multiplicação
/ Divisão
1+1
----------
2
Se a sua expressão aritmética conter mais de um operador a prioridade é *,/ primeiro, então +,-
segundo (deixe para direita se existir operadores com a mesma prioridade). No exemplo seguinte
a multiplicação (250*12) é avaliada primeiro; então o valor do salário é adicionado no resultado
da multiplicação (3000). Somente para linha do Smith: 800+3000=3800
ENAME SAL+250*12
---------- ----------
SMITH 3800
ALLEN 4600
WARD 4250
JONES 5975
Parênteses podem ser usados para especificar a ordem na qual serão executados es operadores,
se, por exemplo, a adição e requerida antes da multiplicação.
ENAME (SAL+250)*12
---------- ------------
SMITH 12600
ALLEN 22200
WARD 18000
JONES 38700
FUNÇÕES AGREGADAS
A característica marcante das Funções Agregadas é que produzem um único valor a partir de
uma coluna inteira de dados. Portanto, enquanto qualquer outro tipo de expressão retorna um
valor para cada linha, as funções agregadas retornam um valor que representa um agregado dos
valores referentes às várias linhas.
O atributo de uma função agregada normalmente é um nome de coluna ou uma expressão que
tenha um nome de coluna como componente – por exemplo, salário * 1.25 . As funções MAX,
MIN e COUNT aceitam caracteres e números, entretanto as funções AVG e SUM devem possuir
como atributo coluna que seja do tipo numérico, pois elas operam aritmeticamente.
Podemos utilizar as palavras-chave DISTINCT e ALL em funções agregadas tendo o seguinte
efeito:
-A palavra-chave ALL faz com que todos os valores, inclusive os repetidos, sejam aproveitados.
-A palavra-chave DISTINCT faz com que os valore repetidos sejam ignorados.
Exemplos:
Para fazer a classificação com base em uma expressão ou função, temos que representá-la com
um número que identifique a sua posição na cláusula SELECT. Isto também é verdade para a
cláusula GROUP BY.
Exemplos:
Obs:
Normalmente os valores nulos de uma coluna são exibidos em primeiro lugar quando a mesma é
classificada.
Usa-se o comando DESC após o nome da coluna especificada na cláusula order by. Exemplo:
É possível ordenar por mais de uma coluna. De fato, o limite é o número de colunas na tabela.
Para ordenar por duas colunas e mostrar a ordem reversa dos salários, entre:
A CLÁUSULA WHERE
SELECT columns
FROM table
WHERE condição de pesquisa
A cláusula WHERE pode comparar valores em colunas, valores literais, expressões aritméticas
ou funções. Sendo assim, a cláusula WHERE espera por 3 elementos, são eles:
Os operadores de comparação são usados na cláusula WHERE e podem ser divididos entre duas
categorias, que são: LÓGICOS e SQL.
Operador Significado
= igual a
> maior que
>= maior ou igual que
< menor que
<= menor ou igual que
Utilizando caracteres string e datas na cláusula WHERE, torna-se necessário o uso de (‘’) plicas.
Como exemplo2, para encontrar todos os nomes de departamento com número maior que 20,
entre:
Você pode comparar uma coluna a outra na mesma linha, assim como a uma constante. Como
exemplo, suponha que você queira obter todos aqueles empregados cuja comissão é maior que os
seus salários:
Abaixo apresentaremos os Operadores SQL, os quais operam com todos os tipos de dados:
Operadores Significado
Como exemplo, suponha que você queira obter todos os empregados, cujo salário está entre
1000 e 2000:
2°) O OPERADOR IN
Como exemplo, para obter todos os empregados subordinados a um dos três gerentes
destacados pelos números abaixo, entre:
Nota: É obrigatório o uso de (‘’) plicas para caracteres e datas especificados na lista.
Algumas vezes, pode ser que você não saiba exatamente o valor à pesquisar. Usando o operador
LIKE será possível então, selecionar linhas mediante a uma parte da string que sirva para o
argumento desejado.
Símbolo Significado
Como exemplo, para listar todos os empregados cujo nome se inicia com um S, entre:
SELECT ENAME
FROM EMP
WHERE ENAME LIKE ‘S%’;
Como exemplo, para obter todos os empregados que não tenham gerentes, deve ser feito o
teste para um valor nulo.
EXPRESSÕES DE NEGAÇÃO
Operador Descrição
Operador Descrição
Como exemplo1, para encontrar os empregados cujo Salário não está entre um determinado
intervalo, entre:
Como exemplo2, para encontrar aqueles empregados cujo nome da função (Job) não comece
com a letra M, entre:
Como exemplo3, para encontrar todos os empregados que tenham um Gerente (MGR), entre:
Os operadores AND e OR podem ser usados para estabelecer expressões lógicas compostas. O
operador AND em determinada expressão, é usado para que se atinja um resultado em que ambas
as condições sejem verdadeiras; enquanto o operador OR espera que uma das condições sejem
verdadeiras para que o resultado também seje verdadeiro.
Como exemplo1, para encontrar todos os (CLERKS) que ganhem entre 1000 e 2000, entre:
Como exemplo2, para encontrar todos os empregados que sejam CLERK e/ou todos os
empregados que ganhem entre 1000 e 2000, entre:
Nota: Você pode combinar AND e OR na mesma expressão lógica. Quando AND e OR
aparecerem na mesma cláusula WHERE, todos os AND’s serão executados primeiro e os OR’s
em seguida sucessivamente; pois o AND tem maior precedência sobre o OR.
Como exemplo3, o comando abaixo retornará todos os gerentes com salário > 1.500,00 ou
todos que sejem vendedores.
Como exemplo, selecionar todos os gerentes e vendedores com salário maior que 1.500,00,
entre:
PRECEDÊNCIA DE OPERADORES
1º Todos operadores de comparação e os operadores SQL têm igual precedência (=, !=, <,
>, <=, >=, BETWEEN ... AND, IN, LIKE, IS NULL;
3º AND;
4º OR.
SUBQUERYS
Uma subquery é um comando select dentro de um outro comando select onde retorna uma ou
mais linhas a fim de satisfazer uma clausula WHERE. No exemplo abaixo temos um select em
s_emp onde procuramos trazer o last_name e o title, onde o title pesquisado seja o mesmo do "
Smith", para isso é realizado uma subquery que nada mais é que um select, que neste caso
retorna um valor somente para a comparação na where.
LAST_NAME TITLE
------------------------- -------------------------
Maduro Stock Clerk
Smith Stock Clerk
Nozaki Stock Clerk
Patel Stock Clerk
Newman Stock Clerk
Markarian Stock Clerk
Chang Stock Clerk
Patel Stock Clerk
Dancs Stock Clerk
Schwartz Stock Clerk
10 rows selected.
Outro exemplo de subquery, que neste caso está comparando os valores da coluna SALARY com
a média dos salários da tabela s_emp. A função AVG está trazendo a média dos salários.
12 rows selected.
Nos exemplos anteriores vemos que retornavam só um único valor para comparação na clausula
where, neste caso agora há o retorno de mais de um valor para a comparação na clausula where,
mas para que ocorra a comparação com mais de um valor temos que usar o IN em vez do "=" no
exemplo abaixo ocorre um erro:
Agora usando o IN na clausula where poderá o dept_id ser comparado com as duas condições, o
select trará os registros que na tabela s_dept que tenham o nome igual a 'Finace' ou que a
region_id seja igual a 2.
Neste exemplo estamos querendo selecionar o dept_id e a média dos salários de s_emp, grupados
pelo dept_id, com a condição de que a média dos salários de s_emp seja maior que a média dos
salários do dept 32 para isso usamos o HAVING.
Vamos ao Exemplo:
DEPT_ID AVG(SALARY)
--------- -----------
33 1515
50 2025
Agora dentro do group by estamos usando o having e dentro da subquery selecionando o menor
valor da média da tabela s_emp grupado por title
SQL>
1 select title,avg(salary)
2 from s_emp
3 group by title
4 having avg(salary) =
5 (select min(avg(salary))
6 from s_emp
7* group by title)
TITLE AVG(SALARY)
------------------------- -----------
Stock Clerk 949
MIN(AVG(SALARY))
----------------
949
Comando Descrição
L[IST] Lista o último comando SQL digitado.
A[PPEND] texto Acrescenta texto no fim da linha corrente
C[HANGE]/texto_anterior/texto_novo Troca o texto_anterior para texto_novo
DEL Apaga a linha corrente
I[NPUT] Acrescenta uma ou mais linhas após a linha corrente;
para sair no modo Input pressione Enter
n Faz com que a linha n passe a ser a linha corrente.
n texto Troca o texto da linha pelo texto.
Variáveis Substituíveis são usadas em declarações SQL e permitem valores serem identificados
na execução. Explicação dessa Unidade
Você pode usar variáveis substituíveis no arquivo comando ou nas declarações SELECT para
representar valores que sejam entrados na hora da execução. Uma variável pode ser uma idéia de
como uma valor pode ser armazenado temporariamente.
Uma variável é representado por um único i comercial(&), e o valor é atribuído nela. A seguinte
declaração apresenta ao usuário um número de departamento na execução:
Um valor alfanumérico ou data precisa ser incluído entre aspas simples na entrada. Para evitar a
entrada das aspas simples na execução, declara-se a variável entre aspas simples.
Na declaração seguinte, as variáveis estão incluídas entre aspas simples, só que as aspas simples
não são requeridas na execução:
O tamanho da variável é indefinido, o valor será entrado todo vez que for executado a declaração
É possível entrar com um nome de coluna de um tabela na execução.
DEPTNO SAL/12
------ -------
20 66.6667
30 133.333
30 104.167
20 247.917
30 104.167
30 237.5
10 204.167
20 250
10 416.667
30 125
20 91.6667
30 79.1667
20 250
10 108.333
Se uma variável é prefixada com um duplo "e" comercial(&&), SQL*Plus preenche o valor da
variável com o primeiro valor fornecido na execução da declaração SQL.
O comando DEFINE é então usado para criar uma variável para o usuário.
O Comando DEFINE
Um valor pode ser atribuído para uma variável usando o comando DEF[INE] do SQL*Plus. O
valor atribuído pode ser referenciado na declaração SELECT ou comando de arquivo pelo nome
de variável predefinido de um (&). Despreenchida usando o comando UNDEF[INE].
No exemplo seguinte, uma variável tem seu conteúdo definido como uma expressão aritmética
que calcula a remuneração. Na subsequente declaração, a variável REM é referenciada para um
número de vezes. A variável é então despreenchida usando UNDEF(INE).
FROM EMP
ORDER BY &REM;
UNDEFINE REM
As Aspas duplas em volta da expressão são opcionais a menos que a expressão tenha espaços.
Iniciando um Arquivo comando Contendo Variáveis Substituíveis.
Suponhamos que você queira uma série de relatórios para listar os empregados com vários cargos
por exemplo; um para Vendedores, um para escriturário, um para gerentes, etc. Você já sabe
como usar variáveis substituíveis para obter esses diversos relatórios de uma única declaração
SELECT.
Porém, existe uma alternativa técnica que você pode usar , se você quiser armazenar a declaração
SELECT em um arquivo e então usar o comando START para executá-lo.
Essa técnica requer o uso de algumas variáveis substituíveis especiais. Existem nove dessas
variáveis e seus nomes vão de um á nove.
Para e usar essas variáveis no "e" comercial ‘&’ coloca-se um numeral (1-9) no comando SQL.
Essas variáveis podem ser usados vários números ao mesmo tempo e em várias ordens. Cada vez
que o comando é executado, cada ‘&1’ no comando é alterado pelo primeiro parâmetro depois de
START arquivo, cada ‘&2’ é substituído pelo segundo parâmetro, e assim por diante.
Para criar um arquivo comando com um parâmetro especificando o cargo para ser mostrado,
faça:
Agora execute o comando com o parâmetro ‘CLERK’. SQL*Plus substituirá a variável com o
parâmetro.
SQL> START JOB1 CLERK
Note que você não pode usar essas variáveis quando executar um comando com RUN. Você
somente armazena o comando em um arquivo e executa ele com o comando START.
O comando ACCEPT
O comando ACCEPT permite criar um variável com valor, a qual é entrada na execução,
armazenando nela. O ACCEPT é geralmente usado num arquivo comando. Esta variável então
pode ser referenciada na declaração do SQL. Existem benefícios em usar o ACCEPT para
definir Variáveis Substituíveis.
A sintaxe do comando é:
ACC(EPT) variable (NUMERICO/ALFANUMERICO) (PROMPT/NOPROMPT 'texto')
(HIDE)
Sintaxe Descrição
Exemplos
SQL> ACCEPT SALARY NUMBER PROMPT 'Salary figure : '
Password :
500
SQL> DEFINE
Podemos arquivar os comandos SQL que digitamos interativamente, em arquivos para uso
futuro. Basta utilizarmos um editor de textos qualquer. Devemos no entanto, salvar tal arquivo
com uma extensão “.SQL”.
Para executar o “script” criado digitar @ e o nome do arquivo, no “prompt do SQL*Plus.
Exemplo:
SQL>@lista_deptos.sql
EXERCÍCIO
1)Logar-se no SQL*Plus
2)Criar a tabela abaixo:
TABELA ALIMENTOS
NOME DO CAMPO TIPO TAMANHO OBRIGATÓRIO
COD_ALIMENTO NUMÉRICO 04 S
NOME_ALIMENTO ALFANUMÉRICO 30 S
PREÇO NUMÉRICO 6,2 N
PROTEÍNAS NUMÉRICO 6,2 N
MANIPULANDO DADOS
Conforme já vimos anteriormente os comando de manipulação dos dados do Oracle são:
INSERT Adiciona novas linhas (registros) à tabela.
Inserindo Dados
Para incluirmos dados em uma tabela utilizamos o comando INSERT. Sua sintaxe é:
Exemplos:
1)INSERT INTO CURSA
VALUES (‘TEC001’,’APD1’,NULL,NULL,NULL);
Obs.:
a)Não é necessário especificar no comando INSERT os nomes das colunas caso você queira
incluir a linha inteira, ou seja, todas as colunas (exemplo 1).
b)Todo campo do tipo “NOT NULL” deve sempre ser preenchido.
c)Campo do tipo não numérico devem ser delimitados com plics. Se você precisar incluir um
apóstrofe no seu string de caracteres use dois apóstrofes seguidos, por exemplo: ‘JOHN’’S” para
inserir JOHN’S.
d)Podemos usar a expressão “NEXTVAL” para inserirmos o próximo valor para, por exemplo,
uma chave primária.
Ex.: INSERT INTO T_DEPARTAMENTO(COD_DEPTO, NOME_DEPTO)
VALUES (T_DEPARTAMENTO_COD_DEPTO.NEXTVAL,’FINANCAS’);
Para tal, o campo T_DEPARTAMENTO_COD_DEPTO deve Ter sido criado como um objeto
do tipo ‘SEQUENCE’.
Exemplos:
1)INSERT INTO FUNC_SUL
SELECT * FROM FUNC
WHERE BAIRRO IN (‘COPACABANA’,’IPANEMA’,’LEBLON’);
Obs.:
ALTERANDO DADOS
Sintaxe:
UPDATE nome_da_tabela
SET coluna = valor
[WHERE condição]
Exemplos:
1)UPDATE T_SALARIO
SET VAL_SALARIO = VAL_SALARIO * 1.5
WHERE VAL_SALARIO < 1000;
Atualiza os salários menores que 1000, em 50%.
1)UPDATE T_FUNCIONARIO
SET VAL_SALARIO = 1800, COD_DEPTO = 13
WHERE COD_FUNCIONARIO = 2392;
Altera o salário do funcionário 2392, para R$ 1.800,00, transferindo-o para o departamento
de número 13.
Sintaxe:
Exemplos:
CONTROLANDO TRANSAÇÕES
O controle de transações lógicas no Oracle é feito através dos comando COMMIT e
ROLLBACK.
RATIFICANDO TRANSAÇÕES
O trabalho no Banco de Dados, deve ser processado em agrupamentos lógicos, ou seja, o Banco
de Dados deve receber alterações quaisquer mantendo-se coerente com o que o mesmo representa.
Por exemplo, se um aumento na “quantidade de fitas alugadas” tiver sido entrado, o BD pode não
estar coerente até que “Estoque_fitas_disponíveis” tenha sido diminuído deste valor.
Com isto definimos então Transação como um grupo de mudanças que constitui um agrupamento
lógico de entradas, isto é, a Transação é o conjunto de mudanças feitas no BD entre os comandos
COMMIT.
COMANDO COMMIT
Ratifica a transação corrente fazendo todas as trocas no BD (grava fisicamente).
Mudanças como INSERT, DELETE, UPDATE devem ser feitas em grupos como transações
lógicas, e depois submetidas, através do comando COMMIT, ao Banco de Dados. Isto assegura
a gerência e a integridade dos dados.
Sintaxe:
COMMIT
Após uma falha do sistema, somente as mudanças com COMMIT serão salvas.
Como os comandos INSERT, UPDATE e DELETE podem fazer com que muitas linhas
diferentes sejam alteradas, deve-se Ter o cuidado de não se fazer muitas mudanças antes de um
COMMIT. Pode ocorrer também que, após muitas mudanças (ainda não submetidas), aconteça
uma falha no sistema, necessitando que tais mudanças sejam feitas novamente.
Obs.:
a)Existe também a opção AUTOCOMMIT que faz com que cada mudança seja submetida após
a entrada. Só deve ser usada quando as mudanças que serão feitas não estão logicamente
relacionadas.
b)Comandos que causam um COMMIT automático: ALTER, AUDIT, CREATE,
DISCONNECT, DROP, EXIT, GRANT, NOAUDIT, QUIT, REVOKE. Se você digitou outros
comandos e ainda não os submeteu com um COMMIT, e entrar com um dos comandos acima,
então todo o trabalho anterior será submetido.
COMANDO ROLLBACK
O comando ROLLBACK cancela mudanças completadas, mas não submetidas ao BD, deixando
assim o BD como se tais mudanças nunca tivessem sido feitas.
Sintaxe:
ROLLBACK
O ROLLBACK é executado quando ocorre uma falha no sistema (falta de energia, por exemplo).
COMMIT
INSERT
DELETE
INSERT
INSERT
ROLLBACK
UPDATE
INSERT
COMMIT
COMANDO SAVEPOINT
INSERT...
DELETE...
UPDATE...
SAVEPOINT PRIMEIRO
INSERT...
UPDATE...
DELETE...
SAVEPOINT SEGUNDO
INSERT...
UPDATE...
DELETE...
.
.
.
Através dos SAVEPOINT’s que declaramos, podemos desfazer partes de uma transação,
deixando outras partes intactas.
Exemplo.:
ROLLBACK TO SAVEPOINT SEGUNDO
Exercício
Ex.:
a)SAVEPOINT DOIS;
b)INSERT INTO T_EQUIPAMENTO
VALUES (‘082’,’WALKMAN’,’SONY’);
a)SELECT * FROM T_EQUIPAMENTO;
b)ROLLBACK TO SAVEPOINT UM;
c)COMMIT;
d)SELECT * FROM T_EQUIPAMENTO;
Ex.:
CREATE TABLE T_ACESSORIO-ROUPA
(COD_ACESSORIO NUMBER(03),
NOME_ACESSORIO VARCHAR2(30),
TAMANHO_ACESSORIO VARCHAR2(10),
DATA_COMPRA DATE DEFAULT SYSDATE
Este objeto é utilizado dentro do banco de dados para fazer uma especie de "auto-incremento",
utilizando números sequenciais positivos ou negativos para uma coluna especifíca.
Utilizaremos este objeto quando queremos uma coluna que organize os registro do banco, um
exemplo, seria a utilização do Sequence para criação de colunas de Código ou Matrícula.
Na 1º Linha estamos dizendo para o Oracle criar uma sequencia com o nome CONSULTING.
Na 4º Linha será determinada o número máximo que a sequencia atingirá, exemplo 999 números.
A 5º Linha indica que a geração dos números será após ter atingido o número máximo ou o
número minimo para as sequencias decrescentes.
E a 6º Linha irá especificar para o banco uma quantidade de números que será guardado na
memoria para posteriormente fazer uma consulta rápida.
Bom, agora deu para entender a criação de um objeto sequence dentro do banco, precisamos
saber agora como utilizá-la, e para isso basta você incluir o sequence dentro do seu comando
Insert, veja o exemplo :
A linha acima foi incluída com sucesso, mas perceba que apareceu uma palavra-chave em
NEGRITO após digitar o nome da sequence, essa palavra-chave é para obter o próximo número
sequencial (NextVal), poderiamos utilizar outra palavra-chave a CurrVal que nos daria o valor
atual da sequencia.
Depois de termos criado a sequence para a tabela, falarei sobre alguns pontos bons e ruins na sua
utilização no dia-dia.
Pontos Bons
- Podemos utilizar uma unica sequence para várias tabelas do banco de dados, economizando
tempo e mão-de-obra.
Pontos Ruins
- Caso tenha uma perca de memoria ou uma falha do sistema, o objeto perderá toda numeração
sequencial, ficando totalmente inutilizavel.
- Caso você execute o comando DELETE na sua tabela, o número da sequencia que você deleto
será pedido, então ficará um "burraco" na sua coluna, pois a sequence não é um auto-incremento
que deixará sempre o registro com numeração correta.
Depois de citar o empate tecnico entre os pontos bons e ruins, vamos pensar que você queira ter
um controle sobre as Sequences que você criou no banco. Como fazer isso ?
Seus problemas acabaram, pois o maravilhoso Oracle sabe como fazer isso bem facilmente, cada
usuário tem seu schema onde é guardada todas as sequences, type, type_methods e etc.. e um
simples comando você consegue ver as sequences que estão no seu Shema.
Uma visão é uma tabela resultante de uma “query” à qual damos um nome. Depois que você
tiver criado uma visão, isto é, dado um nome à tabela resultado de uma determinada “query”,
poderá pesquisar os seus dados exatamente como faria com uma tabela qualquer.
As visões têm várias funções, dentre elas Independência de dados, Segurança de acesso e
facilidade de acesso.
Com as visões podemos restringir o acesso aos dados especificando que colunas e/ou linhas um
determinado usuário, aplicação ou grupo pode ver, assim como o que eles podem fazer (Incluir,
Modificar, Excluir).
Muitas vezes o acesso aos dados exigem “queries” complexas. Um usuário pode construir uma
visão que contenha uma certa complexidade e disponibilizá-la para usuários finais e
programadores, que farão “queries” mais simples sobre esta Visão. Você estará então, retirando
a complexidade da navegação de uma aplicação ou de um usuário no acesso aos dados.
Sintaxe:
Exemplos:
Vamos supor que muitos usuários e aplicações necessitem do nome do funcionário, nome dos
seus dependentes e o endereço dos seus dependentes.
O DBA poderia criar uma Visão que fornecesse esse conjunto de informações da seguinte forma:
Obs.: Após a execução do CREATE VIEW podemos acessar os dados dessa VISÃO da mesma
forma que uma tabela. Por exemplo, poderíamos digitar a seguinte “query”:
Existem algumas restrições no uso de View’s, que variam de implementação para implementação.
Vejamos as principais, que são comuns a quase todos os banco de dados relacionais:
VISÕES MATERIALIZADAS
Utilizamos elas para fazermos cálculos, armazenamentos de dados e dar agilidade na troca de
informações entre um banco de dados ou entre tabelas. Este recurso é muito utilizado em
ambientes de Data Warehouse, que trabalha com uma enorme quantidade de informações. Pois
com elas conseguimos melhorar a performance do sistema e trazer diversos benefícios ao Oracle.
As Views Materializadas são utilizadas para fazer atualizações, a própria Oracle garante que as
atualizações são feitas com sucesso numa tabela destinatária após terem sido efetivadas nas
tabelas originais. Isso nos dá mais tranqüilidade na administração e no desenvolvimento.
Agora vamos ver um exemplo de como se faz uma Views Materializadas, olhe abaixo:
Aqui estamos começando a criar nossa View Materializada, veja que depois da palavra VIEW
devemos definir um nome para ela, no nosso exemplo utilizei meu nickname, CONSULTING.
Para as versões anteriores ao 9i, criávamos sendo Snapshots, exemplo, CREATE SNAPSHOT
NOME, então mudou em relação a versão 9i. OBS: a versão 10g mantém o padrão da versão 9i.
Nesse ponto estamos dizendo que a View Materializada deverá utilizar os dados imediatamente
na query rewrite (Seu SELECT), desde modo os dados serão processados com mais agilidade.
Existe também outro método, chamado build dedferred que significa que a view não terá nenhum
tipo de dados a ser utilizada automaticamente, esse modo seria um processamento manual das
informações, que será depois atualizado pelo Refresh, resumindo, que com essa opção o comando
SELECT não será executado imediatamente.
Esse método é para dizer que as modificações serão utilizadas somente pela View Materializada,
para utilizar este recurso com segurança, sugiro criar uma View Materializada Log, para ter
controle sobre as modificações que estão sendo feitas, explicarei isso na próxima coluna.
Essa linha de comando é o que indica que o SELECT presente dentro da View Materializada será
reescrita e atualizada para os novos valores passados pela VIEW. A query rewrite pode ter três
níveis de integridade que vai desde o modo ENFORCED até o STALE_TOLERATED, que
indicará ao banco de dados que tipo de confiança ele poderá ter nos dados. Sobre as integridades,
falaremos na próxima coluna também, pois e um pouco mais delicado.
Linha 5 - ( AS SELECT )
Aqui será colocado seu SELECT, onde poderá fazer alguns cálculos ou visualizações de
informações para outras tabelas, como no exemplo de SELECT que irei passar.
Então o que acontecerá? Estou pegando algumas informações que será atualizada no banco de
dados, esse meu SELECT ele está bem simples, porém os SELECTS que devemos utilizar dentro
das Views Materializadas devem seguir um padrão delas, como, por exemplo, não utilizar
cláusulas como UNION, UNION ALL, INTERSECT e MINUS. Se utilizar alguma dessas
cláusulas a view não irá atualizar os dados, assim como tem que seguir alguns outros critérios.
São elas:
CONSTRAINT OBJETIVO
NOT NULL Não permitir campos nulos (usada para campos de
preenchimento obrigatório).
UNIQUE Especifica que o campo não poderá conter valores duplicados.
PRIMARY KEY Especifica-se esta Constraint para os atributos identificadores
das tabelas (chaves primárias)
FOREIGN KEY Para definição de chaves estrangeiras (foreign key),
estabelecendo relacionamentos entre tabelas do BD.
CHECK Valida o preenchimento de uma coluna da tabela.
Adicionar
Sintaxe:
Exemplo:
Modificar
Sintaxe:
Exemplos:
1)ALTER TABLE T_ACESSORIO
MODIFY (NOME_ACESSORIO NOT NULL);
Exemplos:
Obs.:
A tabela do dicionário de dados Oracle, denominada USER_CONSTRAINTS contém as
restrições (Constraint’s) do Banco de Dados.
Exemplos:
1)DESCRIBE USER_CONSTRAINTS
Sintaxe:
Sintaxe:
Exemplo:
EXERCÍCIO III
CRIANDO ÍNDICES
Sintaxe:
Usamos a palavra-chave UNIQUE para criar um índice para a chave-primária da tabela, pois
com UNIQUE valores duplicados na tabela não serão mais aceitos.
Exemplos:
1)CREATE UNIQUE INDEX IND_COD_F
ON FUNC(COD_FUNC);
Obs.:
a)Convém criarmos índices para colunas que, dentre outras características:
-São usadas com freqüência em cláusulas WHERE ou em Junções (JOIN’s);
-Todos os valores da coluna são únicos (UNIQUE);
-Contém intervalo grande.
ELIMINANDO ÍNDICES
Qualquer índice de uma tabela é eliminado automaticamente quando a tabela é eliminada. Para
eliminarmos somente o índice usamos o comando DROP.
Sintaxe:
A tabela ou visão onde foi criado o índice não é afetada pela sua eliminação.
PRIVILÉGIOS
Nem todos os usuários do Oracle podem acessar todas as tabelas do Banco de Dados. Para
conceder ou revogar privilégios de acesso/manipulação aos usuários o DBA utiliza os comando
GRANT e REVOKE.
Podemos conceder/revogar diversos tipos de privilégios, dependendo do usuário. Se um usuário
final irá somente consultar Tabelas, Visões O DBA concederá somente privilégios de consulta
(SELECT). Entretanto para um desenvolvedor o DBA deverá dar, além de privilégios de
consulta, outros privilégios (por exemplo, privilégios de Criação/Alteração de tabelas, visões,
etc.)
Um privilégio de sistema é um privilégio poderoso que, se concedido ao usuário, dará ao mesmo
o direito de executar uma operação em nível de banco de dados. Cabe portanto ao DBA a tarefa
de definir quais usuários do Banco terão tais privilégios (poderão ser outros administradores e/ou
desenvolvedores de aplicações).
Exemplo:
Um usuário com privilégio SELECT ANY TABLE pode consultar qualquer tabela do banco.
Um usuário com o privilégio ALTER DATABASE pode alterar a estrutura física do banco,
incluindo novos arquivos.
Exemplo:
Um usuário com privilégio de SELECT na tabela SALÁRIOS, pode consultar a mesma.
Um outro usuário com privilégio de UPDATE, na tabela SALARIOS, poderá alterar a mesma
(ação que não poderá ser realizada pelo usuário com privilégio de SELECT apenas).
COMANDO GRANT
Concede privilégios aos usuários Oracle cadastrados.
Sintaxe:
Exemplos:
COMANDO REVOKE
Sintaxe:
Exemplos:
Tendo em vista que o Oracle possui uma infinidade de privilégios e que a quantidade e
diversidade de perfis de usuários em um banco de dados também é grande, a administração dos
privilégios de todos eles (usuários) seria um tarefa no mínimo bastante trabalhosa. Visando
dirimir este problema existe o objeto Oracle denominado ROLE. Em uma ROLE podemos
agrupar diversos privilégios e conceder aos usuários, não mais os privilégios e sim as ROLES.
Exemplo:
Obs.:
Exemplo:
Para utilizar um comando do sistema operacional sem sair do SQL*Plus basta digitar o comando
HOST.
Exemplo:
HOST <comando_do_sistema_operacional>
ou
$ <comando_do_sistema_operacional>
Obs.:
-Para “ir” para o sistema operacional sem tirar o SQL*Plus da memória basta digitar o sinal de
“!” no prompt do SQL*Plus.
FUNÇÕES
Funções fazem a pesquisa de bloco mais potente, e são usadas para manipular valores. Nessa
Unidade falaremos de funções numéricas e alfanuméricas. Funções de Data, funções de
Conversão, e funções as quais operam sobre tipos de dados.
Introdução a Funções
Funções são usadas para manipular dados. Elas aceitam um ou mais argumentos e retorna um
valor. Um argumento é uma constante, refece-se a variável ou coluna. O formato para uma
função é a seguinte:
função_nome (arumento1,argument2,...)
•NUMÉRICAS
•DATA
•CONVERSÃO
•GRUPO
Algumas funções operam unicamente sobre linhas simples; outras manipulam grupo de linhas. A
mais comuns funções usadas estão nesse manual.
•podem ser usadas com variáveis do usuário, colunas, expressões podem ser usadas por exemplo
nas : clausulas SELECT, WHERE, ORDER BY.
Explicação da notação
Notação Significado
n representa um número
Funções Alfanuméricas
LOWER
LOWER(col/value) fornece valores alfanuméricos os quais estão em letra
maiúscula ou minúscula e retornam em letra minúscula
Para mostrar o nome dos departamentos em letra minúscula e a constante SQL COURSE, faça:
SELECT LOWER(DNAME), LOWER('SQL COURSE')
FROM DEPT;
UPPER
UPPER(col/value) fornece caracteres alfanuméricos, os quais estão em letra
maiúscula ou minúscula e retornar em letra maiúscula.
SELECT ENAME
FROM EMP
WHERE ENAME = UPPER('&ENAME');
ENAME
----------
SMITH
INITCAP
INITCAP(col/value) força a primeira letra da Palavras ser em maiúscula e o resto
minúscula
INITCAP(DANAME) INITCAO(LOC)
--------------- ------------
LPAD e RPAD
As funções LPAD e RPAD enchem valores alfanuméricos para tamanhos especificados.
LPAD(col/value,n,’caracter’) preenche a coluna ou valor literal da esquerda para o
total tamanho de n posições. Os principais espaços
estão preenchidos com o ‘caracter’. Se o caracter for
omitido o valor padrão é espaços.
Essa vez a segunda coluna é alinhada para a direita com brancos por padrão.
SUBSTR
A função seguinte assume os caracteres na linha estando numerados da esquerda para a direita
começando com 1.
SUBSTR(col/value,pos,n) Retorna um linha de n caracteres da coluna ou valor
literal, iniciando na posição número pos. Se n é omitido
Note que os valores estão alinhados para a esquerda. Isso porque SQL*Plus sempre mostra dados
alfanuméricos alinhados para a esquerda por padrão.
INSTR
INSTR(col/value,’caracter’) encontra a primeira ocorrência do ‘caracter’.
LTRIM e RTRIM
LTRIM e RTRIM removem específicos caracteres de um linha.
LTRIM(col/value,’caractere(s)’) removem da esquerda principalmente ocorrências
RTRIM pode ser usada para ajudar na remoção de brancos ou caracter do final de um campo.
SOUNDEX(col/value) retorna uma linha de caracteres representando o som da
palavra para um coluna ou um valor literal. Esta função
retorna a fonética representação de uma palavra, você pode
comparar palavras que tenham escrita diferente e sons iguais.
ENAME SOUNDEX(ENAME)
---------- ---------------
FORD F630
LENGTH
LENGTH(col/value) retorna o número de caracteres na coluna ou valor literal.
TRANSLATE e REPLACE
As funções TRANSLATE e REPLACE são usadas para substituir caracteres.
TRANSLATE(col/value,from,to) transforma caracteres de para. Mais de um
caracter pode ser combinado. Todas as
ocorrências from são substituídas com a
correspondente caracter no to. Se o correspondente
to não for digitado o from será removido
Suponhamos que você queira encontrar o número de vezes que um determinado caracter ocorre
em uma linha. Como você faria isso?
Você pode aninhar as funções LENGTH e TRANSLATE para realizar um requisitado resultado.
O exemplo seguinte permite contar o número de Ss em uma linha
SELECT DNAME, LENGTH(DNAME),
LENGTH(DNAME) - LENGTH(TRANSLATE(DNAME,'AS','A'))
FROM DEPT;
2.Então usa a função TRANSLATE para fazer todas as ocorrências de S sair da linha.
SELECT LENGTH(TRANSLATE(DNAME,'AS','A'))
FROM DEPT;
LENGTH(TRANSLATE(DNAME,'AS','A'))
---------------------------------
REEARCH
ALE
OPERATION
ACCOUNTING
3. Note que A é modificado para A, e S não corresponde a nenhum caracter para ser alterado.
Como S não tem nenhum caracter correspondente ele é removido da linha..
4. Agora subtrai o tamanho da linha retirado os Ss do tamanho da linha original.(com os Ss)
LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A'))
Funções Numéricas
As funções aceitam entrada de números e retornam valores numéricos.
ROUND
ROUND(col/value,n) arredonda um coluna, expressão ou valor para n casas decimais.
Se n é omitido não tem casas decimais. Se n for negativo, os
números para esquerda do decimal são arredondados.
SELECT ROUND(45.923,1),
ROUND(45.923),
ROUND(45.323,1),
ROUND(45.323,-1),
ROUND(SAL/32,2)
FROM EMP
TRUNC
TRUNC(col/value.n) trunca a coluna, expressão ou valor para n casas decimais, ou
se n é omitido não têm casas decimais. Se n é negativo os
números para esquerda das casas decimais são truncados para
zero.
SELECT TRUNC(45.923,1),
TRUNC(45.923),
TRUNC(45.323,1),
TRUNC(45.323,-1),
TRUNC(SAL/32,2)
FROM EMP
WHERE DEPTNO = 10;
CEIL
CEIL(col/value) encontra o menor valor maior que ou igual para a coluna,
expressão ou valor.
FLOOR
FLOOR(col/value) encontra o maior valor menor que ou igual para a coluna,
expressão ou valor
POWER
POWER(col/value,n) eleva uma coluna, expressão ou valor por uma potência, n pode
ser negativo mas deve ser um número, se não um erro será
retornado
SQRT
SQRT(col/value) encontra a raiz quadrada da coluna ou valor. Se a coluna ou valor
for menor que zero será retornado nulo.
SIGN
SIGM(col/value) retorna -1 se a coluna, expressão ou valor é negativa ou zero e 1 se
for positivo
Freqüentemente a função SIGN é usada para testar um valor se é menor, maior ou igual a um
segundo valor. O seguinte exemplo apresenta todos os empregados os quais o salário é maior que
sua comissão.
SELECT ENAME, SAL, COMM
FROM EMP
WHERE SIGN(SAL-COMM) = 1;
ABS
ABS(col/value) encontra o valor absoluto de um coluna, expressão ou valor
MOD
MOD(val1,val2) encontra o resto da divisão val1 por val2
EMPLOYEE_AND_JOB
--------------------
SMITH CLERK
ALLEN SALESMAN
WARD SALESMAN
JONES MANAGER
MARTIN SALESMAN
BLAKE MANAGER
CLARK MANAGER
SCOTT ANALYST
KING PRESIDENT
TURNER SALESMAN
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK
3. Mostrar uma lista de todos os empregados com um identificador o qual é composto das
primeiras duas letras de seu cargo, o meio de dois dígitos de seu número e o código soundex do
seu nome.
NAME CODE
---------- -----------
SMITH CL36S530
ALLEN SA49A450
WARD SA52W630
JONES MA56J520
MARTIN SA65M635
BLAKE MA69B420
CLARK MA78C462
SCOTT AN78S300
KING PR83K520
TURNER SA84T656
ADAMS CL87A352
JAMES CL90J520
FORD AN90F630
MILLER CL93M460
4. Fazer uma ferramenta intensiva de pesquisa para listar os empregados com o cargo que o
usuário entrar.
DEPARTMENT
--------------------
ACCOUNTING
OPERATIONS
RESEACH
SALES
ENAME FIRST_OCCURENCE_OF_L
---------- -------------------
SMITH SMITH
ALLEN AXLEN
WARD WARD
JONES JONES
MARTIN MARTIN
BLAKE BXAKE
CLARK CXARK
SCOTT SCOTT
KING KING
TURNER TURNER
ADAMS ADAMS
JAMES JAMES
FORD FORD
MILLER MIXLER
4. SELECT *
FROM EMP
WHERE UPPER(JOB) = UPPER('&JOB');
6. SELECT ENAME,
TRANSLATE(SUBSTR(ENAME,1,INSTR(ENAME,'L')),'L','X')||
SUBSTR(ENAME,INSTR(ENAME,'L') + 1) FIRST_OCCURRENCE_OF_L
FROM EMP;
Funções de Data
Funções de data operam sobre datas do ORACLE. Todas as funções de datas retornam valores
de tipo data exceto MONTHS_BETWEEN o qual retorna um valor numérico.
•Século
•Ano
•Mês
•Dia
•Horas
•Minutos
•Segundos
Sysdate
Sysdate é uma coluna que retorna a data e horário corrente. Você pode usar o SYSDATE como
uma outra coluna qualquer. Por exemplo, você pode mostrar data corrente selecionando o sysdate
de uma tabela simulada chamada DUAL. A tabela DUAL é uma tabela do sistema e deve ser
permitido acessá-la para todos os usuários. Ela contém uma coluna DUMMY e uma linha com o
valor X. A tabela DUAL é usada quando você quer retornar apenas uma linha.
Para mostrar a data corrente:
SELECT SYSDATE FROM DUAL;
Você poderia facilmente selecionar o sysdate da tabela EMP, mas 14 sysdate seriam retornados.
Usando Operadores Aritméticos
Devido o fato das datas serem armazenadas como número, é possível fazer cálculos com datas
usando operadores aritméticos tal como adição e subtração. Você pode adicionar e subtrair
números constantes e bem como data de data.
data + número Adicionando um número de dias em uma data, produzindo uma nova data
data - número subtraindo um número de dias de uma data, produzindo uma nova data
Subtraindo SYSDATE de HIREDATE coluna da tabela EMP retorna o números de dias que o
empregado está admitido.
MONSTHS_BEETWEEN
MONTHS_BETWEEN(data1,data2) encontra o número de meses entre data 1 e data2. O
resultado pode ser positivo ou negativo. Se a data 1
for posterior a data2, então o resultado será
positivo, se a data 1 for menor que a data 2 o
resultado será negativo.
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE),
MONTHS_BETWEEN('01-JAN-84','05-NOV-88')
FROM EMP
WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)> 59;
MONTHS_BETWEEN(SYSDATE,HIR MONTHS_BETWEEN('01-JAN-84','05-NOV-
EDATE) 88')
-------------------------------- ---------------------------------------
65.0873622 -58.429332
63 -58.429332
60.5067171 -58.429332
59.3454267 -58.429332
59.3454267 -58.429332
59.8292977 -58.429332
ADD_MONTHS
ADD_MONTHS(data,n) adiciona n números de meses na data. n deve ser inteiro e
pode ser negativo.
NEXT_DAY
NEXT_DAY(data1,’caracter’) data do próximo dia especificado da semana(caracter)
seguinte data.1. Caracter deve ser um número
representado um dia, ou o dia semana descrito em
inglês.
LAST_DAY
LAST_DAY(data) encontra a data do ultimo dia do mês da data especificada
TRUNC
TRUNC(data,’caracter’) encontra a data do primeiro dia do mês da data quando o
caracter = ‘MONTH’. Se o caracter = ‘YEAR’ ele encontra o
primeiro dia do ano.
TRUNC é usado se você quiser remover o horário do dia. O horário contido no dia é removido
por padrão.
Funções de Conversão
SQL possui um número de funções para controlar os tipos de conversão de dados. Essas funções
de conversões converte um valor de um tipo de dado para outro.
TO_CHAR
A função TO_CHAR é freqüentemente usada para modificar um formato de data padrão para um
formato alternativo para mostrar.
TO_CHAR(data,’máscara’) especifica que a data está sendo convertida para um novo
formato na saída.
Para converter a data corrente do formato padrão (DD-MON-YY) para uma nova máscara.
SELECT TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY')
FROM DUAL;
Note que:
•A ‘máscara’ a qual deve estar entre aspas simples, pode ser incluída em vários formatos
listados anteriormente. A coluna e ‘máscara’ deve ser separadas por uma vírgula.
•FM pode ser usado para suprimir zeros para o formato ddth, ex.:
05TH é alterado para 5TH
TO_CHAR pode também ser usado para extrair o horário de um único dia, e mostrá-lo no
especificado formato.
Para mostrar o formato de um dia:
SELECT TO_CHAR(SYSDATE,'HH:MI:SS')
FROM DUAL;
TO_CHAR(SYSDATE,'HH:MI:SS')
---------------------------------------
08:16:24
A função TO_CHAR é também usada para converter um valor do tipo numérico para um valor
do tipo alfanumérico.
TO_CHAR(numer,’número máscara’)
SELECT TO_CHAR(SAL,'$9,999')
FROM EMP;
TO_CHAR(SAL,'$9,999')
----------------------
$1,000
$1,600
$1,250
$2,975
Note que os formatos das máscaras são opcionais. Se a ‘máscara’ é omitida, a data é convertida
para um alfanumérico valor ORACLE que é padrão DD-MON-YY. Se o ‘máscara’ não é
especificada, o número é convertido para alfanumérico.
Então note que o formato modelo não afetam o valor interno que representam o valor das
colunas. Eles somente afetam como a coluna é mostrada quando retirada com uma declaração
SELECT.
Formatos de Data
Máscara Significado
SYEAR ou YEAR Ano, soletrado na saída ‘S’ prefixo “BC” data com ‘-’
BC ou AD BC/AD período
Q Um quarto do Ano
MM Mês
AM ou PM Indicador meridiano
MI minuto
SS segundos
Nota: Os códigos são ferramentas sensitivas e afetaram a amostragem dos elementos da data:
DAY MONDAY
Day Monday
Month July
Ddth 14th
DdTh 14Th
Formatos Numéricos
Os elementos do formato numérico modelo são:
Nota:
A lista de formatos numéricos listas acima na tabela podem ser usados no comando Column do
SQL*Plus (Ver Unidade 10).
TO_NUMBER
TO_DATE
Para mostrar todos os empregados admitidos em 4 de junho de 1984 (não formato padrão), nós
podemos usar a função TO_DATE:
Por exemplo:
Para entrar um linha na tabela EMP com a data não no formato padrão:
VALUES(7777,20,TO_DATE('19/08/90','DD/MM/YY'));
DECODE
DECODE é a mais potente função do SQL. Ele facilita pesquisas condicionais fazendo o
trabalho de ‘ferramentas’ ou comandos ‘se-então-se não’.
Sintaxe:
DECODE(col/expressão,
procurado1,resultado1,...,padrão)
Argumentos
Nota:
•col/expressão pode ser vários tipos de dados.
'MANAGER','BOSS',
'UNDEFINED' DECODE_JOB
FROM EMP;
GRADE BONUS
--------- -----
1 15%
2 10%
3 8%
4 5%
5 5%
Esse exemplo ilustra como a função decode, o valor retornado é forçado a ter um tipo de dado no
terceiro argumento.
Nós permitimos o usuário especificar a ordem na qual a informação empregado é mostrada por
entrada de um valor na hora da execução
Note que esse comando causa um erro porque o tipo de dado de ename (alfanumérico) diferente
que o do sal (numérico) o qual é o terceiro argumento. No exemplo abaixo, nós queremos
retornar o salário incrementado de acordo com o tipo de cargo.
SELECT JOB, SAL, DECODE(JOB,'ANALYST',SAL*1.1,
'CLERK',SAL*1.15,
'MANAGER',SAL*.095,
SAL)
FROM EMP;
NVL
NVL(col/valor,valor) converte um valor nulo para um valor desejado. Tipo de dados
devem combinar(col/valor e valor).
GREATEST
GREATEST(col/valor1,col/valor2,...) retorna o maior da lista de valores. Todos os
col/valores são convertidos para um valor antes da
comparação.
GREATEST(1000,2000), GREATEST(1000,2000),
----------------------- -----------------------
2000 1600
2000 1250
2000 1400
2000
2000 1500
Nota: Na função GREATEST quando na lista de valores existe um valor nulo ele é considerado
como o maior.
LEAST
LEAST(col/valor1,col/valor2,...) retorna o menor valor de um lista de valores. Todos os
valores são convertidos antes da comparação.
FROM EMP
WHERE DEPTNO = 30;
LEAST(1000,2000), LEAST(1000,2000),
----------------------- -----------------------
1000 300
1000 500
1000 1250
1000
1000 0
Nota: Na função LEAST quando na lista de valores existe um valor nulo ele é considerado como
o menor.
VSIZE
VSIZE(col/valor) retorna o número de bytes interno do ORACLE representando um
col/valor.
ENAME NVL(TO_CHAR(MGR),'UNMANAGEABLE')
--------- ---------------------------------
KING UNMANAGEABLE
Funções aninhadas podem então serem usadas para mostrar a data de Quinta-feira que é de dois
meses de hoje no formato de ‘Day dd Month YYYY’.
SELECT SYSDATE,
TO_CHAR(NEXT_DAY(ADD_MONTHS(SYSDATE,2),'FRIDAY'),'Day dd Month YYYY')
FROM DUAL;
SYSDATE TO_CHAR(NEXT_DAY(ADD_MONTHS(SYSDATE,2),'FRIDAY'),'Day
dd Month YYYY')
--------- ---------------------------------------------------------------------
04-DEC-89 09 February 1990
Continuidade do Aprendizado
Ou
Maximiliano Henriques
maxh@bol.com.br
MSN: maxh@bol.com.br
Dica:
http://br.groups.yahoo.com/group/oracle_tools/