Vous êtes sur la page 1sur 101

Universidade da Região da Campanha

Centro de Ciências da Economia e Informática


Curso de Informática
Disciplina de Banco de Dados II

ORACLE

Prof. Henry Gomes de Carvalho

Bagé, Agosto/2000
SUMÁRIO

CONCEITOS BÁSICOS........................................................................................................6
OBJETIVOS DO CAPÍTULO................................................................................................................................ 6
SISTEMA GERENCIADOR DE BANCO DE DADOS................................................................................................6
SISTEMA GERENCIADOR DE BANCO DE DADOS RELACIONAL.............................................................................6
BENEFÍCIOS OFERECIDOS PELO SISTEMA GERENCIADOR DE BANCO DE DADOS RELACIONAL (RDBMS) :...........6
O BANCO DE DADOS ORACLE..........................................................................................7
GARANTIA DE INTEGRIDADE NOS DADOS.......................................................................................................... 7
INTRODUÇÃO AO SQL E SQL*PLUS.................................................................................8
OBJETIVOS DO CAPÍTULO................................................................................................................................ 8
SQL.............................................................................................................................................................. 8
CARACTERÍSTICAS DO SQL............................................................................................................................ 8
SQL*PLUS................................................................................................................................................... 8
CONJUNTO DE COMANDOS SQL......................................................................................9
SELECT....................................................................................................................................................... 9
INSERT, UPDATE, DELETE, COMMIT, ROLLBACK (DML)........................................................................9
CREATE, ALTER, DROP, RENAME (DDL).................................................................................................. 9
GRANT, REVOKE (DDC)............................................................................................................................. 9
ESCREVENDO COMANDOS SQL.....................................................................................10
LOGIN NO SQL*PLUS COMO USUÁRIO SYSTEM..................................................................................10
LOG OUT DO SQL*PLUS.......................................................................................................................... 11
MOSTRANDO ESTRUTURA DE UMA TABELA DO BANCO DE DADOS.................................................11
CONSULTANDO DADOS COM O COMANDO SELECT...........................................................................12
SELECIONANDO TODAS AS COLUNAS DA TABELA DEPARTAMENTO................................................12
REMOVENDO LINHAS DUPLICADAS ANTES DO RESULTADO DO COMANDO SELECT SER
RETORNADO:........................................................................................................................................... 13
A cláusula distinct:................................................................................................................................. 13
COLOCANDO “ALIAS” PARA AS COLUNAS SELECIONADAS................................................................14
MOSTRANDO LINHAS ESPECÍFICAS DE UMA TABELA DE ACORDO COM UMA CONDIÇÃO DE
PESQUISA................................................................................................................................................. 15
A cláusula where:................................................................................................................................... 15
Operadores Lógicos.............................................................................................................................. 15
Valores Strings e Date na cláusula WHERE.......................................................................................... 15
Operadores SQL.................................................................................................................................... 16
O operador BETWEEN.......................................................................................................................... 16
O operador NOT BETWEEN................................................................................................................. 16
O operador IN........................................................................................................................................ 17
O operador NOT IN............................................................................................................................... 17
O operador LIKE.................................................................................................................................... 18
O operador NOT LIKE........................................................................................................................... 18
O operador IS NULL.............................................................................................................................. 19
CONSULTANDO DADOS COM MÚLTIPLAS CONDIÇÕES......................................................................20
PRECEDÊNCIA DE OPERADORES......................................................................................................... 21
ORDENANDO AS LINHAS RETORNADAS............................................................................................... 22
A cláusula ORDER BY........................................................................................................................... 22
INVERTENDO A ORDEM PADRÃO...................................................................................................... 22
CONSULTANDO DADOS DO BANCO DE DADOS ORACLE..........................................23
CONSULTANDO DADOS DO DICIONÁRIO DE DADOS..........................................................................23
EDITANDO COMANDOS SQL................................................................................................................... 24
COMANDOS SQL*PLUS DIVERSOS........................................................................................................ 25
CONSULTANDO DADOS COM VARIÁVEIS DE SUBSTITUIÇÃO E FUNÇÕES.............27
OBJETIVOS DO CAPÍTULO.............................................................................................................................. 27
UTILIZANDO VARIÁVEIS DE SUBSTITUIÇÃO EM COMANDOS SQL.....................................................27
USANDO VARIÁVEL DE SUBSTITUIÇÃO COM DUPLO CARACTER ‘&&’..............................................28
O COMANDO ACCEPT.............................................................................................................................. 28
MOSTRANDO O RESULTADO DE CÁLCULOS COM NÚMEROS NA CLÁUSULA SELECT...................29
Expressões Aritméticas......................................................................................................................... 29
USANDO CÁLCULOS NAS CLÁUSULAS WHERE E ORDER BY............................................................31
MOSTRANDO O RESULTADO DE CÁLCULOS COM DATAS NA CLÁUSULA SELECT..........................31
SQL> SELECT NOMEFUNC, SYSDATE, DATAADM, SYSDATE - DATAADM..............................................32
UTILIZANDO FUNÇÕES NÚMERICAS, DE DATA E CARACTER............................................................33
Introdução às Funções.......................................................................................................................... 33
Funções Numéricas:.............................................................................................................................. 33
Função ROUND..................................................................................................................................... 33
Função TRUNC..................................................................................................................................... 33
Função CEIL.......................................................................................................................................... 34
Função FLOOR..................................................................................................................................... 34
Função SIGN......................................................................................................................................... 35
Função MOD......................................................................................................................................... 35
Função ABS........................................................................................................................................... 36
Função NVL........................................................................................................................................... 36
Funções Caracter:................................................................................................................................. 36
Função LOWER................................................................................................................................................... 37
Força dados alfanuméricos para minúsculo.........................................................................................................37
Função UPPER.................................................................................................................................................... 37
Função INITCAP.................................................................................................................................................. 37
Função SUBSTR(coluna/valor, posição, n)..........................................................................................................38
Função LENGTH.................................................................................................................................................. 38
O operador ||......................................................................................................................................................... 39
Funções Data:....................................................................................................................................... 39
Função ADD_MONTHS........................................................................................................................................ 40
Função LAST_DAY............................................................................................................................................... 40
Função MONTHS_BETWEEN............................................................................................................................. 41
Função NEXT_DAY.............................................................................................................................................. 41
Funções de Conversão:......................................................................................................................... 42
Função TO_CHAR................................................................................................................................................ 42
Podemos reformatar datas com os seguintes formatos.......................................................................................43
USANDO TO_CHAR PARA CONVERTER NUMÉRICOS EM CARACTER........................................................43
Função TO_NUMBER.......................................................................................................................................... 43
Função TO_DATE................................................................................................................................................ 44
UTILIZANDO FUNÇÕES DE GROUP................................................................................................... 44
Função AVG.......................................................................................................................................................... 44
Função COUNT.................................................................................................................................................... 44
UTILIZANDO A CLÁUSULA GROUP BY..............................................................................................................45
POSSÍVEIS ERROS UTILIZANDO FUNÇÕES DE GRUPO...............................................................................47
MOSTRANDO GRUPOS ESPECÍFICOS............................................................................................................47
Cláusula HAVING............................................................................................................................................ 47
Utilizando as cláusulas WHERE e HAVING....................................................................................................48
CONSULTANDO DADOS DE VÁRIAS TABELAS.............................................................49
OBJETIVOS DO CAPÍTULO.............................................................................................................................. 49
JOINS......................................................................................................................................................... 49
USANDO ‘ALIAS’ PARA AS TABELAS.................................................................................................. 50
MOSTRANDO LINHAS ESPECÍFICAS DE TABELAS RELACIONADAS.............................................51
MOSTRANDO LINHAS QUE NÃO SATISFAZEM A CONDIÇÃO JOIN.................................................51
CRIANDO JOIN DE UMA TABELA COM ELA MESMA.........................................................................52
SUBQUERIES.....................................................................................................................54
OBJETIVOS DO CAPÍTULO.............................................................................................................................. 54
SUBQUERY............................................................................................................................................... 54
UTILIZANDO SUBQUERY.................................................................................................................... 54
MOSTRAR DADOS DE UMA QUERY PRINCIPAL UTILIZANDO UMA FUNÇÃO DE GRUPO NA
SUBQUERY........................................................................................................................................... 55
SUBQUERIES QUE RETORNAM MAIS QUE UMA LINHA..................................................................56
COMPARANDO MAIS QUE UM VALOR...............................................................................................56
UTILIZANDO A CLÁUSULA HAVING COM SUBQUERY......................................................................57
ANINHANDO VÁRIAS SUBQUERIES DENTRO DE UMA QUERY PRINCIPAL...................................57
UTILIZANDO OS OPERADORES AND e OR COM SUBQUERIES......................................................58
SUBQUERIES CORRELACIONADAS.................................................................................................. 58
COMANDOS DE DEFINIÇÃO DE DADOS (DDL)..............................................................59
OBJETIVOS DO CAPÍTULO.............................................................................................................................. 59
ESTRUTURA DE DADOS ORACLE.......................................................................................................... 59
TABELA................................................................................................................................................. 59
REGRAS PADRÕES PARA CRIAÇÃO DE TABELAS..........................................................................................59
PRODUZINDO UM DIAGRAMA DE ENTIDADE E RELACIONAMENTO............................................................59
TERMINOLOGIA BÁSICA.................................................................................................................................... 59
Chaves Primárias (PK).................................................................................................................................... 59
Chaves Estrangeiras (FK)............................................................................................................................... 60
Colunas Obrigatórias (NN) ou Opcionais........................................................................................................60
Colunas Únicas (U).......................................................................................................................................... 60
ESPECIFICANDO O FORMATO DE ARMAZENAMENTO PARA CADA COLUNA.............................................60
DEFININDO REGRAS DE INTEGRIDADE DE DADOS......................................................................................60
Cláusula Constraint......................................................................................................................................... 60
Constraints de Integridade de Dados..............................................................................................................61
CRIANDO TABELAS NO BANCO DE DADOS....................................................................................................61
CONFIRMANDO A ESTRUTURA DE UMA TABELA...........................................................................................62
ALTERANDO UMA TABELA................................................................................................................................. 62
ADICIONANDO E REMOVENDO CONSTRAINTS.............................................................................................63
REMOVENDO UMA TABELA DO BANCO DE DADOS.......................................................................................64
VISÕES DE TABELAS ORACLE.......................................................................................................................... 64
CRIANDO VISÕES DE TABELAS........................................................................................................................ 64
CONSULTANDO DADOS DA VISÃO FUNCDEPT10..........................................................................................65
CONSULTANDO DADOS DA VISÃO DEPT_SOMA_SAL...................................................................................65
UTILIZANDO A OPÇÃO “WITH CHECK OPTION”..............................................................................................66
REMOVENDO UMA VISÃO................................................................................................................................. 66
SEQUÊNCIAS ORACLE....................................................................................................................... 67
Sintaxe incompleta............................................................................................................................................... 67
CRIANDO SEQUÊNCIAS.................................................................................................................................... 67
CONFIRMANDO SEQUÊNCIAS.......................................................................................................................... 67
REFERENCIANDO VALORES PARA CHAVES PRIMÁRIAS.............................................................................68
Confirmando as inserções.................................................................................................................................... 69
ALTERANDO UMA SEQUÊNCIA......................................................................................................................... 69
REMOVENDO UMA SEQUÊNCIA....................................................................................................................... 69
ÍNDICES................................................................................................................................................ 69
Tabela de métodos de acesso a dados do servidor Oracle..................................................................................70
Exemplos:............................................................................................................................................................. 71
Para acessar uma linha da tabela EMPREGADO de acordo com o endereço da linha.................................71
Para acessar linhas da tabela EMPREGADO com full-table scan..................................................................71
Para acessar uma linha da tabela EMPREGADO usando um índice. A linha é recuperada através do índice
somente se o índice foi previamente criado para a coluna ULTIMO_NOME; caso contrário, a linha é
recuperada com full-table scan........................................................................................................................ 71
Considerando as Vantagens e Desvantagens da Criação de Índices.............................................................71
CRIANDO ÍNDICES............................................................................................................................................. 71
O DICIONÁRIO DE DADOS DO ORACLE............................................................................................73
Acesso ao Dicionário de Dados........................................................................................................................... 73
Tabelas e Visões do Dicionário de Dados............................................................................................................73
Consultando o Dicionário de Dados: Exemplos...................................................................................................74
Consultando o Dicionário de Dados: Exemplos - continuação.............................................................................74
SEGURANÇA DO BANCO DE DADOS............................................................................75
OBJETIVOS DO CAPÍTULO.............................................................................................................................. 75
PRIVILÉGIOS DE SISTEMA: PANORAMA................................................................................................ 75
Tipos de Privilégios de Sistema:............................................................................................................ 75
CONCEDENDO PRIVILÉGIOS DE SISTEMA.......................................................................................76
VERIFICANDO OS PRIVILÉGIOS DE SISTEMA CONCEDIDOS.........................................................77
PRIVILÉGIOS DE OBJETO: PANORAMA............................................................................................. 78
Comandos SQL Permitidos pelos Privilégios de Objetos:....................................................................................78
CONCEDENDO PRIVILÉGIOS DE OBJETO........................................................................................ 79
Cláusula WITH GRANT OPTION......................................................................................................................... 80
VERIFICANDO OS PRIVILÉGIOS DE OBJETO CONCEDIDOS..........................................................81
VERIFICANDO OS PRIVILÉGIOS DE OBJETOS RECEBIDOS...........................................................82
CRIANDO SINÔNIMOS PARA FACILITAR O ACESSO........................................................................83
Para apagar um sinônimo, o comando DROP SYNONYM deve ser utilizado.....................................................83
REMOVENDO PRIVILÉGIOS DE OBJETO.......................................................................................... 84
USANDO PERSONAGENS PARA AGRUPAR PRIVILÉGIOS...............................................................84
CRIANDO UM PERSONAGEM............................................................................................................................ 85
INICIANDO E ENCERRANDO UMA INSTÂNCIA..............................................................87
OBJETIVOS DO CAPÍTULO.............................................................................................................................. 87
INSTÂNCIAS ORACLE.............................................................................................................................. 87
INICIANDO E ENCERRANDO UMA INSTÂNCIA - PANORÂMA..........................................................87
Passos para iniciar uma instância:....................................................................................................................... 87
Passos para encerrar uma instância:................................................................................................................... 87
EXECUTANDO O SQL*DBA...................................................................................................................... 88
ABRINDO UMA SESSÃO DE TRABALHO................................................................................................ 88
INICIANDO UMA INSTÂNCIA.................................................................................................................... 89
INICIANDO UMA INSTÂNCIA NO MODO RESTRITO...............................................................................90
ENCERRANDO UMA INSTÂNCIA............................................................................................................. 90
ALTERANDO O ESTADO DA BASE DE DADOS.......................................................................................91
HABILITANDO SESSÕES RESTRITAS..................................................................................................... 91
GERENCIAMENTO DE TABLESPACES...........................................................................93
OBJETIVOS DO CAPÍTULO.............................................................................................................................. 93
CONCEITO DE TABLESPACES................................................................................................................ 93
Características:...................................................................................................................................... 93
CRIANDO UMA TABLESPACE.................................................................................................................. 94
ALTERANDO UMA TABLESPACE............................................................................................................. 94
Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONCEITOS BÁSICOS

Objetivos do Capítulo

 Demonstrar os conceitos básicos referente ao Oracle RDBMS.

Sistema Gerenciador de Banco de Dados

O DBMS é a solução para controlar o gerenciamento de informações, assim como,


armazenamento dos dados e acesso às informações.

Um sistema gerenciador de banco de dados (DBMS) deve ser confiável para gerenciar
uma grande quantidade de dados em um ambiente multi-usuário para que muitos usuários
possam concorrentemente acessar as mesmas informações.

Tudo isso deve ser executado acompanhado de alta performance para os usuários e ter
segurança quanto ao acesso não autorizado.

Sistema Gerenciador de Banco de Dados Relacional

Os sistemas gerenciadores de banco de dados evoluíram dos modelos hierárquico, para


rede e mais recentemente para o modelo relacional.

O sistema gerenciador de banco de dados relacional possui três aspectos fundamentais:

 Estruturas
Estruturas são objetos bem definidos que armazenam os dados do banco de dados.

 Operações
Operações são ações que permitem os usuários manipular os dados e estruturas do banco
de dados. As operações devem seguir um conjunto de regras de integridade.

 Regras de Integridade
Regras de integridade são os regulamentos que governam quais operações serão
permitidas nos dados e estruturas do banco de dados. Regras de integridade protegem os dados
e estruturas do banco de dados.

Benefícios oferecidos pelo Sistema Gerenciador de Banco de Dados Relacional


(RDBMS) :

 Independência do armazenamento físico dos dados e estruturas lógicas do banco de dados;

 variável e fácil acesso aos dados;

 flexibilidade completa no design do banco de dados;

 redução de armazenamento de dados e redundância.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 6


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

O BANCO DE DADOS ORACLE

Um banco de dados é uma coleção de dados, a qual é tratada como uma unidade.
O objetivo genérico de um banco de dados é armazenar e recuperar informações
relacionadas.
O Oracle Server permite soluções efetivas e eficientes para as principais características de
um banco de dados:

 Grande Banco de Dados e Gerenciamento de Espaço


Oracle suporta base de dados, com centenas de gigabytes em tamanho. Para ter um uso
eficiente de dispositivos de hardware, ele permite um controle completo de uso de espaço.

 Muitos Usuários Conectados no Banco de Dados


Oracle suporta um grande número de usuários concorrentes executando uma variedade de
aplicações do banco de dados operando nos mesmos dados. Ele minimiza contenção de dados e
garante a concorrência dos dados.

 Alta Performance em Processamento de Transação


Oracle mantém as características com um alto grau de performance de sistema. Usuários
do banco de dados não sofrem com baixa performance de processamento.

 Gerenciamento de Segurança
Para proteger o uso e acesso não autorizados, Oracle permite características de
segurança para limitar e monitorar acesso a dados. Estas características são fáceis de gerenciar
mesmo um complexo projeto de segurança de acesso a dados.

Garantia de integridade nos dados

Oracle garante integridade de dados, que determina os padrões para os dados aceitáveis.
Como resultado o custo de codificação e gerenciamento em muitas aplicações do banco de dados
são eliminados.

 Ambiente Client/Server (processamento distribuído)


Oracle permite que o processamento seja dividido entre o banco de dados do servidor e as
aplicações do cliente. Todas as responsabilidades de gerenciar o compartilhamento de dados
podem ser processados pelo computador que está executando o sistema gerenciador de banco
de dados (Oracle Server), enquanto as estações de trabalho que estão executando as aplicações
do banco de dados se concentram em interpretação e exibição dos dados.

 Sistemas de Banco de Dados Distribuídos


Para ambientes de computação que são conectados via rede, Oracle combina os dados
fisicamente localizados em computadores diferentes como um banco de dados lógico que pode
ser acessado por todos usuários da rede.

 Portabilidade
Oracle é portável para trabalhar com diferentes sistemas operacionais e é o mesmo para
todos sistemas. Aplicações desenvolvidas para Oracle podem ser portadas para qualquer sistema
operacional com pequena ou nenhuma modificação.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 7


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

INTRODUÇÃO AO SQL E SQL*PLUS

Objetivos do Capítulo

 Introdução à linguagem usada para acessar o banco de Dados Oracle

 Introdução à ferramenta SQL*PLUS

 Recuperar informações de tabelas

 Editar comandos SQL com editor de linha SQL*PLUS

SQL

Um sistema gerenciador de banco de dados requer uma linguagem de comunicação para


que os usuários/aplicações possam acessar os dados.

SQL é a linguagem padrão utilizada pelos bancos de dados relacionais adaptada pela
ANSI (American National Standards Institute).

Características do SQL

 SQL é uma linguagem que utiliza palavras em inglês assim como SELECT, INSERT, DELETE
como parte de um comando.

 SQL é uma linguagem não procedural, ou seja, não requer que seja especificado o método de
acesso aos dados.

 SQL fornece comandos para uma variedade de tarefas assim como:


 consultar dados
 inserir, atualizar e apagar linhas em uma tabela
 criar, modificar e remover objetos do banco de dados
 controlar acesso ao banco de dados e aos objetos(tabela, procedure)
 garantir consistência do banco de dados

 Comandos SQL são armazenados um comando por vez no buffer SQL e podem ser editados
pelos comandos SQL*PLUS

 O banco de dados Oracle pode também ser acessado com PL/SQL(extensão do SQL)

SQL*PLUS

SQL*PLUS não é uma extensão do SQL.

Comandos SQL*PLUS não ficam armazenados no SQL buffer.

SQL*PLUS é uma ferramenta Oracle que consiste de comandos para :

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 8


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

 executar comandos SQL


 editar comandos SQL com um editor de linha
 controlar variáveis de ambiente
 formatar resultados de consultas ao banco de dados
 criar arquivos para manipular vários comandos SQL e SQL*PLUS de uma só vez (scripts)

