Você está na página 1de 39

SQL

Elaboração : Eliana Diniz

Todos os direitos autorais e patrimoniais em relação ao conteúdo deste material didático são
reservados ao autor, não sendo permitida sua reprodução ou distribuição, sem prévia
autorização do mesmo.

1
Sumário
CAPÍTULO 1: CONCEITOS DE BANCO DE DADOS ............................................................................................... 3
1.1 SISTEMA DE GERENCIAMENTO DE BANCO DE DADOS................................................................................................. 3
1.2 BANCO DE DADOS RELACIONAL.................................................................................................................................. 3
1.3 TIPOS DE DADOS ........................................................................................................................................................ 3
1.4 MODELAGEM .............................................................................................................................................................. 4
1.5 NORMALIZAÇÃO ......................................................................................................................................................... 6
1.6 RESTRIÇÕES DE MAPEAMENTO .................................................................................................................................. 7
CAPÍTULO 2: SQL .......................................................................................................................................................... 9
2.1 MANIPULAÇÃO DE DADOS ......................................................................................................................................... 9
2.2 OPERADORES RELACIONAIS PARA IMPLEMENTAÇÃO DE CONSULTAS ......................................................................... 9
2.3 CONSTRUÇÃO BÁSICA DE UMA CONSULTA ............................................................................................................... 12
2.4 CRITÉRIOS DE PESQUISA ........................................................................................................................................... 12
2.5 ORDENAÇÃO DAS LINHAS......................................................................................................................................... 15
2.6 EXPRESSÕES ARITMÉTICAS ...................................................................................................................................... 16
2.7 NOMES ALTERNATIVOS PARA TÍTULOS DE COLUNAS ................................................................................................ 16
2.8 O PERADOR DE CONCATENAÇÃO .............................................................................................................................. 17
2.9 MANUSEIO DE VALORES NULOS ................................................................................................................................ 17
2.10 ELIMINAÇÃO DE LINHAS DUPLICADAS ...................................................................................................................... 18
2.11 FUNÇÕES QUE MANIPULAM CARACTERES................................................................................................................. 18
2.12 FUNÇÕES NUMÉRICAS .............................................................................................................................................. 20
2.13 FUNÇÕES QUE MANIPULAM DATAS ........................................................................................................................... 21
2.14 ARITMÉTICA DE DATAS ............................................................................................................................................ 23
2.15 FUNÇÕES DE CONDIÇÃO........................................................................................................................................... 25
2.16 FUNÇÕES DE GRUPO ................................................................................................................................................ 25
2.17 EXTRAINDO DADOS DE MAIS DE UMA TABELA .......................................................................................................... 28
2.18 OUTROS MÉTODOS DE JUNÇÃO ................................................................................................................................. 29
CAPÍTULO 3: LINGUAGEM DE DEFINIÇÃO DE DADOS (DDL) ....................................................................... 31
3.1 CRIAÇÃO DE TABELA ................................................................................................................................................ 31
3.2 ALTERAÇÃO DE TABELA ........................................................................................................................................... 32
3.3 ELIMINAÇÃO DE DADOS ............................................................................................................................................ 32
CAPÍTULO 4: CONTROLE DE TRANSAÇÕES (DTL) ........................................................................................... 33
4.1 EFETIVANDO AS MUDANÇAS .................................................................................................................................... 33
4.2 REMOVENDO MUDANÇAS......................................................................................................................................... 33
4.3 FALHAS DO SISTEMA ................................................................................................................................................ 34
4.4 AUTOCOMMIT .......................................................................................................................................................... 34
CAPÍTULO 5: LINGUAGEM DE DEFINIÇÃO DE DADOS (DML) ...................................................................... 35
5.1 INSERINDO LINHAS EM UMA TABELA ........................................................................................................................ 35
5.2 ATUALIZANDO LINHAS EM UMA TABELA .................................................................................................................. 35
5.3 ELIMINANDO LINHAS DE UMA TABELA ..................................................................................................................... 36
5.4 SUBCONSULTA ......................................................................................................................................................... 36
CAPÍTULO 6: RECURSOS IMPLEMENTADOS NO SGBD .................................................................................. 37
6.1 VIEWS ...................................................................................................................................................................... 37
6.2 STORED PROCEDURE ................................................................................................................................................ 37
6.3 FUNCTION ................................................................................................................................................................ 38
6.4 TRIGGER ................................................................................................................................................................... 39

2
Capítulo 1: Conceitos de Banco de Dados
1.1 Sistema de Gerenciamento de Banco de Dados

O Sistema de Gerenciamento de Banco de Dados (SGBD) é um software que controla


o armazenamento, as modificações, os acessos às informações, a segurança e a
integridade referencial do banco de dados. Um banco de dados relacional armazena
dados estruturados em tabelas (entidade). A tabela contém uma coleção de linhas,
também chamadas de registros ou tuplas, que são organizadas em colunas (atributos),
e cada coluna armazena um tipo de dados (inteiro, números reais, strings de
caracteres, data, etc.). Tabelas tipicamente possuem chaves, uma ou mais colunas que
unicamente identificam uma linha na tabela. Para melhorar o tempo de acesso aos
dados de uma tabela, são definidos índices. Um índice provê uma forma rápida para
buscar dados em uma ou mais colunas em uma tabela, da mesma forma que o índice
de um livro permite que nós encontremos uma informação específica rapidamente.
O SGBD atua como interface entre os usuários e as informações armazenadas. Todas
as solicitações relativas aos dados do banco de dados são interceptadas, interpretadas,
e executadas pelo SGBD.
Desta forma, o gerenciador isola o usuário de todos os detalhes particulares do
hardware ou do sistema operacional sendo utilizado, tais como método de acesso e
blocagem de disco. Para cada banco de dados é possível definir várias opções que
determinam suas características.
As tabelas possuem diversos tipos de controles, como restrições, gatilhos, padrões e
tipos de dados, que garantem a validade. As restrições de integridade referencial
declarativa podem ser adicionadas às tabelas para certificar que os dados inter-
relacionados nas diferentes tabelas permaneçam consistentes

1.2 Banco de dados relacional

O modelo predominante para o banco de dados transacional é o relacional composto


por um conjunto de tabelas relacionadas. Os elementos que compõe o modelo de
dados de um banco de dados relacional são:

 tabelas

 colunas

 linhas

1.3 Tipos de Dados

Toda coluna de uma tabela tem que ter um data type especificado para ela, ou seja, é
necessário indicar que a coluna armazenará texto, número, data, ou outro tipo de
dado.

3
Tipo Conteúdo
CHAR(n) Caracteres alfanuméricos com ate 255 caracteres de tamanho
constante.
VARCHAR(n) Caracteres alfanuméricos com até 255 caracteres. No Oracle 6 é
sinônimo de CHAR.
VARCHAR2(n) Caracteres alfanuméricos com até 2000 caracteres. Introduzida
no Oracle 7, o tamanho armazenado varia de acordo .
LONG Caracteres alfanuméricos com até 2 GigaBytes (2**31 - 1). Só
pode haver uma coluna LONG por tabela. Não pode ser indexada
e nem especificadas restrições de integridade, exceto NOT
NULL.
RAW(n) Dados binários, como som e imagem, até 255 bytes. Não podem
ser executadas funções de manipulação de caracteres sobre
colunas RAW. Tem as mesmas restrições de LONG
LONG RAW Semelhante a RAW, porém podendo armazenar até 2 GigaBytes.
ROWID Caracteres hexadecimais representando o endereço único de uma
linha em uma tabela.
MLSLABEL Formato binário to rótulo do sistema operacional. Usado com o
Trusted ORACLE.
NUMBER(p,s) Número com a precisão 'p' e a escala 's'. A precisão 'p' pode
variar de 1 a 38. A escala 's' pode variar de -84 a +127
DATE Data válida, desde 1 de janeiro de 4712 AC, até 31 de dezembro
de 4712 DC. Para cada coluna DATA são armazenados o Século,
o Ano, o Mês, o Dia, a Hora, o Minuto e o Segundo.
FLOAT Número de ponto flutuante com precisão decimal de 38 dígitos,
ou precisão binária de 126 dígitos.

