Professional Documents
Culture Documents
__________________________________________________________________________________
BANCO DE DADOS
HISTÓRICO
No processamento de dados tradicional, as aplicações (sistemas) eram basicamente
dirigidas a um setor específico da empresa e, conseqüêntemente, sua construção baseava-se
nos dados utilizados em tal setor.
Desta forma, o sistema de informação da empresa, como um todo, era constituído por
diversos sistemas, possuindo processos e arquivos próprios e independentes.
Problemas :
A) A comunicação de dados entre tais empresas, quando necessária era difícil.
(integração);
C) Aumento do custo de manutenção, devido ao fato de uma mesma tarefa estar sendo
realizada em dois ou mais processos distintos.
Identificados esses problemas, a evolução natural impôs aos sistemas uma eliminação
da duplicação, e integração entre os sistemas (dados).
Surge então uma novo problema:
Devido à integração, dois ou mais processos passam a compartilhar o mesmo dado
(necessidade de controle de concorrência).
Outro problema dessa integração deve-se ao fato de uma mesmo dado poder ter
diferentes estruturas físicas com tipos e tamanhos diferentes, e, por conseguinte, dois
processos distintos poderem necessitar de representações diferente de um mesmo dado de
acordo com a utilização que façam parte deste (necessidade de independência entre dados
e processos (programas))
Surge então o Banco de Dados
BANCO DE DADOS
Segundo [Date], o sistema de banco de dados consiste em um sistema de manutenção
de informações por computador que tem por objetivo manter as informações e disponibilizá-las
aos seus usuários quando solicitadas.
Segundo [Palmer], um banco de dados é uma coleção de dados, organizados e
integrados, que constituem uma representação natural de dados, sem imposição de restrições
ou modificações para todas as aplicações relevantes sem duplicação de dados.
Principais Objetivos:
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
2
__________________________________________________________________________________
Através do controle centralizado dos dados das diversas aplicações que utilizam o banco de
dados, podendo estabelecer procedimentos de controle e verificação e também podendo criar
padrões.
F) Segurança de dados
Sendo que o banco de dados é constituído por informações da empresa, a segurança dessas
contra perdas ou destruição deve ser um ponto importante. O banco de dados deve permitir
cópias dos dados que possam ser restaurados parcial ou totalmente.
D) Permitir o controle da integridade, ou seja, assegurar que os dados estão sendo gravados
corretamente;
__________________________________________________________________________________
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
4
__________________________________________________________________________________
COMPONENTES BÁSICOS DE UM BANCO DE DADOS
A) Dados
São os dados armazenados em um banco de dados. Exemplo: dados dos empregados de uma
empresa, com o número, nome, profissão, salário, etc.
Em um banco de dados os dados serão integrados e compartilhados.
Integrado - por "integrado" queremos dizer que o banco de dados pode ser imaginado como a
única filiação de diversos arquivos de dados que, de outra forma, seriam distintos, eliminando-
se total ou parcialmente qualquer redundância entre os mesmos.
EMPREGADO ( Número-Empregado, Nome,
Endereço, Salário, Número-Departamento)
DEPARTAMENTO ( Número-Departamento,
Nome-Departamento, Localização)
Compartilhado - por "compartilhado" queremos dizer que parcelas isoladas de dados podem
ser compartilhadas por diversos usuários num banco de dados, no sentido de que todos os
usuários podem ter acesso à mesma parcela de dados, inclusive, ter acesso às mesmas partes
de dados no mesmo momento (processo concorrente).
B) Hardware
Consiste na máquina que vai abrigar o banco de dados.
C) Software
É a interface entre o banco de dados físico (isto é, os dados que estão armazenados) e os
usuários. Ou seja, o usuário só acessa os dados através de um software, que é chamado de
sistema de gerenciamento do banco de dados (SGDB) ou DATA BASE MANAGEMENT
SYSTEM (DBMS).
D) Usuários
Os usuários são o conjunto de pessoas que irão acessar as informações armazenadas em um
banco de dados.
CLASSES DE USUÁRIOS
Existem basicamente 3 classes de usuários, que são:
1. O programador de aplicações
É o responsável pela definição dos programas de aplicação que utilizam o banco de dados,
utilizando alguma linguagem de programação.
2. O usuário final
Normalmente tem acesso ao banco de dados por meio de uma das aplicações on-line
desenvolvidas na empresa.
O usuário final experto eventualmente pode acessar o banco através da linguagem SQL.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
5
__________________________________________________________________________________
ADMINISTRADOR DO BANCO DE DADOS
O administrador de banco de dados é a pessoa (ou grupo de pessoas) responsável pelo
controle (administração) do banco de dados.
Responsabilidades
A) Decidir o conteúdo de informações do banco de dados
Deve identificar as entidades de interesse da empresa e a informação a registrar em
relação a estas entidades.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
6
__________________________________________________________________________________
ESQUEMA CONCEITUAL
O esquema conceitual contém a "visão do mundo real da empresa que está sendo
modelada no banco de dados". Deve conter informações sobre todas as entidades da
empresa, assim como seus atributos, relacionamentos e restrições de acesso. (Estruturas
Lógicas)
ESQUEMA EXTERNO
A definição de esquema externo é feita a partir do esquema conceitual e que contém a
definição dos dados necessários a uma classe de aplicações específicas. Essa definição é
feita de forma a procurar atender às características particulares dessas aplicações. É pelo
esquema externo que os programas da classe de aplicações correspondente acessam o
subconjunto do banco de dados necessário a seu funcionamento.
ESQUEMA INTERNO
O esquema interno contém a descrição da representação de armazenamento físico de
dados. Dessa forma, qualquer representação física pode ser implementada sem restrições. No
esquema interno fica também a descrição de como os dados estão armazenados. (Estruturas
Físicas).
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
7
__________________________________________________________________________________
A) ESTRUTURAS LÓGICAS
O processo de modelagem de uma percepção do mundo real é feito construindo-se
estruturas lógicas formadas pelas entidades e relações relevantes a essa percepção.
B) ESTRUTURAS FÍSICAS
As estruturas físicas representam a forma utilizada para organizar os dados nos meios
de armazenamento secundário.
Para permitir que sejam criadas estruturas físicas convenientes a cada situação, um SGDB
deve oferecer diversos tipos de estruturas e, entre as principais temos:
Listas encadeadas, arquivos de inversões, estruturas de acesso randômico, arquivos
seqüenciais, índices primários e secundários, arquivo de ligações.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
8
__________________________________________________________________________________
COMPONENTES PARA UM SGDB
1. Primeiro, o SGDB consiste de uma banco de dados construído para realizar operações de
baixo nível exigidas para suportar as funções acima.
2. Segundo, o SGDB consiste de uma aplicação feita sob medida, projetada e implementada pelo
usuário para realizar alguma função específica do negócio.
3. Terceiro, o SGDB consiste de ferramentas genéricas de última geração que permitem que um
usuário projete e implemente uma função específica do negócio.
FUNCIONAMENTO DO SGDB
1. O usuário emite uma solicitação de acesso, usando uma linguagem específica. Por exemplo:
Select NR_EMP, NOME, SALARIO FROM TAB_EMP;
2. O SGDB intercepta a solicitação e analisa-a;
3. O SGDB, por sua vez, inspeciona os esquemas externos para aquele usuário e faz o
mapeamento necessário;
4. O SGDB executa as operações necessárias no banco de dados armazenado
5. O SGDB retorna o resultado ao usuário.
COMUNICAÇÕES DE DADOS
As solicitações ao banco de dados a partir de uma usuário são normalmente
transmitidas (a partir do terminal ou micro do usuário - que pode estar fisicamente longe do
sistema - para alguma aplicação on-line, e dali para o DBMS) na forma de mensagens de
comunicação.
As respostas ao usuário (do DBMS e da aplicação on-line de volta ao terminal do
usuário) também são transmitidas sob forma de mensagens. Todas essas transmissões de
mensagens são efetuadas sob direção de um outro sistema de software, o gerenciador de
comunicação dos dados, que não faz parte do DBMS.
MODELO RELACIONAL
Segundo [Hackathorn], no modelo de dados relacional, o mundo parece ser mais
simples. Tudo se resume a uma simples tabela, na qual colunas descrevem algum atributo ou
característica e as linhas indicam a pessoa ou coisa atual.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
9
__________________________________________________________________________________
O GRAU DA RELAÇÃO é o número de atributos na relação, ou o que seria equivalente,
o número de domínios básicos.
ESTRUTURA RELACIONAL DOS DADOS
Terminologia utilizada: DOMÍNIO, ATRIBUTO, TUPLA, CHAVE PRIMÁRIA, RELAÇÃO.
Em resumo:
__________________________________________________________________________________
Não é necessário que uma chave externa seja um componente da chave primária na
relação que a contém.
Exemplo: DEPT (dept#, dname#, loc)
EMP (emp#, ename, mgr#, salary, dept#)
O atributo EMP.DEPT# é chave externa em relação a EMP (eqüivalendo à chave
primária DEPT.DEPT# da relação DEPT), contudo não é componente da chave primária
EMP.EMP# da relação EMP.
Na definição de chave externa, duas relação R1 e R2 são “NÃO NECESSARIAMENTE
DISTINTAS”.
O atributo EMP# é chave primária, e MGR# é chave externa, eqüivalendo à chave
primária da mesma relação EMP.
Integridade da identidade
Não se permite a nenhum atributo que participe da chave primária de uma relação
básica que aceite valores nulos.
Integridade referencial
As chaves externas que estabelecerem as ligações e implementarem relacionamentos,
devem ter valor igual a alguma chave primária de identidade (TABELA) existente.
Não pode haver chave externa apontando para uma chave primária inexistente.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
11
__________________________________________________________________________________
DICIONÁRIO DE DADOS (DD)
O dicionário de dados pode ser considerado um banco de dados dos sistema, com
informações relativa à diversos objetos do interesse do próprio SGDB.
Um banco de dados projetado através do modelo ER, deve ser mapeado para um
esquema relacional através de uma linguagem de definição de dados (DDL). A linguagem que
será utilizada neste contexto será SQL padrão ANSI/ISO.
COMANDOS
CREATE TABLE
Cria uma tabela e define suas colunas e outras propriedades.
CREATE VIEW
Define uma visão sobre uma ou mais tabelas e /ou sobre outras visões.
CREATE INDEX
Cria índice para uma tabela.
ALTER TABLE
Inclui ou redefine uma coluna numa tabela existente (não consta no padrão ANSI).
DROP TABLE
Exclui uma tabela.
DROP VIEW
Exclui uma visão.
DROP INDEX
Exclui um índice.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
12
__________________________________________________________________________________
LINGUAGEM DE MANIPULAÇÃO DE DADOS (DML)
A manipulação do banco de dados é feita através de uma ou mais linguagens
comerciais, que devem respeitar as restrições de integridade do banco de dados. A linguagem
utilizada neste contexto será o SQL.
COMANDOS
SELECT
Seleciona linhas e colunas de uma ou mais tabelas.
INSERT
Inclui linhas numa tabela ou visão.
UPDATE
Muda o valor de uma ou mais campos de uma tabela.
DELETE
Exclui linhas de uma tabela.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
13
__________________________________________________________________________________
SQL> desc dept
Name Null? Type
------------------------------------------- ------------------ ----------------
DEPTO NUMBER(2)
DNAME CHAR(14)
LOC CHAR(13)
14 rows selected.
__________________________________________________________________________________
4 2001 3000
5 3001 9999
LINGUAGEM SQL
A linguagem SQL é própria para a realização de operações como recuperar dados
(QUERY), atualizar ou eliminar dados, alterar colunas de tabelas, criar e eliminar tabelas e
qualquer outras modificações que se deseje fazer em um banco de dados relacional.
Os comandos SQL podem ser divididos em quatro grupos de comandos:
1. Query;
2. Definição de dados;
3. Manipulação de dados;
4. Controle de dados;
Em 1986 a ANSI adotou o SQL como uma linguagem padrão para banco de dados
relacional - RDBMS.
BENEFÍCIOS
• É uma linguagem não procedural;
• Permite trabalhar com várias tabelas;
• Permite utilizar o resultado de uma instrução SQL em outra instrução SQL (sub-queries);
• Não necessita especificar o método de acesso ao dado;
• É uma linguagem para vários usuários como:
A) Administrador do sistema;
B) Administrador do banco de dados (DBA);
C) Programadores de aplicações;
D) Pessoal da agência e tomada de decisão;
• É de fácil aprendizado;
• Permite a utilização dentro de uma linguagem procedural como C, COBOL, FORTRAN,
Pascal e PL/I - SQL embutida.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
15
__________________________________________________________________________________
RECUPERAÇÃO SIMPLES
SELECT * FROM emp;
ou
14 rows selected.
ADIÇÃO (+)
SUBTRAÇÃO (-)
MULTIPLICAÇÃO ( * )
DIVISÃO (/)
Observação:
Caso a expressão aritmética contenha mais de um operador, a prioridade é *, / e depois
+, -, sempre da esquerda para a direita quando existir vários operadores com a mesma
prioridade.
Também podem ser utilizados parênteses para especificar a ordem de execução dos
operadores.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
16
__________________________________________________________________________________
EMPNO SAL SAL*12
---------- ------- -----------
7369 800 9600
7499 1600 19200
7521 1250 15000
7566 2975 35700
7654 1250 15000
7698 2850 34200
7782 2450 29400
7788 3000 36000
7839 5000 60000
7844 1500 18000
7876 1100 13200
7900 950 11400
7902 3000 36000
7934 1300 15600
14 rows selected
ENAME SAL+250*12
---------- ---------------
SMITH 3800
ALLEN 4600
. .
. .
. .
MILLER 4300
ENAME (SAL+250)*12
-------------- ----------------
SMITH 12600
ALLEN 22200
WARD 18000
. .
. .
. .
MILLER 18600
B) APELIDOS DE COLUNAS
Para criar um apelido para uma coluna, entre com o apelido depois do nome da coluna
no comando SELECT.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
17
__________________________________________________________________________________
MARTIN 15000 1400
. . .
. . .
. . .
MILLER 15600
C) OPERADOR DE CONCATENAÇÃO
O operador de concatenação permite ligar uma coluna a outra.
EMPREGADO
--------------------------
7369SMITH
7499ALLEN
7521WARD
7566JONES
.
.
.
7934MILLER
__________________________________________________________________________________
WARD 1250 15500
JONES 2975 35700
. . .
. . .
. . .
MILLER 1300 15600
A função NVL (comm, 0) substitui por 0 os valores nulos, para que não afetem a soma.
Na multiplicação utiliza-se 1 no lugar de um valor nulo para não afete a multiplicação.
CLÁUSULA DISTINTICT
A cláusula distinct é utilizada para eliminar os valores duplicados na saída (no
resultado).
DEPTNO
--------------
20
30
30
20
30
30
10
20
10
30
20
30
20
10
14 rows selected.
DEPTNO JOB
----------- ---------------
10 CLERK
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
19
__________________________________________________________________________________
10 MANAGER
10 PRESIDENT
20 ANALYST
20 CLERK
20 MANGER
30 SALESMAN
7 rows selected.
CLÁUSULA ORDER BY
A cláusula ORDER BY é utilizada para ordenar (classificar) as linhas da tabela .
A ordem do resultado pode aparecer em ordem decrescente (DESC) ou ascendente
(ASC) que é default.
A cláusula order by sempre deve aparecer por último no comando select.
14 rows selected.
SQL> SELECT ename, job, sal FROM emp ORDER BY ename DESC;
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
20
__________________________________________________________________________________
MARTIN SALESMAN 1250
KING PRESIDENT 5000
JONES MANAGER 2975
JAMES CLERK 950
FORD ANALYST 3000
CLARK MANAGER 2450
BLAKE MANAGER 2850
ALLEN SALESMAN 1600
ADAMS CLERK 1100
14 rows selected.
SQL> SELECT ename, job, sal FROM emp ORDER BY job DESC, SAL
14 rows selected.
SQL> SELECT ename, job, sal FROM emp ORDER BY job DESC, sal DESC;
__________________________________________________________________________________
FORD ANALYST 3000
14 rows selected.
CLÁUSULA WHERE
OPERADORES LÓGICOS
A cláusula WHERE pode assumir os seguintes operadores lógicos:
Igual (=)
Maior (>)
Maior ou Igual ( >= )
Menor (<)
Menor ou Igual ( <= )
SQL> SELECT ename, sal, FROM emp WHERE deptno = 10;
ENAME SAL
-------------- -------
CLARK 2450
KING 5000
MILLER 1300
SQL> SELECT ename, sal, FROM emp WHERE sal > 2000;
ENAME SAL
----------- ------
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
FORD 3000
6 rows selected.
OPERADORES BOOLEANOS
A cláusula WHERE pode assumir os seguintes operadores booleanos:
• AND;
• OR;
• NOT.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
22
__________________________________________________________________________________
AND - As duas condições devem ser satisfeitas para que a consulta retorne uma ou
mais linhas da tabela.
Sintaxe:
SELECT colunas FROM nome-da-tabela WHERE condição1 AND condição2;
Recuperação Qualificada:
SQL> SELECT ename, sal, depto FROM emp WHERE deptno = 20 AND sal > 1500;
SQL> SELECT ename, sal, depto FROM emp WHERE deptno = 20 OR sal > 1500;
9 rows selected.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
23
__________________________________________________________________________________
Ao usar AND e OR na mesma consulta, você geralmente deve usar parêntese para
tornar a consulta mais clara. A colocação dos parênteses pode alterar completamente o
resultado.
2 rows selected.
OPERADORES SQL
Obtenha os nomes e salários dos empregados que possuírem salários entre os valores
1000 e 2000.
ENAME SAL
----------- -------
ALLEN 1600
WARD 1250
MARTIN 1250
TURNER 1500
ADAMS 1100
MILLER 1300
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
24
__________________________________________________________________________________
6 rows selected.
B) Operador IN
O operador IN testa os valores da coluna, e recupera somente os valores que estão na
lista de valores especificados pelo operador IN.
4 rows selected.
Observação
Caso forem usados caracteres ou data na lista, especificá-los entre aspas simples.
C) Operador LIKE
O operador LIKE permite recuperar linha da tabela sem saber exatamente o valor que
está sendo procurado, utilizando para isso os símbolos (%) e ( _ ).
O símbolo de sublinhado ( _ ) é usado para representar um único caractere.
O símbolo de percentagem (%) é usado para representar uma cadeia de caracteres de
qualquer tamanho (inclusive zero).
ENAME
------------------------------
SMITH
SCOTT
2 rows selected.
Observação
O LIKE só pode ser usado com cadeia de caracteres ou com dados gráficos, e não com dados
numéricos.
D) Operador IS NULL
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
25
__________________________________________________________________________________
O operador IS NULL testa os valores da coluna, e recupera somente as linhas da tabela
que possuírem o valor null.
Obtenha os números dos empregados que não possuírem gerente, ou seja o campo
número do gerente (mgr) é igual a nulo.
ENAME MGR
-------------- -------
KING
Operador Significado
NOT BETWEEN NÃO ENTRE DOIS VALORES ESPECIFICADOS
NOT IN NÃO ENTRE UMA LISTA DE VALORES
NOT LIKE NÃO ENTRE UM PADRÃO ESPECIFICADO
IS NOT NULL NÃO IGUAL AO VALOR NULL
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
26
__________________________________________________________________________________
AMBIENTE SQL
A conexão em um ambiente SQL é feita através do programa SQL*PLUS.
O SQL*PLUS é um programa desenvolvido pela ORACLE CORPORATION, que
permite executar os comando SQL interativamente ou executar os comando SQL a partir de
um arquivo de comando (SCRIPTS).
O SQL*PLUS, permite formatar resultados, configurar parâmetros e editar e armazenar
comando SQL.
2. Se você digitou [ENTER] antes de terminar o comando, o SQL*PLUS abre uma linha nova
numerada para continuar a digitando o comando SQL.
4. Enquanto o comando SQL está no buffer, ele pode ser editado utilizando os seguintes
comandos
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
27
__________________________________________________________________________________
RUN R Mostra e executa o comando SQL no buffer
/ Executa o comando SQL no buffer
FORMATO
function_name(argumento1, argumento2, ...)
a.2) UPPER
Converte em letras maiúsculas.
Exemplo:
Obtenha o nome de todos os departamentos em letras maiúsculas.
a.3) INITCAP
Converte a primeira letra de cada palavra para maiúscula.
Exemplo:
Obtenha o nome e a localização de todos os departamentos, mostrando a primeira letra do
nome e localização em maiúscula.
a.4) LENGH
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
28
__________________________________________________________________________________
Retorna o número de caracteres ou dígitos de uma coluna ou de uma cadeia de caracteres
(literal).
Exemplo
Obtenha o número de caracteres do literal 'SQL COURCE', das colunas deptno e dname.
b.2) TRUNC
Retorna o truncamento de colunas, expressões ou valores em n casas decimais. Se n é
omitido nenhuma casa decimal é truncada.
Exemplo:
b.3) SORT
Retorna a raiz quadrada de uma coluna ou valor. Se a coluna ou valor forem menores que
zero, então retorna um valor nulo.
Exemplo:
b.4) SIGN
• Retorna -1 se a coluna, ou expressão, ou valor forem negativos;
• Retorna 0 se a coluna, ou expressão, ou valor forem zero;
• Retorna 1 se a coluna, ou expressão, ou valor forem positivos;
Exemplo:
SQL> SELECT sal - comm, sign(sal - comm), comm - sal, sign(comm - sal)
FROM emp
WHERE deptno = 30;
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
29
__________________________________________________________________________________
b.5) ABS
Retorna o valor absoluto de uma coluna ou valor.
Exemplo:
c.1) SYSDATE
Retorna a data e hora corrente.
Exemplo:
Obtenha a data corrente:
OPERAÇÕES ARITMÉTICAS
É possível adicionar e subtrair números constantes de datas.
Exemplo:
SQL> SELECT hiredate, hiredate+7, hiredate -7, sysdate - hiredate
FROM emp
WHERE hiredate
LIKE '%JUN%';
c.2) MONTHS_BETWEEN
Retorna o número de meses entre duas datas.
Exemplo:
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
30
__________________________________________________________________________________
SQL> SELECT MONTHS_BETWEEN (SYSDATE, hiredate)
MONTHS_BETWEEN('01-JAN-84','05-NOV-88')
FROM emp
WHERE MONTHS_BETWEEN (SYSDATE, hiredate) > 160;
c.3) ADD_MONTHS
Adiciona n número de meses na data, onde n deve ser um inteiro e pode ser negativo.
Exemplo:
c.4) NEXT_DAY
Retorna a data do próximo dia da semana informado.
Exemplo:
c.5) LAST_DAY
Retorna a data do último dia do mês.
Exemplo:
D) FUNÇÕES DE CONVERSÃO
d.1) TO_CHAR
Converte um formato de data default para um formato alternativo especificado.
YYYY Ano
Y, YYY Ano com vírgula
MM Mês
MONTH Nome do mês
MON Nome do mês com abreviação
WW ou W Mês do ano ou mês
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
31
__________________________________________________________________________________
DDD ou DD ou D Dia do ano, mês ou semana
DAY Nome do dia da semana
HH ou HH12 Hora do dia (1 - 12)
HH24 Hora do dia (0 - 23)
MI Minuto
SS Segundos
Sufixos
TH Número
DDTH 14TH
Exemplo:
SQL> SELECT SYSDATE
FROM dual;
TO_CHAR também é utilizado para converter tipo de dado NUMBER para tipo de dado CHAR
(novo formato).
d.2) TO_NUMBER
Converte o número armazenado para um tipo de dado NUMBER.
Exemplo:
d.3) TO_DATE
Permite formatar para outros formatos de datas.
Exemplo:
d.4) NVL
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
32
__________________________________________________________________________________
Converte um valor nulo para um valor especificado.
Exemplo:
SQL> SELECT ename, sal comm, sal * 12 + NVL(comm, 0), NVL(comm, 1000)
FROM emp
WHERE deptno = 30;
d.5) GREATEST
Retorna o maior valor de uma lista de valores.
Exemplo:
d.6) LEAST
Retorna o menor valor de uma lista de valores.
Exemplo
d.7) VSIZE
Retorna o número de bytes que são utilizados para armazenar internamente os dados (colunas
ou valores)
Exemplo:
FUNÇÕES DE GRUPO
e.1) AVG
Retorna a média dos valores da coluna, ignorando valores nulos.
Exemplo:
Obtenha a média de salários de todos os empregados.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
33
__________________________________________________________________________________
SQL> SELECT AVG(sal )
FROM emp;
e.2) COUNT
Retorna o número de ocorrências da expressão, ou coluna. Usando *, retorna todas as
ocorrências das linhas incluindo, duplicadas e nulas.
Exemplo:
Obtenha o número de empregados da empresa
Exemplo:
Obtenha o número de empregados do departamento 10
e.3) SUM
Retorna a soma dos valores da coluna, ignorando valores nulos.
Exemplo:
Obtenha a soma de todos os salários dos empregados.
Exemplo:
Obtenha a soma de todos os salários do departamento 10.
e.4) MAX
Retorna o valor máximo de uma coluna.
Exemplo:
Obtenha o maior salário dos empregados.
Exemplo:
Obtenha o maior salário do departamento 20.
e.5) MIN
Retorna o valor mínimo de uma coluna.
Exemplo:
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
34
__________________________________________________________________________________
Obtenha o menor salário dos empregados.
Exemplo:
Obtenha o menor salário do departamento 10.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
35
__________________________________________________________________________________
CLÁUSULA GROUP BY
A cláusula GROUP BY referencia uma coluna especificada da tabela relacionada na
cláusula FROM e agrupa as linhas com base nos valores iguais dessa coluna.
O resultado da cláusula GROUP BY particiona a tabela em um conjunto de grupos, não
efetuando qualquer tipo de ordenação.
Exemplo:
Obtenha o maior salário de cada profissão.
Exemplo:
Obtenha o menor salário de cada profissão.
Exemplo:
Obtenha o maior salário da profissão CLERK.
Exemplo:
Obtenha o menor salário da profissão CLERK.
Exemplo:
Obtenha a média salarial por departamento.
CLÁUSULA HAVING
A cláusula HAVING especifica uma restrição sobre a tabela agrupada que resultou de
uma cláusula GROUP BY anterior e elimina os grupos que não satisfazem a condição
estabelecida.
A cláusula HAVING é usada para especificar a qualidade que um grupo deve ter para
ser incluído no resultado. Ela efetua para os grupos a mesma função que a cláusula WHERE
efetua para as linhas.
A cláusula HAVING é sempre utilizada junto com a cláusula GROUP BY, sendo que o
HAVING é especificado sempre após o GROUP BY.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
36
__________________________________________________________________________________
Exemplo:
Obtenha a média de salário dos departamentos que possuem mais de 3 empregados.
Exemplo:
Obtenha as profissões que o maior salário é igual ou maior que 3000.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
37
__________________________________________________________________________________
SUBQUERIES (SUBCONSULTAS)
Uma subquery é uma cláusula SELECT aninhada com outra cláusula SELECT e que
retorna um resultado intermediário.
Exemplo:
SELECT coluna1, coluna2, ..........
FROM tabela
WHERE coluna = (SELECT coluna1, coluna2,........
FROM tabela
WHERE condição);
Exemplo:
Obtenha o nome, profissão e salário do empregado que possui o menor salário.
Uma subquery é composta por duas cláusulas SELECT, o SELECT principal e select interno.
O comando SELECT interno é executado primeiro, produzindo um resultado. No exemplo
acima o resultado é 800.
O SELECT principal é processado usando o valor retornado pelo SELECT interno.
Observação: sempre que o SELECT interno retorna uma linha da tabela podem ser
utilizadas os operadores =, !=, <, <=, >, >=.
Exemplo:
Obtenha o nome, profissão, de todos os empregados que possuem a mesma profissão do
empregado BLAKE.
b.1) OPERADOR IN
Relembrando, o operador IN testa (verifica) os valores que estão em uma lista de valores.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
38
__________________________________________________________________________________
Exemplo:
Obtenha o nome, salário e número do departamento dos empregados que recebem o menor
salário de cada empregado.
Observação: Sempre que aparecer uma SUBQUERY, onde, no resultado retornam mais
de uma linha da tabela, utiliza-se o operador IN.
ANY
Compara um valor com cada valor da lista de valores que foi retornado pela subquery.
Exemplo:
Obtenha o nome, salário, profissão e número do departamento de todos empregados que
recebem um salário maior que o menor salário dos empregados do departamento 30.
ALL
Compara um valor com todos os valores da lista de valores retornados pela subquery.
Exemplo:
Obtenha o nome, salário, profissão e número do departamento de todos os empregados que
recebem um salário maior, que todos os salários dos empregados do departamento 30.
__________________________________________________________________________________
WHERE sal > ALL (SELECT DISTINCT sal FROM emp WHERE deptno = 30);
Utilização do ORDER BY
Não é possível utilizar o ORDER BY em um SELECT interno, a regra é utilizar somente um
ORDER BY em uma subquery e este deve ser o último comando do SELECT, ou seja no
SELECT mais externo.
Aninhamento de subqueries
Também é possível aninhar (encadear) várias queries uma dentro da outra, não existindo
limites.
Exemplo:
Obtenha o número dos departamentos, onde os empregados recebem um salário médio maior
que a média salarial do departamento 30.
Exemplo:
Obtenha a profissão dos empregados que recebem a mais alta média salarial.
Observação: O SELECT interno encontra a média salarial par aos grupos de profissões,
e a função MAX encontra a maior média salarial dos grupos, que é o valor (5000), este é
utilizado pela cláusula HAVING. A cláusula GROUP BY é necessária no SELECT
principal para agrupar as profissões.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
40
__________________________________________________________________________________
JOIN-EQUI-JOIN (SIMÉTRICO)
O JOIN-EQUI-JOIN ocorre quando a condição de JOIN compara a igualdade entre as
colunas da tabela 1 as colunas da tabela 2.
Podemos então observar que o relacionamento entre as duas tabelas (emp e dept) é
uma condição de JOIN "EQUI-JOIN", pois os valores da coluna deptno em ambas as tabelas
são iguais e o operador igual ( = ) é utilizado.
Exemplo:
Obtenha o nome e a profissão de todos os empregados e o nome dos departamentos
em que os empregados estão lotados.
Para resolver este exemplo, é necessário comparar (condição de join) o valor da coluna
deptno da tabela emp cpm o mesmo valor da coluna deptno da tabela dept, extraindo os
nomes dos departamentos.
Exemplo:
Obtenha o nome, a profissão de todos os empregados, o número e nome do
departamento em que os empregados estão lotados.
ERROR at line 1:
ORA-00918: columm ambiguously defined
PROBLEMA DE AMBIGÜIDADE
Sempre que existirem colunas com o mesmo nome em tabelas diferente é necessário
qualificar estas colunas informando o nome da tabela conforme o exemplo:
__________________________________________________________________________________
Para criar um apelido para uma tabela, defina-o na cláusula FROM. O apelido pode então ser
utilizado como qualificador tanto na cláusula WHERE, quanto na cláusula SELECT.
Os apelidos também são chamados de LABELS TEMPORÁRIOS, e podem ter até 30
caracteres, mas quanto menos melhor.
Exemplo:
SQL> SELECT ename, job, D.deptno, dname
FROM emp E, dept D
WHERE E.deptno = D.deptno
ORDER BY D.deptno;
Exemplo:
O join entre as tabelas emp e salgrade é do tipo NON-EQUI-JOIN, onde a grade salarial
dos empregados está armazenado na tabela salgrade, e o seu salário deve estar entre
(BETWEEN) um valor máximo e mínimo esta grade.
O operador BETWEEN é utilizado para construir a condição.
SQL> SELECT E.name emp_name, E.sal emp_sal, M.ename mgr_name, M.sal mgr_sal
FROM emp E, emp M
WHERE E.mgr = M.empno AND E.sal < M.sal;
__________________________________________________________________________________
WHERE deptno = 30;
INTERSECT
A interseção é o conjunto de todas as linhas que estão simultaneamente em ambas as
relações, ou seja, retorna a interseção de dois SELECTs.
MINUS
A diferença é o conjunto de todas as linhas que estão em apenas uma das relações, ou seja,
retornam a subtração de dois SELECTs.
TIPOS DE DADOS
Um banco de dados relacional consiste de tabelas, e para criar as tabelas do banco de
dados, é necessário especificar para cada coluna o tipo de dado e seu tamanho máximo.
O SQL suporta basicamente os seguintes tipos de dados:
A) CHAR (W)
Especifica um tipo de dado que é composto de letras, números e caracteres especiais,
onde o W determina o comprimento máximo em caracteres. Não pode ser maior que 255.
B) NUMBER
Especifica um tipo de dado que é composto por dígitos de 0 a 9. O sinal de mais ( + ),
menos (- ) e ponto decimal são opcionais.
C) NUMBER (W)
Especifica um tipo de dado que é composto por dígitos de 0 a 9. O sinal de mais ( + ),
menos (- ) e ponto decimal são opcionais. O W especifica o comprimento máximo, não
podendo ser maior que 38.
D) NUMBER(W,D)
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
43
__________________________________________________________________________________
Idem a NUMBER(W), sendo que o D determina o número de dígitos após o pontos
decimal.
E) DATE
Especifica um tipo de dado para armazenar data e hora.
F) LONG
Especifica um tipo de dado para qualquer tipo de caracter, podendo armazenar até
65.535 caracteres. Não é permitido definir mais de uma coluna por tabela.
Exemplos:
FIGURA
Coluna FIGURA com valores LONG.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
44
__________________________________________________________________________________
ESTRUTURAS DE DADOS
• Tabelas podem ser criadas a qualquer hora;
• O comprimento do armazenamento dos dados é variável, onde somente os
caracteres/números armazenados ocupam espaço, espaços à esquerda e à direita
não são armazenados;
• Na criação da tabela, não é necessário especificar o tamanho da tabela;
• A estrutura da tabela pode ser alterada ON-LINE;
Se for especificado a restrição NOT NULL, cada linha deve ter valor diferente de NULL para
esta coluna. Se não for especificado nada, a opção NULL default é utilizada.
Exemplo:
CREATE TABLE dept (
deptno NUMBER(2) not null,
dname CHAR(12),
loc CHAR(12);
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
45
__________________________________________________________________________________
Exemplo1:
Criar uma tabela com as colunas número, nome, profissão e salário dos empregados do
departamento 30.
Exemplo 2:
Criar uma tabela com as colunas nome, salário e grade salarial de todos os empregados.
SAVEPOINTS APOS_INSERT_60
ROLLBACK APOS_INSERT_60;
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
46
__________________________________________________________________________________
IMPORTÂNCIA DA TRANSAÇÃO
As transações dão uma maior flexibilidade e controle quando se trabalha com dados e
garante a consistência dos dados quando ocorre um erro de usuário ou de sistema.
CONTROLE DA INTEGRIDADE
Para manter o controle da integridade do banco de dados, os comando COMMIT e
ROLLBACK são utilizados. Estes comandos também fazem parte do padrão ANSI da
linguagem SQL.
Exemplo:
GRANT CONNECT, RESOURCE TO HANS IDENTIFIED BY SENHA1;
SINTAXE: ORACLE7
SINTAXE:
Exemplo:
GRANT SELECT ON DEPT TO HANS;
Exemplo:
REVOKE DELETE ON EMP FROM SCOTT;
Observação: Para verificar quais os usuários e seus privilégios e sobre quais tabelas,
visões ou seqüências, selecionar as tabelas do dicionário de dados USER-
TAB_GRANTS ou USER_COL_GRANTS;
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
47
__________________________________________________________________________________
A) - Sistema Operacional
O sistema Operacional estabelece um procedimento de LOGIN, ou seja, para abrir uma
sessão , informa-se um usuário válido e sua senha;
C) TABLESPACE
O usuário só pode alocar uma determinada área na TABLESPACE, definido pelo DBA.
D) TABLE (TABLE)
O criador das tabelas, chamado de OWNER, é o dono das tabelas criadas e para que outros
usuários tenham acesso as mesmas tabelas, o OWNER deve dar privilégios de INSERT,
UPDATE e DELETE para cada usuário específico ou para todos usuários (PUBLIC).
E) DATE (DADOS)
Se o usuário tem acesso a uma tabela, todos os dados desta tabela estão disponíveis para
aquele usuário, mas se existir a necessidade de restringir o acesso aos dados de uma tabela
específica, isto é possível através da criação de um VIEW, onde o OWNER pode dar acesso
somente a determinadas linhas (ROWS) e colunas.
CONTROLE DE CONCORRÊNCIA
Uma das tarefas do RDBMS é o controle da concorrência, que é o acesso aos mesmos
dados por vários usuários.
Se não existir um controle de concorrência apropriado, vários dados podem ser
alterados incorretamente, comprometendo a integridade dos dados.
Para manter a consistência e integridade do banco de dados, um mecanismo de
bloqueio é implantado.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
48
__________________________________________________________________________________
O bloqueio é um mecanismo que é utilizado para controlar o acesso concorrente dos
dados em um sistema multi-usuário.
O bloqueio previne que alterações simultâneas não ocorram no mesmo pedaço de dado
por dois ou mais usuários, garantindo que uma tabela ou coluna não seja alterada enquanto
está ocorrendo uma alteração na tabela.
O ORACLE permite que vários usuários façam leitura ao mesmo dado ao mesmo tempo
(concorrente), isto significa que não é necessário fazer um bloqueio (LOCK), quando o banco
de dados é acessado para recuperar dados (LEITURA).
Os usuários que fazem leitura não bloqueiam os usuários que fazem escrita, e os
usuários que fazem escrita não bloqueiam os usuários que fazem leitura.
TIPOS DE BLOQUEIO
A) Bloqueio DDL - DATA DICTIONARY LOCK
• O controle de acesso é definido nos objetos do Banco de Dados;
• É utilizado nas operações dos comandos SQL que modificam o DICIONÁRIO DE
DADOS; EX.: CREATE TABLE, ALTER TABLE, DROP TABLE;
• Automaticamente controlado pelo núcleo do banco de dados;
NÍVEL DE BLOQUEIO
O bloqueio pode ser feito de duas formas, à nível de tabela ou nível de linha (ROW);
• O bloqueio de tabela - Toda tabela fica bloqueada;
• O bloqueio de linha (ROW) - Uma linha individual da tabela fica bloqueada.
DEADLOCK
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
49
__________________________________________________________________________________
Um DEADLOCK pode ocorrer quando dois ou mais usuários estão tentando acessar o
mesmo objeto do banco de dados.
Exemplo:
DROP TABLE dept;
Exemplo:
RENAME emp TO employee;
DICIONÁRIO DE DADOS
O DICIONÁRIO DE DADOS é uma das partes mais importantes do banco de dados. Ele
é composto por um conjunto de tabelas e visões que possuem uma série informações sobre o
banco de dados.
Exemplo:
• O nome dos usuários;
• Direitos de acesso;
• Nome das tabelas, visões, índices, sinônimos, seqüências, etc.
O dicionário de dados é criado quando o banco de dados é criado, e somente pode ser
alterado pelo núcleo do banco de dados.
__________________________________________________________________________________
As tabelas do dicionário de dados são automaticamente criadas na criação do banco de
dados (CREATE DATABASE) e o criador das tabelas é o usuário SYS. As tabelas são
raramente acessadas, pois as informações contidas nas tabelas são de difícil compreensão
Para facilitar o acesso as informações, são criadas visões e todos os usuários têm
acesso à elas.
As visões são classificadas em 3 grupos:
USER_xxxx
Visões com este prefixo possuem informação sobre os objetos criados pelo usuário, ou
seja, dos quais é dono (OWNER).
ALL_xxxx
O usuário pode acessar objetos aos quais recebeu direitos de acesso e dos quais é o
dono.
DBA_xxxx
Somente o usuário DBA pode acessar estas visões.
ALL_CATALOG Contém todas as tabelas, visões, sinônimos, seqüências que o usuário pode
acessar.
ASALL_INDEXES Descrição de todos os índices das tabelas que o usuário pode acessar.
ALL_OBJECTS Todos os objetos que o usuário pode acessar.
ALL_SEQUENCES Descrição das seqüências que o usuário pode acessar.
ALL_SYNONYMS Todos os sinônimos que o usuário pode acessar.
ALL_TABLES Descrição das tabelas que o usuário pode acessar.
ALL_USERS Informações sobre todos os usuários do banco de dados.
ALL_VIEWS Descrição das visões que o usuário pode acessar.
USER_CATALOG Tabelas, visões, sinônimos, seqüências que o usuário pode acessar.
USER_INDEXES Índices criados pelo usuário.
USER_OBJECTS Objetos criados pelo usuário.
USER_SEQUENCES Seqüências criadas pelo usuário.
USER_TABLES Descrição das tabelas criadas pelo usuário.
Exemplo:
NAME TYPE
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
51
__________________________________________________________________________________
-------------------------- -------------------
OBJECT_NAME CHAR(20)
OBJECT_ID NUMBER(38)
OBJECT_TYPE CHAR(10)
CREATED DATE
MODIFIED DATE
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
52
__________________________________________________________________________________
DATA MANIPULATION LANGUAGE - DML
A DML é um grupo de comandos SQL utilizados para INSERIR novas linhas, ALTERAR
linhas e EXCLUIR linhas.
Exemplo:
Inserir o departamento número 50, com nome MARKETING e localização SAN JOSÉ.
Observação
Colunas com tipo de dado CHAR e DATE, devem ser colocadas entre aspas simples.
Para inserir uma data ou hora em outro formato utiliza-se a função TO_DATE.
Observação:
Sempre que o INSERT é executado, um prompt com o nome da variável é mostrado.
Exemplo:
Observação:
A tabela TABD10 deve ser criada antes.
UPDATE nome_tabela
SET nome_coluna1 = valor/expressão
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
53
__________________________________________________________________________________
[ , nome_coluna2 = valor/expressão, ...........]
WHERE condição;
Exemplo:
Alterar a profissão para vendedor e aumentar o salário em 10% para o empregado com nome
SCOTT.
UPDATE emp
SET job = 'VENDEDOR'
sal = sal *1.1
WHERE ename = 'SCOTT';
Exemplo:
Excluir todos os empregados que pertencem ao departamento 10.
Observação: Cuidado - se WHERE for omitido, todas as linhas da tabela são excluídas.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
54
__________________________________________________________________________________
Exemplo:
Criar uma view.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
55
__________________________________________________________________________________
Exemplo:
DROP VIEW d10emp;
SEQUENCE - SEQÜÊNCIA
O ORACLE permite gerar uma seqüência numérica automática, que por exemplo pode
ser utilizada como CHAVE PRIMÁRIA única.
Exemplo
CREATE SEQUENCE dept_seq
INCREMENT BY 10
START WITH 10
MAXVALUE 10000;
Exemplo:
INSERT INTO dept
VALUES(dep_seq.NEXTVAL, 'ACCOUTING', 'NEW YORK');
Exemplo:
INSERT INTO dept
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
56
__________________________________________________________________________________
(dep_seq.CURRVAL, 'ACCOUTING', 'NEW YORK');
INDEXES - ÍNDICES
O ORACLE permite a criação de índices para recuperação de dados do banco de dados.
O método utilizado é o B-TREE.
Exemplo:
CREATE INDEX i_name ON emp (ename);
B) EXCLUIR ÍNDICES
DROP INDEX nome_índice;
Exemplo:
DROP INDEX i_name;
PROCESSO TRANSACIONAL
TRANSAÇÃO
Uma transação é uma operação executada no banco de dados que corrompe uma série de
alterações em uma ou mais tabelas.
Exemplo:
Retirar dinheiro no caixa do banco da sua conta concorrente.
Uma transação começa com o primeiro comando executável DML (INSERT, UPDATE,
DELETE) e termina quando encontra uma das seguintes situações:
• Um comando COMMIT/ROLLBACK;
• Um comando DDL;
• Um erro ocorre (por exemplo, um DEADLOCK);
• Um erro de máquina (hardware, reset, queda de energia elétrica);
• Finalizar o SQL*PLUS (EXIT);
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
57
__________________________________________________________________________________
COMMIT
• O comando COMMIT torna as alterações feitas no banco de dados como permanentes no
banco de dados;
• Exclui todos os SAVEPOINTS em uma transação;
• Termina a TRANSAÇÃO;
• Libera todos os bloqueios (LOCKS) executados pela transação.
COMMIT IMPLÍCITO
O COMMIT IMPLÍCITO ocorre nas seguintes situações:
• Antes de um comando DDL;
• Após um comando DDL;
• Ao terminar o SQL*PLUS (EXIT);
Exemplo de transação:
Incluir novo departamento na empresa.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
58
__________________________________________________________________________________
A) COMANDO SET
O comando SET controla o ambiente no qual o SQL*PLUS está operando, podendo-se fazer
uma ambiente default, colocando os comandos SET's no arquivo LOGIN.SQL. Sempre que o
SQL*PLUS for executado este arquivo é lido, configurando o SQL*PLUS.
Para verificar que variáveis de ambiente estão configuradas, utiliza-se SQL> SHOW ALL;
Variáveis utilizadas
PAGESIZE [24 n]
Especifica o número de linhas por página.
Exemplo:
SQL>SET PAGESIZE 20;
LINESIZE [80 n]
Especifica o tamanho da linha
Exemplo:
SQL> SET LINESIZE 80
FEEDBACK [6 n OFF/ON]
Especifica o número de registros mostrados no comando SELECT. O parâmetro ON/OFF
mostra ou não.
ECHO [OFF/ON]
Mostra ou não a execução dos comandos SQL*PLUS, quando da utilização do comando
START ou @.
Exemplo:
SQL> SET ECHO ON
HEADING [OFF/ON]
Mostra ou não o nome das colunas no resultado do SELECT.
Exemplo:
SQL> SET HEADING OFF
PAUSE [OFF/ON]
Especifica pausa para mostrar no vídeo os resultados, teclando ENTER a cada pausa.
Exemplo:
SQL> SET PAUSE ON
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
59
__________________________________________________________________________________
B) COLUMN
O comando COLUMN estabelece opções para coluna.
An Alfanumérico, n tamanho
9 Numérico 999999 1234
0 Força zeros à esquerda 099999 001234
$ Sinal de dólar flutuante $999999 $1234
. (ponto) Ponto decimal 999999.99 1234.00
, (vírgula) Vírgula 999,999 1,234
MI Sinal de menos 999999MI 1234-
Opções:
HEADING
Especifica um cabeçalho para cada coluna.
JUSTFY
Permite especificar o alinhamento da coluna, pode ser: LEFT, CENTER, RIGHT
DEFAULT
CHAR/DATE é JUSTFY LEFT
NUMBER é JUSTFY RIGHT
NULL string
Especifica uma string quando o valor é nulo.
Exemplo:
COL deptno FORMAT 099 HEADING 'Dept.'
COL job FORMAT A9 HEADING 'Profissão' JUSTFY RIGHT
COL empno FORMAT 9999 HEADING 'Número| Empregado'
COL sal FORMAT 99,999.99 HEADING 'Salário| Mensal'
COL comm FORMAT 99,999.99 HEADING 'Comissão| Anual' NULL 'Nulo'
COL rem FORMAT 999,999.999 HEADING 'Total| Remuneração'
__________________________________________________________________________________
030 SALESMAN 7654 1,250.00 1,400.00 16,400.00
030 MANAGER 7698 2,850.00 Nulo 34,200.00
010 MANAGER 7782 2,450.00 Nulo 29,400.00
020 ANALYST 7788 3,000.00 Nulo 60,000.00
030 SALESMAN 7844 1,500.00 500,00 18,500.00
020 CLERK 7876 1,100.00 Nulo 13,200.00
030 CLERK 7900 950,00 Nulo 11,400.00
020 ANALYST 7902 3,000.00 Nulo 36,000.00
010 CLERK 7934 1,300.00 Nulo 15,600.00
14 rows selected.
TTITLE "string"
BTITLE
Mostra um rodapé de cada página centralizada.
BTITLE "string"
Exemplo:
TTITLE 'Company Report | Produced by Porsonalel DEPT'
BTITLE 'Company Confidential'
D) VARÁVEIS DO SISTEMA
SQL.PNO Página corrente
SQL.LNO Número de linha
SQL.USER Username
SQL.SQLCODE Último erro numa operação SQL
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
61
__________________________________________________________________________________
TTITLE [formato OFF/ON]
BTITLE [formato OFF/ON]
formato:
SKIP n
Pula n linhas. Se n for omitido, então pula uma linha.
LEFT
Alinhamento à esquerda.
CENTER
Alinhamento centralizado.
RIGHT
Alinhamento à direita.
FORMAT
Especifica o formato.
Exemplo:
TTITLE LEFT FORMAT 0999 'PAGE: 'SQL.PNO -
RIGHT 'Produced by | Accouting' SKIP 2 -
CENTER 'Confidential Sales Report' SKIP -
CENTER '--------------------------' SKIP 2 -
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
62
__________________________________________________________________________________
F) COLOCAR DATA NO RELATÓRIO UTILIZANDO
NEW_VALUE
O NEW_VALUE especifica um novo valor para coluna
Exemplo:
COLUMN SYSDATE NEW_VALUE TODAY NO PRINT
TTITLE LEFT 'Date : ' TODAY RIGHT FORMAT 999 'Page: '-
SQL.PNO SKIP -
LEFT 'USER: ' SQL.USER SKIP -
CENTER 'A Report With Reformated Date ' SKIP 2
Exemplo:
TTITLE LEFT 'Date: ' TODAY
G) QUEBRA DE RELATÓRIOS
O comando BREAK permite definir quebras a nível de coluna, página e relatório.
Exemplo:
Fazer totalizações no final do relatório.
BREAK ON REPORT
Opções:
PAGE
Pula de página quando o valor da coluna é alterado.
SKIP n
Pula n linhas quando o valor é alterado.
DUP[LICATE]
Valores duplicados. Default é NODUP.
Exemplo 01:
BREAK ON REPORT ON deptno PAGE ON job SKIP 2
BREAK ON REPORT ON deptno PAGE ON job DUP
Exemplo 02:
BREAK ON deptno SKIP 1 ON job ON REPORT
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
63
__________________________________________________________________________________
SQL> CLEAR BREAKS
SQL> BREAK
H) CÁLCULOS A NÍVEL DE QUEBRA
O comando COMPUTE permite definir cálculos em quebras estabelecidas no comando
BREAK.
FORMATO
OF
Especifica a coluna ou expressão no qual o valor é calculado.
ON
Especifica o item de dado ou tabela usado para quebra.
Clause(s)
AVG
Valor médio, em tipo NUMBER.
COUNT
Contador de valores não nulos, em todos os tipos.
MAX
Valor máximo, em tipo NUMBER e CHAR.
MIN
Valor mínimo, em tipo NUMBER e CHAR.
NUMBER
Contador de linhas, em todos os tipos.
SUM
Somador em valores não nulos, em tipo NUMBER.
SQL> COMPUTE
Exemplo:
BREAK ON deptno SKIP 1 ON job ON REPORT
__________________________________________________________________________________
FROM emp
ORDER BY deptno, job;
Exemplo 01
14 rows selected.
Exemplo 02
__________________________________________________________________________________
Empresa Fantasma
Relação de Empregados
Relatório Confidencial
14 rows selected.
Exemplo 03
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
66
__________________________________________________________________________________
SELECT deptno, job, empno, sal, comm, sal*12+nvl(comm,0) rem
FROM emp;
14 rows selected.
Exemplo 04
SET PAGESIZE 20
SET LINESIZE 80
COL deptno FORMAT 099 HEADING ‘Dept.’
COL job FORMAT A9 HEADING ‘Profissão’ JUSTFY RIGHT
COL empno FORMAT 9999 HEADING ‘Número | Empregado’
COL sal FORMAT 99,999.99 HEADING ‘Salário | Mensal’
COL comm FORMAT 99,999.99 HEADING ‘Comissão | Anual’ NULL ‘Nulo’
COL rem FORMAT 999,999.99 HEADING ‘Total | Remuneração’
COL SYSDATE NEW_VALUE DATA NOPRINT
TTITLE LEFT ' Data :' DATA RIGHT FORMAT 0999 ' Page :' SQL.PNO SKIP
-
LEFT ' Usuário :' SQL.USER -
RIGHT ' Relatóri
o Produzido pelo RH' SKIP 2-
CENTER ' Relação de Empregados' SKIP -
CENTER '-------------------------' SKIP 2
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
67
__________________________________________________________________________________
BTITLE CENTER 'Condifencial' SKIP -
CENTER '------------'
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
68
__________________________________________________________________________________
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
69
__________________________________________________________________________________
------- --------------- ------------- --------------- --------------- ---------------
*********** --------------- ---------------
AVG 950,00
SUM 950,00 .00
030 MANAGER 7698 2,850.00 Nulo 34,200.00
*********** ---------------
AVG 2,850.00
SUM 2,850.00 .00
Confidencial
----------------
--------------- ---------------
AVG 2,073.21 675,00
SUM 29,025.00 2,700.00
Confidencial
----------------
14 rows selected.
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
70
__________________________________________________________________________________
PL/SQL
O PL/SQL é uma linguagem de 3ª de geração que tem por objetivo processar informações do
banco de dados ORACLE.
Características
• Permite recuperar, incluir, atualizar e excluir dados de tabelas ;
• Permite criar variáveis e constantes;
• Permite utilizar comandos condicionais e de repetição.
Estrutura do PL/SQL
Um bloco PL/SQL é basicamente composto de uma área de declaração, de comandos e de
exceções;
DECLARE
.
.
definir variáveis e constantes
.
.
BEGIN
.
.
/* ---------Comentários------------*/
comandos (exemplo: SELECT ......)
.
atribuição de variáveis
.
condições (exemplo: IF...ELSE...END IF)
.
comando (COMMIT)
END:
VARIÁVEIS
São áreas em memórias que s ervem para armazenar dados, podendo conter diversos valores
ao longo da execução do programa.
CONSTANTES
Também são áreas de memória que servem para armazenar dados, mas que possui valor fixo
e deve ser inicialmente no ato da declaração e seguido da palav ra "CONSTANT".
TIPOS DE DADOS
CHAR
Variáveis ou constantes que armazenam valores alfanuméricos com no máximo de 255
caracteres. Caso não seja informado o tamanho, o default '1 1.
Exemplo:
PAGAMENTO CHAR(40);
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
71
__________________________________________________________________________________
NUMBER
Variáveis ou constantes que armazenam valores numéricos com no máximo de 38 caracteres.
Caso não seja informado o tamanho, o default é 38. Também pode ser definido precisão
escalar.
Exemplo:
RECIBO NUMBER(2);
CODIGO CONSTANT NUMBER(4) :=1;
DATE
Variáveis ou constantes que armazenam data, hora (com minutos e segundo e o século).
Exemplo:
DATA_RECEBE DATE;
BOOLEAN
Variáveis ou constantes que armazenam TRUE, FALSE ou NULL.
Exemplo:
FLAG BOOLEAN;
DECLARAÇÃO DE ATRIBUTOS
Para declarar uma variável, constante ou coluna com a mesma definição da coluna de uma
tabela, o atributo %TYPE pode ser utilizado.
Formato
nome_tabela.nome_coluna%TYPE;
Exemplo:
v_empno emp.empno%TYPE;
COMANDOS DE ATRIBUIÇÃO
No PL/SQL o comando de atribuição é o sinal de dois-pontos seguido do sinal de
igualdade ( := ).
Exemplo:
RESULTADO:=NUMERO1/(NUMERO2+NUMERO3);
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
72
__________________________________________________________________________________
Sintaxe:
IF condição THEN
comandos....
[ELSEIF condição THEN comandos]
[ELSE comandos]
END IF
Exemplo:
*/
* *This block debits account 3 by $500 onl if there are sufficient
** funds to cover the withdraw.
**
** copyright ©1989, 1992 by Oracle Corporati on
*/
DECLARE
acct_balance NUMBER(11,2);
acct CONSTANT NUMBER(4) := 3;
debit_amt CONSTANT NUMBER(5,2) := 500.00;
BEGIN
SELECT bal INTO acct_balance
FROM accounts
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
73
__________________________________________________________________________________
FOR UPDATE OF bal;
IF acct_balance >= debit-amt THEN
UPDATE accounts SET bal = bal - debit_amt
WHERE account_id = acct;
ELSE
INSERT INTO temp VALUES
(acct, acct_balance, 'infficient funds');
--insert account, current balance, and message
END IF;
COMMIT;
END;
/
Sintaxe:
FOR contador IN [REVERSE] inicial...final LOOP
relação_de_comandos
END LOOP
/*
** This example illustrates block structure and scope rules. An
** outer block declares two variables named X and COUNTER, and loops four
** times. Inside the loop is a sub-block that also declares a variable
** named X. The values inserted into the TEMP table show that the two
** X's are indeed different.
**
*/
DECLARE
X NUMBER := 0;
COUNTER NUMBER := 0;
BEGIN
FOR i IN 1..4 LOOP
X:=X +1000;
COUNTER:=COUNTER + 1;
INSERT INTO temp VALUES (X, COUNTER, 'in OUTER loop');
/*start an inner block */
DECLARE
X NUMBER := 0; --this is a local version of x
BEGIN
FOR i IN 1..4 LOOP
X:=X+1; --this increments the local X
COUNTER := COUNTE +1;
INSERT INTO temp VALUES (X, COUNTER, 'inner loop');
END LOOP;
END;
END LOOP;
COMMIT;
END;
/
COMANDO DE REPETIÇÃO (WHILE...LOOP...END LOOP)
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
74
__________________________________________________________________________________
O comando WHILE é utilizado para executar uma relação de comandos até que a condição se
torne FALSA.
Sintaxe:
WHILE condição LOOP
relação_de_comandos
END LOOP
*/
** This block finds the first employee who has a salary over $4000
** and is higher in the chain of command then employee 7902
**
*/
DECLARE
salary emp.sal%TYPE;
mgr_num emp.mgr%TYPE;
last_name emp.ename%TYPE;
starting_empno CONSTANT NUMBER(4) := 7902;
BEGIN
SELECT sal, mgr INTO salary, mgr_num
FROM emp
WHERE empno = starting_empno;
WHILE salary < 4000 LOOP
SELECT sal, mgr, ename INTO salary, mgr_num, last_name
FROM emp
WHERE empno = mgr_num;
END LOOP;
INSERT INTO temp VALUES (NULL, slary, last_name);
COMMIT;
END;
/
Sintaxe:
LOOP
relação_de_comandos
END LOOP
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
75
__________________________________________________________________________________
COMANDO EXIT
O comando EXIT é utilizado para interromper a execução de um comando
Sintaxe:
EXIT [WHEN condição]
/*
** Programa exemplo, utilizando FOR...LOOP...END LOOP
**
*/
DECLARE
X NUMBER := 100;
BEGIN
FOR i NIM 1..10 LOOP
IF MOD(i,2) = 0 THEN --i is even
INSERT INTO temp VALUES (i, X, 'i is even');
ELSE
INSERT INTO temp VALUES (i, X, 'i is odd');
END IF;
X:=X + 100;
END LOOP;
COMMIT;
END;
/
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
76
__________________________________________________________________________________
NO_DATA_FOUND
Quando não existirem dados para retornar no comando select.
OTHERS
Quando ocorrem outros erros.
Sintaxe:
WHEN tratador_exception THEN
comando1;
comando2;
comando3;
Exemplo:
DECLARE
v_ename CHAR(15);
v_job CHAR(10);
BEGIN
SELECT ename, job
INTO v_ename, v_job
FROM emp
WHERE empno = 1111;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO taberr
VALUES ('Erro no Select');
END;
/
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
77
__________________________________________________________________________________
CURSORES
Às vezes o PL/SQL necessita de uma área de trabalho para armazenar dados recuperados por
um comando SQL. Esta área recebe um nome, e é conhecido como CURSOR.
CURSOR EXPLÍCITOS
O comando SELECT normalmente recupera mais de um registro (ROWS) da tabela, e estes
registros podem ser armazenados em um CURSOR definido para serem processados mais
tarde.
Para trabalhar com cursores, os seguintes passos devem ser seguidos:
• Declarar o cursor (DECLARE);
• Abrir o cursor (OPEN);
• Buscar os dados do cursor (FETCH);
• Fechar o cursor (CLOSE).
A) DECLARANDO O CURSOR
Sintaxe:
CURSOR nome_cursor IS
comando_select;
B) ABRINDO O CURSOR
Sintaxe:
OPEN nome_cursor;
D) FECHANDO O CURSOR
Sintaxe:
CLOSE nome_cursor;
Exemplo:
DECLARE
name CHAR(12);
hdate DATE;
oldcomm NUMBER(7,2);
CURSOR sell IS
SELECT ename, hiredate, comm
FROM emp
WHERE deptno = 30 AND sal > 1000;
BEGIN
OPEN sell;
LOOP
FETCH sell INTO name, hdate, oldcomm;
IF name = 'SCOTT' THEN
EXIT
END IF;
END LOOP;
CLOSE sell;
END;
/
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
78
__________________________________________________________________________________
Exemplo:
LOOP
FETCH sell INTO name, hdate, oldcomm;
EXIT WHEN sell%NOTFOUND;
..............
END LOOP;
ATRIBUTO %FOUND
Este atributo é o contrário do %NOTFOUND. Ao atributo é atribuído verdadeiro, se o FETCH
encontrar registros (rows) para buscar, caso contrário é atribuído FALSO.
Exemplo:
LOOP
FETCH sell INTO name, hdate, oldcomm;
IF sell%FOUND THEN
INSERT INTO tabela01 VALUES (...);
ELSE
EXIT
END IF;
.......
END LOOP;
/*
** Exemplo PL/SQL utilizando CURSOR
**
*/
DECLARE
num1 data_table.n1%TYPE; -- Declare variables
num2 data_table.n2&TYPE; -- to be of same type as
num3 data_table.n3%TYPE; --database columns
result temp.num_col1%TYPE;
CURSOR c1 is
SELECT n1, n2, n3
FROM data_table
WHERE exper_num = 1;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO num1, num2, num3;
EXIT WHEN c1%NOTFOUND;
--the c1%NOTFOUND condition evaluates
-- to TRUE when FETCH finds no more rows
/*calculate and store the results*/
result:=num2/(num1 + num3);
INSERT INTO temp VALUES (result, NULL, NULL);
END LOOP;
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
79
__________________________________________________________________________________
CLOSE c1;
COMMIT
END;
/
/*
**
** Programa exemplo, utilizando CURSOR
**
*/
DECLARE
CURSOR c1 IS
SELECT ename, empno, sal
FROM emp
ORDE BY sal DESC;
-- start with highest-paid employee
my_ename CHAR(10);
my_empno NUMBER(4);
my_sal NUMBER(7,2);
BEGIN
OPEN c1;
FOR i IN 1..5 LOOP
FETCH c1 INTO my_ename, my_empno, my_sal;
EXIT WHEN c1%NOTFOUND;
/*in case the number requested is more*/
/*than the total number of employees*/
INSERT INTO temp VALUES (my_sal, my_empno, my_ename);
COMMIT;
END LOOP;
CLOSE c1;
END;
/
*/
** Thies block does some numeric processing on data that
** comes from experiment #1. The results are stored in
** the TEMP table.
**
*/
DECLARE
num1 data_table.n1%TYPE; -- Declare variables
num2 data_table.n2&TYPE; -- to be of same type as
num3 data_table.n3%TYPE; --database columns
result temp.num_col1%TYPE;
CURSOR c1 is
SELECT n1, n2, n3
FROM data_table
WHERE exper_num = 1;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO num1, num2, num3;
EXIT WHEN c1%NOTFOUND;
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.
80
__________________________________________________________________________________
--the c1%NOTFOUND condition evaluates
-- to TRUE when FETCH finds no more rows
/*calculate and store the results*/
result:=num2/(num1 + num3);
INSERT INTO temp VALUES (result, NULL, NULL);
END LOOP;
CLOSE c1;
COMMIT
END;
/
/*
**
** This block does some numeric processing on data that comes
** from experiment #1. The results are stored in the TEMP table.
**
*/
DECLARE
result temp.num_col1%TYPE;
CURSOR c1 IS
SELECT n1, n2, n3
FROM data_table
WHERE exper_num = 1;
BEGIN
FOR c1rec IN c1 LOOP
/* calculate an store the results*/
result:=c1rec.n2/(c1rec.n1 + c1rec.n3);
INSERT INTO temp VALUES (result, NULL, NULL);
END LOOP;
COMMIT
END;
/
__________________________________________________________________________________________
Copyright © 2003 SmarttNet Solution Provider - All rights reserved.