CONJUNTO DE COMANDOS SQL

SELECT

 Este comando é usado para recuperar informações do banco de dados

INSERT, UPDATE, DELETE, COMMIT, ROLLBACK (DML)

 Estes comandos são utilizados para a manipulação dos dados, assim como, inserir uma nova
linha, atualizar linhas existentes, remover linhas e confirmar ou desfazer uma transação nas
tabelas do banco de dados.

CREATE, ALTER, DROP, RENAME (DDL)

 Estes comandos são utilizados para definir as estruturas de dados, assim como, criar , alterar e
remover qualquer estrutura de dados.

GRANT, REVOKE (DDC)

 Estes comandos são utilizados para dar ou remover direitos de acesso ao banco de dados e
aos objetos do banco de dados

Obs: Há mais comandos SQL, para maiores informações pesquisar o Manual ORACLE7
Server SQL Language Reference.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 9


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

ESCREVENDO COMANDOS SQL

Antes de escrever comandos SQL, é importante ter em mente algumas regras para
construção de comandos válidos e de fácil leitura.

 Comandos SQL podem ser escritos em uma ou em várias linhas

 Cláusulas são geralmente separadas por linhas

 Palavras de comandos não podem ser separadas

 Não há diferença entre comandos escritos em maiúsculo ou minúsculo

 No final do comando é necessário um ‘ ; ‘ ou ‘ / ‘ para que possa ser executado

Todos os comandos abaixo são válidos:

SELECT * FROM FUNCIONARIO;

SELECT
*
FROM
FUNCIONARIO
/

SELECT *
FROM FUNCIONARIO ;

LOGIN NO SQL*PLUS COMO USUÁRIO SYSTEM

Exemplo:

sqlplus <enter>

SQL*Plus: Release 3.3.2.0.1 - Production on Thu Feb 20 10:39:33


1997
Copyright (c) Oracle Corporation 1979, 1994. All rights reserved.

Enter Username: system


Enter your password: *******

Connected to:
Oracle7 Release 7.3.2.1.1 - Production Release
With the distributed and replication options
PL/SQL Release 2.3.2.0.0 - Production

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 10


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

LOG OUT DO SQL*PLUS

SQL> exit

MOSTRANDO ESTRUTURA DE UMA TABELA DO BANCO DE DADOS

Sintaxe: DESC[RIBE] nome da tabela


Onde: nome da tabela
é o nome de qualquer tabela, view, ou sinônimo que o usuário corrente
tenha acesso.

Exemplo: Mostra informações sobre a estrutura da tabela funcionario


SQL> DESCRIBE funcionario
Name Null? Type
------------------------------- -------- ----
NUMFUNC NOT NULL NUMBER(5)
NOMEFUNC NOT NULL VARCHAR2(30)
DATANASC DATE
DATAADM DATE
CODCARGO NUMBER(5)
CODDEPT NUMBER(5)
SALARIO NUMBER(11,2)

Name
É o nome da coluna da tabela (numfunc, nomefunc).

Null?
Determina se a coluna deve conter dado ou não. Por exemplo se um novo funcionario for incluído
na tabela FUNCIONARIO, as colunas numfunc e nomefunc devem ser preenchidas com algum
dado, já a coluna salario por exemplo não é obrigada a ser preenchida.

Type
Determina qual o tipo de dado para a coluna.

Exemplo:

Tipo de Dado NUMBER(t,d)

 Aceita valores numéricos tendo um número máximo de dígitos t, e o número de dígitos à direita
do ponto decimal d. Exemplo NUMBER(11,2) = 999999999.99.

Tipo de Dado VARCHAR2(n)


 Aceita valores alfanuméricos com tamanho máximo variável de n.

Tipo de Dado Date


 Aceita valores de data e hora com intervalo entre 1º de Janeiro de 4712 A.C. e 31º de
Dezembro de 4712 D.C.

Obs: Os tipos de dados serão comentados com mais detalhes no capítulo 7 (DDL).

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 11


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONSULTANDO DADOS COM O COMANDO SELECT

O comando SELECT recupera informações do banco de dados.

De uma forma bem simples, o comando deve incluir:

 a cláusula SELECT, que lista as colunas que devem ser mostradas.


 a cláusula FROM, que especifica a(s) tabela(s) envolvida(s).

Para mostrar todos os nomes dos funcionários, código de departamento e salário na tabela
funcionário:

Ex:
SQL> SELECT NOMEFUNC, CODDEPT, SALARIO
2 FROM FUNCIONARIO;

NOMEFUNC CODDEPT SALARIO


------------------------------ --------- ---------
EDMAR FERNANDES 10 2000
AMARAL DOS REIS 40 4100
ROSANGELA DA SILVA 30 1750
JULIANA ANDRADE 70 1230
WELLINGTON SOUZA 10 600
LUCIANA CARRERA 80 870
MARCUS ALENCAR 10 2330
OSCAR MIRANDA 80 3870
ANTONIO CARLOS DE OLIVEIRA 30 2080
EMERSON ALBUQUERQUE 10 2350
JOSE CARLOS 10 4000
CARLA GOMES DE SOUZA 80 2350

Obs: Os nomes das colunas são separados por uma vírgula.

SELECIONANDO TODAS AS COLUNAS DA TABELA DEPARTAMENTO

Ex:

SQL> SELECT * FROM DEPARTAMENTO;

CODDEPT NOMEDEPT
--------- ------------------------------
10 INFORMATICA
20 RECURSOS HUMANOS
30 FINANCEIRO
40 VENDAS
50 CONTABILIDADE
60 DIRETORIA
70 MARKETING
80 ADMINISTRACAO

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 12


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Para selecionar todos os códigos de departamento na tabela funcionário:

Ex:

SQL> SELECT CODDEPT FROM FUNCIONARIO;

CODDEPT
---------
10
40
30
70
10
80
10
80
30
10
10
80

REMOVENDO LINHAS DUPLICADAS ANTES DO RESULTADO DO COMANDO


SELECT SER RETORNADO:

A cláusula distinct:

Para eliminar os códigos de departamento duplicados, incluir o qualificador DISTINCT no


comando SELECT:

Ex:

SQL> SELECT DISTINCT CODDEPT


2 FROM FUNCIONARIO;

CODDEPT
---------
10
30
40
70
80

Múltiplas colunas podem ser especificadas após o qualificador DISTINCT , e o qualificador


trabalha sobre todas as colunas.

Para mostrar valores distintos de código de departamento e código de cargo

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 13


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Ex:
SQL> SELECT DISTINCT CODDEPT, CODCARGO
2 FROM FUNCIONARIO;

CODDEPT CODCARGO
--------- ---------
10 1
10 3
10 4
30 5
40 2
70 10
80 8
80 9

COLOCANDO “ALIAS” PARA AS COLUNAS SELECIONADAS

Um “alias” de coluna é um título alternativo para o nome da coluna.

Para mostrar os nomes dos funcionários, seguido do seu salário anual, colocando um
“alias “ para a coluna salário anual.

Ex:

SQL> SELECT NOMEFUNC, SALARIO * 12 SALARIO_ANUAL


2 FROM FUNCIONARIO;

NOMEFUNC SALARIO_ANUAL
------------------------------ -------------
EDMAR FERNANDES 24000
AMARAL DOS REIS 49200
ROSANGELA DA SILVA 21000
JULIANA ANDRADE 14760
WELLINGTON SOUZA 7200
LUCIANA CARRERA 10440
MARCUS ALENCAR 27960
OSCAR MIRANDA 46440
ANTONIO CARLOS DE OLIVEIRA 24960
EMERSON ALBUQUERQUE 28200
JOSE CARLOS 48000
CARLA GOMES DE SOUZA 28200

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 14


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

MOSTRANDO LINHAS ESPECÍFICAS DE UMA TABELA DE ACORDO COM UMA


CONDIÇÃO DE PESQUISA

A cláusula where:

A cláusula WHERE pode comparar valores em colunas, valores literais, expressões aritméticas
ou funções. A cláusula WHERE espera por três elementos:

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

Operadores de comparação são usados na cláusula WHERE e podem ser divididos em duas
categorias, Lógico e SQL.

Operadores Lógicos

Operador Significado
= Igual à
> maior que
>= maior ou igual à
< menor que
<= menor ou igual à

Valores Strings e Date na cláusula WHERE

Caracteres strings e date na cláusula WHERE devem ficar entre aspas simples.
Caracteres strings são case sensitive.

Para selecionar número, salário, departamento e código do gerente, do funcionário José Carlos:

Ex:
SQL> SELECT NUMFUNC, NOMEFUNC, CODDEPT, SALARIO
2 FROM FUNCIONARIO
3 WHERE NOMEFUNC = 'JOSE CARLOS' ;

NUMFUNC NOMEFUNC CODDEPT SALARIO


--------- ------------------------------ --------- ---------
11 JOSE CARLOS 10 4000

Para selecionar todas as colunas da tabela departamento, onde o código do departamento seja
maior que 60:

Ex:

SQL> SELECT *
2 FROM DEPARTAMENTO
3 WHERE CODDEPT > 60;

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 15


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 16


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Operadores SQL

Operador Significado
BETWEEN...AND... entre dois valores (inclusive)
NOT BETWEEN...AND... não entre dois valores
IN (list) igual a qualquer membro da lista
NOT IN (list) diferente de todos os membros da lista
LIKE igual a um caracter padrão
NOT LIKE não igual a um caracter padrão
IS NULL é um valor nulo
IS NOT NULL não é um valor nulo

O operador BETWEEN
Mostra linhas onde o conteúdo da coluna esteja entre dois valores e inclusive.

Para mostrar os funcionários cujo salário está entre 1500 e 2500.

Ex:
SQL> SELECT NOMEFUNC, SALARIO
2 FROM FUNCIONARIO
3 WHERE SALARIO BETWEEN 1500 AND 2500;

NOMEFUNC SALARIO
------------------------------ ---------
EDMAR FERNANDES 2000
ROSANGELA DA SILVA 1750
MARCUS ALENCAR 2330
ANTONIO CARLOS DE OLIVEIRA 2080
EMERSON ALBUQUERQUE 2350
CARLA GOMES DE SOUZA 2350

O operador NOT BETWEEN


Mostra linhas onde o conteúdo da coluna não esteja entre dois valores.

Para mostrar os funcionários cujo salário seja menor que 1500 e maior que 2500.

Ex:
SQL> SELECT NOMEFUNC, SALARIO
2 FROM FUNCIONARIO
3 WHERE SALARIO NOT BETWEEN 1500 AND 2500;

NOMEFUNC SALARIO
------------------------------ ---------
AMARAL DOS REIS 4100
JULIANA ANDRADE 1230
WELLINGTON SOUZA 600
LUCIANA CARRERA 870
OSCAR MIRANDA 3870
JOSE CARLOS 4000

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 17


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

O operador IN

Mostra linhas onde o conteúdo da coluna seja igual a qualquer um dos valores de uma lista
especificada.

Para mostrar os funcionários cujo código de departamento seja um dos dois códigos especificados
na lista.

Ex:

SQL> SELECT NUMFUNC, NOMEFUNC, SALARIO, CODDEPT


2 FROM FUNCIONARIO
3 WHERE CODDEPT IN (10,30);

NUMFUNC NOMEFUNC SALARIO CODDEPT


--------- ------------------------------ --------- ---------
1 EDMAR FERNANDES 2000 10
3 ROSANGELA DA SILVA 1750 30
5 WELLINGTON SOUZA 600 10
7 MARCUS ALENCAR 2330 10
9 ANTONIO CARLOS DE OLIVEIRA 2080 30
10 EMERSON ALBUQUERQUE 2350 10
11 JOSE CARLOS 4000 10

Obs: Se dados caracteres ou datas forem usados na lista, eles devem ficar entre aspas
simples.

O operador NOT IN

Mostra linhas onde o conteúdo da coluna seja não igual a todos os valores de uma lista
especificada.

Para mostrar os funcionários cujo código de departamento seja diferente dos dois códigos
especificados na lista.

Ex:

SQL> SELECT NUMFUNC, NOMEFUNC, SALARIO, CODDEPT


2 FROM FUNCIONARIO
3 WHERE CODDEPT NOT IN (10,30);

NUMFUNC NOMEFUNC SALARIO CODDEPT


--------- ------------------------------ --------- ---------
2 AMARAL DOS REIS 4100 40
4 JULIANA ANDRADE 1230 70
6 LUCIANA CARRERA 870 80
8 OSCAR MIRANDA 3870 80
12 CARLA GOMES DE SOUZA 2350 80

Obs: Se dados caracteres ou datas forem usados na lista, eles devem ficar entre aspas
simples.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 18


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

O operador LIKE

Algumas vezes você pode não conhecer exatamente o valor para pesquisa. Usando o operador
LIKE é possível selecionar linhas baseado em caracteres curingas.

Caracter Descrição
% Igual a qualquer número de caracteres
_ Igual a um número de caracter específico

Para selecionar todos os empregados cujo nome começa com um ‘E’:

Ex:

SQL> SELECT NOMEFUNC


2 FROM FUNCIONARIO
3 WHERE NOMEFUNC LIKE 'E%' ;

NOMEFUNC
------------------------------
EDMAR FERNANDES
EMERSON ALBUQUERQUE

O ‘_’ pode ser usado para pesquisar por um número específico de caracteres.

Para selecionar todos os departamentos que têm exatamente 6 caracteres.

Ex:

SQL> SELECT *
2 FROM DEPARTAMENTO
3 WHERE NOMEDEPT LIKE '______' ;

CODDEPT NOMEDEPT
--------- ------------------------------
40 VENDAS

O operador NOT LIKE

Para selecionar todos os empregados cujo nome não começa com um ‘E’:

Ex:

SQL> SELECT NOMEFUNC


2 FROM FUNCIONARIO
3 WHERE NOMEFUNC NOT LIKE 'E%';

NOMEFUNC
------------------------------
AMARAL DOS REIS
ROSANGELA DA SILVA
JULIANA ANDRADE
WELLINGTON SOUZA

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 19


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

LUCIANA CARRERA
MARCUS ALENCAR
OSCAR MIRANDA
ANTONIO CARLOS DE OLIVEIRA
JOSE CARLOS
CARLA GOMES DE SOUZA

O operador IS NULL

Mostra linhas onde o conteúdo da coluna seja nulo.

Um valor nulo significa um valor desconhecido, não é igual a zero ou a espaços em branco.

Se um valor NULL é usado em uma comparação, então o operador de comparação deve ser IS
NULL ou IS NOT NULL. Se estes operadores não são usados e os valores nulos são comparados,
o resultado é sempre FALSO.

Para mostrar todos empregados que não têm gerente:

Ex:

SQL> SELECT NOMEFUNC, CODDEPT, GERENTE


2 FROM FUNCIONARIO
3 WHERE GERENTE IS NULL;

NOMEFUNC CODDEPT GERENTE


------------------------------ --------- ---------
AMARAL DOS REIS 40
ROSANGELA DA SILVA 30
JULIANA ANDRADE 70
OSCAR MIRANDA 80
ANTONIO CARLOS DE OLIVEIRA 30
JOSE CARLOS 10

Para mostrar todos empregados que têm gerente:

SQL> SELECT NOMEFUNC, CODDEPT, GERENTE


2 FROM FUNCIONARIO
3 WHERE GERENTE IS NOT NULL;

NOMEFUNC CODDEPT GERENTE


------------------------------ --------- ---------
EDMAR FERNANDES 10 11
WELLINGTON SOUZA 10 11
LUCIANA CARRERA 80 8
MARCUS ALENCAR 10 11
EMERSON ALBUQUERQUE 10 11
CARLA GOMES DE SOUZA 80 8

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 20


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONSULTANDO DADOS COM MÚLTIPLAS CONDIÇÕES

Os operadores lógicos AND e OR são usados para construir várias condições de pesquisas.

O operador AND espera que todas condições especificadas na cláusula WHERE sejam
verdadeiras.

O operador OR espera que alguma das condições especificadas na cláusula WHERE seja
verdadeira.

Para mostrar todos os funcionários onde o salario esteja entre 1500 e 2500 e que trabalham no
departamento 10:

Ex:

SQL> SELECT NOMEFUNC, SALARIO, CODDEPT


2 FROM FUNCIONARIO
3 WHERE SALARIO BETWEEN 1500 AND 2500
4 AND CODDEPT = 10;

NOMEFUNC SALARIO CODDEPT


------------------------------ --------- ---------
EDMAR FERNANDES 2000 10
MARCUS ALENCAR 2330 10
EMERSON ALBUQUERQUE 2350 10

Para mostrar todos os funcionários onde o salario esteja entre 1500 e 2500 ou que trabalham no
departamento 10:

Ex:

SQL> SELECT NOMEFUNC, SALARIO, CODDEPT


2 FROM FUNCIONARIO
3 WHERE SALARIO BETWEEN 1500 AND 2500
4 OR CODDEPT = 10;

NOMEFUNC SALARIO CODDEPT


------------------------------ --------- ---------
EDMAR FERNANDES 2000 10
ROSANGELA DA SILVA 1750 30
WELLINGTON SOUZA 600 10
MARCUS ALENCAR 2330 10
ANTONIO CARLOS DE OLIVEIRA 2080 30
EMERSON ALBUQUERQUE 2350 10
JOSE CARLOS 4000 10
CARLA GOMES DE SOUZA 2350 80

Obs: Os operadores AND e OR podem ser combinados na cláusula WHERE, quando isto
ocorrer, todos os ANDs serão executados primeiro que os ORs.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 21


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

PRECEDÊNCIA DE OPERADORES

Todos os operadores são organizados em uma hierarquia que determina a precedência deles.

Quando existe uma combinação de duas ou mais condições de pesquisa, seguir as regras de
precedência.

Regras de precedência:

Ordem Operador
1 Todos os operadores de comparação
(=, <>, >, >=, <, <=, IN, LIKE, IS NULL, BETWEEN....AND)
2 AND
3 OR

Para mostrar todos os funcionários que têm um salário acima de 2000 e que o código do cargo
seja igual a ‘1’ e todos funcionários com o código do cargo igual a ‘9’

Ex:

SQL> SELECT NOMEFUNC, SALARIO, CODCARGO


2 FROM FUNCIONARIO
3 WHERE SALARIO > 2000 AND CODCARGO = 1
4 OR CODCARGO = 9;

NOMEFUNC SALARIO CODCARGO


------------------------------ --------- ---------
LUCIANA CARRERA 870 9
MARCUS ALENCAR 2330 1
EMERSON ALBUQUERQUE 2350 1
CARLA GOMES DE SOUZA 2350 9

Para mostrar todos os funcionários com cargo ‘1’ ou ‘9’ e com salários acima de 2000.

Ex:

SQL> SELECT NOMEFUNC, SALARIO, CODCARGO


2 FROM FUNCIONARIO
3 WHERE SALARIO > 2000 AND
4 (CODCARGO = 1 OR CODCARGO = 9);

NOMEFUNC SALARIO CODCARGO


------------------------------ --------- ---------
MARCUS ALENCAR 2330 1
EMERSON ALBUQUERQUE 2350 1
CARLA GOMES DE SOUZA 2350 9

Obs: Os parênteses especificam a ordem em que os operadores devem ser avaliados.


Neste exemplo o operador OR é executado antes do operador AND.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 22


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

ORDENANDO AS LINHAS RETORNADAS

A cláusula ORDER BY

Normalmente a ordem das linhas retornadas em uma query é indefinida.

A cláusula ORDER BY pode ser usada para classificar as linhas retornadas.

Para selecionar os funcionários do departamento ‘10’ , em ordem de data de admissão:

Ex:

SQL> SELECT NOMEFUNC, CODDEPT, SALARIO, DATAADM


2 FROM FUNCIONARIO
3 WHERE CODDEPT = 10
4 ORDER BY DATAADM;

NOMEFUNC CODDEPT SALARIO DATAADM


------------------------------ --------- --------- ---------
JOSE CARLOS 10 4000 03-NOV-91
WELLINGTON SOUZA 10 600 23-JUN-92
EDMAR FERNANDES 10 2000 01-DEC-94
MARCUS ALENCAR 10 2330 01-DEC-95
EMERSON ALBUQUERQUE 10 2350 01-DEC-95

INVERTENDO A ORDEM PADRÃO

Para inverter a esta ordem, a palavra DESC deve ser especificada após a cláusula ORDER BY.

Para selecionar os funcionários do departamento ‘10’ , em ordem de data de admissão


decrescente:

Ex:

SQL> SELECT NOMEFUNC, CODDEPT, SALARIO, DATAADM


2 FROM FUNCIONARIO
3 WHERE CODDEPT = 10
4 ORDER BY DATAADM DESC;

NOMEFUNC CODDEPT SALARIO DATAADM


