Académique Documents
Professionnel Documents
Culture Documents
ORACLE
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
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.
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.
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:
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.
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.
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.
Objetivos do Capítulo
SQL
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.
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
SELECT
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.
Estes comandos são utilizados para definir as estruturas de dados, assim como, criar , alterar e
remover qualquer estrutura de dados.
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.
Antes de escrever comandos SQL, é importante ter em mente algumas regras para
construção de comandos válidos e de fácil leitura.
SELECT
*
FROM
FUNCIONARIO
/
SELECT *
FROM FUNCIONARIO ;
Exemplo:
sqlplus <enter>
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
SQL> exit
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:
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.
Obs: Os tipos de dados serão comentados com mais detalhes no capítulo 7 (DDL).
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;
Ex:
CODDEPT NOMEDEPT
--------- ------------------------------
10 INFORMATICA
20 RECURSOS HUMANOS
30 FINANCEIRO
40 VENDAS
50 CONTABILIDADE
60 DIRETORIA
70 MARKETING
80 ADMINISTRACAO
Ex:
CODDEPT
---------
10
40
30
70
10
80
10
80
30
10
10
80
A cláusula distinct:
Ex:
CODDEPT
---------
10
30
40
70
80
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
Para mostrar os nomes dos funcionários, seguido do seu salário anual, colocando um
“alias “ para a coluna salário anual.
Ex:
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
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 à
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' ;
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;
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.
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
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
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:
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:
Obs: Se dados caracteres ou datas forem usados na lista, eles devem ficar entre aspas
simples.
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
Ex:
NOMEFUNC
------------------------------
EDMAR FERNANDES
EMERSON ALBUQUERQUE
O ‘_’ pode ser usado para pesquisar por um número específico de caracteres.
Ex:
SQL> SELECT *
2 FROM DEPARTAMENTO
3 WHERE NOMEDEPT LIKE '______' ;
CODDEPT NOMEDEPT
--------- ------------------------------
40 VENDAS
Para selecionar todos os empregados cujo nome não começa com um ‘E’:
Ex:
NOMEFUNC
------------------------------
AMARAL DOS REIS
ROSANGELA DA SILVA
JULIANA ANDRADE
WELLINGTON SOUZA
LUCIANA CARRERA
MARCUS ALENCAR
OSCAR MIRANDA
ANTONIO CARLOS DE OLIVEIRA
JOSE CARLOS
CARLA GOMES DE SOUZA
O operador IS NULL
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.
Ex:
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:
Para mostrar todos os funcionários onde o salario esteja entre 1500 e 2500 ou que trabalham no
departamento 10:
Ex:
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.
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:
Para mostrar todos os funcionários com cargo ‘1’ ou ‘9’ e com salários acima de 2000.
Ex:
A cláusula ORDER BY
Ex:
Para inverter a esta ordem, a palavra DESC deve ser especificada após a cláusula ORDER BY.
Ex:
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 Descrição
Tabelas de Usuários Tabelas criadas e mantidas pelo usuário, assim como,
funcionário, que contém dados de usuários
OBJECT_NAME
-----------------------------------
CARGO
CLIENTE
COMISSAOVENDA
DEPARTAMENTO
FUNCIONARIO
ITEM_ESTOQUE
ITEM_PEDIDO
MOV_ESTOQUE
NOTA_FISCAL
PEDIDO
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.
Exemplos:
Ex:
NOMEDEPT
------------------------------
INFORMATICA
RECURSOS HUMANOS
FINANCEIRO
VENDAS
CONTABILIDADE
DIRETORIA
MARKETING
ADMINISTRACAO
Ex:
SQL> L 1
1* SELECT NOMEDEPT
SQL> A , CODDEPT
1* SELECT NOMEDEPT , CODDEPT
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>
Ex:
SQL> RUN
1 SELECT NOMEDEPT , CODDEPT
2 FROM DEPARTAMENTO
3* WHERE CODDEPT < 40
NOMEDEPT CODDEPT
------------------------------ ---------
INFORMATICA 10
RECURSOS HUMANOS 20
FINANCEIRO 30
Ex:
SQL> /
NOMEDEPT CODDEPT
------------------------------ ---------
INFORMATICA 10
RECURSOS HUMANOS 20
FINANCEIRO 30
Exemplos:
Ex:
Ex:
Ex:
NOMEDEPT CODDEPT
------------------------------ ---------
INFORMATICA 10
RECURSOS HUMANOS 20
FINANCEIRO 30
Objetivos do Capítulo
Variáveis de substituição são usadas em comandos SQL e permitem especificar valores em tempo
de execução.
Para mostrar todos os funcionários que tenham determinado cargo , onde o mesmo será
informado pelo usuário em tempo de execução:
Ex:
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
CODDEPT NOMEDEPT
--------- ------------------------------
70 MARKETING
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.
Sintaxe:
Sintaxe Descrição
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:
Expressões Aritméticas
Uma expressão é uma combinação de um ou mais valores, operadores e funções que executam
cálculos.
Ex:
Ex:
Ex:
Ex:
Ex:
Ex:
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:
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
Ex:
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:
Função CEIL
Retorna o menor inteiro maior ou igual ao valor de uma coluna da tabela, expressão ou um valor
qualquer.
Ex:
Função FLOOR
Retorna o maior inteiro menor ou igual ao valor de uma coluna da tabela, expressão ou um valor
qualquer.
Ex:
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:
Função MOD
Retorna o resto de uma divisão do primeiro valor dividido pelo segundo valor.
Ex:
Função ABS
Ex:
Função NVL
Ex:
Funções Caracter:
Funções caracter aceitam dados do tipo caracter como entrada e podem retornar números ou
caracter.
Função LOWER
Ex:
Função UPPER
Ex:
Função INITCAP
Ex:
Função LENGTH
Ex:
Ex:
O operador ||
Ex:
'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.
Século
Ano
Mês
Dia
Horas
Minutos
Segundos
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.
Ex:
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:
Função LAST_DAY
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:
3 FROM FUNCIONARIO
4 WHERE CODDEPT = 10;
Função MONTHS_BETWEEN
Para mostrar o número de meses entre a data corrente e a data de admissão dos funcionários do
departamento 10.
Ex:
Função NEXT_DAY
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:
Funções de Conversão:
Função TO_CHAR
Para converter a data de admissão com um formato padrão para um novo formato.
Ex:
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
Ex:
SYSDATE TO_CHAR(SYSDATE,'HH:MI:SS')
--------- ---------------------------------------
28-FEB-97 02:17:29
ELEMENTO DESCRIÇÃO
Para converter um tipo de dado numérico para caracter, no caso, o salário dos funcionários.
Ex:
Função TO_NUMBER
Ex:
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.
Ex:
Funções de grupo operam em conjunto de linhas. Eles retornam resultados baseados em grupos
de linhas.
Função AVG
AVG(SALARIO)
------------
2477.5
Função COUNT
COUNT(*)
---------
8
COUNT(GERENTE)
--------------
6
Ex:
MAX(SALARIO)
------------
4100
Ex:
MIN(SALARIO)
------------
600
Ex:
SUM(SALARIO)
------------
29730
A cláusula GROUP BY do comando SELECT é usado para dividir linhas em grupos menores.
Ex:
CODDEPT AVG(SALARIO)
--------- ------------
10 2256
30 2080
40 4100
70 1230
80 3110
2410
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
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
Ex:
SQL> SELECT CODDEPT, MAX(SALARIO), MIN(SALARIO)
2 FROM FUNCIONARIO
3 GROUP BY CODDEPT;
Utilizando coluna(s) com função de grupo sem utilizar a cláusula group by.
Ex:
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:
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:
CODDEPT AVG(SALARIO)
--------- ------------
10 2256
80 3110
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:
CODDEPT SUM(SALARIO)
--------- ------------
80 6220
Objetivos do Capítulo
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).
Ex:
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.
Ex:
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.
Ex:
Para mostrar linhas específicas de tabelas relacionadas, devemos adicionar mais alguma
condição de pesquisa à cláusula join.
Ex:
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.
Ex:
SQL> SELECT D.CODDEPT, NOMEDEPT, NOMEFUNC
2 FROM FUNCIONARIO F, DEPARTAMENTO D
3 WHERE F.CODDEPT(+)=D.CODDEPT
4 ORDER BY D.CODDEPT;
Ex:
SQL> SELECT D.CODDEPT, NOMEDEPT, NOMEFUNC
2 FROM FUNCIONARIO F, DEPARTAMENTO D
3 WHERE F.CODDEPT=D.CODDEPT(+)
4 ORDER BY D.CODDEPT;
Para criar joins da tabela com ela mesma, pode-se utilizar ‘alias’ para o nome da tabela.
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;
SUBQUERIES
Objetivos do Capítulo
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.
MAX(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
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');
A subquery retorna o código do cargo do funcionário Edmar Fernandes que é utilizada pela query
principal para condição de pesquisa.
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
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’.
Ex:
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.
Ex:
SQL> SELECT NOMEFUNC, CODDEPT, SALARIO
2 FROM FUNCIONARIO
3 WHERE (CODDEPT, SALARIO) IN
4 (SELECT CODDEPT, MAX(SALARIO)
5 FROM FUNCIONARIO
6 GROUP BY CODDEPT);
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
Para mostrar todos os funcionários que trabalham no mesmo departamento dos funcionários que
tem o cargo de ‘Analista de Sistemas’
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’.
SUBQUERIES CORRELACIONADAS
Uma subquery correlacionada é uma subquery aninhada que é executada uma vez para cada
linha candidata considerada pela query principal.
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);
Objetivos do Capítulo
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.
TERMINOLOGIA BÁSICA
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.
Por exemplo a coluna NUMFUNC para cada linha da tabela de funcionários tem um valor distinto
e nenhum deles está nulo.
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.
Se uma coluna é pré-fixada com um ‘ * ‘ então esta coluna deve ser preenchida.
Uma coluna ou combinação de colunas cujos valores devem ser únicos, porém podem conter
valores nulos.
Quando uma tabela é criada, necessitá-se especificar o tipo de dado de cada coluna. A tabela
abaixo relaciona os principais tipos 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
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.
Constraint Descrição
NOT NULL Especifica que a coluna não pode conter valores nulos.
PRIMARY KEY Especifica que o valor de uma coluna ou grupo de colunas deve
ser único e não pode conter valores nulos
NUMFUNC PK NN, U
NOMEFUNC NN
DATANASC
DATAADM
CODCARGO FK1
CODDEPT FK2
SALARIO
GERENTE FK3
Ex:
Table created.
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)
Utilizando a palavra ADD no comando ALTER TABLE, podemos incluir colunas/constraints para
uma determinada tabela.
Ex:
SQL> ALTER TABLE FUNCIONARIO
2 ADD (COMENTARIO VARCHAR2(100));
Table altered.
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)
Utilizando a palavra MODIFY no comando ALTER TABLE, podemos modificar a definição de uma
coluna existente.
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.
Adicionar ou remover uma constraint de uma tabela de existente usando o comando ALTER
TABLE.
Ex:
SQL> ALTER TABLE FUNCIONARIO
2 ADD CONSTRAINT FUNCIONARIO_SALARIO_CK
3 CHECK (SALARIO < 5000);
Table altered.
Table altered.
Para remover a definição de uma tabela Oracle, utiliza-se o comando DROP TABLE.
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.
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. 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.
Ex:
View created.
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;
View created.
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
A cláusula WITH CHECK OPTION especifica quais comandos INSERTs e UPDATEs serão
permitidos através da visão.
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.
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.
Ex:
SQL> DROP VIEW FUNCDEPT10;
View dropped.
SEQUÊNCIAS ORACLE
Sintaxe incompleta
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
Ex:
Ex:
9 rows selected.
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
Ex:
SQL> INSERT INTO DEPARTAMENTO
2 VALUES (DEPARTAMENTO_CODIGO.NEXTVAL, 'Financas', 2);
1 row created.
1 row created.
Confirmando as inserções.
SQL> SELECT *
2 FROM DEPARTAMENTO
3 WHERE NOME = 'Financas';
Para ajustar um dos parâmetros de uma seqüência, o comando ALTER SEQUENCE deve ser
utilizado.
Ex:
Sequence altered.
Para eliminar uma seqüência, o comando DROP SEQUENCE deve ser utilizado.
Ex:
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
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.
Exemplos:
Para acessar uma linha da tabela EMPREGADO de acordo com o endereço da linha.
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.
- 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
Sintaxe:
Ex:
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]...)
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.
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
Ex:
SQL> DROP INDEX cliente_fone_uk;
Index dropped.
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.
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.
Os nomes das visões do dicionário de dados refletem o tipo de uso a que elas se destinam.
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.
Para consultar informações sobre todos os objetos visíveis pelo usuário corrente:
Para consultar o nome da constraint referente a chave primária da uma determinada tabela:
Para consultar quais colunas compõem a chave primária concatenada de uma determinada
tabela:
Objetivos do capítulo
Criar personagens
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:
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:
Statement processed.
Para conceder o privilégio de alterar qualquer tabela em qualquer esquema para o usuário scott, o
comando GRANT é o seguinte:
Statement processed.
Colunas da DBA_SYS_PRIVS:
Coluna Descrição
Exemplo:
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');
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.
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:
Exemplos:
Para conceder aos usuários sue e rich o privilégio de consultar a tabela S_EMP:
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:
Grant succeeded.
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.
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.
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.
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.
Grant succeeded.
Colunas da USER_TAB_PRIVS_MADE:
Coluna Descrição
GRANTEE Nome do usuário para quem o acesso foi concedido
Exemplos:
SQL> SELECT *
2 FROM user_tab_privs_made;
Coluna Descrição
OWNER Dono do objeto
Exemplos:
SQL> SELECT *
2 FROM user_tab_privs_recd;
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.
Sintaxe:
CREATE [ PUBLIC ] SYNONYM nome_do_sinônimo
FOR nome_do_objeto
onde:
Exemplo:
O usuário scott, criando um sinônimo privado chamado S_DEPT para a tabela S_DEPT da
usuária alice:
Synonym created.
Exemplo:
Synonym dropped.
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:
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.
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.
CRIANDO UM PERSONAGEM
Sintaxe:
CREATE ROLE personagem
[ { NOT IDENTIFIED | IDENTIFIED BY { senha | EXTERNALLY } } ]
onde:
personagem é o nome do personagem a ser criado.
Exemplos:
Statement processed.
Statement Processed.
Cria um personagem chamado manager com o acesso ao personagem sendo verificado por um
utilitário do sistema operacional.
Statement Processed.
Uma vez que o personagem foi criado, conceda privilégios para o personagem, então
conceda o personagem para um usuário.
Statement processed.
Statement Processed.
Obs:
O privilégio de sistema CREATE ROLE é necessário para que o usuário possa criar
personagens.
Objetivos do capítulo
Instâncias Oracle
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.
Para tornar a base de dados disponível para os usuários, uma instância deve ser iniciada.
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.
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.
EXECUTANDO O SQL*DBA
Exemplos:
$ sqldba
$ sqldba lmode=y
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:
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.
Estados da instância:
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:
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
Uma instância iniciada no modo restrito, permite somente as conexões de usuários que possuam
o privilégio RESTRICTED SESSION.
Exemplo:
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.
Exemplos:
Para fechar a base de dados permitindo aos usuários que fechem as suas sessões.
O estado da base de dados pode ser alterado com o comando ALTER DATABASE.
Sintaxe:
onde:
data_base é o nome da base de dados a ser alterada.
Exemplos:
Para abrir a base de dados que já foi montada, o comando ALTER DATABASE é o seguinte:
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:
onde:
ENABLE RESTRICTED SESSION permite futuros logins somente
para usuários com o privilégio
RESTRICTED SESSION.
Exemplo:
Para alterar o estado da base de dados para permitir somente logins de usuários que possuam o
privilégio RESTRICTED SESSION.
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 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.
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.
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.
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.
Exemplo:
Tablespace altered.
Para adicionar mais um arquivo de dados no tablespace USER_DATA com o tamanho de 10 MB.
Tablespace altered.