1.4 Modelagem

O modelo de dados relacional representa a organização dos dados e seus


relacionamentos através de um conjunto de tabelas.
É projetado para atender os processos de negócio conforme as regras e os formatos
definidos através do levantamento de requisitos. Devem ser considerados alguns
aspectos relevantes na modelagem de dados para atingir a eficiência e a eficácia dos
sistemas. Melhores ou piores resultados poderão ser obtidos em função da
modelagem.
Benefícios do processo de normalização que podem demonstrar sua efetividade:

• estabilidade lógica das aplicações


• estabilidade lógica dos dados
• flexibilidade
• melhor gestão da informação
• fidelidade ao processo analisado

4
O modelo deve ser elaborado respeitando e implementando conceitos tais como:

• chaves de acesso
• controles de chaves duplicadas
• itens de repetição
• ponteiros para otimizar acessos
• integridade referencial
• grau de dependência
• consistência dos dados

Elementos que descrevem as características das entidades no modelo relacional :

Tipo Desfinição
NULL Especifica se a coluna pode ou não conter valores nulos.
NOT NULL
Chaves Indica um registro de forma exclusiva na tabela, contendo um
Primárias (PK) valor que não se repete e obrigatoriamente declarada como NOT
NULL. Pode ser definida por uma coluna ou uma combinação de
colunas. Promove a característica de unicidade das linhas,
proporcionando uma maneira de identificar de forma única cada
item que será armazenado.
Chaves São colunas que fazem referências as chaves primárias de outras
Estrangeiras tabelas, define como as tabelas se relacionam umas com as
(FK) outras.
Índices (INDEX) São estruturas opcionais adicionadas a um ou mais atributos de
uma tabela com o objetivo de agilizar a procura dos dados. A
utilização do índice afeta diretamente a otimização de consultas,
sendo a tentativa de melhorar ao máximo o tempo das respostas e
de reduzir o acesso ao disco (I/O). Se não houver nenhum índice
na tabela que está sendo consultada, o Oracle irá executar o
comando chamado de "TABLE ACCESS FULL", ou seja, serão
lidas linha a linha da tabela até encontrar o item solicitado. Deve
ser criado o índice, se estritamente necessário, pois aumenta o
custo de inserção e atualização.
UNIQUE Garante a unicidade de informações através da validação da
restrição para valor único. Pode ser uma coluna ou uma
combinação de colunas da tabela. Diferente da primary key o
atributo definido como UNIQUE não pode ser utilizado para
relacionamentos de foreign key.
CHECK A restrição check define uma condição que deverá ser satisfeita
condição sempre que um valor para a coluna for inserido ou modificado.

5
1.5 Normalização

É um processo baseado nas chamadas formais normais. Uma forma normal é uma
regra que deve ser aplicada na construção das tabelas do banco de dados para que
estas fiquem bem projetadas.
Com o banco de dados construído, devem-se aplicar as 3 formas normais em cada
tabela, ou grupo de tabelas relacionadas. As formas têm uma ordem e são
dependentes, isto é, para se aplicar a segunda norma, deve-se obrigatoriamente ter
aplicado a primeira e assim por diante.

1ª. Forma Normal (1FN)

Toda relação deve ter uma chave primária e deve-se garantir que todo atributo seja
atômico, tenha valor únicos que não se repete. Atributos compostos devem ser
separados. Por exemplo, um atributo Endereço deve ser
subdividido em seus componentes: Logradouro, Número, Complemento, Bairro,
Cidade, Estado e CEP. Além disso, atributos multivalorados devem ser discriminados
separadamente ou separados em uma outra relação. Por exemplo, um atributo
multivalorado Telefones poderia ser separado em Telefone Residencial, Telefone
Comercial e Telefone Celular ou, ainda, ser convertido em outra relação que pudesse
representar um número indeterminado de telefones.

2ª. Forma Normal (2FN)

Uma tabela está na 2FN quando estiver na 1FN e as suas colunas que não são chave
primária dependam inteiramente da chave primária. Tem o objetivo de eliminar
informações duplicados e garantir a integridade das informações. Como exemplo, o
atributo nome da cidade na tabela de cliente, não está na segunda forma normal, uma
vez que depende apenas do endereço. Uma nova relação deve ser criada contendo os
campos referente a cidade. O atributo código da cidade será uma chave estrangeira
para a tabela endereço. Esta forma normal ajuda a diminuir redundâncias de
informações criadas indevidamente.

3ª. Forma Normal (3FN)

Tem o objetivo de eliminar as dependências transitivas impõe que cada coluna


dependa apenas da chave primária e não de qualquer outra coluna ou conjunto de
colunas conjunto de colunas. Assim todas as colunas que não pertencem à chave são
mutuamente independentes são mutuamente independentes.
Toda relação deve estar na 2FN e devem-se eliminar dependências funcionais
transitivas, ou seja, todo atributo não chave deve ser mutuamente independente. Como
exemplo, o atributo UF não tem dependência do cliente e sim do atributo município..
Na relação original, retira-se o a sigla da UF da tabela clientes e uma nova relação
deve ser criada contendo os campos referente ao estado relacionado com a tabela
município. Esta forma normal também ajuda a diminuir redundâncias e aumentar a
independência das relações.

6
1.6 Restrições de Mapeamento

Um esquema ER pode definir certas restrições para o conteúdo do banco de dados na


relação entre tabelas. A cardinalidade é um dos princípios fundamentais para o banco
de dados relacional que expressa o grau de relação entre duas entidades. Uma das
principais funções de cardinalidade, é manter a integridade do banco de dados, em
associação com as regras de negócio, não permitindo que essas regras sejam
quebradas causando anomalias no SGBD, dados repetidos ou fora de normalização.
Essas associações são ligadas através de chaves (chave estrangeira e chave primária)
que são registro de indexação que não se repetem e que podem ser usadas como um
índice para os demais campos da tabela do banco de dados.
A relação pode ter os seguintes níveis :
Um-para-um (1:1) : Em uma relação um para um, uma linha da tabela A não pode
ter mais que uma linha correspondente na tabela B e vice-versa. Uma relação um para
um é criada se ambas as colunas relacionadas forem chaves primárias ou tiverem
restrições exclusivas.

Um-para-muitos (1:N) : Uma das tabelas envolvidas pode referenciar várias


unidades da outra, porém, do outro lado cada uma das várias unidades referenciadas
só pode estar ligada uma unidade da outra tabela.

Muitos-para-muitos (N:N) : Neste tipo de relacionamento cada tabela, de ambos os


lados, podem referenciar múltiplas unidades da outra.

7
A representação por meio do diagrama auxilia na compreensão do significado das
tabelas, seus relacionamentos e as características das colunas e restrições para cada
processo do sistema.

8
Capítulo 2: SQL
2.1 Manipulação de Dados

A linguagem padrão universal para manipular bancos de dados relacionais e submeter


declarações escritas em linguagem estruturada de consultas é SQL (Structured Query
Language). Isso significa que todos os SGBDRs (Sistema de Gerenciamento de Banco
de Dados Relacionais) oferecem uma interface para acessar o banco de dados por
meio da linguagem SQL, embora com algumas variações.
É utilizada para interagir com o SGBD e executar várias tarefas como inserir, alterar e
excluir registros, criar objetos no banco de dados, gerenciar usuário, consultar
informações, controlar transações, etc. Todas as operações realizadas no banco de
dados podem ser solicitadas ao SGBD utilizando esta linguagem.
SQL é uma Linguagem de múltiplo uso podendo ter diversos enfoques :
 DML (Data Manipulation Language): Linguagem de Manipulação de
Dados é um subconjunto da linguagem SQL, para comandos SELECT
(Selecionar), INSERT (Inserir), UPDATE (Atualizar) e DELETE (Excluir).

 DDL (Data Definition Language): Linguagem de Definição de Dados que