------------------------------ --------- --------- ---------
MARCUS ALENCAR 10 2330 01-DEC-95
EMERSON ALBUQUERQUE 10 2350 01-DEC-95
EDMAR FERNANDES 10 2000 01-DEC-94
WELLINGTON SOUZA 10 600 23-JUN-92
JOSE CARLOS 10 4000 03-NOV-91

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 23


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONSULTANDO DADOS DO BANCO DE DADOS ORACLE

O Oracle possui um dicionário de dados o qual armazena informações sobre o banco de dados
Oracle, assim como, nome de objetos (tabela, procedure, etc), nome de usuários, estrutura dos
objetos do banco de dados, etc .

Tabelas dentro do banco de dados Oracle

Tabelas Descrição
Tabelas de Usuários Tabelas criadas e mantidas pelo usuário, assim como,
funcionário, que contém dados de usuários

Dicionário de Dados Coleção de tabelas criadas e mantidas pelo Oracle,


assim como, user_objects, que contém informações
sobre os objetos do banco de dados Oracle. Por
exemplo, quando um usuário cria uma tabela, o
Oracle inseri uma nova linha na user_objects.

CONSULTANDO DADOS DO DICIONÁRIO DE DADOS.

Para mostrar a estrutura da user_objects:


Ex:

SQL> DESC USER_OBJECTS


Name Null? Type
------------------------------- -------- ----
OBJECT_NAME VARCHAR2(128)
OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(13)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(75)
STATUS VARCHAR2(7)

Para mostrar os nomes de todas as tabelas do usuário corrente:


Ex:

SQL> SELECT OBJECT_NAME


2 FROM USER_OBJECTS
3 WHERE OBJECT_TYPE = 'TABLE' ;

OBJECT_NAME
-----------------------------------
CARGO
CLIENTE
COMISSAOVENDA
DEPARTAMENTO
FUNCIONARIO
ITEM_ESTOQUE
ITEM_PEDIDO
MOV_ESTOQUE
NOTA_FISCAL
PEDIDO

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 24


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 25


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

EDITANDO COMANDOS SQL

 Quando você entra com um comando SQL, ele é armazenado em uma parte da memória
chamada de SQL buffer, e permanece até você entrar com um novo comando SQL.

 Enquanto o comando SQL está no buffer, há algumas operações que podem ser executadas
usando comandos SQL*PLUS.

Comando Abreviação Descrição


APPEND A texto adiciona texto no final da linha corrente

CHANGE C/old/new altera o texto antigo para o novo na linha


corrente

DEL apaga a linha corrente

INPUT I inseri uma ou mais linhas de texto após a


linha corrente

LIST L lista o comando SQL completo

RUN R mostra e executa o comando SQL corrente


no buffer

/ executa o comando SQL corrente no buffer

Exemplos:

Para mostrar o nome de cada departamento:

Ex:

SQL> SELECT NOMEDEPT


2 FROM DEPARTAMENTO;

NOMEDEPT
------------------------------
INFORMATICA
RECURSOS HUMANOS
FINANCEIRO
VENDAS
CONTABILIDADE
DIRETORIA
MARKETING
ADMINISTRACAO

Para mostrar o nome de cada departamento e o código:

Ex:

SQL> L 1
1* SELECT NOMEDEPT
SQL> A , CODDEPT
1* SELECT NOMEDEPT , CODDEPT

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 26


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Para mostrar o código e o nome de cada departamento, onde o código seja inferior a ‘40’ .

Ex:

SQL> L
1 SELECT NOMEDEPT , CODDEPT
2* FROM DEPARTAMENTO
SQL> I
3 WHERE CODDEPT < 40
4 <enter>

Para mostrar e executar o comando corrente no buffer:

Ex:

SQL> RUN
1 SELECT NOMEDEPT , CODDEPT
2 FROM DEPARTAMENTO
3* WHERE CODDEPT < 40

NOMEDEPT CODDEPT
------------------------------ ---------
INFORMATICA 10
RECURSOS HUMANOS 20
FINANCEIRO 30

Para executar o comando corrente no buffer

Ex:

SQL> /

NOMEDEPT CODDEPT
------------------------------ ---------
INFORMATICA 10
RECURSOS HUMANOS 20
FINANCEIRO 30

COMANDOS SQL*PLUS DIVERSOS

Comando Abreviação Descrição


SAVE salva o comando SQL do buffer para um
arquivo
GET recupera o conteúdo de um arquivo para
o buffer SQL
START executa um arquivo que foi salvo
SPOOL arquivo grava todos os comandos e resultados
seguintes para um arquivo especificado
HOST chama o S.O.
EXIT sai do SQL*PLUS

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 27


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Exemplos:

Para salvar o comando SQL corrente para um arquivo:

Ex:

SQL> SELECT NOMEDEPT , CODDEPT


2 FROM DEPARTAMENTO
3 WHERE CODDEPT < 40
4 <enter>
SQL> SAVE querdept
Created file querdept

Para recuperar o conteúdo de um arquivo para o buffer SQL

Ex:

SQL> get querdept


1 SELECT NOMEDEPT , CODDEPT
2 FROM DEPARTAMENTO
3* WHERE CODDEPT < 40

Para executar um arquivo que foi salvo:

Ex:

SQL> start querdept


SQL> SELECT NOMEDEPT , CODDEPT
2 FROM DEPARTAMENTO
3 WHERE CODDEPT < 40
4 /

NOMEDEPT CODDEPT
------------------------------ ---------
INFORMATICA 10
RECURSOS HUMANOS 20
FINANCEIRO 30

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 28


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONSULTANDO DADOS COM VARIÁVEIS DE SUBSTITUIÇÃO E FUNÇÕES

Objetivos do Capítulo

 Consultar dados de tabelas utilizando variáveis de substituição

 Executar cálculos com números e datas usando operadores aritméticos

 Consultar dados de tabelas utilizando funções de data, numérica e caracter.

 Consultar dados de tabelas utilizando funções de grupo

UTILIZANDO VARIÁVEIS DE SUBSTITUIÇÃO EM COMANDOS SQL

Variáveis de substituição são usadas em comandos SQL e permitem especificar valores em tempo
de execução.

Uma variável de substituição é como se fosse um recipiente em que os valores ficam


armazenados temporariamente.

A variável é prefixada pelo caracter ‘&’, e um valor é associado para ela.

Para mostrar todos os funcionários que tenham determinado cargo , onde o mesmo será
informado pelo usuário em tempo de execução:

Ex:

SQL> SELECT NOMEFUNC, SALARIO, CODCARGO


2 FROM FUNCIONARIO
3 WHERE CODCARGO = &CODIGO_CARGO;
Enter value for codigo_cargo: 1

NOMEFUNC SALARIO CODCARGO


------------------------------ --------- ---------
EDMAR FERNANDES 2000 1
MARCUS ALENCAR 2330 1
EMERSON ALBUQUERQUE 2350 1

Obs: O exemplo acima usa a condição WHERE CODCARGP = 1 .


Um valor do tipo caracter ou data é necessário ser digitado entre aspas simples.
Para evitar isto, deve-se colocar a variável de substituição entre aspas simples.

No seguinte exemplo, a variável de substituição será colocada entre aspas simples, pois o tipo de
dado da coluna não é numérico.

Para mostrar todos os departamentos, onde o nome do departamento será informado pelo usuário
em tempo de execução:

Ex:

SQL> SELECT *
2 FROM DEPARTAMENTO

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 29


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

3 WHERE NOMEDEPT = '&DESCDEPT';


Enter value for descdept: MARKETING

CODDEPT NOMEDEPT
--------- ------------------------------
70 MARKETING

USANDO VARIÁVEL DE SUBSTITUIÇÃO COM DUPLO CARACTER ‘&&’

Se uma variável é prefixada com um duplo ‘&&’, SQL*PLUS somente pedirá para o usuário entrar
com um valor para a variável uma vez.

SQL*PLUS armazena o primeiro valor fornecido e usa ele novamente se o comando SQL for
executado.

Para mostrar todos os departamentos, onde o nome do departamento será informado pelo usuário
em tempo de execução:

Ex:
SQL> SELECT *
2 FROM DEPARTAMENTO
3 WHERE NOMEDEPT = '&&DESCDEPT';
Enter value for descdept: MARKETING

CODDEPT NOMEDEPT
--------- ------------------------------
70 MARKETING

SQL> RUN
1 SELECT *
2 FROM DEPARTAMENTO
3* WHERE NOMEDEPT = '&&DESCDEPT'

CODDEPT NOMEDEPT
--------- ------------------------------
70 MARKETING

Obs: Note que no segundo SELECT, o SQL*PLUS não pediu para o usuário fornecer o nome
do departamento, pois a variável, não tinha armazenado o valor temporariamente, pois
possuía duplo ‘&&’ .

O COMANDO ACCEPT

O comando ACCEPT permite que uma variável seja criada e um valor, que for digitado em tempo
de execução seja armazenado nela.

ACCEPT é freqüentemente usado em um arquivo de comandos.

Benefícios utilizando o comando ACCEPT:

 Tipos de dados são verificados

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 30


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

 A mensagem para entrada de valores fica a critério do usuário


 O conteúdo a ser digitado pode ficar oculto ao usuário (senha)

Sintaxe:

ACCEPT variável_substituição PROMPT mensagem

Sintaxe Descrição

variável_substituição é o nome da variável de substituição

mensagem é a mensagem que deve aparecer na linha de entrada do


dado do usuário

Para mostrar todos os funcionários, onde o código do departamento será informado pelo usuário
em tempo de execução, utilizando o comando ACCEPT com uma mensagem específica:

Ex:

SQL> ACCEPT DEPTNO PROMPT 'Digite o Codigo do Departamento:'


Digite o Codigo do Departamento : 10
SQL> SELECT NOMEFUNC, CODDEPT, SALARIO
2 FROM FUNCIONARIO
3 WHERE CODDEPT = &DEPTNO;

NOMEFUNC CODDEPT SALARIO


------------------------------ --------- ---------
EDMAR FERNANDES 10 2000
WELLINGTON SOUZA 10 600
MARCUS ALENCAR 10 2330
EMERSON ALBUQUERQUE 10 2350
JOSE CARLOS 10 4000

MOSTRANDO O RESULTADO DE CÁLCULOS COM NÚMEROS NA CLÁUSULA


SELECT

Expressões Aritméticas

Uma expressão é uma combinação de um ou mais valores, operadores e funções que executam
cálculos.

Para mostrar todos os funcionários, com salário mensal e anual.

Ex:

SQL> SELECT NOMEFUNC, SALARIO, SALARIO * 12


2 FROM FUNCIONARIO;

NOMEFUNC SALARIO SALARIO*12


------------------------------ --------- ----------
EDMAR FERNANDES 2000 24000
AMARAL DOS REIS 4100 49200
ROSANGELA DA SILVA 1750 21000
JULIANA ANDRADE 1230 14760

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 31


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

WELLINGTON SOUZA 600 7200


LUCIANA CARRERA 870 10440
MARCUS ALENCAR 2330 27960
OSCAR MIRANDA 3870 46440
ANTONIO CARLOS DE OLIVEIRA 2080 24960
EMERSON ALBUQUERQUE 2350 28200
JOSE CARLOS 4000 48000
CARLA GOMES DE SOUZA 2350 28200

A regra de precedência utilizada pelo Oracle é (*, /, +, - ).

No seguinte exemplo a expressão (150 * 12) será calculada primeiro.

Para mostrar todos os funcionários, com salário mensal e a expressão


(salário + 150 * 12) .

Ex:

SQL> SELECT NOMEFUNC, SALARIO, SALARIO + 150 * 12


2 FROM FUNCIONARIO;

NOMEFUNC SALARIO SALARIO+150*12


------------------------------ --------- --------------
EDMAR FERNANDES 2000 3800
AMARAL DOS REIS 4100 5900
ROSANGELA DA SILVA 1750 3550
JULIANA ANDRADE 1230 3030
WELLINGTON SOUZA 600 2400
LUCIANA CARRERA 870 2670
MARCUS ALENCAR 2330 4130
OSCAR MIRANDA 3870 5670
ANTONIO CARLOS DE OLIVEIRA 2080 3880
EMERSON ALBUQUERQUE 2350 4150
JOSE CARLOS 4000 5800
CARLA GOMES DE SOUZA 2350 4150

Colocando parênteses podemos especificar a ordem em que os operadores serão executados,


por exemplo, no seguinte exemplo a expressão salario + 150 será calculada primeiro.

Para mostrar todos os funcionários, com salário mensal e a expressão


(salário + 150 ) * 12 .

Ex:

SQL> SELECT NOMEFUNC, SALARIO, (SALARIO + 150) * 12


2 FROM FUNCIONARIO;

NOMEFUNC SALARIO (SALARIO+150)*12


------------------------------ --------- ----------------
EDMAR FERNANDES 2000 25800
AMARAL DOS REIS 4100 51000
ROSANGELA DA SILVA 1750 22800
JULIANA ANDRADE 1230 16560
WELLINGTON SOUZA 600 9000
LUCIANA CARRERA 870 12240
MARCUS ALENCAR 2330 29760

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 32


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

OSCAR MIRANDA 3870 48240


ANTONIO CARLOS DE OLIVEIRA 2080 26760
EMERSON ALBUQUERQUE 2350 30000
JOSE CARLOS 4000 49800
CARLA GOMES DE SOUZA 2350 30000

USANDO CÁLCULOS NAS CLÁUSULAS WHERE E ORDER BY

Para mostrar todos os funcionários, com salário mensal e a expressão


(salário + 150 ) * 12 , onde a expressão deverá ser maior que 30000, e a consulta deverá ser
ordenada pela expressão (salário + 150 ) * 12.

Ex:

SQL> SELECT NOMEFUNC, SALARIO, (SALARIO + 150) * 12


2 FROM FUNCIONARIO
3 WHERE (SALARIO + 150) * 12 > 30000
4 ORDER BY (SALARIO + 150) * 12;

NOMEFUNC SALARIO (SALARIO+150)*12


------------------------------ --------- ----------------
OSCAR MIRANDA 3870 48240
JOSE CARLOS 4000 49800
AMARAL DOS REIS 4100 51000

MOSTRANDO O RESULTADO DE CÁLCULOS COM DATAS NA CLÁUSULA SELECT

Expressão de Data Descrição


DATA + NÚMERO Calcula a data com um número de dias após a data

DATA - NÚMERO Calcula a data com um número de dias antes da data

DATA - DATA Calcula o número de dias entre duas datas

Para mostrar os funcionários, a data de admissão e 90 dias após a data de admissão:

Ex:

SQL> SELECT NOMEFUNC, DATAADM, DATAADM + 90


2 FROM FUNCIONARIO;

NOMEFUNC DATAADM DATAADM+9


------------------------------ --------- ---------
EDMAR FERNANDES 01-DEC-94 01-MAR-95
AMARAL DOS REIS 18-APR-90 17-JUL-90
ROSANGELA DA SILVA 30-JAN-93 30-APR-93
JULIANA ANDRADE 12-OCT-95 10-JAN-96
WELLINGTON SOUZA 23-JUN-92 21-SEP-92
LUCIANA CARRERA 01-DEC-95 29-FEB-96
MARCUS ALENCAR 01-DEC-95 29-FEB-96
OSCAR MIRANDA 28-MAY-92 26-AUG-92
ANTONIO CARLOS DE OLIVEIRA 02-FEB-90 03-MAY-90
EMERSON ALBUQUERQUE 01-DEC-95 29-FEB-96

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 33


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

JOSE CARLOS 03-NOV-91 01-FEB-92


CARLA GOMES DE SOUZA 02-JUL-94 30-SEP-94

Para mostrar os funcionários, a data de admissão e 90 dias antes a data de admissão:

Ex:

SQL> SELECT NOMEFUNC, DATAADM, DATAADM - 90


2 FROM FUNCIONARIO;

NOMEFUNC DATAADM DATAADM-9


------------------------------ --------- ---------
EDMAR FERNANDES 01-DEC-94 02-SEP-94
AMARAL DOS REIS 18-APR-90 18-JAN-90
ROSANGELA DA SILVA 30-JAN-93 01-NOV-92
JULIANA ANDRADE 12-OCT-95 14-JUL-95
WELLINGTON SOUZA 23-JUN-92 25-MAR-92
LUCIANA CARRERA 01-DEC-95 02-SEP-95
MARCUS ALENCAR 01-DEC-95 02-SEP-95
OSCAR MIRANDA 28-MAY-92 28-FEB-92
ANTONIO CARLOS DE OLIVEIRA 02-FEB-90 04-NOV-89
EMERSON ALBUQUERQUE 01-DEC-95 02-SEP-95
JOSE CARLOS 03-NOV-91 05-AUG-91
CARLA GOMES DE SOUZA 02-JUL-94 03-APR-94

Para mostrar os funcionários, a data corrente, a data de admissão e o número de dias entre a
data corrente e a data de admissão.

Ex:

SQL> SELECT NOMEFUNC, SYSDATE, DATAADM, SYSDATE - DATAADM


2 FROM FUNCIONARIO;

NOMEFUNC SYSDATE DATAADM SYSDATE-DATAADM


------------------------------ --------- --------- ---------------
EDMAR FERNANDES 27-FEB-97 01-DEC-94 819.47015
AMARAL DOS REIS 27-FEB-97 18-APR-90 2507.4702
ROSANGELA DA SILVA 27-FEB-97 30-JAN-93 1489.4702
JULIANA ANDRADE 27-FEB-97 12-OCT-95 504.47015
WELLINGTON SOUZA 27-FEB-97 23-JUN-92 1710.4702
LUCIANA CARRERA 27-FEB-97 01-DEC-95 454.47015
MARCUS ALENCAR 27-FEB-97 01-DEC-95 454.47015
OSCAR MIRANDA 27-FEB-97 28-MAY-92 1736.4702
ANTONIO CARLOS DE OLIVEIRA 27-FEB-97 02-FEB-90 2582.4702
EMERSON ALBUQUERQUE 27-FEB-97 01-DEC-95 454.47015
JOSE CARLOS 27-FEB-97 03-NOV-91 1943.4702
CARLA GOMES DE SOUZA 27-FEB-97 02-JUL-94 971.47015

Obs: A função SYSDATE retorna a data do sistema.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 34


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

UTILIZANDO FUNÇÕES NÚMERICAS, DE DATA E CARACTER

Introdução às Funções

Funções são usadas para manipular itens de dados. Elas aceitam um ou mais argumentos e
retornam um valor. Um argumento é uma constante fornecida pelo usuário, variável ou uma
coluna de tabela.

Funções Numéricas:

Funções numéricas aceitam números como entrada e retornam também valores numéricos.

Função ROUND

Arredonda valores de colunas, expressões ou qualquer valor para um determinado número de


casas decimais. Se o número de casas decimais não for especificado, o valor será arredondado
sem nenhuma casa decimal.

Ex:

SQL> SELECT SALARIO, SALARIO/3, ROUND(SALARIO/3), ROUND(SALARIO/3,2),


2 ROUND(SALARIO/3, -2)
3 FROM FUNCIONARIO;

SALARIO SALARIO/3 ROUND(SALARIO/3) ROUND(SALARIO/3,2) ROUND(SALARIO/3,-2)


--------- --------- ---------------- ------------------ -------------------
2000 666.66667 667 666.67 700
4100 1366.6667 1367 1366.67 1400
1750 583.33333 583 583.33 600
1230 410 410 410 400
600 200 200 200 200
870 290 290 290 300
2330 776.66667 777 776.67 800
3870 1290 1290 1290 1300
2080 693.33333 693 693.33 700
2350 783.33333 783 783.33 800
4000 1333.3333 1333 1333.33 1300
2350 783.33333 783 783.33 800

Função TRUNC

Trunca a coluna ou valor para um determinado número de casas decimais. Se o número de casas
decimais não for especificado, o valor será truncado sem nenhuma casa decimal.

Ex:

SQL> SELECT SALARIO, SALARIO/3, TRUNC(SALARIO/3), TRUNC(SALARIO/3,2),


2 TRUNC(SALARIO/3, -2)
3 FROM FUNCIONARIO;

SALARIO SALARIO/3 TRUNC(SALARIO/3) TRUNC(SALARIO/3,2) TRUNC(SALARIO/3,-2)


--------- --------- ---------------- ------------------ -------------------
2000 666.66667 666 666.66 600
4100 1366.6667 1366 1366.66 1300
1750 583.33333 583 583.33 500
1230 410 410 410 400

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 35


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

600 200 200 200 200


870 290 290 290 200
2330 776.66667 776 776.66 700
3870 1290 1290 1290 1200
2080 693.33333 693 693.33 600
2350 783.33333 783 783.33 700
4000 1333.3333 1333 1333.33 1300
2350 783.33333 783 783.33 700

Função CEIL

Retorna o menor inteiro maior ou igual ao valor de uma coluna da tabela, expressão ou um valor
qualquer.

Ex:

SQL> SELECT CEIL(SALARIO), CEIL(1.1), CEIL(1.5), CEIL(1.9), CEIL(-1.1),


2 CEIL(-1.5),CEIL(-1.9)
3 FROM FUNCIONARIO;

CEIL(SALARIO) CEIL(1.1) CEIL(1.5) CEIL(1.9) CEIL(-1.1) CEIL(-1.5) CEIL(-1.9)


------------- --------- --------- --------- ---------- ---------- ----------
2000 2 2 2 -1 -1 -1
4100 2 2 2 -1 -1 -1
1750 2 2 2 -1 -1 -1
1230 2 2 2 -1 -1 -1
600 2 2 2 -1 -1 -1
870 2 2 2 -1 -1 -1
2330 2 2 2 -1 -1 -1
3870 2 2 2 -1 -1 -1
2080 2 2 2 -1 -1 -1
2350 2 2 2 -1 -1 -1
4000 2 2 2 -1 -1 -1
2350 2 2 2 -1 -1 -1

Função FLOOR

Retorna o maior inteiro menor ou igual ao valor de uma coluna da tabela, expressão ou um valor
qualquer.

Ex:

SQL> SELECT FLOOR(SALARIO) SALARIO, FLOOR(1.1), FLOOR(1.5), FLOOR(1.9),


2 FLOOR(-1.1),FLOOR(-1.5),FLOOR(-1.9)
3 FROM FUNCIONARIO;

SALARIO FLOOR(1.1) FLOOR(1.5) FLOOR(1.9) FLOOR(-1.1) FLOOR(-1.5) FLOOR(-1.9)


-------- ---------- ---------- ---------- ----------- ----------- -----------
2000 1 1 1 -2 -2 -2
4100 1 1 1 -2 -2 -2
1750 1 1 1 -2 -2 -2
1230 1 1 1 -2 -2 -2
600 1 1 1 -2 -2 -2
870 1 1 1 -2 -2 -2
2330 1 1 1 -2 -2 -2
3870 1 1 1 -2 -2 -2
2080 1 1 1 -2 -2 -2
2350 1 1 1 -2 -2 -2
4000 1 1 1 -2 -2 -2

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 36


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

2350 1 1 1 -2 -2 -2
Função SIGN

Retorna 1 se a coluna, expressão ou valor for um número positivo, 0 se for zero e -1 se for um
número negativo.

Ex:

SQL> SELECT NOMEFUNC, SALARIO, (2350 - SALARIO), SIGN(2350 - SALARIO)


2 FROM FUNCIONARIO;

NOMEFUNC SALARIO (2350-SALARIO) SIGN(2350-SALARIO)


------------------------------ -------- -------------- ------------------
EDMAR FERNANDES 2000 350 1
AMARAL DOS REIS 4100 -1750 -1
ROSANGELA DA SILVA 1750 600 1
JULIANA ANDRADE 1230 1120 1
WELLINGTON SOUZA 600 1750 1
LUCIANA CARRERA 870 1480 1
MARCUS ALENCAR 2330 20 1
OSCAR MIRANDA 3870 -1520 -1
ANTONIO CARLOS DE OLIVEIRA 2080 270 1
EMERSON ALBUQUERQUE 2350 0 0
JOSE CARLOS 4000 -1650 -1
CARLA GOMES DE SOUZA 2350 0 0

Função MOD

Retorna o resto de uma divisão do primeiro valor dividido pelo segundo valor.

Ex:

SQL> SELECT SALARIO, MOD(SALARIO,3), MOD(-SALARIO,3),


2 MOD(SALARIO * 2, 3)
3 FROM FUNCIONARIO;

SALARIO MOD(SALARIO,3) MOD(-SALARIO,3) MOD(SALARIO*2,3)


-------- -------------- --------------- ----------------
2000 2 -2 1
4100 2 -2 1
1750 1 -1 2
1230 0 0 0
600 0 0 0
870 0 0 0
2330 2 -2 1
3870 0 0 0
2080 1 -1 2
2350 1 -1 2
4000 1 -1 2
2350 1 -1 2

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 37


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Função ABS

Retorna o valor absoluto de uma coluna, expressão ou valor.

Ex:

SQL> SELECT SALARIO, (3000 - SALARIO), (SALARIO - 3000),


2 ABS(3000 - SALARIO), ABS (SALARIO - 3000)
3 FROM FUNCIONARIO;

SALARIO (3000-SALARIO) (SALARIO-3000) ABS(3000-SALARIO) ABS(SALARIO-3000)


-------- -------------- -------------- ----------------- -----------------
2000 1000 -1000 1000 1000
4100 -1100 1100 1100 1100
1750 1250 -1250 1250 1250
1230 1770 -1770 1770 1770
600 2400 -2400 2400 2400
870 2130 -2130 2130 2130
2330 670 -670 670 670
3870 -870 870 870 870
2080 920 -920 920 920
2350 650 -650 650 650
4000 -1000 1000 1000 1000
2350 650 -650 650 650

Função NVL

Converte valores nulos para zero ou para outro determinado caracter.

Ex:

SQL> SELECT NOMEFUNC, SALARIO, SALARIO * 12, NVL(SALARIO,0) * 12


2 FROM FUNCIONARIO;

NOMEFUNC SALARIO SALARIO*12 NVL(SALARIO,0)*12


------------------------------ -------- ---------- -----------------
EDMAR FERNANDES 2000 24000 24000
AMARAL DOS REIS 4100 49200 49200
ROSANGELA DA SILVA 0
JULIANA ANDRADE 1230 14760 14760
WELLINGTON SOUZA 600 7200 7200
LUCIANA CARRERA 0
MARCUS ALENCAR 2330 27960 27960
OSCAR MIRANDA 3870 46440 46440
ANTONIO CARLOS DE OLIVEIRA 2080 24960 24960
EMERSON ALBUQUERQUE 2350 28200 28200
JOSE CARLOS 4000 48000 48000
CARLA GOMES DE SOUZA 2350 28200 28200

Funções Caracter:

Funções caracter aceitam dados do tipo caracter como entrada e podem retornar números ou
caracter.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 38


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Função LOWER

Força dados alfanuméricos para minúsculo.

Ex:

SQL> SELECT NOMEDEPT, LOWER(NOMEDEPT),


2 LOWER('RCM INFORMATICA')
3 FROM DEPARTAMENTO;