permite a manipulação de tabelas e elementos associados, tipo chave
primária e chaves estrangeira, índices, etc. Os principais comandos são
CREATE, ALTER, TRUNCATE.

 DCL (Data Control Language): Linguagem de Controle de Dados


gerencia os aspectos destinados a autorização de dados e licenças de
usuários para manipulação no BD. Alguns comandos comuns são
GRANT(dá privilégios para usuários), REVOKE (revoga privilégios de
usuários).

 DTL (Data Transaction Language): Linguagem de Transação de Dados


é o subconjunto da SQL que fornece mecanismos para controlar transações
no banco de dados. São 3 comandos: iniciar uma transação (BEGIN
TRANSACTION), efetivar as alterações no banco de dados (COMMIT) e
cancelar as alterações (ROLLBACK).

2.2 Operadores Relacionais para implementação de consultas

Seleção/Restrição - é uma operação que recupera e mostra dados de uma tabela. É


possível recuperar todas as linhas, ou apenas algumas que satisfaçam uma
determinada condição ou a várias condições. Esta operação é chamada também de
subconjunto horizontal.

9
Projeção - é uma operação que recupera e mostra dados de apenas algumas colunas,
e portanto é chamada de subconjunto vertical.

União - mostra todas as linhas que aparecem em duas tabelas.

Interseção - mostra todas as linhas que aparecem nas duas tabelas.

10
Diferença – mostra todas as linhas que aparecem em apenas uma das tabelas

Produto – é o resultado obtido pela concatenação de duas tabelas. Todas as linhas da


primeira tabela são concatenadas com todas as linhas da segunda tabela.

João x Pintor = João Pintor


José Escritor João Escritor
Manoel José Pintor
José Escritor
Manoel Pintor
Manoel Escritor

Junção – é o resultado obtido pela concatenação de duas tabelas de acordo com


condições específicas. Apenas as linhas que atendem as condições estabelecidas são
concatenadas.

João 10 10 Vendas João 10 10 Vendas


José 10 20 Pesq. José 10 10 Vendas
Maria 20 30 Cont. Maria 20 20 Pesq.
Ana 30 40 Secret. Ana 30 30 Cont.

11
2.3 Construção básica de uma consulta

SELECT - É a instrução usada para visualização dos dados de uma ou mais tabelas,
recupera informações do banco de dados implementando todos os operadores da
álgebra relacional.

FROM - especifica as tabelas envolvidas.

Exemplo: Mostrar todos os atributos da tabela TFR_CTRC

select * from TFR_CTRC

Exemplo: Mostrar somente os atributos selecionados

select CTR_PFR_IDENTI, CTR_NUMCTR, CTR_DATEMI,


CTR_TOTPBA, CTR_TOTFRT
from TFR_CTRC

2.4 Critérios de pesquisa

Os critérios de pesquisa são informados na cláusula WHERE, que corresponde ao


operador de restrição estabelecido para filtrar as linhas que serão exibidas pela
consulta.
A cláusula WHERE pode comparar valores em colunas, valores literais, expressões
aritméticas, ou funções. Três elementos são sempre necessários:

- Um nome de coluna
- Um operador de comparação
- Um nome de coluna, constante, ou lista de valores

Os operadores lógicos testam as seguintes condições:

= igual
> maior
>= maior ou igual
< menor
<= menor ou igual
<> diferente (^= ou !=)

WHERE - Filtra as linhas que serão exibidas pela consulta.

12
Exemplo: Mostrar os dados somente de um protocolo da tabela TFR_CTRC

select CTR_PFR_IDENTI, CTR_NUMCTR, CTR_DATEMI,


CTR_TOTPBA, CTR_TOTFRT
from TFR_CTRC
where CTR_PFR_IDENTI = 31270240

Exemplo: Listar os dados da tabela TMS_UNIDAD que são do tipo CTC

select UNI_CODEXT, UNI_DESCRI, UNI_TIPUNI


from TMS_UNIDAD
where UNI_TIPUNI = ‘CTC’

Exemplo: Listar os dados da tabela TFR_CTRC onde o peso aferido é diferente


do peso base

select CTR_PFR_IDENTI, CTR_NUMCTR, CTR_DATEMI,


CTR_TOTPAF, CTR_TOTPBA
from TFR_CTRC
where CTR_TOTPAF < > CTR_TOTPBA

ROWNUM - Limita a quantidade de linhas que serão retornadas pela consulta

Exemplo: Mostrar os 10 primeiras unidades da tabela

select UNI_CODEXT, UNI_DESCRI, UNI_TIPUNI


from TMS_UNIDAD
where rownum <= 10

AND , OR - são usados para consultas com condições múltiplas. O predicado AND
espera que todas condições sejam verdadeiras. O predicado OR espera que uma ou
mais condições sejam verdadeiras.

Exemplo: Listar os dados da tabela TMS_ CTRC com peso base maior que 5000
Kg e mais de 1000 volumes

select CTR_NUMCTR, CTR_TOTPBA, CTR_QTDVOL


from TFR_CTRC
where CTR_TOTPBA > 5000 and CTR_QTDVOL > 1000

Exemplo: Listar os dados da tabela TMS_ CTRC com peso base maior que 5000
Kg ou com mais de 1000 volumes

select CTR_NUMCTR, CTR_TOTPBA, CTR_QTDVOL


from TFR_CTRC
where CTR_TOTPBA > 5000 or CTR_QTDVOL > 1000
13
Os operadores SQL operam sobre todos os tipos de dados.

BETWEEN...AND... entre dois valores (inclusive)


IN(lista) idênticos a uma lista de valores
LIKE semelhante a um modelo de caracteres
IS NULL valor é nulo

BETWEEN - Filtra os dados, retornando as linhas que pertencem ao intervalo de


valores definidos.

Exemplo: Listar os dados da tabela TFR_CTRC que tenham o peso base entre 10
e 15 kg

select CTR_PFR_IDENTI, CTR_NUMCTR, CTR_DATEMI,


CTR_TOTPAF, CTR_TOTPBA
from TFR_CTRC
where CTR_TOTPBA between 10 and 15

IN - Seleciona os itens verdadeiros, especificados em uma lista

Exemplo: Mostrar os dados da tabela TMS_UNIDAD filtrando os códigos informados

select UNI_CODEXT, UNI_DESCRI, UNI_TIPUNI


from TMS_UNIDAD
where UNI_CODEXT in (570, 901)

Exemplo:Mostrar os dados da tabela TMS_UNIDAD filtrando os tipos de unidade

select UNI_CODEXT, UNI_DESCRI, UNI_TIPUNI


from TMS_UNIDAD
where UNI_TIPUNI in ('FIL', 'CTC')

LIKE - Retorna dados de acordo com o conjunto de caracteres determinados para


fazer a busca. O símbolo "%" representa a seqüência a partir dos caracteres
informados. O símbolo "_" (sublinhado) representa qualquer caracter, mas apenas
com a quantidade especificada.

Exemplo: Mostrar os nomes dos clientes que começam com a string informada no like.

select PES_IDENTI, PES_DESCRI


from TMS_PESSOA
where PES_DESCRI like 'TEXTIL%'

Exemplo: Mostrar os produtos que contém a string informada em qualquer parte do


14
nome informada no like.

select PES_IDENTI, PES_DESCRI


from TMS_PESSOA
where PES_DESCRI like '%TEXTIL%'

IS NULL - usado especificamente para testar valores nulos.

Exemplo: Mostrar os clientes que são pessoa jurídica e com o nome fantasia nulo

select PES_IDENTI, PES_DESCRI, PES_NOMFAN


from TMS_PESSOA
where PES_NOMFAN is null and PES_TIPPES = ‘J’

Os operadores mostrados abaixo podem ser utilizados para testes de negação:

!= ^= <> não igual


NOT BETWEEN fora da faixa especificada
NOT IN fora da lista especificada
NOT LIKE não semelhante ao modelo
IS NOT NULL não é nulo

2.5 Ordenação das linhas

A ordem das linhas retornadas por uma consulta é indefinida, a cláusula ORDER BY
pode ser usada para ordenar as linhas retornadas pelo comando Select, conforme a
coluna especificada. ASC é o padrão e classifica em ordem crescente, DESC
classifica em ordem decrescente. Deve ser sempre a última cláusula de um comando
SELECT.

Ordem padrão de ordenação:

- Números: menores primeiro


- Data: mais cedo primeiro
- Caracteres: ordem alfabética

Exemplo: Mostrar os atributos selecionados em ordem crescente do atributo nome na


tabela TMS_UNIDAD.

select UNI_CODEXT, UNI_DESCRI, UNI_TIPUNI


from TMS_UNIDAD
order by UNI_DESCRI
Exemplo: Mostrar os atributos selecionados em ordem decrescente por nome da unidade.
15
select UNI_CODEXT, UNI_DESCRI, UNI_TIPUNI
from TMS_UNIDAD
order by UNI_DESCRI desc

É possível efetuar a ordenação por mais de uma coluna, sendo algumas em ordem
ascendente e outras em ordem descendente.

2.6 Expressões aritméticas

Uma expressão é a combinação de um ou mais valores, operadores e funções, que


resultam em um valor calculado.
As expressões aritméticas podem conter nomes de colunas, constantes numéricas, e
operadores aritméticos. Os operadores são + - * e / , para soma, subtração,
multiplicação e divisão, respectivamente.

Exemplo: calcular o valor kg dividindo o valor do frete por peso base

select CTR_PFR_IDENTI , (CTR_TOTFRT / CTR_TOTPBA)


from TFR_CTRC

Exemplo : Parênteses serão utilizados para especificar a ordem na qual os operadores


serão executados.

select CTR_PFR_IDENTI , CTR_TOTFRT - ( ( CTR_TOTFRT * 18 ) / 100 )


from TFR_CTRC

2.7 Nomes alternativos para títulos de colunas

Para mostrar o resultado de uma consulta, o sql normalmente utiliza o nome da coluna
como título da coluna, porém em muitos casos, isto torna o título sem significado e
pode ser alterado usando-se um Aliás para o título da coluna. É especificado
escrevendo-se um texto após item a ser mostrado na cláusula SELECT. Por padrão
não pode conter espaços em branco, a menos que seja colocado entre aspas.

Exemplo : o resultado do cálculo receberá o título de VlrLiqFrete

select CTR_PFR_IDENTI ,
CTR_TOTFRT - ( ( CTR_TOTFRT * 18 ) / 100 ) VlrLiqFrete
from TFR_CTRC

Exemplo : usar aspas para separar as palavras do título com espaços


16
select CTR_PFR_IDENTI ,
CTR_TOTFRT - ( ( CTR_TOTFRT * 18 ) / 100 ) “Vlr. Liq. Frete"
from TFR_CTRC

Obs: somente na cláusula SELECT o aliás pode ser usado, nas outras cláusulas não.

2.8 Operador de concatenação

O operador de concatenação (||) permite juntar colunas, expressões aritméticas, ou