NOMEDEPT LOWER(NOMEDEPT) LOWER('RCMINFOR


------------------ ------------------ ---------------
Informatica informatica rcm informatica
Recursos Humanos recursos humanos rcm informatica
Financeiro financeiro rcm informatica
Vendas vendas rcm informatica
Contabilidade contabilidade rcm informatica
Diretoria diretoria rcm informatica
Marketing marketing rcm informatica
Administracao administracao rcm informatica

Função UPPER

Força dados alfanuméricos para maiúsculo.

Ex:

SQL> SELECT NOMEDEPT, UPPER(NOMEDEPT), upper('RCM INFORMATICA')


2 FROM DEPARTAMENTO;

NOMEDEPT UPPER(NOMEDEPT) UPPER('RCMINFOR


------------------ ------------------------------ ---------------
Informatica INFORMATICA RCM INFORMATICA
Recursos Humanos RECURSOS HUMANOS RCM INFORMATICA
Financeiro FINANCEIRO RCM INFORMATICA
Vendas VENDAS RCM INFORMATICA
Contabilidade CONTABILIDADE RCM INFORMATICA
Diretoria DIRETORIA RCM INFORMATICA
Marketing MARKETING RCM INFORMATICA
Administracao ADMINISTRACAO RCM INFORMATICA

Função INITCAP

Força a primeira de cada palavra de uma string para maiúsculo.

Ex:

SQL> SELECT NOMEFUNC, INITCAP(NOMEFUNC), INITCAP('RCM INFORMATICA')


2 FROM FUNCIONARIO;

NOMEFUNC INITCAP(NOMEFUNC) INITCAP('RCMINF


-------------------------- -------------------------- ---------------
EDMAR FERNANDES Edmar Fernandes Rcm Informatica
AMARAL DOS REIS Amaral Dos Reis Rcm Informatica
ROSANGELA DA SILVA Rosangela Da Silva Rcm Informatica

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 39


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

JULIANA ANDRADE Juliana Andrade Rcm Informatica


WELLINGTON SOUZA Wellington Souza Rcm Informatica
LUCIANA CARRERA Luciana Carrera Rcm Informatica
MARCUS ALENCAR Marcus Alencar Rcm Informatica
OSCAR MIRANDA Oscar Miranda Rcm Informatica
ANTONIO CARLOS DE OLIVEIRA Antonio Carlos De Oliveira Rcm Informatica
EMERSON ALBUQUERQUE Emerson Albuquerque Rcm Informatica
JOSE CARLOS Jose Carlos Rcm Informatica
CARLA GOMES DE SOUZA Carla Gomes De Souza Rcm Informatica

Função SUBSTR(coluna/valor, posição, n)

Retorna uma string de n caracteres, iniciando a partir da posição de número pos.

SQL> SELECT NOMEDEPT, SUBSTR(NOMEDEPT,1,5),


2 SUBSTR(NOMEDEPT,4,5),
3 SUBSTR(NOMEDEPT,4)
4 FROM DEPARTAMENTO;

NOMEDEPT SUBST SUBST SUBSTR(NOMEDEPT,4)


------------------ ----- ----- ---------------------------
Informatica Infor ormat ormatica
Recursos Humanos Recur ursos ursos Humanos
Financeiro Finan ancei anceiro
Vendas Venda das das
Contabilidade Conta tabil tabilidade
Diretoria Diret etori etoria
Marketing Marke ketin keting
Administracao Admin inist inistracao

Função LENGTH

Retorna o número de caracteres na coluna ou em uma valor literal.

Ex:

SQL> SELECT NOMEFUNC, LENGTH(NOMEFUNC) NOMELGT, NUMFUNC,


2 LENGTH(NUMFUNC) NUMFUNCLGT, LENGTH('ORACLE') ORACLELGT
3 FROM FUNCIONARIO;

NOMEFUNC NOMELGT NUMFUNC NUMFUNCLGT ORACLELGT


------------------------------ --------- --------- ---------- ---------
EDMAR FERNANDES 15 1 1 6
AMARAL DOS REIS 15 2 1 6
ROSANGELA DA SILVA 18 3 1 6
JULIANA ANDRADE 15 4 1 6
WELLINGTON SOUZA 16 5 1 6
LUCIANA CARRERA 15 6 1 6
MARCUS ALENCAR 14 7 1 6
OSCAR MIRANDA 13 8 1 6
ANTONIO CARLOS DE OLIVEIRA 26 9 1 6
EMERSON ALBUQUERQUE 19 10 2 6
JOSE CARLOS 11 11 2 6
CARLA GOMES DE SOUZA 20 12 2 6

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 40


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Para mostrar todos os funcionários, onde o número de caracteres é igual a 15.

Ex:

SQL> SELECT NOMEFUNC, LENGTH(NOMEFUNC) NOMELGT, NUMFUNC,


2 LENGTH(NUMFUNC) NUMFUNCLGT, LENGTH('ORACLE') ORACLELGT
3 FROM FUNCIONARIO
4 WHERE LENGTH(NOMEFUNC) = 15;

NOMEFUNC NOMELGT NUMFUNC NUMFUNCLGT ORACLELGT


------------------------------ --------- --------- ---------- ---------
EDMAR FERNANDES 15 1 1 6
AMARAL DOS REIS 15 2 1 6
JULIANA ANDRADE 15 4 1 6
LUCIANA CARRERA 15 6 1 6

O operador ||

Combina strings do tipo caracter juntas, concatenando-as.

Para mostrar a string ‘O nome do funcionario e’ concatenada ao nome do funcionário.

Ex:

SQL> SELECT 'O nome do funcionario é ' || NOMEFUNC


2 FROM FUNCIONARIO;

'ONOMEDOFUNCIONARIOÉ'||NOMEFUNC
---------------------------------------------------
O nome do funcionario é EDMAR FERNANDES
O nome do funcionario é AMARAL DOS REIS
O nome do funcionario é ROSANGELA DA SILVA
O nome do funcionario é JULIANA ANDRADE
O nome do funcionario é WELLINGTON SOUZA
O nome do funcionario é LUCIANA CARRERA
O nome do funcionario é MARCUS ALENCAR
O nome do funcionario é OSCAR MIRANDA
O nome do funcionario é ANTONIO CARLOS DE OLIVEIRA
O nome do funcionario é EMERSON ALBUQUERQUE
O nome do funcionario é JOSE CARLOS
O nome do funcionario é CARLA GOMES DE SOUZA

Funções Data:

Funções data operam sobre as datas Oracle. Todas as funções de data retorna um valor de tipo
de dado DATA exceto MONTHS_BETWEEN retorna um valor numérico.

Oracle armazena datas em um formato numérico interno, representando:

 Século
 Ano
 Mês
 Dia

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 41


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

 Horas
 Minutos
 Segundos

O formato padrão de data é DD-MON-YY.

Sysdate é uma pseudo-coluna que retorna a data corrente e a hora. Você pode usar SYSDATE
assim como você usa qualquer outro nome de coluna. SYSDATE é normalmente selecionada de
uma tabela dummy chamada DUAL. Esta tabela pertence ao usuário SYS (dono do dicionário de
dados do Oracle) e pode ser acessada por todos os usuários.

Para mostrar a data corrente.

Ex:

SQL> SELECT SYSDATE


2 FROM DUAL;

SYSDATE
---------
28-FEB-97

Função ADD_MONTHS

Adiciona n número de meses sobre a uma determinada data, n deve ser um inteiro e pode ser
negativo.

Para mostrar todos os funcionários com a data de admissão, três meses após a admissão e 3
meses antes da admissão, onde o cargo deve ser igual a 5 e o resultado ordenado por data de
admissão

Ex:

SQL> SELECT NOMEFUNC, DATAADM, ADD_MONTHS(DATAADM,3),


2 ADD_MONTHS(DATAADM,-3)
3 FROM FUNCIONARIO
4 WHERE CODCARGO = 5
5 ORDER BY DATAADM;

NOMEFUNC DATAADM ADD_MONTH ADD_MONTH


------------------------------ --------- --------- ---------
ANTONIO CARLOS DE OLIVEIRA 02-FEB-90 02-MAY-90 02-NOV-89
ROSANGELA DA SILVA 30-JAN-93 30-APR-93 30-OCT-92

Função LAST_DAY

Retorna o último dia do mês de uma determinada data.

Para mostrar a data de admissão, o último dia do mês da data de admissão, a data corrente e o
último dia do mês da data corrente dos funcionários do departamento 10.

Ex:

SQL> SELECT DATAADM, LAST_DAY(DATAADM), SYSDATE,


2 LAST_DAY(SYSDATE)

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 42


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

3 FROM FUNCIONARIO
4 WHERE CODDEPT = 10;

DATAADM LAST_DAY( SYSDATE LAST_DAY(


--------- --------- --------- ---------
01-DEC-94 31-DEC-94 28-FEB-97 28-FEB-97
23-JUN-92 30-JUN-92 28-FEB-97 28-FEB-97
01-DEC-95 31-DEC-95 28-FEB-97 28-FEB-97
01-DEC-95 31-DEC-95 28-FEB-97 28-FEB-97
03-NOV-91 30-NOV-91 28-FEB-97 28-FEB-97

Função MONTHS_BETWEEN

Retorna o número de meses entre duas datas.

Para mostrar o número de meses entre a data corrente e a data de admissão dos funcionários do
departamento 10.

Ex:

SQL> SELECT SYSDATE, DATAADM,


2 MONTHS_BETWEEN(SYSDATE,DATAADM)
3 FROM FUNCIONARIO
4 WHERE CODDEPT = 10;

SYSDATE DATAADM MONTHS_BETWEEN(SYSDATE,DATAADM)


--------- --------- -------------------------------
28-FEB-97 01-DEC-94 26.889373
28-FEB-97 23-JUN-92 56.179695
28-FEB-97 01-DEC-95 14.889373
28-FEB-97 01-DEC-95 14.889373
28-FEB-97 03-NOV-91 63.824857

Função NEXT_DAY

Retorna a data do próximo dia da semana para uma determinada data.

Para mostrar a data de admissão, a próxima Segunda-Feira após a data de admissão, a data
corrente, a próxima Sexta-Feira após a data corrente e a próxima Quinta-Feira após a data
corrente de todos os funcionários.

Ex:

SQL> SELECT DATAADM, NEXT_DAY(DATAADM,'MONDAY') PRO_SEGUNDA,


2 SYSDATE, NEXT_DAY(SYSDATE, 'FRIDAY') PRO_SEXTA,
3 NEXT_DAY(SYSDATE, 5) PRO_QUINTA
4 FROM FUNCIONARIO;

DATAADM PRO_SEGUN SYSDATE PRO_SEXTA PRO_QUINT


--------- --------- --------- --------- ---------
01-DEC-94 05-DEC-94 28-FEB-97 07-MAR-97 06-MAR-97
18-APR-90 23-APR-90 28-FEB-97 07-MAR-97 06-MAR-97
30-JAN-93 01-FEB-93 28-FEB-97 07-MAR-97 06-MAR-97
12-OCT-95 16-OCT-95 28-FEB-97 07-MAR-97 06-MAR-97
23-JUN-92 29-JUN-92 28-FEB-97 07-MAR-97 06-MAR-97

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 43


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

01-DEC-95 04-DEC-95 28-FEB-97 07-MAR-97 06-MAR-97


01-DEC-95 04-DEC-95 28-FEB-97 07-MAR-97 06-MAR-97
28-MAY-92 01-JUN-92 28-FEB-97 07-MAR-97 06-MAR-97
02-FEB-90 05-FEB-90 28-FEB-97 07-MAR-97 06-MAR-97
01-DEC-95 04-DEC-95 28-FEB-97 07-MAR-97 06-MAR-97
03-NOV-91 04-NOV-91 28-FEB-97 07-MAR-97 06-MAR-97
02-JUL-94 04-JUL-94 28-FEB-97 07-MAR-97 06-MAR-97

Funções de Conversão:

As funções de conversão convertem um valor de um tipo de dado para outro.

Função TO_CHAR

Converte número ou data para formato caracter.


A função TO_CHAR é frequentemente usada para alterar um formato data padrão para um
formato alternativo.

Para converter a data de admissão com um formato padrão para um novo formato.

Ex:

SQL> SELECT DATAADM, TO_CHAR(DATAADM, 'DD "de" MONTH YYYY')


2 FROM FUNCIONARIO;

DATAADM TO_CHAR(DATAADM,'DD"DE"MONTHYYYY')
--------- -------------------------------------------------
01-DEC-94 01 de DECEMBER 1994
18-APR-90 18 de APRIL 1990
30-JAN-93 30 de JANUARY 1993
12-OCT-95 12 de OCTOBER 1995
23-JUN-92 23 de JUNE 1992
01-DEC-95 01 de DECEMBER 1995
01-DEC-95 01 de DECEMBER 1995
28-MAY-92 28 de MAY 1992
02-FEB-90 02 de FEBRUARY 1990
01-DEC-95 01 de DECEMBER 1995
03-NOV-91 03 de NOVEMBER 1991
02-JUL-94 02 de JULY 1994

Para mostrar a hora do dia em um determinado formato.

Ex:

SQL> SELECT SYSDATE, TO_CHAR(SYSDATE, 'HH:MI:SS')


2 FROM DUAL;

SYSDATE TO_CHAR(SYSDATE,'HH:MI:SS')
--------- ---------------------------------------
28-FEB-97 02:17:29

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 44


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Podemos reformatar datas com os seguintes formatos

ELEMENTO DESCRIÇÃO

SCC ou CC Século (Ex: 20)


YYYY Ano com quatro dígitos (Ex: 1997)
YY Ano com dois dígitos (Ex: 97)
MONTH Nome do mês (Ex: February)
MON Nome do mês, abreviado (Ex: Feb)
MM Número do mês (Ex: 02)
DAY Nome do dia (Ex: Friday)
DY Nome do dia, abreviado (Ex: Fri)
DD Número do dia no mês (Ex: 28)
HH:MI:SS Horas:Minutos:Segundos (Ex: 03:04:20)

Obs: Esta é uma parte da lista de formato de datas.

USANDO TO_CHAR PARA CONVERTER NUMÉRICOS EM CARACTER

Para converter um tipo de dado numérico para caracter, no caso, o salário dos funcionários.

Ex:

SQL> SELECT NOMEFUNC, SALARIO, TO_CHAR(SALARIO, '$9,999.99')


2 FROM FUNCIONARIO;

NOMEFUNC SALARIO TO_CHAR(SA


------------------------------ --------- ----------
EDMAR FERNANDES 2000 $2,000.00
AMARAL DOS REIS 4100 $4,100.00
ROSANGELA DA SILVA
JULIANA ANDRADE 1230 $1,230.00
WELLINGTON SOUZA 600 $600.00
LUCIANA CARRERA
MARCUS ALENCAR 2330 $2,330.00
OSCAR MIRANDA 3870 $3,870.00
ANTONIO CARLOS DE OLIVEIRA 2080 $2,080.00
EMERSON ALBUQUERQUE 2350 $2,350.00
JOSE CARLOS 4000 $4,000.00
CARLA GOMES DE SOUZA 2350 $2,350.00

Função TO_NUMBER

Converte caracter, que contém números para tipo de dado NUMÉRICO.

No seguinte exemplo, a função TO_NUMBER é usada para transformar um número armazenado


com um caracter para o tipo de dado numérico.

Ex:

SQL> SELECT NOMEFUNC, SALARIO


2 FROM FUNCIONARIO
3 WHERE SALARIO > TO_NUMBER ('2350');

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 45


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

NOMEFUNC SALARIO
------------------------------ ---------
AMARAL DOS REIS 4100
OSCAR MIRANDA 3870
JOSE CARLOS 4000

Função TO_DATE

Converte valor caracter que representa uma data, para um valor do tipo data, de acordo com um
formato especificado.

Para incluir um novo empregado especificando um formato de data não padrão.

Ex:

SQL> INSERT INTO FUNCIONARIO


2 (NUMFUNC, NOMEFUNC, DATAADM, SALARIO)
3 VALUES (14, 'LARISSA RIBEIRO',
4 TO_DATE('14/04/91' , 'DD/MM/YY'), 2410)
5 /

UTILIZANDO FUNÇÕES DE GROUP

Funções de grupo operam em conjunto de linhas. Eles retornam resultados baseados em grupos
de linhas.

Função AVG

Retorna a média, ignorando os valores nulos.

Para mostrar a média salarial da empresa.


Ex:
SQL> SELECT AVG(SALARIO)
2 FROM FUNCIONARIO;

AVG(SALARIO)
------------
2477.5

Função COUNT

Retorna o número de linhas de uma tabela utilizando count(*).


Retorna o número de linhas ignorando os valores nulos utilizando count(coluna).

Para mostrar o número de linhas da tabela de departamentos.


Ex:
SQL> SELECT COUNT(*)
2 FROM DEPARTAMENTO;

COUNT(*)
---------
8

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 46


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Para mostrar o número de funcionários que têm gerente.


Ex:
SQL> SELECT COUNT(GERENTE)
2 FROM FUNCIONARIO;

COUNT(GERENTE)
--------------
6

Para mostrar o maior salário.

Ex:

SQL> SELECT MAX(SALARIO)


2 FROM FUNCIONARIO;

MAX(SALARIO)
------------
4100

Para mostrar o menor salário.

Ex:

SQL> SELECT MIN(SALARIO)


2 FROM FUNCIONARIO;

MIN(SALARIO)
------------
600

Para mostrar a soma de todos os salários.

Ex:

SQL> SELECT SUM(SALARIO)


2 FROM FUNCIONARIO;

SUM(SALARIO)
------------
29730

UTILIZANDO A CLÁUSULA GROUP BY

A cláusula GROUP BY do comando SELECT é usado para dividir linhas em grupos menores.

Para mostrar a média salarial, agrupada por departamento.

Ex:

SQL> SELECT CODDEPT, AVG(SALARIO)


2 FROM FUNCIONARIO
3 GROUP BY CODDEPT;

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 47


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CODDEPT AVG(SALARIO)
--------- ------------
10 2256
30 2080
40 4100
70 1230
80 3110
2410

Para mostrar o total de funcionarios, agrupado por departamento.

Ex:
SQL> SELECT CODDEPT, COUNT(*)
2 FROM FUNCIONARIO
3 GROUP BY CODDEPT;

CODDEPT COUNT(*)
--------- ---------
10 5
30 2
40 1
70 1
80 3
2

Para mostrar a soma de todos os salários, agrupado por departamento.

Ex:
SQL> SELECT CODDEPT, SUM(SALARIO)
2 FROM FUNCIONARIO
3 GROUP BY CODDEPT;

CODDEPT SUM(SALARIO)
--------- ------------
10 11280
30 2080
40 4100
70 1230
80 6220
4820

Para mostrar o maior e menor salario, agrupado por departamento.

Ex:
SQL> SELECT CODDEPT, MAX(SALARIO), MIN(SALARIO)
2 FROM FUNCIONARIO
3 GROUP BY CODDEPT;

CODDEPT MAX(SALARIO) MIN(SALARIO)


--------- ------------ ------------
10 4000 600
30 2080 2080
40 4100 4100
70 1230 1230
80 3870 2350
2410 2410

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 48


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

POSSÍVEIS ERROS UTILIZANDO FUNÇÕES DE GRUPO

Utilizando coluna(s) com função de grupo sem utilizar a cláusula group by.

Ex:

SQL> SELECT CODDEPT, CODCARGO, COUNT(*)


2 FROM FUNCIONARIO;
SELECT CODDEPT, CODCARGO, COUNT(*)
*
ERROR at line 1:
ORA-00937: not a single-group group function

Quando utiliza-se uma ou mais colunas regulares com função de grupo, é necessário utilizar a
cláusula GROUP BY com a(s) coluna(s) especificada(s) na cláusula SELECT.

Ex:

SQL> SELECT CODDEPT, CODCARGO, COUNT(*)


2 FROM FUNCIONARIO
3 GROUP BY CODDEPT, CODCARGO;

CODDEPT CODCARGO COUNT(*)


--------- --------- ---------
10 1 3
10 3 1
10 4 1
30 5 2
40 2 1
70 10 1
80 8 1
80 9 2
2

MOSTRANDO GRUPOS ESPECÍFICOS

Cláusula HAVING

Utiliza-se a cláusula HAVING se você quer especificar quais os grupos que serão mostrados.

Para mostrar os departamentos, e a média de salários agrupado por departamento, onde deverão
ser mostrados apenas os departamentos que possuírem mais de dois funcionários.

Ex:

SQL> SELECT CODDEPT, AVG(SALARIO)


2 FROM FUNCIONARIO
3 GROUP BY CODDEPT
4 HAVING COUNT(*) > 2;

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 49


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CODDEPT AVG(SALARIO)
--------- ------------
10 2256
80 3110

Utilizando as cláusulas WHERE e HAVING.

Para mostrar os departamentos, e a soma de salários agrupado por departamento, onde o código
do cargo deverá ser diferente de ‘1’ e a quantidade de funcionários por departamento deverá ser
superior a ‘2’.

Ex:

SQL> SELECT CODDEPT, SUM(SALARIO)


2 FROM FUNCIONARIO
3 WHERE CODCARGO <> 1
4 GROUP BY CODDEPT
5 HAVING COUNT(*) > 2
6 ORDER BY 2;

CODDEPT SUM(SALARIO)
--------- ------------
80 6220

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 50


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONSULTANDO DADOS DE VÁRIAS TABELAS

Objetivos do Capítulo

 Consultar dados de várias tabelas.(equi-join)

 Consultar dados de várias tabelas, onde linhas de uma tabela não tem a linha
correspondente na outra tabela. (outer join)

 Consultar dados da mesma tabela, utilizando joins, como se fosse duas tabelas
diferentes. (self join)

JOINS

Um join é utilizado quando uma consulta SQL requer dados de várias tabelas no banco de dados.

Para saber quais são os departamentos que possuem funcionários, devemos comparar o valor da
coluna CODDEPT da tabela de funcionário com a coluna CODDEPT da tabela de departamentos.

Os valores na coluna CODDEPT para as duas tabelas devem ser iguais (equi-join).

A condição de join é especificada na cláusula WHERE.

Para mostrar os nomes dos funcionários, salários e nome dos departamentos.

Ex:

SQL> SELECT NOMEFUNC, SALARIO,NOMEDEPT


2 FROM FUNCIONARIO, DEPARTAMENTO
3 WHERE FUNCIONARIO.CODDEPT=DEPARTAMENTO.CODDEPT;

NOMEFUNC SALARIO NOMEDEPT


------------------------------ --------- -------------------
EDMAR FERNANDES 2000 Informatica
AMARAL DOS REIS 4100 Vendas
ROSANGELA DA SILVA 1750 Financeiro
JULIANA ANDRADE 1230 Marketing
WELLINGTON SOUZA 600 Informatica
LUCIANA CARRERA 870 Administracao
MARCUS ALENCAR 2330 Informatica
OSCAR MIRANDA 3870 Administracao
ANTONIO CARLOS OLIVEIRA 2080 Financeiro
EMERSON ALBUQUERQUE 2350 Informatica
JOSE CARLOS 4000 Informatica
CARLA GOMES DE SOUZA 2350 Administracao

Obs: A condição de join especifica o nome das tabelas antes do nome da coluna. Isto é
necessário quando o nome de duas colunas são iguais em ambas tabelas. Este
requerimento é também aplicado para as cláusulas SELECT e ORDER BY.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 51


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Para distinguir entre a coluna CODDEPT na tabela FUNCIONARIO e na tabela DEPARTAMENTO.

Para mostrar o código do departamento, nome do departamento e o nome do funcionário,


ordenando a consulta pelo código do departamento.

Ex:

SQL> SELECT DEPARTAMENTO.CODDEPT, NOMEDEPT, NOMEFUNC


2 FROM FUNCIONARIO, DEPARTAMENTO
3 WHERE FUNCIONARIO.CODDEPT=DEPARTAMENTO.CODDEPT
4 ORDER BY 1;

CODDEPT NOMEDEPT NOMEFUNC


--------- ------------------------------ ------------------------
10 Informatica EDMAR FERNANDES
10 Informatica WELLINGTON SOUZA
10 Informatica MARCUS ALENCAR
10 Informatica JOSE CARLOS
10 Informatica EMERSON ALBUQUERQUE
30 Financeiro ROSANGELA DA SILVA
30 Financeiro ANTONIO CARLOS OLIVEIRA
40 Vendas AMARAL DOS REIS
70 Marketing JULIANA ANDRADE
80 Administracao LUCIANA CARRERA
80 Administracao OSCAR MIRANDA
80 Administracao CARLA GOMES DE SOUZA

USANDO ‘ALIAS’ PARA AS TABELAS

Quando em determinado comando o nome da tabela deverá ser digitado várias vezes, pode-se
utilizar ‘alias’ para o nome da tabela. Alias para tabelas são válidos somente para o comando
corrente.

Para mostrar o código do departamento, nome do departamento e o nome do funcionário,


ordenando a consulta pelo código do departamento, utilizando ‘alias’ para as tabelas.

Ex:

SQL> SELECT D.CODDEPT, NOMEDEPT, NOMEFUNC


2 FROM FUNCIONARIO F, DEPARTAMENTO D
3 WHERE F.CODDEPT=D.CODDEPT
4 ORDER BY D.CODDEPT;

CODDEPT NOMEDEPT NOMEFUNC


--------- -------------------------- -------------------
10 Informatica EDMAR FERNANDES
10 Informatica WELLINGTON SOUZA
10 Informatica MARCUS ALENCAR
10 Informatica JOSE CARLOS
10 Informatica EMERSON ALBUQUERQUE
30 Financeiro ROSANGELA DA SILVA
30 Financeiro ANTONIO CARLOS OLIVEIRA
40 Vendas AMARAL DOS REIS
70 Marketing JULIANA ANDRADE
80 Administracao LUCIANA CARRERA
80 Administracao OSCAR MIRANDA
80 Administracao CARLA GOMES DE SOUZA

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 52


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

MOSTRANDO LINHAS ESPECÍFICAS DE TABELAS RELACIONADAS

Para mostrar linhas específicas de tabelas relacionadas, devemos adicionar mais alguma
condição de pesquisa à cláusula join.

Para mostrar o código do departamento, nome do departamento e o nome do funcionário,


ordenando a consulta pelo código do departamento, onde deverão ser mostrados apenas os
funcionários que estão no departamento ‘10’.

Ex:

SQL> SELECT D.CODDEPT, NOMEDEPT, NOMEFUNC


2 FROM FUNCIONARIO F, DEPARTAMENTO D
3 WHERE F.CODDEPT=D.CODDEPT AND
4 F.CODDEPT = 10
5 ORDER BY D.CODDEPT;

CODDEPT NOMEDEPT NOMEFUNC


--------- ------------------------------ -------------------
10 Informatica EDMAR FERNANDES
10 Informatica WELLINGTON SOUZA
10 Informatica MARCUS ALENCAR
10 Informatica EMERSON ALBUQUERQUE
10 Informatica JOSE CARLOS

MOSTRANDO LINHAS QUE NÃO SATISFAZEM A CONDIÇÃO JOIN.

Se uma linha não satisfaz uma condição join, então a linha não aparecerá no resultado.

Nos exemplos citados, os departamentos de código ‘20’ , ‘50’ e ‘60’ não apareceram no resultado
da consulta, porque não existem funcionários nos departamentos.

As linhas com os departamentos ‘20’ , ‘50’ e ‘60’ podem ser retornadas se o operador outer-join
for especificado na condição de join.

O operador é um sinal de ‘+’ entre parênteses (+) e deve ficar do lado da tabela aonde os dados
não são suficientes.

No caso como queremos consultar também os departamentos que não têm funcionários, devemos
colocar o operador outer-join do lado da tabela de funcionário.

Se por acaso a consulta deveria listar os funcionários que não tem departamento definido, o
operador de outer-join deveria ficar do lado da tabela de departamento.

Para mostrar o código do departamento, nome do departamento e o nome do funcionário,


ordenando a consulta pelo código do departamento, incluindo os departamentos que não têm
funcionários.

Ex:
SQL> SELECT D.CODDEPT, NOMEDEPT, NOMEFUNC
2 FROM FUNCIONARIO F, DEPARTAMENTO D
3 WHERE F.CODDEPT(+)=D.CODDEPT

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 53


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

4 ORDER BY D.CODDEPT;

CODDEPT NOMEDEPT NOMEFUNC


--------- -------------------------- -----------------------
10 Informatica EDMAR FERNANDES
10 Informatica WELLINGTON SOUZA
10 Informatica MARCUS ALENCAR
10 Informatica JOSE CARLOS
10 Informatica EMERSON ALBUQUERQUE
20 Recursos Humanos
30 Financeiro ROSANGELA DA SILVA
30 Financeiro ANTONIO CARLOS OLIVEIRA
40 Vendas AMARAL DOS REIS
50 Contabilidade
60 Diretoria
70 Marketing JULIANA ANDRADE
80 Administracao LUCIANA CARRERA
80 Administracao OSCAR MIRANDA
80 Administracao CARLA GOMES DE SOUZA

Para mostrar o código do departamento, nome do departamento e o nome do funcionário,


ordenando a consulta pelo código do departamento, incluindo os funcionários que não têm
departamento especificado.

Ex:
SQL> SELECT D.CODDEPT, NOMEDEPT, NOMEFUNC
2 FROM FUNCIONARIO F, DEPARTAMENTO D
3 WHERE F.CODDEPT=D.CODDEPT(+)
4 ORDER BY D.CODDEPT;

CODDEPT NOMEDEPT NOMEFUNC


--------- ----------------------- --------------------------
10 Informatica EDMAR FERNANDES
10 Informatica WELLINGTON SOUZA
10 Informatica MARCUS ALENCAR
10 Informatica JOSE CARLOS
10 Informatica EMERSON ALBUQUERQUE
30 Financeiro ROSANGELA DA SILVA
30 Financeiro ANTONIO CARLOS DE OLIVEIRA
40 Vendas AMARAL DOS REIS
70 Marketing JULIANA ANDRADE
80 Administracao LUCIANA CARRERA
80 Administracao OSCAR MIRANDA
80 Administracao CARLA GOMES DE SOUZA
LARISSA RIBEIRO
CARMEM LUCIA

CRIANDO JOIN DE UMA TABELA COM ELA MESMA

Para criar joins da tabela com ela mesma, pode-se utilizar ‘alias’ para o nome da tabela.

Isto permite mostrar dados de linhas diferentes na mesma tabela (self-join).

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 54


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Para mostrar o código do funcionário, o nome do funcionário, o código do gerente e o nome do


gerente, ordenando pelo código do gerente.

Ex:
SQL> SELECT E.NUMFUNC, E.NOMEFUNC, E.GERENTE,G.NOMEFUNC
2 FROM FUNCIONARIO E, FUNCIONARIO G
3 WHERE E.GERENTE = G.NUMFUNC
4 ORDER BY E.GERENTE;

NUMFUNC NOMEFUNC GERENTE NOMEFUNC


--------- ------------------------- --------- --------------
6 LUCIANA CARRERA 8 OSCAR MIRANDA
12 CARLA GOMES DE SOUZA 8 OSCAR MIRANDA
1 EDMAR FERNANDES 11 JOSE CARLOS
7 MARCUS ALENCAR 11 JOSE CARLOS
10 EMERSON ALBUQUERQUE 11 JOSE CARLOS
5 WELLINGTON SOUZA 11 JOSE CARLOS
8 OSCAR MIRANDA 15 ONTERO NICOLAU
11 JOSE CARLOS 15 ONTERO NICOLAU

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 55


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

SUBQUERIES

Objetivos do Capítulo

 Utilizar subquery, passando uma linha de dado para a query principal

 Utilizar subquery, passando várias linhas de dado para a query principal

 Aninhar várias subqueries dentro de uma query principal

 Utilizar Subquery correlacionada

SUBQUERY

Uma subquery é um comando SELECT que está dentro de outro comando SELECT e que retorna
dados para a query principal.

Uma subquery pode ser muito utilizada quando necessitá-se selecionar dados de uma tabela
através de uma query que depende do resultado de outra query.

Para mostrar o funcionário que tem o maior salário da empresa, onde o maior salário é uma
questão desconhecida.

Sem utilizar subquery devemos executar dois passos.

1º Selecionar o maior salário


SQL> SELECT MAX(SALARIO)
2 FROM FUNCIONARIO;

MAX(SALARIO)
------------
4800

2º Selecionar o funcionário, onde o salário seja igual ao resultado da query anterior.

SQL> SELECT NOMEFUNC, SALARIO


2 FROM FUNCIONARIO
3 WHERE SALARIO = 4800;

NOMEFUNC SALARIO
------------------------- ---------
ONTERO NICOLAU 4800

UTILIZANDO SUBQUERY

Para mostrar o funcionário que tem o maior salário da empresa, onde o maior salário é uma
questão desconhecida.

Ex:
SQL> SELECT NOMEFUNC, SALARIO

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 56


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

2 FROM FUNCIONARIO
3 WHERE SALARIO =
4 (SELECT MAX(SALARIO)
5 FROM FUNCIONARIO);

NOMEFUNC SALARIO
------------------------- ---------
ONTERO NICOLAU 4800

Este exemplo consiste de dois blocos de quey, a query principal e a subquery (query interna).

A subquery é executada primeiro, e retorna o valor 4800, então a query principal é processada
utilizando o resultado da query interna para sua condição de pesquisa (salario = 4800).

Para mostrar todos os funcionários que têm o mesmo cargo do funcionário EDMAR FERNANDES,
sendo que o código do cargo do funcionário EDMAR é desconhecido

Ex:
SQL> SELECT NUMFUNC, NOMEFUNC, CODCARGO, SALARIO
2 FROM FUNCIONARIO
3 WHERE CODCARGO =
4 (SELECT CODCARGO
5 FROM FUNCIONARIO
6 WHERE NOMEFUNC = 'EDMAR FERNANDES');

NUMFUNC NOMEFUNC CODCARGO SALARIO


--------- ------------------------- --------- ---------
1 EDMAR FERNANDES 1 2000
7 MARCUS ALENCAR 1 2330
10 EMERSON ALBUQUERQUE 1 2350

A subquery retorna o código do cargo do funcionário Edmar Fernandes que é utilizada pela query
principal para condição de pesquisa.

MOSTRAR DADOS DE UMA QUERY PRINCIPAL UTILIZANDO UMA FUNÇÃO DE


GRUPO NA SUBQUERY.

Para mostrar todos os funcionários que possuem salário maior que a média salarial da empresa.

Ex:
SQL> SELECT NOMEFUNC, SALARIO
2 FROM FUNCIONARIO
3 WHERE SALARIO >
4 (SELECT AVG(SALARIO)
5 FROM FUNCIONARIO);

NOMEFUNC SALARIO
------------------------- ---------
AMARAL DOS REIS 4100
OSCAR MIRANDA 3870
JOSE CARLOS 4000
ONTERO NICOLAU 4800

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 57


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 58


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

SUBQUERIES QUE RETORNAM MAIS QUE UMA LINHA

Para mostrar os funcionários que têm o mesmo cargo do funcionário que tiver a palavra Carlos
como parte de seu nome, sendo que o código do cargo do funcionário que tem a palavra Carlos
como parte de seu nome é desconhecido.

Ex:
SQL> SELECT NUMFUNC, NOMEFUNC, CODCARGO, SALARIO
2 FROM FUNCIONARIO
3 WHERE CODCARGO =
4 (SELECT CODCARGO
5 FROM FUNCIONARIO
6 WHERE NOMEFUNC LIKE '%CARLOS%' );
ERROR:
ORA-01427: single-row subquery returns more than one row

Como a subquery retorna mais que uma linha, necessitá-se utilizar o operador ‘IN’.

Utilizando o operador ‘IN’ na comparação com os dados retornados da subquery.

Ex:

SQL> SELECT NUMFUNC, NOMEFUNC, CODCARGO, SALARIO


2 FROM FUNCIONARIO
3 WHERE CODCARGO IN
4 (SELECT CODCARGO
5 FROM FUNCIONARIO
6 WHERE NOMEFUNC LIKE '%CARLOS%' );

NUMFUNC NOMEFUNC CODCARGO SALARIO


--------- ------------------------------ --------- ---------
11 JOSE CARLOS 3 4000
3 ROSANGELA DA SILVA 5 1750
9 ANTONIO CARLOS DE OLIVEIRA 5 2080

COMPARANDO MAIS QUE UM VALOR

Podemos também comparar mais que um valor, utilizando subqueries.

As colunas à esquerda da condição de pesquisa devem ficar entre parenteses e separadas por
vírgula.

As colunas listadas na subquery devem ser iguais em número e tipo de dado às colunas da query
principal e devem estar na mesma ordem de comparação.

Para mostrar os funcionários que têm o maior salário de seu departamento.

Ex:
SQL> SELECT NOMEFUNC, CODDEPT, SALARIO
2 FROM FUNCIONARIO
3 WHERE (CODDEPT, SALARIO) IN
4 (SELECT CODDEPT, MAX(SALARIO)

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 59


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

5 FROM FUNCIONARIO
6 GROUP BY CODDEPT);

NOMEFUNC CODDEPT SALARIO


------------------------------ --------- ---------
JOSE CARLOS 10 4000
ANTONIO CARLOS DE OLIVEIRA 30 2080
AMARAL DOS REIS 40 4100
JULIANA ANDRADE 70 1230
ONTERO NICOLAU 80 4800

UTILIZANDO A CLÁUSULA HAVING COM SUBQUERY

A cláusula HAVING pode também ser utilizada em subqueries aninhadas.

Lembrando que a cláusula HAVING é utilizada para comparar grupo de linhas especificada pela
cláusula GROUP BY.

Para mostrar todos os departamentos que têm a média salarial superior a média salarial do
departamento ‘10’ .

Ex:
SQL> SELECT CODDEPT, AVG(SALARIO)
2 FROM FUNCIONARIO
3 HAVING AVG(SALARIO) >
4 (SELECT AVG(SALARIO)
5 FROM FUNCIONARIO
6 WHERE CODDEPT = 10 )
7 GROUP BY CODDEPT;

CODDEPT AVG(SALARIO)
--------- ------------
40 4100
80 2972.5
2410

ANINHANDO VÁRIAS SUBQUERIES DENTRO DE UMA QUERY PRINCIPAL

Subqueries podem ser aninhadas (usadas dentro de outra subquery).

Para mostrar todos os funcionários que trabalham no mesmo departamento dos funcionários que
tem o cargo de ‘Analista de Sistemas’

SQL> SELECT NOMEFUNC, SALARIO, CODDEPT, CODCARGO


2 FROM FUNCIONARIO
3 WHERE CODDEPT IN
4 (SELECT CODDEPT FROM FUNCIONARIO
5 WHERE CODCARGO =
6 (SELECT CODCARGO
7 FROM CARGO
8 WHERE DESCRICAO = 'ANALISTA DE SISTEMAS'));

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 60


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

NOMEFUNC SALARIO CODDEPT CODCARGO


------------------------------ --------- --------- ---------
EDMAR FERNANDES 2000 10 1
WELLINGTON SOUZA 600 10 4
MARCUS ALENCAR 2330 10 1
JOSE CARLOS 4000 10 3
EMERSON ALBUQUERQUE 2350 10 1

UTILIZANDO OS OPERADORES AND e OR COM SUBQUERIES

Para mostrar todos os funcionários que têm o salário menor que a média salarial da empresa e
que trabalham no departamento de ‘Informática’.

SQL> SELECT NOMEFUNC, SALARIO, CODDEPT


2 FROM FUNCIONARIO
3 WHERE SALARIO <
4 (SELECT AVG(SALARIO)
5 FROM FUNCIONARIO)
6 AND CODDEPT IN
7 (SELECT CODDEPT FROM DEPARTAMENTO
8 WHERE NOMEDEPT = 'Informatica');

NOMEFUNC SALARIO CODDEPT


------------------------------ --------- ---------
EDMAR FERNANDES 2000 10
WELLINGTON SOUZA 600 10
MARCUS ALENCAR 2330 10
EMERSON ALBUQUERQUE 2350 10

SUBQUERIES CORRELACIONADAS

Uma subquery correlacionada é uma subquery aninhada que é executada uma vez para cada
linha candidata considerada pela query principal.

O processamento de uma subquery correlacionada é diferente de uma subquery aninhada padrão.

Para mostrar todos os funcionários que têm salário menor que a média salarial de seu
departamento.

Ex:
SQL> SELECT NOMEFUNC, SALARIO, CODDEPT
2 FROM FUNCIONARIO F
3 WHERE SALARIO <
4 (SELECT AVG(SALARIO)
5 FROM FUNCIONARIO
6 WHERE CODDEPT = F.CODDEPT);

NOMEFUNC SALARIO CODDEPT


------------------------------ --------- ---------
EDMAR FERNANDES 2000 10
ROSANGELA DA SILVA 1750 30
WELLINGTON SOUZA 600 10
LUCIANA CARRERA 870 80
CARLA GOMES DE SOUZA 2350 80

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 61


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

COMANDOS DE DEFINIÇÃO DE DADOS (DDL)

Objetivos do Capítulo

 Criar, alterar e remover estruturas de armazenamento (tables).

 Criar visões lógicas de tabelas (Views).

 Gerar valores para chaves primárias (Sequences).

 Construir índices para tabelas.

 Obter informações sobre objetos do banco de dados no dicionário de dados

ESTRUTURA DE DADOS ORACLE

TABELA

Todos os dados em um banco de dados relacional está armazenado em tabelas. Toda tabela tem
um nome e um conjunto de colunas e linhas em que os dados são armazenados. Cada coluna
tem um nome e um tipo de dado seguido do tamanho da coluna.

Normalmente em um banco de dados relacional, algumas das colunas em tabelas diferentes têm
a mesma informação. Com isso as tabelas podem referenciar umas às outras.

REGRAS PADRÕES PARA CRIAÇÃO DE TABELAS

 O nome da tabela deve iniciar com alguma letra (A-Z ou a-z).


 Pode conter letras, números e caracteres especiais (_, $, #).
 O nome é o mesmo se for escrito em letra maiúscula ou minúscula.
 O tamanho máximo do nome é trinta caracteres.
 O nome não pode ser igual ao nome de outro objeto do banco de dados que o usuário corrente
é proprietário.
 O nome não deve ser uma palavra reservada Oracle.

PRODUZINDO UM DIAGRAMA DE ENTIDADE E RELACIONAMENTO.

Criar no Erwin o modelo do curso

TERMINOLOGIA BÁSICA

Chaves Primárias (PK)

Num modelo de entidade e relacionamento, o caracter # representa que a coluna é uma chave
primária.

Uma chave primária é uma coluna ou combinação de colunas cujos valores devem ser únicos e
não nulos, identificando linhas na tabela.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 62


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Por exemplo a coluna NUMFUNC para cada linha da tabela de funcionários tem um valor distinto
e nenhum deles está nulo.

Chaves Estrangeiras (FK)

Uma chave estrangeira é uma coluna ou combinação de colunas que contém valores de chaves
primárias da mesma ou de outra tabela.

Por exemplo a coluna CODDEPT na tabela de funcionários é uma chave estrangeira, pois os
valores dessa coluna devem ser iguais à coluna CODDEPT da tabela de departamentos, a qual é
uma chave primária.

Colunas Obrigatórias (NN) ou Opcionais

Se uma coluna é pré-fixada com um ‘ * ‘ então esta coluna deve ser preenchida.

Uma coluna com o prefixo ‘ o ‘ pode conter valores nulos.

Colunas Únicas (U)

Uma coluna ou combinação de colunas cujos valores devem ser únicos, porém podem conter
valores nulos.

ESPECIFICANDO O FORMATO DE ARMAZENAMENTO PARA CADA COLUNA

Quando uma tabela é criada, necessitá-se especificar o tipo de dado de cada coluna. A tabela
abaixo relaciona os principais tipos de dados.

TIPO DE DADO DESCRIÇÃO

CHAR(n) Valores caracter de tamanho fixo de no máximo 255 bytes


VARCHAR2(n) Valores caracter de tamanho variável de no máximo 2000 bytes
DATE Valores de data e hora entre (01/01/4712 A.C a 31/12/4712 D.C)
LONG Similar ao VARCHAR2, com tamanho máximo de 2 gigabytes
NUMBER(n,d) Valores numéricos de tamanho variável de no máximo 38 bytes.

DEFININDO REGRAS DE INTEGRIDADE DE DADOS

Regras de integridade são os regulamentos que governam quais operações serão permitidas nos
dados e estruturas do banco de dados.

Cláusula Constraint

Oracle permite sintaxe para constraints de integridade, armazenando informações sobre


integridades de dados no dicionário de dados.

Constraints podem ser definidas, sendo especificadas como parte do comando CREATE ou
ALTER TABLE.

O objetivo de uma constraint é restringir a entrada de dados válidos nas tabelas do banco de
dados.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 63


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Constraints de Integridade de Dados

Constraint Descrição
NOT NULL Especifica que a coluna não pode conter valores nulos.

UNIQUE Especifica que o valor de uma coluna ou grupo de colunas deve


ser único

PRIMARY KEY Especifica que o valor de uma coluna ou grupo de colunas deve
ser único e não pode conter valores nulos

REFERENCES Estabelece e força o relacionamento entre a(s) coluna(s) e uma


PK de uma tabela referenciada

CHECK Especifica uma condição que deve ser verdadeira

CRIANDO TABELAS NO BANCO DE DADOS

Com base no quadro abaixo, criaremos a tabela FUNCIONARIO.

NOME DA COLUNA TIPO DA CHAVE NULL/UNIQUE

NUMFUNC PK NN, U
NOMEFUNC NN
DATANASC
DATAADM
CODCARGO FK1
CODDEPT FK2
SALARIO
GERENTE FK3

Para criar a tabela funcionário.

Ex:

SQL> CREATE TABLE FUNCIONARIO


2 (NUMFUNC NUMBER(5) CONSTRAINT FUNCIONARIO_NUMFUNC_PK PRIMARY KEY,
3 NOMEFUNC VARCHAR2(30) CONSTRAINT FUNCIONARIO_NOMEFUNC_NN NOT NULL,
4 DATANASC DATE,
5 DATAADM DATE,
6 CODCARGO NUMBER(5) CONSTRAINT FUNCIONARIO_CODCARGO_FK REFERENCES
7 CARGO(CODCARGO),
8 CODDEPT NUMBER(5) CONSTRAINT FUNCIONARIO_CODDEPT_FK REFERENCES
9 DEPARTAMENTO(CODDEPT),
10 SALARIO NUMBER(11,2),
11 GERENTE NUMBER(5) CONSTRAINT FUNCIONARIO_GERENTE_FK
12 REFERENCES FUNCIONARIO(NUMFUNC),
13 CONSTRAINT FUNCIONARIO_SALARIO_CK CHECK (SALARIO < 5000));

Table created.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 64


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONFIRMANDO A ESTRUTURA DE UMA TABELA


Para mostrar a estrutra da tabela funcionário:

Ex:
SQL> DESC FUNCIONARIO
NAME NULL? TYPE
------------------------------- -------- ----
NUMFUNC NOT NULL NUMBER(5)
NOMEFUNC NOT NULL VARCHAR2(30)
DATANASC DATE
DATAADM DATE
CODCARGO NUMBER(5)
CODDEPT NUMBER(5)
SALARIO NUMBER(11,2)
GERENTE NUMBER(5)

Obs: Nome de tabelas, colunas, nome de usuários e a estrutura de todos os objetos do do


Banco de Dados Oracle ficam armazenados no dicionário de dados.
Quando criamos uma constraint PK ou U, automaticamente é criado um índice
único para a(s) coluna(s).

ALTERANDO UMA TABELA

Através do comando ALTER TABLE, podemos alterar a definição de uma tabela

Utilizando a palavra ADD no comando ALTER TABLE, podemos incluir colunas/constraints para
uma determinada tabela.

Para adicionar a coluna COMENTARIO na tabela funcionário.

Ex:
SQL> ALTER TABLE FUNCIONARIO
2 ADD (COMENTARIO VARCHAR2(100));

Table altered.

Mostrando a nova estrutura da tabela funcionário.

Ex:
SQL> DESC FUNCIONARIO
Name Null? Type
------------------------------- -------- ----
NUMFUNC NOT NULL NUMBER(5)
NOMEFUNC NOT NULL VARCHAR2(30)
DATANASC DATE
DATAADM DATE
CODCARGO NUMBER(5)
CODDEPT NUMBER(5)
SALARIO NUMBER(11,2)
GERENTE NUMBER(5)
COMENTARIO VARCHAR2(100)

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 65


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Utilizando a palavra MODIFY no comando ALTER TABLE, podemos modificar a definição de uma
coluna existente.

Para alterar o tamanho da coluna COMENTARIO da tabela funcionário.


SQL> ALTER TABLE FUNCIONARIO
2 MODIFY (COMENTARIO VARCHAR2(120));

Table altered.
Mostrando a nova estrutura da tabela funcionário.

Ex:
SQL> DESCRIBE FUNCIONARIO
Name Null? Type
------------------------------- -------- ----
NUMFUNC NOT NULL NUMBER(5)
NOMEFUNC NOT NULL VARCHAR2(30)
DATANASC DATE
DATAADM DATE
CODCARGO NUMBER(5)
CODDEPT NUMBER(5)
SALARIO NUMBER(11,2)
GERENTE NUMBER(5)
COMENTARIO VARCHAR2(120)

Obs:
1. Não pode alterar uma coluna que contém nulos de NULL para NOT NULL.
1. Não pode adicionar uma nova coluna que é NOT NULL se a tabela já possui linhas.
1. Não pode diminuir o tamanho de uma coluna ou tipo de dado se a tabela já possui
linhas.

ADICIONANDO E REMOVENDO CONSTRAINTS

Adicionar ou remover uma constraint de uma tabela de existente usando o comando ALTER
TABLE.

Para adicionar uma constraint a uma determinada tabela.

Ex:
SQL> ALTER TABLE FUNCIONARIO
2 ADD CONSTRAINT FUNCIONARIO_SALARIO_CK
3 CHECK (SALARIO < 5000);

Table altered.

Para remover uma constraint de uma tabela.


SQL> ALTER TABLE FUNCIONARIO
2 DROP CONSTRAINT FUNCIONARIO_SALARIO_CK;

Table altered.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 66


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Obs: Para modificar uma constraint é necessário remover e criar novamente


especificando as alterações.

REMOVENDO UMA TABELA DO BANCO DE DADOS

Para remover a definição de uma tabela Oracle, utiliza-se o comando DROP TABLE.

Para remover a tabela FUNCIONARIO.

Ex:
SQL> DROP TABLE FUNCIONARIO;

Table dropped.

Obs:
1. Todos os dados, índices e triggers associados à tabela são removidos.
1. Views, Sinônimos e Procedures permanecem na base de dados, porém ficam inválidos.

VISÕES DE TABELAS ORACLE

Uma view (visão) é uma apresentação de dados de uma ou mais tabelas.

Todas operações executadas em uma view afetam ativamente as tabelas bases da view.

Uma view não tem dado, ela manipula dados baseados nas tabelas bases.

O uso de visões :

1. Restringir o acesso à um número pré-determinado de linhas e colunas da tabela.

1. Esconder a complexidade dos dados. Normalmente cria-se uma view combinando informações
de duas ou mais tabelas, sendo que isto é transparente para o usuário que está acessando a
view.

1. Atualizar os dados em uma perspectiva diferente da tabela base. Views permitem o mecanismo
de renomear as colunas sem afetar a tabela base.

CRIANDO VISÕES DE TABELAS

Para criar a visão FUNCDEP10 baseada na tabela FUNCIONARIO, contendo todos os


funcionários do departamento ‘10’ .

Ex:

SQL> CREATE OR REPLACE VIEW FUNCDEPT10 AS


2 SELECT *
3 FROM FUNCIONARIO
4 WHERE CODDEPT = 10;

View created.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 67


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONSULTANDO DADOS DA VISÃO FUNCDEPT10

A visão pode ser utilizada como se fosse uma tabela qualquer.

Para mostrar todos os funcionários, salário e departamento, ordenando a consulta por nome de
funcionários, utilizando a visão FUNCDEPT10.

Ex:
SQL> SELECT NOMEFUNC, SALARIO, CODDEPT
2 FROM FUNCDEPT10
3 ORDER BY NOMEFUNC;

NOMEFUNC SALARIO CODDEPT


------------------------------ --------- ---------
EDMAR FERNANDES 2000 10
EMERSON ALBUQUERQUE 2350 10
JOSE CARLOS 4000 10
MARCUS ALENCAR 2330 10
WELLINGTON SOUZA 600 10

Para criar a visão DEPT_SOMA_SAL baseada na tabela FUNCIONARIO, contendo os


departamentos e a soma salarial agrupada por departamento, colocando nomes alternativos para
as colunas selecionadas.

SQL> CREATE OR REPLACE VIEW DEPT_SOMA_SAL


2 (DEPARTAMENTO, TOTAL_SALARIO) AS
3 SELECT CODDEPT, SUM(SALARIO)
4 FROM FUNCIONARIO
5 GROUP BY CODDEPT;

View created.

CONSULTANDO DADOS DA VISÃO DEPT_SOMA_SAL

Para mostrar todos os dados da visão DEPT_SOMA_SAL

Ex:
SQL> SELECT *
2 FROM DEPT_SOMA_SAL
3 ORDER BY TOTAL_SALARIO;

DEPARTAMENTO TOTAL_SALARIO
------------ -------------
70 1230
30 3830
40 4100
4820
10 11280
80 11890

Obs: Se qualquer coluna da visão é derivada de uma função ou expressão, é necessário


criar um ‘alias’ para esta coluna.
A visão não pode conter a cláusula ORDER BY. A cláusula ORDER BY é especificada
quando utilizamos o comando SELECT na VISÃO.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 68


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 69


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

UTILIZANDO A OPÇÃO “WITH CHECK OPTION”

A cláusula WITH CHECK OPTION especifica quais comandos INSERTs e UPDATEs serão
permitidos através da visão.

Para criar a visão FUNCDEPT10 baseada na tabela FUNCIONARIO, contendo as colunas


NUMFUNC, NOMEFUNC, CODDEPT, SALARIO de todos os funcionários do departamento ‘10’ .

Ex:
SQL> CREATE OR REPLACE VIEW FUNCDEPT10 AS
2 SELECT NUMFUNC, NOMEFUNC, CODDEPT, SALARIO
3 FROM FUNCIONARIO
4 WHERE CODDEPT = 10
5 WITH CHECK OPTION;

View created.
Para incluir um novo funcionário através da visão FUNCDEPT10.

Ex:
SQL> INSERT INTO FUNCDEPT10
2 VALUES (18, 'JAIME FORLAN' , 20, 2500);
INSERT INTO FUNCDEPT10
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation

Qualquer operação com os comandos INSERT ou UPDATE devem respeitar a condição do código
do departamento ser igual a ‘10’, pois foi utilizado a opção WITH CHECK OPTION na criação da
visão.

Ex:
SQL> INSERT INTO FUNCDEPT10
2 VALUES (18, 'JAIME FORLAN' , 10, 2500);

1 row created.

REMOVENDO UMA VISÃO

Utiliza-se o comando DROP para remover uma visão. O comando remove a definição da visão do
banco de dados. Linhas e colunas não são afetadas, pois estão armazenadas nas tabelas de
onde a visão foi derivada.

Para remover a visão FUNCDEPT10.

Ex:
SQL> DROP VIEW FUNCDEPT10;

View dropped.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 70


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

SEQUÊNCIAS ORACLE

O gerador de seqüências do Oracle gera seqüências de inteiros exclusivos que as aplicações


podem usar como valores de chave primária para aplicações de intensa atividade de inclusão.

A mesma seqüência pode ser usada para inclusões em diferentes tabelas.

Sintaxe incompleta

CREATE SEQUENCE sequence_name


[INCREMENT by n]
[START WITH n]
[ {MAXVALUE n | NOMAXVALUE} ]
[ {CYCLE n | NOCYCLE} ]
[ {CACHE n | NOCACHE ]
sequence_name nome do gerador de seqüência a ser criado.
INCREMENT BY especifica o intervalo entre números de seqüência. O valor default é
1.
START WITH especifica o valor da primeira seqüência a ser gerada. O valor
default é 1.
MAXVALUE especifica o valor máximo que a seqüência pode gerar.
NOMAXVALUE especifica o valor máximo de 10**27.
CYCLE especifica que a seqüência deve continuar a gerar valores desde o
seu início novamente após ter chegado ao seu limite.
CACHE especifica que o servidor Oracle deve manter n seqüências em sua
memória para aumentar a performance para seqüências
freqüentemente usadas. O valor default é 20.

CRIANDO SEQUÊNCIAS

Para criar uma seqüência para a tabela DEPARTAMENTO começando com 51 e incrementada de
1 em 1.

Ex:
SQL> CREATE SEQUENCE DEPARTAMENTO_CODIGO
2 MINVALUE 1
3 MAXVALUE 9999999
4 INCREMENT BY 1
5 START WITH 51
6 NOCACHE
8 NOCYCLE;

Sequence created

CONFIRMANDO SEQUÊNCIAS

Para mostrar a estrutura do dicionário de dados.

Ex:

SQL> DESC user_sequences

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 71


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Name Null? Type


------------------------------ --------- ----
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER

Para mostrar o nome e a descrição de todas as seqüências do usuário corrente.

Ex:

SQL> SELECT sequence_name, min_value, max_value,


2 increment_by, last_number
3 FROM user_sequences;

SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER


---------------- ------------- ------------- ------------- -------------
S_CUSTOMER_ID 1 9999999 1 216
S_DEPT_ID 1 9999999 1 51
S_EMP_ID 1 9999999 1 26
S_IMAGE_ID 1 9999999 1 1981
S_LONGTEXT_ID 1 9999999 1 1369
S_ORD_ID 1 9999999 1 113
S_PRODUCT_ID 1 9999999 1 50537
S_REGION_ID 1 999999 1 6
S_WAREHOUSE_ID 1 999999 1 10502

9 rows selected.

REFERENCIANDO VALORES PARA CHAVES PRIMÁRIAS

Expressões para referenciar valores para chaves primárias usando seqüências.

Expressão Descrição
sequence_name.NEXTVAL Retorna automaticamente o próximo valor disponível para a
seqüência; retorna um único valor sempre que é referenciado,
mesmo que diferentes usuários estejam referenciando a
mesma seqüência

sequence_name.CURRVAL Retorna o último valor da seqüência obtida pelo usuário


corrente com sequence_name.NEXTVAL; é indefinida para
qualquer sessão de usuário até que o usuário referencie
sequence_name.NEXTVAL

Para inserir dois novos departamentos utilizando a seqüência DEPARTAMENTO_CODIGO para


geração automática dos valores para a chave primária da tabela DEPARTAMENTO.

Ex:
SQL> INSERT INTO DEPARTAMENTO
2 VALUES (DEPARTAMENTO_CODIGO.NEXTVAL, 'Financas', 2);

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 72


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

1 row created.

SQL> INSERT INTO DEPARTAMENTO


2 VALUES (DEPARTAMENTO_CODIGO.NEXTVAL, 'Financas', 3);

1 row created.

Confirmando as inserções.

SQL> SELECT *
2 FROM DEPARTAMENTO
3 WHERE NOME = 'Financas';

CODIGO NOME CODIGO_REGIAO


------- ------------------------------ -------------
10 Financas 1
53 Financas 2
54 Financas 3

ALTERANDO UMA SEQUÊNCIA

Para ajustar um dos parâmetros de uma seqüência, o comando ALTER SEQUENCE deve ser
utilizado.

Ex:

SQL> ALTER SEQUENCE DEPARTAMENTO_CODIGO


2 CACHE 50;

Sequence altered.

REMOVENDO UMA SEQUÊNCIA

Para eliminar uma seqüência, o comando DROP SEQUENCE deve ser utilizado.

Ex:

SQL> DROP SEQUENCE DEPARTAMENTO_CODIGO

Sequence dropped.

ÍNDICES

Os sistemas de gerenciamento de banco de dados usam índices para localizar partes específicas
de dados de tabelas, sem precisar rastrear totalmente a tabela. O índice de uma tabela funciona
da mesma maneira que o índice analítico de um livro.

Um índice é uma árvore ordenada de blocos de dados ou nós. Quando o Oracle utiliza um índice
para localizar um valor, ele desce a partir do nó-raiz até os nós dos galhos e em seguida até os
nós das folhas, procurando o valor do índice solicitado. Cada leitura de um nó resulta em uma E/S
de disco, a não ser que o bloco de dados correspondente esteja atualmente armazenado no

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 73


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

cache de buffer do servidor. Em cada nó de folha de um índice, há valores de índice juntamente


com seus endereços físicos correspondentes. Quando o Oracle localiza o valor de índice
solicitado, ele lê o endereço físico da linha da tabela correspondente para que possa acessar a
linha imediatamente.

SELECT * FROM TABELA


WHERE COLUNA = 10;

e/s

e/s 51

14 62
e/s 33 73

5 A.001.01 14 33 51 62 73
10 A.001.12 18 40 58 67 74
10 A.001.14 31 43 59 72 86

Os índices são estruturas suplementares e opcionais do banco de dados. Quando não se tem um
índice em uma tabela, o Oracle ainda pode localizar as linhas que o usuário da aplicação solicita,
mas essa operação demanda mais tempo, porque o servidor precisa rastrear todas as linhas da
tabela..

Quando existe um índice em uma tabela, o Oracle usa automaticamente esse índice, se ele
detectar que esse uso aumentará o desempenho de uma instrução. O Oracle utiliza de modo
transparente os índices para todos os tipos de instruções SQL, incluindo as instruções SELECT
com cláusulas WHERE e subconsultas para instruções UPDATE e DELETE (cláusulas WHERE).
Se uma instrução atualizar o valor indexado em uma linha, o Oracle atualizará automaticamente o
valor do índice, juntamente com o valor da linha da tabela.

O servidor Oracle deve escolher um método de acesso a dados baseado na existência ou não de
índices e na estrutura do comando select.

Tabela de métodos de acesso a dados do servidor Oracle.

Método de Acesso Descrição

Por ROWID Acesso direto usando o endereço da linha que


indica a localização exata dos dados; método de
acesso rápido

Full-table scan Pesquisa seqüencial do começo ao fim das linhas


da tabela

Por índice Pesquisa binária usando uma estrutura de árvore


ordenada de valores de colunas

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 74


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Exemplos:

Para acessar uma linha da tabela EMPREGADO de acordo com o endereço da linha.

SQL> SELECT ultimo_nome


2 FROM empregado
3 WHERE rowid = '0000100A.0010.0003';

Para acessar linhas da tabela EMPREGADO com full-table scan.

SQL> SELECT ultimo_nome


2 FROM empregado;

Para acessar uma linha da tabela EMPREGADO usando um índice. A linha é recuperada
através do índice somente se o índice foi previamente criado para a coluna ULTIMO_NOME;
caso contrário, a linha é recuperada com full-table scan.

SQL> SELECT ultimo_nome


2 FROM empregado
3 WHERE ultimo_nome = 'Smith';

Considerando as Vantagens e Desvantagens da Criação de Índices

Crie um índice para uma coluna, se:

- a coluna é usada freqüentemente em cláusulas WHERE ou em condições de junção;


- cada valor dentro da coluna é único;
- a coluna contém um amplo arranjo de valores;
- a coluna tem um grande número de valores nulos;
- a tabela é grande e a maioria das consultas esperam recuperar menos que 10-15% das linhas.

Não crie um índice para uma coluna, se:

- a tabela é pequena;
- a maioria das consultas esperam recuperar mais que 10-15% das linhas;
- a coluna é atualizada freqüentemente;
- a coluna for do tipo LONG e LONG RAW.

CRIANDO ÍNDICES

Criando um índice comum para melhorar a performance de acesso a colunas freqüentemente


consultadas.

Sintaxe:

SQL> CREATE INDEX index_name


2 ON table_name (column_name [, column_name]...)

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 75


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

onde: index_name é o nome do índice.


table_name é o nome da tabela.
column_name é o nome da coluna.

Para criar um índice para a coluna ULTIMO_NOME da tabela EMPREGADO.

Ex:

SQL> CREATE INDEX empregado_ultimo_nome_i


2 ON EMPREGADO(ultimo_nome);

Index created.

Criando um índice único para assegurar que não exista duas linhas contendo valores
idênticos na(s) coluna(s) indexada(s).

Sintaxe:
SQL> CREATE UNIQUE INDEX index_name
2 ON table_name (column_name [, column_name]...)

Para criar um índice único na coluna FONE da tabela CLIENTE.

Ex:
SQL> CREATE UNIQUE INDEX cliente_fone_uk
2 ON cliente(fone);

Index created.

Obs: No Oracle, índices únicos são criados automaticamente pelo sistema para obrigar
constraints do tipo PRIMARY KEY ou UNIQUE, não sendo necessário explicitar o comando
CREATE INDEX separadamente.

Para mostrar todos os índices criados para a tabela EMPREGADO.

Ex:
SQL> SELECT index_name, uniqueness
2 FROM user_indexes
3 WHERE table_name = 'EMPREGADO';

INDEX_NAME UNIQUENESS
------------------------------ ---------
EMPREGADO_CODIGO_PK UNIQUE
EMPREGADO_USERID_UK UNIQUE

Para apagar o índice CLIENTE_FONE_UK.

Ex:
SQL> DROP INDEX cliente_fone_uk;

Index dropped.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 76


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 77


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

O DICIONÁRIO DE DADOS DO ORACLE

O dicionário de dados é uma das mais importantes partes do Banco de Dados. Ele consiste em
um conjunto de tabelas e views que são um guia de referência sobre a base de dados. O
dicionário de dados contém informações como:
- os usuários e os seus privilégios;
- os objetos do banco de dados;
- as regras de integridade dos objetos.

O dicionário de dados é criado junto com a instalação do banco de dados. As alterações feitas na
base de dados são feitas pelo SGBD.

O dicionário de dados é uma referência para todos os usuários do banco de dados. É uma fonte
valiosa de informações para os usuários finais, programadores e DBA's.

Acesso ao Dicionário de Dados

O acesso ao Dicionário de Dados é feito pelos usuários através de selects nas tabelas e visões do
dicionário. A alteração destas tabelas é feita através do SGBD, que verifica os acessos e permite
ou não as operações no banco. Nenhuma tabela do sistema deve ser alterada manualmente sob o
risco de se perder a integridade dos dados que estão contidos na base.

Tabelas e Visões do Dicionário de Dados

As tabelas do dicionário de dados são criadas no momento da instalação do banco de dados e


raramente são acessadas diretamente pelo usuário. Para o acesso dos usuários são criadas
visões com dados mais resumidos e simples.

Os nomes das visões do dicionário de dados refletem o tipo de uso a que elas se destinam.

As principais visões são:


user_?????? Possui informações sobre os objetos do usuário.
All_???????? Possui informações sobre todos os objetos que o usuário tem algum privilégio.
Dba_??????? Possui informações sobre os objetos relativos a administração do banco de dados. Somente os
usuários que possuem privilégio de DBA podem acessar tais informações.
Dictionary contém todos os objetos do dicionário de dados acessíveis pelo usuário.

A visão dictionary mostra todos os objetos do dicionário de dados que o usuário corrente tem
permissão para acessar com um pequeno comentário sobre o conteúdo de alguns destes objetos.

As visões do dicionário de dados mais utilizadas são:


Nome da visão Sinônimo Descrição
all_objects objetos acessíveis pelo usuário
dictionary dict pequena descrição sobre todos os objetos acessíveis
pelo usuário
user_indexes ind descrição dos índices do usuário
user_objects obj objetos pertencentes ao usuário
user_sequences seq descrição das seqüências do usuário
user_synonyms syn sinônimos do usuário
user_tables tabs descrição das tabelas do usuário
user_views texto das visões do usuário

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 78


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Consultando o Dicionário de Dados: Exemplos

Para consultar o nome das tabelas do usuário corrente:

SQL> select table_name


2 from user_tables;

Para consultar todas as colunas do tipo DATE da tabela FUNCIONARIO:

SQL> select column_name


2 from user_tab_columns
3 where table_name = 'FUNCIONARIO'
4 and data_type = 'DATE';

Para consultar informações sobre os objetos do usuário corrente:

SQL> select object_name, object_type, created


2 from user_objects;

Para consultar informações sobre todos os objetos visíveis pelo usuário corrente:

SQL> select object_name, object_type, created


2 from all_objects;

Consultando o Dicionário de Dados: Exemplos - continuação

Para consultar todos os sinônimos visíveis pelo usuário:

SQL> select synonym_name, table_name


2 from all_synonyms;

Para consultar a definição de uma determinada visão:

SQL> select text


2 from user_views
3 where view_name = 'FUNCIONARIO_SEM_SALARIO';

Para consultar o nome da constraint referente a chave primária da uma determinada tabela:

SQL> select constraint_name


2 from user_constraints
3 where table_name = 'FUNCIONARIO'
4 and constraint_type = 'P';

Para consultar quais colunas compõem a chave primária concatenada de uma determinada
tabela:

SQL> select column_name, position


2 from user_cons_columns
3 where constraint_name = 'SECAO_PK';

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 79


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 80


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

SEGURANÇA DO BANCO DE DADOS

Objetivos do capítulo

 Controlar o acesso dos usuários no banco de dados

 Criar sinônimos para os objetos do banco de dados

 Criar personagens

PRIVILÉGIOS DE SISTEMA: PANORAMA

O administrador do banco de dados (DBA) é quem permite que os usuários realizem


determinadas operações ou classes de operações no banco de dados concedendo-lhes
determinados privilégios de sistema.

Um privilégio de sistema é o direito a executar um tipo de comando.

Tipos de Privilégios de Sistema:

Privilégios de Sistema Descrição

No Esquema do Usuário É o privilégio para criar um objeto


como uma tabela, uma visão, uma
seqüência ou um sinônimo, etc., no
seu próprio esquema
Em Todos Objetos de um Tipo É o privilégio para criar ou manipular
um determinado tipo de objeto em
qualquer esquema
No Sistema É o privilégio que permite, por
exemplo, criar ou alterar um usuário
do banco de dados, bem como os
privilégios deste mesmo usuário

Obs: Os privilégios de sistema não são especificados para um determinado esquema,


objeto ou estrutura. Eles são especificados para uma determinada operação ou uma
determinada classe de operações em um determinado tipo de objeto ou estrutura. Por
exemplo, o privilégio de sistema SELECT ANY TABLE concede ao usuário o direito de
consultar qualquer tabela do banco de dados de qualquer usuário ou do dicionário de
dados. Um privilégio de objeto, por sua vez, concede ao usuário o direito de consultar uma
tabela específica, tal como ALUNO1.S_EMP.

Um esquema é o conjunto de todos os objetos criados pelo próprio usuário.

Privilégios de Sistema: Panorama - continuação

Existem mais de 70 privilégios de sistema diferentes. Cada privilégio de sistema permite a um


usuário realizar uma determinada operação ou uma determinada classe de operações no banco
de dados.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 81


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Exemplos de classes de privilégios de sistema:

Classe Privilégio de Sistema Operações Permitidas

SESSION CREATE SESSION Abrir uma conexão com o banco de


dados, ou seja, abrir uma sessão de
trabalho com o servidor Oracle

TABLE CREATE TABLE Criar uma tabela no próprio esquema


do usuário

TABLE SELECT ANY TABLE Consultar qualquer tabela ou visão de


qualquer esquema

CONCEDENDO PRIVILÉGIOS DE SISTEMA

O DBA pode conceder e revogar privilégios de sistema para e de usuários e personagens usando
o comando GRANT.

Sintaxe:
GRANT { privilégio de sistema... | personagem... } TO
{ usuário... | personagem... | PUBLIC } [ WITH ADMIN OPTION ]

Onde:

privilégio de sistema é o nome do privilégio de sistema a ser


concedido.

TO identifica os usuários ou personagens para


o qual os privilégios de sistema devem ser
concedidos.

PUBLIC concede privilégios de sistema ou


personagens para todos os usuários.

WITH ADMIN OPTION permite que os usuários que estão


recebendo os privilégios possam conceder
os mesmos para outros usuários.

Exemplos:

Para conceder o privilégio de conectar com o banco de dados e de criar tabelas no seu esquema
para o usuário scott, o comando GRANT é o seguinte:

SQL> GRANT CREATE SESSION, CREATE TABLE TO scott;

Statement processed.

Para conceder o privilégio de alterar qualquer tabela em qualquer esquema para o usuário scott, o
comando GRANT é o seguinte:

SQL> GRANT ALTER ANY TABLE TO scott;

Statement processed.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 82


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

VERIFICANDO OS PRIVILÉGIOS DE SISTEMA CONCEDIDOS

Colunas da DBA_SYS_PRIVS:

Coluna Descrição

GRANTEE Nome do usuário ou personagem para quem foi


concedido o privilégio de sistema
PRIVILEGE Nome do privilégio de sistema concedido para o usuário
ou personagem
ADMIN_OPTION Significa que o privilégio recebido pode ser concedido
para outros usuários ou personagens

O DBA verifica os privilégios de sistema concedidos consultando a tabela do dicionário de dados


DBA_SYS_PRIVS.

Exemplo:

Para verificar a estrutura da tabela do dicionário de dados DBA_SYS_PRIVS, conecte-se como


DBA e digite o comando:

SQL> DESC dba_sys_privs

Name Null? Type


-------------------- --------- --------------
GRANTEE NOT NULL VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
ADMIN_OPTION VARCHAR2(3)

Para verificar todos os privilégios de sistema concedidos para os usuários scott e laura, o
comando é o seguinte:

SQL> SELECT *
2 FROM sys.dba_sys_privs
3 WHERE grantee IN ('SCOTT', 'LAURA');

GRANTEE PRIVILEGE ADM


-------------------- ------------------------ ---
LAURA CREATE SESSION NO
SCOTT ALTER ANY TABLE NO
SCOTT CREATE TABLE NO
SCOTT CREATE SESSION NO

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 83


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

PRIVILÉGIOS DE OBJETO: PANORAMA

 O DBA pode permitir aos usuários realizar uma determinada ação em uma determinada tabela,
visão, seqüência, ou procedimento concedendo-lhes privilégios de objeto. Os tipos de
privilégios de objeto variam de objeto para objeto.

Tipos de Privilégios de Objeto:


Privilégio Table View Sequence Procedure
ALTER sim sim
DELETE sim sim
EXECUTE sim *
INDEX sim **
INSERT sim sim
REFEREN. sim **
SELECT sim sim sim
UPDATE sim sim

 * “Procedure” refere-se a procedimentos, funções ou pacotes públicos


 ** Privilégio não pode ser concedido para um personagem

Diferentes privilégios de objeto permitem o uso de comandos determinados comandos SQL.

Comandos SQL Permitidos pelos Privilégios de Objetos:

Privilégio de Objeto Comando SQL Permitido


SELECT SELECT ...FROM objeto (tabela ou visão)
comandos SQL usando uma seqüência

UPDADE UPDATE objeto (tabela ou visão)

INSERT INSERT INTO objeto (tabela ou visão)

ALTER ALTER objeto (tabela ou seqüência)

DELETE DELETE FROM objeto (tabela ou visão)

EXECUTE EXECUTE objeto (procedimento ou função)

INDEX CREATE INDEX ON objeto (somente tabelas)

REFERENCES comandos CREATE ou ALTER TABLE definindo


uma constraint FK no objeto (somente tabelas)

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 84


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CONCEDENDO PRIVILÉGIOS DE OBJETO

 O DBA pode conceder privilégios de objeto para usuários e personagens com o comando
GRANT.

Sintaxe:
GRANT { privilégios de objeto... | ALL } [ ( colunas... ) ]
ON objeto TO { usuário | personagem | PUBLIC }
[ WITH GRANT OPTION ]

Onde:

privilégio de objeto é o nome do privilégio de objeto a ser


concedido.

ALL todos os privilégios.

column especifica a coluna da tabela ou visão sobre


a qual o privilégio está sendo concedido.

ON identifica o objeto sobre o qual os privilégios


estão sendo concedidos.

TO identifica os usuários ou personagens para


o qual os privilégios de objeto devem ser
concedidos.

PUBLIC concede privilégios de objeto para todos os


usuários.

WITH ADMIN OPTION permite que os usuários que estão


recebendo os privilégios possam conceder
os mesmos para outros usuários.

Exemplos:

Para conceder aos usuários sue e rich o privilégio de consultar a tabela S_EMP:

SQL> GRANT SELECT ON s_emp TO sue, rich;

Grant succeeded.

Para conceder ao usuário scott os privilégios necessários para consultar a tabela S_EMP, inserir
linhas na tabela S_EMP com valores nas colunas ID, FIRST_NAME e DEPT_ID e atualizar a
coluna FIRST_NAME da tabela S_EMP:

SQL> GRANT SELECT, INSERT (id, first_name, dept_id),


2 UPDATE (first_name)
3 ON s_emp TO scott;

Grant succeeded.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 85


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Obs:
 Para conceder privilégios sobre um objeto, o objeto deve ter sido criado pelo próprio
usuário ou ter recebido o privilégio sobre o mesmo com a cláusula WITH GRANT
OPTION.
 Um usuário dono de um objeto pode conceder qualquer privilégio de objeto sobre o
mesmo para qualquer usuário ou personagem.
 O dono de um objeto automaticamente adquire todos os privilégios sobre aquele objeto.

Um privilégio que é concedido com a cláusula WITH GRANT OPTION pode ser passado para
outros usuários e personagens.

Cláusula WITH GRANT OPTION

 Privilégios de objeto concedidos com a cláusula WITH GRANT OPTION são revogados quando
o privilégio do usuário que concedeu o mesmo for revogado.
 Um privilégio com a cláusula WITH GRANT OPTION não pode ser concedido para
personagens.

Concedendo Privilégios de Objeto - continuação

Exemplos:

A usuária alice permite ao usuário scott acessar a tabela S_DEPT, com os privilégios para
consultar a tabela e adicionar linhas na mesma. Permite também, que o usuário scott conceda
esses privilégios para outros usuários.

SQL> GRANT SELECT, INSERT


2 ON s_dept
3 TO scott
4 WITH GRANT OPTION;

Grant succeeded.

O usuário scott, por sua vez, permite que todos os usuários do sistema consultem a tabela
S_DEPT da usuária alice.

SQL> GRANT SELECT


2 ON alice.s_dept
3 TO PUBLIC;

Grant succeeded.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 86


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

VERIFICANDO OS PRIVILÉGIOS DE OBJETO CONCEDIDOS

Colunas da USER_TAB_PRIVS_MADE:

Coluna Descrição
GRANTEE Nome do usuário para quem o acesso foi concedido

TABLE_NAME Nome do objeto

GRANTOR Nome do usuário que realizou a concessão

PRIVILEGE Privilégio concedido

GRANTABLE Possui a palavra YES se o privilégio foi concedido com a


cláusula WITH GRANT OPTION, senão, possui NO

Exemplos:

Para mostrar a estrutura da tabela USER_TAB_PRIVS_MADE:

SQL> DESC user_tab_privs_made

Name Null? Type


------------------------------ --------- ----
GRANTEE NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
GRANTOR NOT NULL VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
GRANTABLE VARCHAR2(3)

A usuária alice mostrando todos os privilégios concedidos em seus objetos:

SQL> SELECT *
2 FROM user_tab_privs_made;

GRANTEE TABLE_NAME GRANTOR PRIVILEGE GRANTABLE


------- ---------- ------- ---------- ---------
PUBLIC S_DEPT SCOTT SELECT NO
SCOTT S_DEPT ALICE INSERT YES
SCOTT S_DEPT ALICE SELECT YES
SCOTT S_EMP ALICE DELETE NO
SCOTT S_EMP ALICE INSERT NO
SCOTT S_EMP ALICE REFERENCES NO
SCOTT S_EMP ALICE SELECT NO
SCOTT S_EMP ALICE UPDATE NO

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 87


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

VERIFICANDO OS PRIVILÉGIOS DE OBJETOS RECEBIDOS

Colunas da tabela USER_TAB_PRIVS_RECD:

Coluna Descrição
OWNER Dono do objeto

TABLE_NAME Nome do objeto

GRANTOR Nome do usuário que realizou a concessão

PRIVILEGE Privilégio concedido

GRANTABLE Possui a palavra YES se o privilégio foi concedido com a


cláusula WITH GRANT OPTION, senão, possui NO

Exemplos:

Para mostrar a estrutura da tabela USER_TAB_PRIVS_RECD:

SQL> DESC user_tab_privs_recd

Name Null? Type


------------------------------ --------- ----
OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
GRANTOR NOT NULL VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
GRANTABLE VARCHAR2(3)

O usuário scott mostrando todos os privilégios recebidos da usuária alice:

SQL> SELECT *
2 FROM user_tab_privs_recd;

OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE


------- ---------- ------- ---------- ---------
ALICE S_DEPT ALICE INSERT YES
ALICE S_DEPT ALICE SELECT YES
ALICE S_EMP ALICE DELETE NO
ALICE S_EMP ALICE INSERT NO
ALICE S_EMP ALICE REFERENCES NO
ALICE S_EMP ALICE SELECT NO
ALICE S_EMP ALICE UPDATE NO

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 88


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CRIANDO SINÔNIMOS PARA FACILITAR O ACESSO

Sinônimos Públicos
 São sinônimos criados pelo DBA e são acessíveis para todos os usuários.
Sinônimos Privados
 São sinônimos criados pelo usuário e são acessíveis somente para o criador do sinônimo.

A criação de um sinônimo é feita com o comando CREATE SYNONYM.

Sintaxe:
CREATE [ PUBLIC ] SYNONYM nome_do_sinônimo
FOR nome_do_objeto

onde:

PUBLIC cria um sinônimo acessível para todos os


usuários.
Nome_do_objeto identifica o objeto para o qual o sinônimo é criado.
objeto pode ser dos seguintes tipos:
 table
 view
 sequence
 procedure, function ou package
 synonym

Exemplo:

O usuário scott, criando um sinônimo privado chamado S_DEPT para a tabela S_DEPT da
usuária alice:

SQL> CREATE SYNONYM s_dept


2 FOR alice.s_dept;

Synonym created.

Para apagar um sinônimo, o comando DROP SYNONYM deve ser utilizado.

Exemplo:

Para apagar o sinônimo s_dept:

SQL> DROP SYNONYM s_dept;

Synonym dropped.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 89


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

REMOVENDO PRIVILÉGIOS DE OBJETO

A remoção de privilégios concedidos para outros usuários é feita com o comando REVOKE.

Sintaxe:
REVOKE privilégio, privilégio...
ON objeto
FROM { usuário, usuário... | PUBLIC | personagem }
[ CASCADE CONSTRAINTS ]

onde:
CASCADE CONSTRAINTS cláusula que serve para
remover também qualquer
constraint do tipo FK feita
para o objeto através do
privilégio do tipo references.

Exemplo:

A usuária alice, revoga os privilégios de SELECT e INSERT na tabela S-DEPT concedidos ao


usuário scott.

SQL> REVOKE SELECT, INSERT


2 ON s_dept
3 FROM scott;

Revoke succeeded.

Obs:
 Se um privilégio foi concedido com a cláusula WITH GRANT OPTION, então, revogando o
privilégio também revoga-se qualquer privilégio que tenha sido concedido usando a
cláusula.

USANDO PERSONAGENS PARA AGRUPAR PRIVILÉGIOS

Os personagens simplificam o gerenciamento de privilégios. Personagens são grupos de


privilégios relacionados a um nome de personagem que o DBA pode conceder para usuários e
também para outros personagens.

Personagens
 Podem ser constituídos tanto de privilégios de sistema quanto de privilégios de objeto.
 Não pertencem a usuário algum e nem fazem parte de qualquer esquema.
 Podem ser concedidas para qualquer usuário ou personagem, exceto para si mesmo.
 Podem ser habilitadas ou desabilitadas para cada usuário autorizado.
 Podem requerer senhas para serem habilitadas.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 90


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CRIANDO UM PERSONAGEM

Para criar um personagem, o comando CREATE ROLE deve ser utilizado.

Sintaxe:
CREATE ROLE personagem
[ { NOT IDENTIFIED | IDENTIFIED BY { senha | EXTERNALLY } } ]

onde:
personagem é o nome do personagem a ser criado.

NOT IDENTIFIED indica que o usuário que deseja habilitar o


personagem para si não necessita de verificação
por parte do servidor Oracle.

IDENTIFIED indica que o usuário que deseja habilitar o


personagem para si necessita de verificação
por parte do servidor Oracle.

BY senha indica que o usuário deve especificar uma senha


para habilitar o personagem para si.

EXTERNALLYassegura que o servidor Oracle verifica o acesso


do usuário, que tenta habilitar o personagem para
si, usando o sistema de autenticação de usuários
do sistema operacional.

Criando um Personagem - continuação

Exemplos:

Cria um personagem chamado acct_rec;

SQL> CREATE ROLE acct_rec;

Statement processed.

Cria um personagem chamado acct_pay com a senha bicentennial.

SQL> CREATE ROLE acct_pay


2 IDENTIFIED BY bicentennial;

Statement Processed.

Cria um personagem chamado manager com o acesso ao personagem sendo verificado por um
utilitário do sistema operacional.

SQL> CREATE ROLE manager


2 IDENTIFIED EXTERNALLY;

Statement Processed.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 91


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Uma vez que o personagem foi criado, conceda privilégios para o personagem, então
conceda o personagem para um usuário.

SQL> GRANT CREATE SYNONYM, CREATE TABLE


2 TO manager;

Statement processed.

SQL> GRANT manager TO kevin;

Statement Processed.

Obs:
 O privilégio de sistema CREATE ROLE é necessário para que o usuário possa criar
personagens.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 92


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

INICIANDO E ENCERRANDO UMA INSTÂNCIA

Objetivos do capítulo

 Instâncias Oracle

 Iniciar uma instância

 Encerrar uma instância

 Alterar o modo de operação do banco de dados

 Sessões restritas

INSTÂNCIAS ORACLE

Toda vez que o Oracle é iniciado, a System Global Area (SGA) é alocada e os processos
background do ORACLE são iniciados. A combinação dos buffers de memória e dos processos
background é chamada de uma instância ORACLE.

A SGA é um grupo de buffers de memória compartilhada alocado pelo ORACLE para uma
instância.

Os processos background realizam tarefas distintas em favor dos usuários da base de dados.

INICIANDO E ENCERRANDO UMA INSTÂNCIA - PANORÂMA

Para tornar a base de dados disponível para os usuários, uma instância deve ser iniciada.

Passos para iniciar uma instância:

1 Executar o SQL*DBA.
2 Abrir uma sessão de trabalho no banco de dados como usuário internal.
3 Iniciar uma instância.
A Iniciar a instância.
B Montar a base de dados.
C Abrir a base de dados.

Para tornar a base de dados não disponível para os usuários, a instância deve ser
encerrada.

Passos para encerrar uma instância:

1 Executar o SQL*DBA.
2 Abrir uma sessão de trabalho no banco de dados como usuário internal.
3 Encerrar a instância.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 93


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

EXECUTANDO O SQL*DBA

O SQL*DBA serve para gerenciar e monitorar a base de dados.

Exemplos:

Para executar o SQL*DBA com interface de menus no sistema operacional Unix.

$ sqldba

Para executar o SQL*DBA em modo linha de comando no sistema operacional Unix.

$ sqldba lmode=y

Para executar o SQL*DBA no prompt da console de um servidor Novell.

LABCOMP_S1> LOAD SQLDBA

ABRINDO UMA SESSÃO DE TRABALHO

A conexão com o servidor deve ser feita utilizando o usuário internal.

O sistema operacional do servidor é que verifica os privilégios para execução do SQL*DBA.

O ORACLE verifica os seus privilégios de sistema operacional para permitir a conexão como
usuário internal.

Se os privilégios forem suficientes, o Oracle não solicitará senha para o usuário internal.

Exemplo:

Para se conectar como usuário internal usando o SQL*DBA.

SQLDBA> CONNECT INTERNAL


Connected.

Obs:
 A senha não é necessária para se abrir uma sessão como usuário internal pois a
autorização é implicitamente provida pelo sistema operacional.
 Conexões como usuário internal são equivalentes a conexões como usuário sys, que é o
usuário dono das tabelas do dicionário de dados do Oracle.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 94


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

INICIANDO UMA INSTÂNCIA

Estados da instância:

SHUTDOWN: A instância não foi iniciada.

NOMOUNT: Instância iniciada.

MOUNT: Instância iniciada e arquivos de controle abertos.

OPEN: Instância iniciada e todos os arquivos abertos.

O estado NOMOUNT deve ser usado para criar a base de dados. O estado MOUNT deve ser
usado para alterar a estrutura de arquivos e modificar os arquivos de controle. O estado OPEN
torna o base de dados disponível para todos os usuários.

NOMOUNT, MOUNT e OPEN são mutuamente exclusivos. Por exemplo, o comando STARTUP
MOUNT OPEN não pode ser emitido. Para ir do estado SHUTDOWN para o estado OPEN, o
comando é simplesmente STARTUP. Se o comando STARTUP NOMOUNT é emitido, a instância
é iniciada. A base de dados pode ser iniciada no modo NOMOUNT para criar ou recriar a base de
dados. Se o comando STARTUP MOUNT é emitido, a instância deve ser iniciada e os arquivos de
controle devem ser abertos. A base de dados pode ser montada mas não aberta para que se
possa alterar a estrutura de arquivos existente. Exemplos: renomear arquivos de log ou de dados
e procedimentos de recuperação.

Etapas que e servidor Oracle deve efetuar para iniciar uma instância:

 ler o arquivo de controle init.ora,


 alocar a SGA,
 iniciar os processos background, e
 abrir os arquivos de anotações cronológicas.

Iniciando uma Instância - continuação

Para iniciar a instância tornando a base de dados disponível para todos os usuários.

SQLDBA> STARTUP
ORACLE instance started.
Database mounted.
Database opened.
Total System Global Area 1913196 bytes
Fixed Size 27764 bytes
Variable Size 1787128 bytes
Database Buffers 65536 bytes
Redo Buffers 32768 bytes

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 95


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

INICIANDO UMA INSTÂNCIA NO MODO RESTRITO

Uma instância iniciada no modo restrito, permite somente as conexões de usuários que possuam
o privilégio RESTRICTED SESSION.

Exemplo:

SQLDBA> CONNECT INTERNAL


Connected.

SQLDBA> STARTUP OPEN TESTE RESTRICT


ORACLE instance started.
Database mounted.
Database opened.
Total System Global Area 1913196 bytes
Fixed Size 27764 bytes
Variable Size 1787128 bytes
Database Buffers 65536 bytes
Redo Buffers 32768 bytes

ENCERRANDO UMA INSTÂNCIA

Para tornar a base de dados indisponível para todos os usuários, a base de dados deve ser
fechada e a instância encerrada.

Sintaxe:
SHUTDOWN [ { ABORT | IMMEDIATE | NORMAL } ]

onde:
ABORT é o mais rápido meio de encerramento. Ele não aguarda
que as transações dos usuários se completem.

IMMEDIATE termina os comandos SQL correntes e efetua um


rollback nas transações.

NORMAL aguarda que todos os usuários conectados fechem suas


sessões normalmente.

Exemplos:

Para fechar a base de dados permitindo aos usuários que fechem as suas sessões.

SQLDBA> CONNECT INTERNAL


Connected.

SQLDBA> SHUTDOWN NORMAL


Database closed.
Database dismounted.
ORACLE instance shut down.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 96


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

ALTERANDO O ESTADO DA BASE DE DADOS

O estado da base de dados pode ser alterado com o comando ALTER DATABASE.

Sintaxe:

ALTER DATABASE [ data_base ]


MOUNT [ { EXCLUSIVE | PARALLEL} ]
OPEN [ { RESETLOGS | NORESETLOGS } ]

onde:
data_base é o nome da base de dados a ser alterada.

MOUNT monta a base de dados para certas atividades do


do DBA, porém não permite acesso de outros
usuários.

OPEN permite o acesso de usuários na base de dados.

EXCLUSIVE é o default, e permite somente a instância corrente


acessar a base de dados.

PARALLEL permite múltiplas instâncias acessar a base de


dados.

Exemplos:

Para abrir a base de dados que já foi montada, o comando ALTER DATABASE é o seguinte:

SQLDBA> CONNECT INTERNAL


Connected.

SQLDBA> ALTER DATABASE OPEN;


Statement Processed.

HABILITANDO SESSÕES RESTRITAS

O DBA, pode alterar o estado da base de dados para somente permitir futuras conexões de
usuários que possuam o privilégio RESTRICTED SESSION com o comando ALTER SYSTEM.

Sintaxe:

ALTER SYSTEM { ENABLE | DISABLE } RESTRICTED SESSION

onde:
ENABLE RESTRICTED SESSION permite futuros logins somente
para usuários com o privilégio
RESTRICTED SESSION.

DISABLE RESTRICTED SESSION permite que todos os usuários


possam abrir uma sessão.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 97


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Exemplo:

Para alterar o estado da base de dados para permitir somente logins de usuários que possuam o
privilégio RESTRICTED SESSION.

SQLDBA> CONNECT INTERNAL


Connected.

SQLDBA> ALTER SYSTEM ENABLE RESTRICTED SESSION;


Statement Processed.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 98


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

GERENCIAMENTO DE TABLESPACES

Objetivos do Capítulo

 Conceito de tablespace

 Criar tablespaces

 Alterar tablespaces

CONCEITO DE TABLESPACES

Uma base de dados Oracle é dividida em áreas lógicas de armazenamento conhecidas como
tablespaces.

Características:

 Cada tablespace é formada por um ou mais arquivos do sistema operacional.


 Uma tablespace pode tornar-se ativa (on-line) enquanto a base de dados está rodando.
 Uma tablespace pode ser desativada (off-line) enquanto a base de dados está rodando, exceto
a tablespace system.
 Cada objeto está em somente uma tablespace.

Cada base de dados deve possuir no mínimo 5 (cinco) tablespaces. A tablespace SYSTEM é
criada durante a instalação do Oracle e é utilizada para armazenar o dicionário de dados.

Além da tablespace SYSTEM, são sugeridas as seguintes tablespaces:

 TEMP
 RBS
 TOOLS
 APPL_DATA
 APPL_INDX

A tablespace TEMP é usada para armazenar seguimentos temporários usados durante operações
de ordenação. A tablespace TOOLS contém tabelas requeridas pelo Oracle tools. A tablespace
APPL_DATA é usada para armazenar dados de produção (pode-se ter diversas tablespaces de
produção). A tablespace RBS é usada para armazenar seguimentos de rollback.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 99


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

CRIANDO UMA TABLESPACE

Uma tablespace é criada com o comando CREATE TABLESPACE.

Sintaxe:
CREATE TABLESPACE nome_da_tablespace
DATAFILE ‘especificação_do_arquivo’ [ REUSE ]
SIZE { bytes | Kbytes | Mbytes }
DEFAULT STORAGE ( INITIAL tamanho
NEXT tamanho
MINEXTENTS número
MAXEXTENTS número
PCTINCREASE percentual )
{ [ ONLINE ] | OFFLINE }

Exemplo:
Para criar uma tablespace chamada USER_DATA com o nome de arquivo userdataORCL.dbf,
com o tamanho de 100 MB e com os parâmetros de armazenamento padrão definidos como
segue: inicial 10240 bytes, próxima extensão 10240, número mínimo de extensões igual a 1
(uma), número máximo de extensões igual a 121, percentual de incremento igual a 50% e
tornando-a ativa.

SQL> CREATE TABLESPACE user_data


2 DATAFILE ‘/usr/oracle7/dbs/userdataORCL.dbf’ SIZE 100M
3 DEFAULT STORAGE (INITIAL 10240 NEXT 10240
4 MINEXTENTS 1 MAXEXTENTS 121
5 PCTINCREASE 50 );
Tablespace created.

ALTERANDO UMA TABLESPACE

Uma tablespace pode ser alterada com o comando ALTER TABLESPACE.

Sintaxe:
ALTER TABLESPACE nome_da_tablespace
[ ADD DATAFILE especificação_do_arquivo , ... ]
[ RENAME DATAFILE ‘nome_antigo’ TO ‘nome_novo’ ]
[ DEFAULT STORAGE cláusula storage ]
[ ONLINE ]
[ OFFLINE ]

onde:
nome_da_tablespace especifica o nome da tablespace a ser
alterada.
ADD DATAFILE adiciona o(s) arquivo(s) de dados
declarados em
especificação_do_arquivo.
RENAME DATAFILE muda o nome do(s) arquivo(s) de
dados.
DEFAULT STORAGE especifica o novo valor default para
os parâmetros de armazenamento dos
objetos criados na tablespace.
ONLINE torna a tablespace ativa.
OFFLINE desativa a tablespace.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 100


Universidade da Região da Campanha Prof. Henry Gomes
Centro de Ciências da Economia e Informática Disciplina de Banco de Dados II
Curso de Informática Apostila de ORACLE

Exemplo:

Para tornar a tablespace USER_DATA não-disponível.

SQL> ALTER TABLESPACE user_data


2 OFFLINE;

Tablespace altered.

Para adicionar mais um arquivo de dados no tablespace USER_DATA com o tamanho de 10 MB.

SQL> ALTER TABLESPACE USER_DATA


2 ADD DATAFILE ‘/usr/oracle7/dbs/userdata2ORCL.dbf’
3 SIZE 10M;

Tablespace altered.

Atualizada por Fabrízio de Royes Mello – fmello@urcamp.tche.br Página: 101

Vous aimerez peut-être aussi