valores constantes, para criar uma expressão do tipo caracter. Colunas dos dois lados
do operador são combinadas para formar uma só coluna. . Literais dos tipos data e
caracter devem ser envoltos por apóstrofos (').

Exemplo: Combinar o número da unidade com o nome da unidade em uma coluna


apenas, utilizando Unidade como título

select UNI_CODEXT || ' - ' || UNI_DESCRI Unidade


from TMS_UNIDAD

2.9 Manuseio de valores nulos

Se em uma linha não existir valor para uma determinada coluna, este valor é dito
como sendo nulo, não está disponível, é desconhecido, ou não é aplicável. Um valor
nulo não é o mesmo que zero, zero é um número.
Se o valor de qualquer coluna envolvida em uma expressão for nulo, o resultado da
expressão também será nulo.
Podem ser convertidos valores nulos de data, números, ou caracteres:

NVL(ColunaData, ‘20-jan-2018')

NVL(ColunaNumero, 0)

NVL(ColunaCaracter, 'Nao Informado')

Exemplo: Cálculo sem tratamento para valor nulo, retorna valor nulo

select CTR_NUM, CTR_TOTFRT VlrFrete,


CTR_TOTFRT - ((CTR_TOTFRT * CTR_ICMBAS) / 100) FreteLiq
from TFR_CTRC
where CTR_IDENTI = 291

Exemplo: Caso o atributo CTR_ICMBAS seja nulo, considerar 0 para o cálculo

17
select CTR_NUM, CTR_TOTFRT VlrFrete,
CTR_TOTFRT - ((CTR_TOTFRT * NVL(CTR_ICMBAS, 0)) / 100) FreteLiq
from TFR_CTRC
where CTR_IDENTI = 291

2.10 Eliminação de linhas duplicadas

As linhas duplicadas são eliminadas dos resultados das consultas com DISTINCT
após o SELECT. Retorna apenas uma cópia de cada conjunto de linhas que possuem o
mesmo conteúdo.

Exemplo: Mostra o tipo de unidade apensa uma vez para cada tipo diferente cadastrado na
tabela TMS_UNIDAD

select distinct UNI_TIPUNI


from TMS_UNIDAD

2.11 Funções que manipulam caracteres

LOWER (coluna | literal) - Transforma letras maiúsculas em minúsculas.

Exemplo: Trocar todas as letras do endereço para maiúscula da tabela


TMS_ENDERE

select lower (EDE_ENDERE)


from TMS_ENDERE

UPPER (coluna | literal) - Transforma letras minúsculas em maiúsculas.

Exemplo: Trocar todas as letras do endereço para minúsculas da tabela


TMS_ENDERE

select upper (EDE_ENDERE)


from TMS_ENDERE

INITCAP (coluna | literal) - Transforma a primeira letra da palavra em maiúscula e


as demais minúsculas.

Exemplo: Trocar a primeira letras de cada palavra do endereço da tabela

18
TMS_ENDERE

select initcap (EDE_ENDERE)


from TMS_ENDERE

LPAD (coluna | literal, tamanho, 'caracter') - Preenche a sequência de caracteres, à


esquerda, com o caracter e o tamanho informados, caso não for informado, será
utilizado o caracter de espaço.

Exemplo: Preencher com 10 pontos antes do nome da unidade da tabela


TMS_UNIDAD

select UNI_CODEXT codigo, lpad (UNI_DESCRI, 20, ‘.’) Unidade


from TMS_UNIDAD

RPAD (coluna | literal, tamanho, 'caracter') - Preenche a sequência de caracteres, à


esquerda, com o caracter e o tamanho informados, caso não for informado, será
utilizado o caracter de espaço.

Exemplo: Preencher com 10 pontos antes do nome da unidade da tabela


TMS_UNIDAD

select rpad (UNI_CODEXT, 20, ‘.’) Codigo , UNI_DESCR


from TMS_UNIDAD

SUBSTR (coluna | literal, posição, comprimento) – Retorna dados de acordo com a


posição inicial informada e a quantidade de caracteres determinada

Exemplo: Mostrar apenas os 20 primeiros caracteres do nome na tabela


TMS_PESSOA

select substr (PES_DESCRI, 1, 20) Nome


from TMS_PESSOA

LTRIM (coluna | literal, 'caracteres') - Remove os caracteres indicados à esquerda


da coluna ou do literal. Se nenhum caracter for especificado, serão eliminados os
espaços à esquerda.

Exemplo: Elimina o primeiro caracter igual a ‘-‘ do nome na tabela TMS_PESSOA

select PES_DESCRI , ltrim (PES_DESCRI, ‘-‘) Nome


from TMS_PESSOA
where PES_DESCRI like ‘-%’

19
RTRIM (coluna | literal, 'caracteres') - Remove os caracteres indicados à direita da
coluna ou do literal. Se nenhum caracter for especificado, serão eliminados os espaços
à direita.

Exemplo: Elimina igual a ‘*‘ no final do nome na tabela TMS_PESSOA

select PES_DESCRI , rtrim (PES_DESCRI, ‘*‘) Nome


from TMS_PESSOA
where PES_DESCRI like ‘%*’

LENGTH (coluna | literal) - Retorna o número de caracteres (ou dígitos) na coluna


ou literal especificados.

Exemplo: Mostra a quantidade de caracteres do nome na TMS_PESSOA

select PES_DESCRI , length (PES_DESCRI) Nome


from TMS_PESSOA

TRANSLATE (coluna | literal, de, para) - Substitui os caracteres do argumento "de"


pelos caracteres do argumento "para", na coluna ou literal especificados. Todas as
ocorrências dos caracteres do parâmetro "de" são substituídas pelos caracteres no
parâmetro "para". Caracteres do parâmetro "de" sem correspondência no parâmetro
"para" são removidos.

Exemplo: Trocar os caracteres ‘*’ por ‘-’ nos nomes que iniciam com *

select PES_DESCRI , translate (PES_DESCRI, ‘*’, ‘-‘) Nome


from TMS_PESSOA
where PES_DESCRI like ‘*%’

REPLACE (coluna | literal, de, para) -Substitui a seqüência de caracteres "de" pela
seqüência de caracteres "para", na coluna ou literal especificados.

Exemplo: Trocar o tipo de unide de ‘FIL’ para ‘FILIAL’ na tabela TMS_UNIDAD

select UNI_CODEXT codigo, (UNI_DESCR) Unidade,


replace (UNI_TIPUNI, ‘FIL’, ‘FILIAL’) Tipo
from TMS_UNIDAD

2.12 Funções numéricas

ROUND (coluna | literal, n) - Arredonda o valor da coluna ou do literal de acordo


com a quantidade de casa decimais especificada. Se a quantidade for omitido equivale
a um número inteiro.
20
Exemplo: arredondar com duas decimais o resultado calculado do ICMS na tabela
TFR_CTRC

select CTR_TOTFRT VlrFrete,


round (((CTR_TOTFRT * 18) / 100) , 2) VlrICMS
from TFR_CTRC
where CTR_IDENTI = 34728045

TRUNC (coluna | literal, n) - Trunca o valor da coluna ou do literal de acordo com a


quantidade especificada

Exemplo: trunca o resultado calculado do ICMS na tabela TFR_CTRC

select CTR_TOTFRT VlrFrete,


trunc (((CTR_TOTFRT * 18) / 100) , 2) VlrICMS
from TFR_CTRC
where CTR_IDENTI = 34728045

2.13 Funções que manipulam datas

O formato padrão do Oracle para data é mês, dia e ano (MMDDYYYY), diferente do
formato brasileiro que é dia, mês e ano, daí a necessidade da conversão.
Para formatar datas no Oracle é utilizada a função TO_CHAR que retorna um valor do
tipo caracter ou string para um valor do tipo data informado e para extrair partes de
uma data. Esta função permite a manipulação de datas em diversos formatos em um
atributo do tipo DATE. A transformação de uma data tipo caracter ou string para o
tipo DATE é utilizada a função TO_DATE.

SYSDATE - é uma função que retorna a data e a hora atual. A tabela SYS.DUAL é
pública, contém apenas uma coluna chamada DUMMY, e uma linha com o valor 'X'.
Esta tabela é útil para retornar um único valor de uma constante, de uma coluna, ou de
uma expressão.

Exemplo: Mostrar data e hora atual

select sysdate from SYS.DUAL

Existem diversos formatos suportados para conversão de datas, os mais utilizados e


conhecidos são os seguintes:
— MM = Retorna o número representando o mês.
select to_char (sysdate, ‘MM’) from dual

21
— MON = Retorna a abreviação do mês
select to_char (sysdate, ‘MON’) from dual
— MONTH = Retorna o nome completo do mês
select to_char (sysdate, ‘MONTH’) from dual

Para retornar o nome do mês no idioma desejado

ALTER SESSION SET NLS_TERRITORY=BRAZIL


NLS_LANGUAGE="BRAZILIAN PORTUGUESE";
— DD = retorna o dia da data informada como parâmetro
select to_char (sysdate, ‘DD’) from dual

— DY = retorna a abreviação do dia da semana


select to_char (sysdate, ‘DY’) from dual

— YYYY = retorna o ano com 4 dígitos


select to_char (sysdate, ‘YYYY’) from dual

— YY = retorna os últimos dois números do ano


select to_char (sysdate, ‘YY’) from dual

— AM (ou PM) = retorna se a hora é de manhã (AM) ou a tarde (PM).


select to_char (sysdate, ‘AM’) from dual

– HH = retorna a hora (0 – 12)


select to_char (sysdate, ‘HH’) from dual

– HH24 = retorna a hora (0 – 24)


select to_char (sysdate, ‘HH24’) from dual

– MI = retorna o minuto
select to_char (sysdate, ‘MI’) from dual

22
– SS = retorna o segundo
select to_char (sysdate, ‘SS’) from dual

– WW = retorna a semana do ano


select to_char (sysdate, ‘WW’) from dual

– W = retorna a semana do Mês


select to_char(sysdate, ‘W’) from dual
Exemplo: Retornar formato de data comum no Brasil
select to_char (sysdate, ‘DD/MM/YYYY HH24:MI:SS’) from dual

2.14 Aritmética de datas

Datas podem ser somadas ou subtraídas de outras datas, ou de valores numéricos.

data+número Soma o número de dias à data, produzindo outra data


data-número Subtrai o número de dias à data, produzindo outra data
data-data Subtrai uma data da outra, produzindo número de dias
data+número/24 Soma número de horas à data, produzindo outra data

Exemplo: Somar 7 dias na data atual

select sysdate + 7 from SYS.DUAL

Exemplo: Subtrair uma data de outra, gerando a quantida de dias entre elas

select to_date (‘15/02/2018’, ‘DD/MM/YYYY’) –


to_date (‘10/01/2018’, ‘DD/MM/YYYY’) from SYS.DUAL

ADD_MONTHS - Com esta função podemos somar ou subtrair meses de uma data
sem nos preocupar com a quantidades de dias que os meses podem ter.

Exemplo: Somar 1 mês na data atual gerando nova data

select add_months (sysdate, 1) ProximoMes from SYS.DUAL

23
Exemplo: Somar 1 mês na data atual gerando nova data no formato dia, mês, ano.

select to_char (add_months (sysdate, 1), ‘DD/MM/YYYY’) ProximoMes


from SYS.DUAL

Exemplo: Subtrair 1 mês na data atual gerando nova data no formato dia, mês e ano.

select to_char (add_months (sysdate, -1), ‘DD/MM/YYYY’) MesAnterior


from SYS.DUAL

MONTHS_BETWEEN - Utilizada para calcular a quantidade de meses entre duas


data.

Exemplo: Mostrar a quantidade de meses que o cliente foi cadastrado.

select PES_DESCRI, PES_DATAALT, trunc(months _between(sysdate,


PES_DATALT)) Meses
from TMS_PESSOA

LAST_DAY - Retorna a data do último dia do mês da data especificada.

Exemplo: Mostrar a data do último dia do mês da data atual


select sysdate, last_day (sysdate ) from dual

NEXT_DAY- Retorna o próximo dia da semana definido por parâmetro.


Sendo:

1 – Domingo
2 – Segunda-Feira
3 – Terça-Feira
4 – Quarta-Feira
5 – Quinta-Feira
6 – Sexta-Feira
7 – Sábado

Exemplo: Mostrar a data da próxima sexta-feira

select sysdate, to_char (next_day (sysdate , 6 ), ‘DD/MM/YYYY’)


from dual

24
2.15 Funções de Condição

DECODE (coluna|expressão,pes1,res1,[pes2,res2,...],default) - Substitui as


pesquisas pelos resultados informados. A coluna ou expressão é comparada com os
argumentos de pesquisa, e se houver igualdade o resultado correspondente é
retornado. Se não houver igualdade, o valor default é retornado. Deve ser definido um
valor específico.

Exemplo: Retornar a sigla RTE caso o código da empresa seja igual a 1 , retornar a
sigla PTE caso seja igual a 22 ou ‘Outras’ para os demais códigos.

select UNI_CODEXT, (UNI_DESCRI), UNI_EMC_IDENTI,


decode (UNI_EMC_IDENTI, 1, 'RTE', 22, 'PTE', ‘Outras’) Empresa,
UNI_TIPUNI
from TMS_UNIDAD

CASE/ WHEN/ THEN/ ELSE/ END – Tem como objetivo avaliar uma lista de
condições e retornar uma comparação verdadeira das múltiplas possibilidades de
resultado.

Exemplo: Classificar os CTEs de acordo com o valor

select UNI_CODEXT, (UNI_DESCRI), UNI_EMP_IDENTI,


ctr_pfr_identi as Protocolo, ctr_numctr as NumCTE,
to_char(ctr_datemi, 'DD/MM/YYYY')as DataEmissao,
CTR_TOTFRT as VlrFrete,
case
when CTR_TOTFRT >= 5000
then 'A'
when CTR_TOTFRT < 5000 and CTR_TOTFRT >= 1000
then 'B'
when en CTR_TOTFRT < 1000 and CTR_TOTFRT >= 300
then 'C'
else 'D'
end as Classificacao
from tfr_ctrc
where ctr_datemi >= to_date ('01/06/2017', 'DD/MM/YYYY')
order by CTR_TOTFRT desc

2.16 Funções de Grupo

As funções vistas anteriormente operavam sobre cada linha da tabela, enquanto que as
funções de grupo operam com dados sumarizadas através do agrupamento de linhas.

COUNT - É a função que retorna o número de linhas não nulas da consulta. Usando
COUNT (*) obriga a contagem total, incluindo valores duplicados e nulos.

25
Exemplo: Consultar a quantidade de linhas da tabela TMS_UNIDAD

select count (*) from TMS_UNIDAD

Exemplo: Consultar a quantidade de tipos de unidades da tabela TMS_UNIDAD

select count (distinct UNI_TIPUNI ) from TMS_UNIDAD

MAX – Retorna o valor máximo de uma expressão

Exemplo: Consultar o maior número de CTE da tabela TFR_CTRC

select max (CTR_NUMCTR ) from TFR_CTRC

MIN – Retorna o valor mínimo de uma expressão

Exemplo: Consultar o maior número de CTE da tabela TFR_CTRC

select min (CTR_NUMCTR ) from TFR_CTRC

SUM - Retorna a somatória dos atributos selecionados ou agrupados.

Exemplo: Somar o valor do frete dos CTEs

select sum (CTR_TOTFRT ) from TFR_CTRC

Exemplo: Somar o valor do frete dos CTEs com status cancelado

select sum (CTR_TOTFRT ) from TFR_CTRC


where CTR_STATUS = ‘C’

AVG - Retorna a média dos valores selecionados, ignorando os valores nulos.

Exemplo: Consulta a média do valor do frete dos CTEs

select avg (CTR_TOTFRT ) from TFR_CTRC


where CTR_TOTFRT < 1000

Exemplo: Resultado da média com 2 casas decimais

select round( avg (CTR_TOTFRT ), 2) from TFR_CTRC


where CTR_TOTFRT < 1000

26
GROUP BY - Agrupa as linhas selecionadas com base no valor de uma expressão e
retorna uma única linha de informação para cada grupo. Toda coluna ou expressão da
cláusula SELECT que não é uma função de agregação deve aparecer na cláusula
GROUP BY.

Exemplo: Mostrar o resultado agrupado do total de frete por unidade de emissão e


mês/ano da tabela TFR_CTRC

select CTR_UNI_IDENTI_EMISSA as UnidEmissao,


to_char (CTR_DATEMI, 'mm/yyyy') as MesAno,
sum (CTR_TOTFRT) as VlrFrete
from TFR_CTRC
where CTR_TOTFRT < 1000 and to_char (CTR_DATEMI, 'yyyy') >= 2017
group by CTR_UNI_IDENTI_EMISSA, to_char (CTR_DATEMI, 'mm/yyyy')
order by CTR_UNI_IDENTI_EMISSA, to_char (CTR_DATEMI, 'mm/yyyy')

HAVING - Opera sobre a cláusula GROUP BY de maneira semelhante a que a


cláusula WHERE opera sobre a cláusula SELECT, filtrando as linhas do grupo e
exibindo apenas aquelas cuja expressão seja verdadeira.

Exemplo: Mostrar o resultado agrupado do total de frete por unidade de emissão e


mês/ano da tabela TFR_CTRC, cuja soma seja maior que 1000.

select CTR_UNI_EMISSA as UnidEmissao,


to_char (CTR_DATEMI, 'mm/yyyy') as MesAno,
sum (CTR_TOTFRT) as VlrFrete
from TFR_CTRC
where to_char (CTR_DATEMI, 'yyyy') >= 2017
group by CTR_UNI_IDENTI_EMISSA,
to_char (CTR_DATEMI, mm/yyyy')
having sum (CTR_TOTFRT) > 1000
order by CTR_UNI_IDENTI_EMISSA,
to_char (CTR_DATEMI, 'mm/yyyy')

A cláusula WHERE é utilizada para aplicar restrições sobre linhas individualmente,


enquanto a cláusula HAVING é utilizada para aplicar restrições sobre grupos de linhas.

Ordem das cláusulas:

SELECT lista_de_colunas
FROM lista_de_tabelas
WHERE condições_de_linha
GROUP BY lista_de_colunas
HAVING condições_de_grupo
ORDER BY lista_de_colunas
27
São avaliados:

WHERE para ficar somente as linhas que atendem a cláusula


GROUP BY para montagem dos grupos
HAVING para ficar somente os grupos que atendem a cláusula

2.17 Extraindo dados de mais de uma tabela

Linhas de uma tabela podem ser relacionadas com linhas de outra tabela para obter
informações através de junções, de acordo com valores comuns (chave) existentes nas
tabelas correspondentes.
Os dois principais tipos de junção são: Junções equivalentes e Junções não
equivalentes

INNER JOIN – É usada para uma junção equivalente para buscar dados que não sejam
da tabela principal definida no FROM, relacionando a chave para se fazer a busca. Só
serão retornados os dados se a chave informada existir na tabela.
Exemplo: Mostrar código e nome do cliente.

select a.CLI_IDENTI as CodCliente,


b.PES_DESCRI as NomeCliente
from TMS_CLIENT a
join TMS_Pessoa b on a. CLI_PES_IDENTI = b.PES_IDENTI

Exemplo: Mostrar protocolo, número do Cte, unidade de origem, descrição da


unidade, código do cliente, nome do cliente, valor do frete, peso base e
qtde.volume.

select a.CTR_PFR_IDENTI as Protocolo,


a.CTR_NUMCTR as NumCTE,
b.UNI_CODEXT as CodUnidade,
b.UNI_DESCRI as UnidOrigem,
a.CTR_CLI_IDENTI_TOMADO as CliTomador,
d.PES_DESCRI as Cliente,
a.CTR_TOTFRT as VlrFrete,
a.CTR_TOTPBA as PesoBase,
a.CTR_QTDVOL as QtdeVolume
from TFR_CTRC a
join TMS_UNIDAD b on a.CTR_UNI_IDENTI_ORIGEM = b.UNI_IDENTI
join TMS_CLIENT c on a.CTR_CLI_IDENTI_TOMADO = c.CLI_IDENTI
join TMS_Pessoa d on c.CLI_PES_IDENTI = d.PES_IDENTI
where d.PES_TIPPES = ‘F’

28
LEFT / RIGHT OUTER JOIN- Retorna dados de outras tabelas, porém se a chave
informada não existir o conteúdo dos campos relacionados será nulo.

Exemplo: Mostrar dados do Cte, do cliente e informações de CNAE e caso não exista
o resultado será nulo.

select a.CTR_PFR_IDENTI as Protocolo,


a.CTR_NUMCTR as NumCTE,
b.UNI_CODEXT as CodUnidade,
b.UNI_DESCRI as UnidOrigem,
a.CTR_CLI_IDENTI_TOMADO as CliTomador,
d.PES_DESCRI as Cliente, e.CNA_DESCRI as CNAE,
a.CTR_TOTFRT as VlrFrete,
a.CTR_TOTPBA as PesoBase,
a.CTR_QTDVOL as QtdeVolume
from TFR_CTRC a
join TMS_UNIDAD b on a.CTR_UNI_IDENTI_ORIGEM = b.UNI_IDENTI
join TMS_CLIENT c on a.CTR_CLI_IDENTI_TOMADO= c.CLI_IDENTI
join TMS_Pessoa d on c.CLI_PES_IDENTI = d.PES_IDENTI
left outer
join TMS_CNAE e on d.PES_CNA_CNAE = e.CNA_CNAE
where d.PES_TIPPES = ‘F’

2.18 Outros métodos de junção

Opções alternativas para construção de junções podem ser especificadas com a


cláusula WHERE. Para retornar os dados que não satisfazem a condição do join
(LEFT JOIN) o operador usado é um sinal de '+' colocado entre parênteses ao lado da
tabela onde a informação pode não existir.

Exemplo: Mostrar código e nome do cliente.

select a.CLI_IDENTI as CodCliente,


b.PES_DESCRI as NomeCliente
from TMS_CLIENT a, TMS_Pessoa b
where a. CLI_PES_IDENTI = b.PES_IDENTI

Exemplo: Mostrar nome do cliente e CNA mesmo que não exista na tabela
TMS_CNAE.

select a.PES_DESCRI as NomeCliente, b.CNA_DESCRI


from TMS_PESSOA a, TMS_CNAE b
where a.PES_CNA_CNAE = b. CNA_CNAE(+)

29
UNION - Combina os resultados de duas ou mais consultas em um único conjunto de
resultados, que inclui todas as linhas pertencentes as consultas da união, sem
repetição. Para utilizar o UNION, o número e a ordem das colunas precisam ser
idênticos em todas as queries e os data types precisam ser compatíveis.

Exemplo: Mostrar dados de CTE da tabela TFR_CTRC e TFR_CTRCIN.

select a.CTR_PFR_IDENTI as Protocolo,


a.CTR_NUMCTR as NumCTE,
a.CTR_TOTFRT as VlrFrete,
a.CTR_TOTPBA as PesoBase,
a.CTR_QTDVOL as QtdeVolume
from TFR_CTRC a
union
select a.DTI_PFR_IDENTI as Protocolo,
a.DTI _NUMCTR as NumCTE,
a.DTI _TOTFRT as VlrFrete,
a.DTI _TOTPBA as PesoBase,
a.DTI _QTDVOL as QtdeVolume
from TFR_CTRCIN a

30
Capítulo 3: Linguagem de Definição de Dados (DDL)
3.1 Criação de tabela

CREATE TABLE - tem como finalidade criar uma nova tabela no banco de dados.
Não há limite para a quantidade de linhas por tabela, a não ser o espaço físico
disponível. A sintaxe básica do comando é informar o nome da tabela, o nome dos
atributos e seus datatypes, se o campo poderá receber valor nulo ou não e definir uma
chave primária.

CREATE TABLE Nome da Tabela (


Nome Coluna 1 datatype null / not null,
Nome Coluna 2 datatype null / not null,
...
CONSTRAINT Nome PRIMARY KEY (Nome do Campo),
CONSTRAINT Nome FOREIGN KEY (Nome do Campo)
REFERENCES Nome da tabela (Nome do Campo Chave)

Exemplo: Criar uma tabela de tarifas de frete com código, descrição, valor,
percentual e usuário que incluiu.

CREATE TABLE TarifaFrete(


CodigoTarifa NUMBER(8) NOT NULL,
DescrTarifa VARCHAR(50),
Valor NUMBER(14,2),
Percentual NUMBER(8, 2),
UsuarioInclusao NUMBER(8),
CONSTRAINT PK_CodigoTarifa PRIMARY KEY (CodigoTarifa),
CONSTRAINT FK_Usuario FOREIGN KEY (UsuarioInclusao)
REFERENCES tnu_usuari(USU_IDENTI) )

Devem ser observadas as seguintes regras para o nome de uma tabela:

 O nome deve começar por uma letra, de "A" a "Z", ou de "a" a "z".

 O nome pode conter letras, números, e o caractere especial sublinhado (_).


Os caracteres "$" e "#” também podem ser usado, mas seu uso é
desaconselhado.

 O nome é o mesmo, independentemente do uso de letras minúsculas ou


maiúsculas. Por exemplo, EMP, emp. EmP e Emp são a mesma tabela.

 O nome pode conter até 30 caracteres.

 O nome não pode ser uma das palavras reservadas do Oracle.

31
 O nome da tabela não pode ser igual ao de outra tabela, sinônimo ou visão,
a não ser que pertençam a usuários diferentes.

3.2 Alteração de tabela

ALTER TABLE - a instrução pode ser utilizada com diferentes finalidades: adicionar
uma coluna a uma tabela existente, modificar as propriedades de uma coluna que já
esteja criada, excluir uma coluna, renomear uma tabela ou renomear colunas.

Exemplo: Adicionar uma coluna de data da inclusão na tabela TarifaFrete

ALTER TABLE TarifaFrete


Add (DataInclusao date)

Exemplo: Alterar o tamanho do atributo descrição da tarifa na tabela TarifaFrete

ALTER TABLE TarifaFrete


Modify (DescrTarifa VARCHAR(60))

Exemplo: Renomear a coluna descrição da tarifa da tabela de tarifas de frete

ALTER TABLE TarifaFrete


Rename column Valor to ValorTarifa

Exemplo: Renomear a tabela TarifaFrete para Tarifas

ALTER TABLE TarifaFrete


Rename to Tarifas

Exemplo: Eliminar a coluna DataInclusao da tabela Tarifas

ALTER TABLE Tarifas


Drop column DataInclusao

3.3 Eliminação de dados

TRUNCATE TABLE - remove todas as linhas de uma tabela, sem a opção de filtrar
quais dados serão removidos.

Exemplo: Eliminar os dados da tabela Tarifas

TRUNCATE TABLE Tarifas

32
Capítulo 4: Controle de transações (DTL)
Uma transação é um conjunto de operações efetuadas em um banco de dados, que
causam alterações em uma ou mais tabelas. As transações não podem ficar pela
metade no banco de dados, ou todas as transações de uma unidade lógica de trabalho
são efetivadas, ou nenhuma é efetivada no banco de dados. Não pode haver o caso em
que umas são efetivadas e outras não. O Oracle garante a consistência baseado nas
transações, fornecendo mais flexibilidade e controle para trabalhar com os dados.

Uma transação começa com o primeiro comando de DML ou DDL executado, e


termina com um dos seguintes comandos.

 COMMIT ou ROLLBACK

 comando de DDL

 Erros

 Desconexão (logoff, exit)

 Falha de máquina

Um comando de DDL é efetivado automaticamente, e portanto termina


implicitamente uma transação.
Após o fim de uma transação, a próxima declaração SQL inicia uma nova transação
automaticamente.

4.1 Efetivando as mudanças

Para tornar as mudanças no banco de dados permanentes, elas devem ser efetivadas. O
comando COMMIT é utilizado para efetivar as mudanças, e o comando ROLLBACK é
utilizado para descartar as mudanças.

Os comandos emitidos entre dois comandos COMMIT definem uma transação.

Até que o comando Commit seja executado, as mudanças são vistas apenas pelo
usuário que as efetuou, os demais usuários enxergam a situação anterior as
modificações.

4.2 Removendo mudanças

Mudanças não efetivadas podem ser descartadas através do comando ROLLBACK.

O comando ROLLBACK retorna os dados ao estado em que se encontravam


após o último COMMIT.
33
4.3 Falhas do sistema

Quando uma transação é interrompida por um erro, como, por exemplo, uma falha do
sistema, toda a transação é descartada (Rolled back). Este procedimento previne que
os erros causem mudanças não desejadas aos dados.
O Rollback automático é mais freqüentemente causado por falhas no sistema, tais
como falta de energia ou queda do sistema operacional. Erros causados pela entrada
de comandos, tais como digitar o nome errado para uma coluna ou tentar realizar uma
operação não permitida na tabela, não interrompem uma transação e nem causam um
Rollback automático, porque estes erros são detectados na fase de 'parse' do comando
(quando o comando é lido e verificado), e não durante a fase de execução.

4.4 Autocommit

Commit pode ser executado automaticamente através do comando SET


AUTOCOMMIT ON. Neste caso, após cada comando INSERT, UPDATE ou
DELETE é executado um comando COMMIT automaticamente.
Com SET AUTOCOMMIT OFF, o próprio usuário tem que executar o comando
COMMIT manualmente.

34
Capítulo 5: Linguagem de Definição de Dados (DML)

5.1 Inserindo linhas em uma tabela

INSERT - insere uma nova linha na tabela. O preenchimento das colunas deve
respeitar a ordem dos atributos e seus datatypes definidos na criação da tabela.

INSERT INTO nome_da_tabela [(coluna, coluna, ...)]


VALUES (valor, valor, ...)

Exemplo: Inserir dados na tabela tarifa de frete.

INSERT INTO TarifaFrete


(CodigoTarifa, DescrTarifa, Valor, Percentual, UsuarioInclusao)
VALUES (1, ‘Tarifa de Coleta’, 12.00, 0, 186)

É recomendado que a lista de colunas seja sempre especificada, para não haver
necessidade de alterar o programa quando uma nova coluna for adicionada à tabela.

5.2 Atualizando linhas em uma tabela

UPDATE - permite a atualização de um ou mais campos de uma linha ou grupo de


linhas de uma tabela. O conteúdo de cada campo deve ser ajustado com a cláusula
Set. Primary key não pode ser alterada.

UPDATE TarifaFrete
SET coluna, [,coluna...] = {expressão ou sub-consulta}
[WHERE condição]

Exemplo: Alterar o valor e percentual da tarifa do código 1.

UPDATE TarifaFrete
SET Valor = 0,
Percentual = 0.3
where CodigoTarifa = 1

35
5.3 Eliminando linhas de uma tabela

DELETE - utilizado para remover linhas de uma tabela, conforme a condição


especificada.

DELETE FROM nome_da_tabela


[WHERE condição]

Exemplo: Excluir da tabela TarifaFrete a linha com código = 2

Delete from TarifaFrete


where CodigoTarifa = 2

5.4 Subconsulta

É uma consulta aninhada em uma instrução SELECT, INSERT, UPDATE ou


DELETE, pode ser usada em qualquer lugar em que é permitida uma expressão. É
uma consulta contida dentro de uma outra consulta.

Exemplo: Mostrar CTE, Valor Total do Frete e Valor da Tarifa das tabelas TFR_CTRC
E TFR_CTRTRF.

select fre.Ctr_identi, fre.ctr_totfrt, tar.ValorTarifa


from tfr_ctrc fre
join
(select ctf_ctr_identi, sum(ctf_valor) as ValorTarifa
from tfr_ctrtrf

group by ctf_ctr_identi ) tar on fre.ctr_identi = tar.ctf_ctr_identi

36
Capítulo 6: Recursos implementados no SGBD
6.1 Views
Uma exibição é uma tabela virtual ou lógica composta por um conjunto de resultados
de uma consulta. Ao contrário de tabelas comuns em um banco de dados relacional,
uma exibição não faz parte do esquema físico, ele é uma tabela virtual dinâmica. O
uso efetivo de views ajuda a melhorar o desempenho e a capacidade de
gerenciamento.

CREATE VIEW nome_da_view (coluna1, coluna2,...)


IS
SELECT cláusula_select

Exemplo: Criar view com dados de cliente

CREATE VIEW vCliente is


select a.CLI_IDENTI as Codigo,
b.PES_CPFCNP as CPFCNPJ,
b.PES_DESCRI as Nome,
b.PES_TIPPES as FisicaJuridica,
a.CLI_ATIVO as Status,
to_char(a.CLI_DATCRI, 'dd/mm/yyyy' ) as DtInclusao
from TMS_CLIENT a
join TMS_PESSOA b on a.Cli_Pes_Identi = b.Pes_Identi

Para consultar os dados da view crida com restrição de data de inclusão.

select *
from vCliente
where to_date (DTINCLUSAO, ‘DD/MM/YYYY’) >=
to_date (’01/06/2017’, ‘DD/MM/YYYY’)

6.2 Stored Procedure


Um procedimento armazenado é um grupo de instruções SQL compiladas em um
único plano de execução. Os procedimentos armazenados facilitam a implementação
consistente da lógica nos aplicativos. São semelhantes aos procedimentos de
linguagens de programação, pois, podem aceitar parâmetros de entrada e retornar
valores na forma de parâmetros de saída; conter instruções de programação que
executem operações e chamadas para outras execuções; indicar êxito ou falha de um
procedimento retornando um valor de status. O procedimento armazenado pode
reduzir o tráfego na rede, melhorar a performance, criar mecanismos de segurança
entre outras vantagens.
37
CREATE OR REPLACE PROCEDURE nome_da_procedure
(coluna1, coluna2,...) is
begin
execution section;
end

Exemplo: Criar stored procedure para alterar o status do cliente para inativo
conforme
código informado.

CREATE OR REPLACE PROCEDURE “PCLIENTE”


(cod_cliente in number) is
begin
update TMS_CLIENT
set CLI_ATIVO = 'N'
where CLI_IDENTI = cod_cliente;
end;

Exemplo: Executar a stored procedure pCliente informado o código do cliente.

begin
pCliente (35867) ;
end;

6.3 Function
São rotinas compostas de uma ou mais instruções SQL que podem ser usadas para
encapsular código para reutilização. Uma função recebe parâmetros de entrada e
retorna um valor escalar ou uma tabela.

CREATE OR REPLACE FUNCTION nome_da_funcao


(parameter_name datatype , ...)
RETURN column datatype
Is
begin
function;
end

38
Exemplo: Criar uma função para calcular a quantidade de dias entre duas datas.

CREATE OR REPLACE FUNCTION FCalculaData


(DataIni varchar2, DataFim varchar2)
RETURN int
Is
begin
Return to_date(DataFim, 'DD/MM/YYYY') -
to_date (DataIni, 'DD/MM/YYYY') ;
end;

Exemplo: Executar a função FCalculaData informando a data inicial e final.

select FCalculaData ('01/01/2018', '17/03/2018') from dual

6.4 Trigger
É um tipo especial de procedimento armazenado executado quando uma instrução
INSERT, UPDATE ou DELETE é acionada em uma tabela especificada. Um gatilho
pode consultar outras tabelas e incluir instruções SQL complexas. Normalmente, é
criado para aplicar integridade referencial ou consistência entre dados logicamente
relacionados em tabelas diferentes. O disparo da trigger independe do usuário ou da
aplicação que gerou, o evento será acionado conforme a definição do momento.
- BEFORE (tabela) - indica que os comandos PL/SQL do corpo da trigger serão
executados ANTES de uma instrução de insert/update ou delete na tabela. É usado
normalmente nos casos em que é preciso incializar variáveis globais, validar regras de
negócios, alterar o valor de flags ou salvar o valor de uma coluna antes de alterá-las.

CREATE OR REPLACE TRIGGER [nome]


BEFORE....
.
.
END

- AFTER (tabela) - indica que os comando PL/SQL do corpo da trigger será


executado APÓS a alteração dos dados da tabela. É utilizado para ações em outras
tabelas.

CREATE OR REPLACE TRIGGER [nome]


AFTER....
.
.
END

Entretanto, stored procedure e triggers diferem na forma como são acionadas. Uma
stored procedure é explicitamente acionada por um usuário, aplicação ou trigger. As
triggers são implicitamente disparadas quando um determinado evento ocorre.
39

Você também pode gostar