SlideShare uma empresa Scribd logo
1 de 19
Introdução ao conceito de Tablespaces
Comecemos com a seguinte pergunta: Qual é a relação entre tablespaces e arquivos de dados? Bom, para
responder esta pergunta, primeiro precisamos entender como os dados são armazenados no banco de
dados. O Oracle armazena dados logicamente em tablespaces e fisicamente em arquivos de dados
(datafiles). Apesar dos arquivos de dados e os tablespaces estarem muito "inter-relacionados", os
mesmos possuem diferenças importantes:
Um banco de dados Oracle consiste em uma ou mais unidades de armazenamento lógicas
denominadas tablespaces, que armazenam coletivamente todos os dados do banco de dados.
Cada tablespace em um banco de dados Oracle consiste em um ou mais arquivos denominados
arquivos de dados (datafiles), que são estruturas físicas compatíveis com o sistema operacional no qual o
Oracle é executado.
Os dados de um banco de dados são armazenados coletivamente nos arquivos de dados que
constituem cada tablespace do banco de dados.
Como um banco de dados é um conjunto de arquivos de dados, é muito importante que entendamos
como um banco de dados Oracle agrupa esses arquivos. Como dito anteriormente, o Oracle faz isso sob a
proteção de um objeto de banco de dados chamado tablespace. Antes de poder inserir dados em um
banco de dados Oracle, primeiro é necessário criar um tablespace e depois uma tabela dentro desse
tablespace que conterá os dados. Podemos observar que na criação de um banco de dados utilizando o
DBCA, o Oracle como padrão sempre cria um tablespace de dados chamado USERS. Ao criar uma tabela é
necessário incluir todas as informações sobre o tipo de dados que deseja manter. O código abaixo, gerado
para criar a tabela CLIENTE, ilustra como o Oracle armazena informações sobre o tipo de dado que irá
registrar:
SQL> create table cliente
2 (cod_cliente number constraint pk_cliente primary key,
3 nomevarchar2(60) not null,
4 enderecovarchar2(100) not null,
5 telefone number,
6data_cadastro date)
7tablespaceusers;
Tabela criada.
SQL>desc cliente
Nome
Nulo? Tipo
----------------------------- -------- -------------------COD_CLIENTE
NOT NULL NUMBER
NOME
NOT NULL VARCHAR2(60)
ENDERECO
NOT NULL VARCHAR2(100)
TELEFONE
NUMBER
DATA_CADASTRO
DATE
SQL> select table_name,tablespace_name
2 fromuser_tables
3 wheretable_name='CLIENTE';
TABLE_NAME
TABLESPACE_NAME
------------------------------ -----------------------------CLIENTE
USERS

Na instrução acima, foi criada uma tabela que é o meio mais comum de armazenar dados em um banco
de dados. Os dados de um segmento de tabela são armazenados aleatoriamente no tablespace e o DBA
tem pouco controle sobre a localização das linhas dos blocos de uma tabela. Por falar nisso, o que é um
segmento? Os segmentos são objetos que ocupam espaço em um banco de dados. Existem vários tipos
de segmentos como tabelas, índices, de undo, temporários, LOB, entre outros. Já uma extensão (extent),
é um espaço usado por um segmento em um tablespace. Para terminar, um bloco Oracle consiste em um
ou mais blocos do sistema operacional e seu tamanho é definido na criação do tablespace. Então a
estrutura lógica de um banco de dados Oracle se resume em tablespaces que contém segmentos que
contém extensões que contém blocos. A figura abaixo ilustra esta estrutura lógica:
estrutura lógica de um banco de dados Oracle
SQL> select segment_name, segment_type, tablespace_name,
2 bytes, blocks, extents
3 fromuser_segments
4 wheresegment_name='CLIENTE';

SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES
-------------- ------------ ---------------- -------- ------- --------CLIENTE
TABLE
USERS
65536
8
1

BLOCKS EXTENTS

Vale a pena salientar que foi incluído o nome do tablespace USERS no comando de criação da tabela,
apenas para exemplificar, já que uma tabela sempre será criada no tablespace padrão do usuário definido
na sua criação (createuser).
SQL> select default_tablespace from user_users;
DEFAULT_TABLESPACE
-----------------------------USERS
Agora que você entende porque isso se chama tablespace, vamos tentar compreender porque
precisamos de tablespaces para agrupar arquivos de dados. A melhor analogia para se explicar banco de
dados, tablespace, arquivo de dados, tabelas e dados é a imagem de um fichário. Imagine um banco de
dados como um fichário: as gavetas dentro do fichário são os tablespaces; as pastas nessas gavetas são os
arquivos de dados; os papéis em cada pasta são as tabelas; a informação escrita no papel de cada pasta
são os dados. Em resumo, o tablespace é um modo de agrupar arquivos de dados
É aconselhável não misturar dados de aplicativos no mesmo tablespace. Então, ao criar tablespaces para
seus aplicativos, dê a eles um nome descritivo (por exemplo, dados de um sistema de RH podem ser
mantidos no tablespace RECURSOS_HUMANOS). Em resumo, aplicação separada corresponde a
tablespace separado.
O que é o tablespace USERS?
Como demonstrado anteriormente, este geralmente é o tablespace padrão para os usuários. Se um
usuário criar um objeto, tal como uma tabela ou um índice, sem especificar o tablespace, o Oracle o cria
no tablespace padrão do usuário, isso se o tablespace padrão do usuário foi definido para utilizar o
tablespace USERS.
O que é o tablespace SYSTEM?
O tablespace SYSTEM (tablespace de sistema) é uma parte obrigatória de todo banco de dados Oracle. É
onde o Oracle armazena todas as informações necessárias para o seu próprio gerenciamento. Em resumo,
SYSTEM é o tablespace mais crítico do banco de dados porque ele contém o dicionário de dados. Se por
algum motivo ele se tornar indisponível, a instância do Oracle abortará. Por esse motivo, o tablespace
SYSTEM nunca pode ser colocado offline, ao contrário de um tablespace comum como, por exemplo, o
tablespace USERS.
O que é o tablespace TEMP?
O tablespace TEMP (tablespace temporário) é onde o Oracle armazena todas as suas tabelas temporárias.
É o quadro branco ou papel de rascunho do banco de dados. Assim como às vezes precisamos de um
lugar para anotar alguns números para pode somá-los, o Oracle também precisa de algum espaço em
disco temporário. O Oracle geralmente utiliza o tablespace temporário para armazenar objetos
transitórios durante as classificações e agrupamentos de dados durante a execução de uma SQL contendo
as cláusulas ORDER BY e GROUP BY, entre outras. É importante dizer também que os dados de sessão das
tabelas temporárias globais (Global TemporaryTables) também ficam no tablespace TEMP. Assim como o
tablespace SYSTEM é o tablespace mais crítico do banco dados, o tablespace TEMP é o menos crítico do
banco de dados exatamente porque armazena apenas os segmentos temporários durante as operações
de classificação de dados e, como tal, no caso de uma falha, ele pode simplesmente ser dropado e
recriado, em vez de ser restaurado e recuperado.
O que é o tablespace UNDO?
Todos os bancos de dados Oracle precisam de um local para armazenar informações a desfazer. O que
isso significa? Esse tablespace que contém seus segmentos de reconstrução em versões anteriores ao
Oracle 9i chamado de RBS (tablespace de rollback), possui a capacidade de recuperar transações
incompletas ou abortadas. Um segmento de undo é usado para salvar o valor antigo quando um processo
altera dados de um banco de dados. Ele armazena a localização dos dados e também os dados da forma
como se encontravam antes da modificação. Basicamente, os objetivos dos segmentos de undo são:
Rollback de transação: Quando uma transação modifica uma linha de uma tabela, a imagem original das
colunas modificadas é salvas no segmento de UNDO, e se for feito o rollback da transação, o servidor
Oracle restaurará os valores originais gravando os valores do segmento de UNDO novamente na linha
Recuperação de Transação: Se ocorrer uma falha de instância enquanto houver transações em
andamento, o servidor Oracle precisará desfazer as alterações não submetidas à commit quando o banco
de dados for aberto novamente. Esse rollback faz parte da recuperação da transação. Portanto, a
recuperação só é possível porque as alterações feitas no segmento de UNDO também são protegidas
pelos arquivos de redo log online.
Consistência de Leitura: Enquanto houver transações em andamento, outros usuários do banco de
dados não deverão ver as alterações não submetidas à commit feitas nessas transações. Além disso, uma
instrução não deverá ver as alterações submetidas à commit após o início da execução dessa instrução.
Os valores antigos (dados de undo) dos segmentos de UNDO também são usados para oferecer aos
leitores uma imagem consistente de uma instrução específica.
O que é o tablespace SYSAUX?
Este tablespace auxiliar não existe nas versões anteriores ao Oracle 10g e foi criado especialmente para
aliviar o tablespace SYSTEM de segmentos associados a algumas aplicações do próprio banco de dados
como o Oracle ultra search, Oracle Text e até mesmo segmentos relacionados ao funcionamento do
Oracle Enterprise Manager entre outros. Como resultado da criação dessetablespace, alguns gargalos de
I/O freqüentemente associados ao tablespace SYSTEM foram reduzidos ou eliminados. Vale a pena
salientar que não é bom que o tablespace SYSAUX seja colocado no modo offline, pelo fato de correr o
risco do banco de dados não funcionar corretamente. Portanto, podemos dizer que o mesmo é parte
integrante e obrigatório em todos os bancos de dados à partir do Oracle 10g. Existe uma view de
dicionário de dados que mostra os ocupantes neste tablespace:
SQL> select occupant_name, schema_name, space_usage_kbytes2 fromv$sysaux_occupants;
OCCUPANT_NAME SCHEMA_NAME
SPACE_USAGE_KBYTES
--------------- -------------------- -----------------LOGMNR
SYSTEM
7488
LOGSTDBY
SYSTEM
0
STREAMS
SYS
192
AO
SYS
960
XSOQHIST
SYS
960
SM/AWR
SYS
68352
SM/ADVISOR SYS
7360
SM/OPTSTAT SYS
21120
SM/OTHER
SYS
3328
STATSPACK
PERFSTAT
0
ODM
DMSYS
5504
SDO
MDSYS
6080
WM
WMSYS
6656
ORDIM
ORDSYS
512
ORDIM/PLUGINSORDPLUGINS
0
ORDIM/SQLMM SI_INFORMTN_SCHEMA
EM
SYSMAN
61632
TEXT
CTXSYS
4736
ULTRASEARCH WKSYS
7296
JOB_SCHEDULERSYS
256

0

Uma outra informação bastante útil que esta view oferece é o nome de uma procedure que o DBA pode
utilizar para mover dados de um ocupante para um outro tablespace:
SQL> select occupant_name,move_procedure 2
fromv$sysaux_occupants
whereoccupant_name='LOGMNR';
OCCUPANT_NAME MOVE_PROCEDURE
--------------- --------------------------------------LOGMNR
SYS.DBMS_LOGMNR_D.SET_TABLESPACE

Gerenciamento de Espaço em Tablespaces
Os tablespaces alocam espaço em extensões (extents). Eles podem ser criados para usar um dos dois
métodos de controle de espaço livre e utilizado:
Tablespaces gerenciados localmente: As extensões são gerenciadas no tablespace por bitmaps. Cada
bitmap corresponde a um bloco ou a um grupo de blocos. Quando uma extensão é alocada ou liberada
para reutilização, o servidor Oracle altera os valores do bitmap para mostrar o novo status dos blocos. A
partir do Oracle 9i este gerenciamento local é o padrão.
Tablespaces gerenciados por dicionário: As extensões são gerenciadas pelo dicionário de dados. O
servidor atualiza as tabelas apropriadas no dicionário de dados sempre que uma extensão é alocada ou
desalocada.
Nas versões anteriores ao Oracle 8i, os extents de todos os tablespaces eram gerenciados centralmente
por meio das tabelas do dicionário de dados, quando os extents são alocados ou desalocados em
qualquer lugar do banco de dados, o Oracle atualiza as tabelas do dicionário de dados para registrar o
novo mapa de armazenamento. A partir do Oracle 8i um novo recurso possibilitando o gerenciamento
local dos extents dentro de um tablespace praticamente decretou a morte do tablespace gerenciado por
dicionário de dados
Como dito anteriormente, o Oracle mantém um bitmap em cada arquivo de dados de um tablespace
gerenciado localmente. Para se criar um tablespace gerenciado localmente, é necessário usar a cláusula
EXTENT MANAGEMENT LOCAL como o comando createtablespace. Comparando com os tablespaces
gerenciados por dicionário, os tablespaces gerenciados localmente têm um modo completamente
diferente de dimensionar os extents. Os parâmetros de armazenamento NEXT, PCTINCREASE,
MINEXTENTS, MAXEXTENTS e DEFAULT_STORAGE não são válidos nos casos dos tablespaces gerenciados
localmente. Em vez disso, existe a opção de especificar um tamanho uniforme para todos os extents ou
especificar apenas o tamanho do extent inicial e deixar que o Oracle determine automaticamente o
tamanho de todos os extentssubseqüentes. Os extents uniformes ou dimensionados automaticamente
podem ser selecionados especificando as opções UNIFORM ou AUTOALLOCATE, respectivamente, ao criar
um tablespace gerenciado localmente com o comando CREATE TABLESPACE.
OBS: Os tablespaces gerenciados localmente ajudam a reduzir a overhead de gerenciamento de espaço
eliminando a necessidade de várias gravações nas tabelas do dicionário de dados ou nos segmentos de
rollback, o que ocorre necessariamente quando o espaço é gerenciado centralmente por meio do
dicionário de dados. Segundo a Oracle, os tablespaces gerenciados por dicionário não serão mais
suportados nas futuras versões do Oracle:
"Oracle strongly recommends that you create only locally managed tablespaces. Locally managed
tablespaces are much more efficiently managed than dictionary-managed tablespaces. The creation of
new dictionary-managed tablespaces is scheduled for desupport."
Outra informação importante é que um tablespace gerenciado por dicionário não pode ser criado caso o
tablespace SYSTEM seja gerenciado localmente:
SQL> create tablespacetbs_test
2 logging
3 datafile /u01/oradata/BD01/test01.dbf' size 5m
4 extent management dictionary;
createtablespacetbs_test
*
ERRO na linha 1:
ORA-12913: Não é possível criar um tablespace gerenciado por dicionário
SQL> select extent_management
2 fromdba_tablespaces
3 wheretablespace_name='SYSTEM';
EXTENT_MANAGEMENT
----------------LOCAL
ORACLE 11g
Instalar SQL Developer
Criar uma conexão com o banco:
Exibir / Conexões
Em conexões, clicar para NOVA CONEXÃO
Nome da Conexão: xemesmo nome do banco
Nome do Usuário: sys as sysdba
Senha: Simone mesmo nome informado durante a instalação
Salvar senha.
Clicar em conectar
Abre janela de script
Para saber se está conectado no banco:select * fromv$instance;

Instalar o Oracle 11g
Criar usuários: Menu Iniciar  Todos os programas  Oracle  Conceitos Básicos
Primeiro, criar WORKSPACE:
Clicar em Application Express
Username: system usamos o usuário system porque ainda não criamos nenhum usuário.
Password: Simone
Database Username: TREINAWEB
Application Express Username: marcos
Password: Simone
Clicar em: CreateWorkspace
Na aba Application Express, conceitos básicos, clicar em: log-in no seu espaço de trabalho do Application
Express.
Workspace: TREINAWEB
Username: marcos
Password: Simone
Criar usuário:
Clicar na aba: Administração
Clicar em: Gerenciar usuários e grupos
Clicar em: Criar usuário
Identificação do usuário:
Nome do usuário: TREINA
Endereço de email: treina@treinaweb.com.br
Nome: marcos
Sobrenome: soares
Esquema Default: TREINAWEB
O usuário é um administrador do espaço de trabalho: Sim
Definir conta disponibilidade: Desbloqueado
Senha: simon
Confirmar: simon
Exibir mudança de senha na primeira utilização: Sim
Clicar em: Criar usuário
Efetuar logout no ícone, no topo superior direito.
Clicar no link login:
Espaço de trabalho: TREINAWEB
Nome do usuário: treina
Senha: simon
Aparece a mensagem  A senha para essa conta deve ser mudado.
Nome de usuário: treina  não pode ser mudado.
Digitar senha atual: treina
Digite nova senha: Simone
Clicar no botão: retornar
Informar a nova senha
Workspace: TREINAWEB
Nome de usuário: treina
Senha: Simone
Criando usuário via código:
Antes, conceder todos os privilégios no banco de dados para o usuário principal TREINAWEB
Executar linha de comando SQL:
connsys/oracle as sysdba
conectado
Conceder todos os privilégios:
GRANT ALL PRIVILEGES TO TREINAWEB;
concessão bem-sucedida.
Criar novo usuário por comando SQL:
CREATE USER nome_usuário
IDENTIFIED [BY senha_usuario | EXTERNALLY ]
DEFAULT TABLESPACE nome
TEMPORARY TABLESPACE nome
QUOTA [<valor em K ou M> | UNLIMITED]
ON TABLESPACE
Voltarao Application Express
Selecionar Workshop > Comando SQL
Digitar na tela que aparece
CREATE USER usuario_teste IDENTIFIED BY senha_teste
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS;
Resposta: Usercreated
Para acessar o sistema com esse usuário, é necessário dar permissão de conexão para ele.
GRANT CONNECT TO usuario_teste;
Observação: Não é possível acessar o Application Service com o usuário: usuario_teste
Exclusão de usuários:
DROP USER nome_usuario;
Criar usuário:
CREATE USER vou_ser_excluido IDENTIFIED BY senha;
Excluir usuário:
DROP USER vou_ser_excluido;
Login usando SQL Plus
Conectar ao banco de dados: CONNECT usuário_teste/senha_teste;
Para desconectar: disconnect;
Criando tabelas
CREATE TABLE nome_tabela(
nome_coluna1tipo_dado,
nome_coluna2tipo_dado);
Criar tabelas no construtor visual
Abrir o Application Express
Menu: SQL Workshop > Browser de Objetos
Clicar em: Create
Clicar no link table
Nome da tabela: FUNCIONARIO
Nome da Coluna
Tipo
PrecisãoEscala Não nulo
CODIGO_FUNCIONARIO
NUMBER
10
x
CPF
CHAR
11
NOME
VARCHAR2
60
x
SALARIO
NUMBER
10
2
DEPARTAMENTO
VARCHAR2
60
Clicar em: Próximo
Marcar: Notpopulated
Primary Key Constraint Name: Funcionario_pk
Primary Key: CODIGO_FUNCIONARIO(NUMBER)
Composite Primary Key: xxxx
Clicar em: Próximo
Adicionar chave estrangeira
Nome: Funcionario_fk
Marcar: DisallowDelete
Clicar em: Próximo
Esta tela permite a definição de Restrições de Constraint de Verificação e Constraint Exclusiva:
Constraint
Adicionar Constraint
Marcar: verificar
Nome: FUNCIONARIO_ck1clicar em Adicionar e Próxima
Criar tabela
Esquema: TREINAWEB
Nome Tabela: FUNCIONARIO
SQL
CREATE TABLE “FUNCIONARIO” (
“CODIGO_FUNCIONARIO”NUMBER NOT NULL,
“CPF”
CHAR(11),
“NOME” VARCHAR2(60) NOT NULL,
“SALARIO”NUMBER(10,2),
“DEPARTAMENTO”VARCHAR(60),
Constraint “FUNCIONARIO_PK” primarykey
(“CODIGO_FUNCIOARIO”))
/
Altertable “FUNCIONARIO” add
Constraint “FUNCIONARIO_ck1”
Check(salario> 0)
/
Clicar em: Criar
Criar tabelas por SQL
Selecionar SQL Workshop > Comandos SQL
Digitar:
CREATE TABLE cidade(
codigo_cidade INT NOT NULL,
nome VARCHAR(50) NOT NULL,
uf
VARCHAR(2) NOT NULL,
taxa NUMBER(10,2) NOT NULL,
PRIMARY KEY(codigo_cidade) );
Clicar em: Executar
Tipos de Constraints
NOT NULL: não permite valor nulo.
UNIQUE: exige que cada valor da coluna seja único (exclusivo) para todos os registros da tabela.
PRIMARY KEY: define uma chave primária para uma tabela.
FOREIGN KEY: cria um relacionamento entre as tabelas.
CHECK: define uma condição a ser satisfeita.
CREATE TABLE cliente(
codigo_cliente INT NOT NULL,
nome
VARCHAR(60) NOT NULL,
endereco VARCHAR(60) NOT NULL,
telefone VARCHAR(13) NOT NULL,
email
VARCHAR(100) NOT NULL,
renda
NUMBER(10,2) NOT NULL,
Primary key(codigo_cliente));
Clicar em: executar
Criar tabela que tenha colunas com chave estrangeira
CREATE TABLE frete(
codigo_freteINT NOT NULL,
data
DATE NOT NULL,
descricao
VARCHAR(60) NOT NULL,
codigo_cliente INT NOT NULL,
codigo_cidadeINT NOT NULL,
codigo_funcionario INT NOT NULL,
peso
NUMBER(10,2) NOT NULL,
valor_freteNUMBER(10,2) NOT NULL,
PRIMARY KEY(codigo_frete));
ALTER TABLEfreteADD(FOREIGN KEY(codigo_cliente)
REFERENCES cliente);
ALTER TABLEfreteADD(FOREIGN KEY(codigo_cidade)
REFERENCES cidade);
ALTER TABLEfreteADD(FOREIGN KEY(codigo_funcionario)
REFERENCES funcionario);
Clicar em: Executar
Obs: Popular as tabelas individualmente.
INSERT INTO CIDADE VALUES(1, ‘SÃO PAULO’,’SP’,10);
INSERT INTO CIDADE VALUES(2, ‘RIO DE JANEIRO’,’RJ’,8);
INSERT INTO CLIENTE
VALUES(1, ‘CARLOS SILVA’,’RUA DO CONDE,80’,’33445500’,’carlos@mail.com.br’,1000);
INSERT INTO CLIENTE
VALUES(2, ‘MANOEL ANTONIO’,’RUA DO ACRE,10’,’22445512’,’manoel@mail.com.br’,2000);
INSERT INTO FUNCIONARIO (CODIGO_FUNCIONARIO,CPF,NOME,SALARIO,DEPARTAMENTO)
VALUES(1, ‘11122233344’,’ALICE’,1000,’FINANCEIRO’);
INSERT INTO FRETE
VALUES(1, ‘SYSDATE’,’FRETE DE ENTREGA DE SEOJA’,1,1,1,100,1000);
Adicionar coluna em tabela existente
ALTER TABLE nome_tabela
ADD nome_do_campotipo_dado;
ALTER TABLE CLIENTE
ADD CAMPO1 CHAR(25);
Excluir coluna em uma tabela
ALTER TABLE nome_tabela
DROP COLUMN nome_campo;
ALTER TABLE CLIENTE
DROP COLUMN CAMPO1;
Excluir tabela
DROP TABLE nome_tabela;
CRIAR SINÔNIMOS ( Criar apelido para a referência de uma tabela )
Usado para simplificar o acesso a um objeto com nome muito longo.
CREATE SYNONYM ref FOR REFERENCIA;
CREATE SYNONYM cid FOR CIDADE;
SELECT * FROM CID;
VIEW ( Consulta, atualização e eliminação de dados )
CREATE [OR REPLACE] VIEW nome_view
AS
---Instruções--[WITH READ ONLY];
Com o código abaixo, a View permite a atualização dos dados.
CREATE OR REPLACE VIEW LISTA_FUNCIONARIOS
AS
SELECT NOME FROM FUNCIONARIOS;
Visualizar dados com a View
SELECT * FROM LISTA_FUNCIONARIOS;
Permite a atualização de dados
CREATE OR REPLACE VIEW VISAO_CIDADE
AS
SELECT * FROM CIDADE;
Inserir dados com a View
INSERT INTO VISAO_CIDADE VALUES (10,’TAUBATÉ’,’SP’,2);
VIEW apenas de leitura
CREATE OR REPLACE VIEW VISAO_LEITURA_CIDADE
AS
SELECT * FROM CIDADE
WITH READ ONLY;
Ao executar o código abaixo para incluir outro registro na tabela CIDADE, ocorrerá um erro.
INSERT INTO VISAO_LEITURA_CIDADE
VALUES( 11, ‘CAMPINAS’,’SP’,18);
Excluir uma VIEW
DROP VIEW nome_view;
DROP VIEW VISAO_LEITURA_CIDADE;
Ver todas as VIEWS de usuário
SELECT * FROM USER_VIEWS;
Sequence
Para criar campos de auto numeração.Utililiza-se esse objeto para que, na inserção de determinado
registro, não seja necessário especificar um valor para o campo que deve possuir um código sequencial.
CREATE SEQUENCE nome_sequencia
[INCREMENT BY n]
[START WITH n]
[MAXVALUE n | NOMAXVALUE] OR [MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE];
Criar uma sequência
CREATE SEQUENCE MINHA_SEQUENCIA
START WITH 1
INCREMENT BY 1
MAXVALUE 999
CYCLE
CACHE 10;
Para executar o exemplo de SEQUENCE, criar a tabela ALUNO.
CREATE TABLE ALUNO (
CODIGO INT NOT NULL,
NOME VARCHAR2(60) NOT NULL,
CURSOVARCHAR2(100) NOT NULL);
Inserir dados na tabela ALUNO
INSERT INTO ALUNO(CODIGO,NOME,CURSO)
VALUES(MINHA_SEQUENCIA.NEXTVAL,’CARLOS’,’SISTEMAS DE INFORMAÇÃO’);
Para visualizar todas as sequencias que estão no schema
SELECT * FROM USER_SEQUENCES;
Excluir uma sequencia
DROP SEQUENCE nome_sequencia
CONSULTAS SQL
SELECT [DISTINCT] lista_colunas
FROM lista_tabelas
WHERE condições
GROUP BY lista_colunas
HAVING condições_grupo
ORDER BY lista_colunas
DISTINCT: eliminar linhas com registro repetido.
SELECT DISTINCT UF FROM CIDADE;
SELECT DISTINCT SALARIO, DEPARTAMENTO FROM FUNCIONARIO;
AS: DEFINE APELIDO PARA QUAQUER COLUNA DURANTE A SELEÇÃO.
SELECT NOME, SALARIO, SALARIO * 12 AS “SALÁRIO ANUAL”
FROM FUNCIONARIO
ORDER BY CAMPO DESC;
SELECT CODIGO_CLIENTE, NOME,ENDERECO, TELEFONE, RENDA
FROM CLIENTE
WHERE (RENDA = 1000 AND CODIGO_CLIENTE > 1)
ORDER BY NOME;
COMPARADORES: BETWEEN, AND, IN, LIKE e IS NULL
SELECT CODIGO_CLIENTE, NOME, ENDERECO, TELEFONE, EMAIL, RENDA
FROM CLIENTE
WHERE (RENDA BETWEEN 1000 AND 2000)
ORDER BY NOME;
CLÁUSULA: IN
Compara o valor da coluna com o conjunto de valores informados.
SELECT CODIGO_CLIENTE, NOME
FROM CLIENTE
WHERE CODIGO_CLIENTE IN (1,2,4)
ORDER BY NOME;
LIKE:utilizado exclusivamente em colunas com sequência caracteres.
SELECT CODIGO_CLIENTE, NOME, ENDERECO
FROM CLIENTE
WHERE NOME LIKE ‘M%’
ORDER BY NOME;
WHERE NOME ‘M%’ seleciona todos os nomes que iniciam com a letra M.
WHERE NOME ‘%M%’qualquer nome que tenha a letra A no nome.
WHERE NOME ‘_M%’ nomes que tenham obrigatoriamente a letra M na segunda posição.
WHERE CPF IS NULL  seleciona as colunas nulas.
LIKE: utilizado exclusivamente em colunas com sequência de caracteres.
SELECT CODIGO_CLIENTE, NOME, ENDERECO
FROM CLIENTE
WHERE NOME LIKE ‘M%’
ORDER BY NOME;
WHERE NOME LIKE ‘M%’  seleciona todos os nomes que iniciam com a letra M.
WHERE NOME LIKE ‘%M%’ qualquer nome que tenha a letra A no nome.
WHERE NOME LIKE ‘_A%’ nomes que tenham obrigatoriamente a letra A na segunda posição.
WHERE CPF IS NULL  seleciona as colunas nulas.
Selecionar dados de uma tabela
SELECT * FROM CIDADE, FRETE
WHERE CIDADE.CODIGO_CIDADE = FRETE.CODIGO_CIDADE;
OU
SELECT * FROM CIDADE INNER JOIN FRETE
ONCIDADE.CODIGO_CIDADE = FRETE.CODIGO_CIDADE;
Símbolo + pode ser usado para informar que se quer listar todos os dados da tabela que possua tal
símbolo.
SELECT * FROM CIDADE INNER JOIN FRETE
ON CIDADE.CODIGO_CIDADE = FRETE.CODIGO_CIDADE (+);
Alias
SELECT * FROM CIDADE C INNER JOIN FRETE F
ON C.CODIGO_CIDADE = F.CODIGO_CIDADE;
PRIVILÉGIOS
PRIVILÉGIODESCRICAO
SELECT
INSERT
UPDATE
DELETE
REFERENCESCRIAR CONSTRAINT QUE REFERENCIE À ESSA TABELA
ALTER
ALTERA AS DEFINIÇÕES DA TABELA ATRAVÉS DO COMANDO ALTER TABLE
INDEX
CRIAR ÍNDICES
GRANT: conceder privilégios em uma tabela
GRANT [PRIVILEGES] ON [OBJECT] TO [USER]
EXEMPLO:
CONECTAR AO USUÁRIO:connectusuario_teste/senha_teste;
SELECT * FROM treinaweb.cliente;
Mensagem: Erro na linha 1 a tabela ou view não existe.
Abrir Application Express, logar como usuário TREINAWEB
GRANT SELECT ON CLIENTE TO USUARIO_TESTE;
Voltar ao SQL Plus e executar novamente
SELECT * FROM TREINAWEB.CLIENTE;  a instrução é executada com sucesso.
Listar schemas de usuários criados
SELECT USERNAME FROM DBA_USERS;
REVOKE: revoga privilégios concedidos a um usuário.
Revogar privilégio concedido ao usuário “USUARIO_TESTE”
REVOKE SELECT ON CLIENTE FROM USUARIO_TESTE;
Funções de grupo
Podem aparecer na cláusula SELECT quanto na cláusula HAVING
A cláusula GROUP BY divide as linhas de uma ou mais tabelas em grupos de linhas.
HAVING: seleciona os grupos que serão aceitos.
AVG(), COUNT(), MAX(), MIN(), SUM()
AVG(): média aritmética dos valores da coluna.
COUNT(): retorna número de linhas que satisfaz a condição, não conta valores nulos.
MAX(): valor máximo da coluna.
MIN(): valor mínimo da coluna.
SUM(): soma dos valores da coluna.
EXEMPLO:
SELECT AVG(RENDA), MAX(RENDA), MIN(RENDA), SUM(RENDA) FROM CLIENTE;
Todo SELECT que possuir colunas com funções de grupo e colunas que não fazem uso das funções, é
obrigado a utilizar a cláusula GROUP BY.
EXEMPLO:
SELECT RENDA, COUNT(*) FROM CLIENTE
GROUP BY RENDA;
Não é possível utilizer a cláusula WHERE em conjunto com as funções de grupo.
EXEMPLO:
SELECT RENDA, COUNT(*)
FROM CLIENTE
WHERE COUNT(*) > 2
GROUP BY RENDA;ocorrerá um erro.
Para esses casos, utilizar a cláusula HAVING
SELECT RENDA, COUNT(*)
FROM CLIENTE
HAVING COUNT(*)> 2; não ocorrerá erro.
SUBCONSULTAS
Primeiro é executado o SELECT interno, em seguida o resultado é utilizado em uma condição da consulta
principal.
SELECT NOME, RENDA FROM CLIENTE WHERE RENDA = (SELECT MAX(RENDA) FROM CLIENTE);
Se a subconsulta retornar mais de um resultado, será preciso utilizar a cláusula IN
SELECT NOME, RENDA FROM CLIENTE
WHERE RENDA IN (SELECT RENDA FROM CLIENTE);
UPDATE
UPDATE tabela
SET nome_coluna1 = valor1
WHERE CONDIÇÃO
Aumentar em 10% o salário do funcionário Mario
UPDATE FUNCIONARIO
SET SALARIO = SALARIO * 1.1
WHERE NOME = ‘MARIO’;
INSERT
INSERT INTO TABELA( COLUNA1, ... )
VALUES( VALOR1,... );
Pag.46 – Funcionamento da engine PL/SQL
Pag.47 – Blocos PL/SQL
A unidade básica em PL/SQL é um bloco.
Todos os programas em PL/SQL são compostos por blocos que podem estar localizados uns dentro dos
outros. Geralmente, cada bloco efetua uma ação lógica no programa.
Estrutura do Bloco
DECLARE
Seção para declaração de variáveis, tipos, cursores e subprogramas locais.
BEGIN
Seção executável. Nesta seção ficam as instruções, procedimentos e SQL.
Esta é a única seção do bloco que é indispensável e obrigatória.
EXPECTION
Seção/Setor onde ficam as instruções de tratamento de erro.
END
Exemplos de Blocos PL/SQL
Criar tabela
CREATE TABLE TEMP_TABLE(
NUM_COL INT,
CHAR_COL VARCHAR(50));
Bloco anônimo não rotulado
DECLARE
/* DECLARA VARIÁVEIS */
V_NUM1 NUMBER:= 1;
V_NUM2 NUMBER:= 2;
V_STRING1 VARCHAR2(50):='Olá Mundo!';
V_STRING2 VARCHAR2(50):=' Esta mensagem é mostrada pelo PL/SQL';
V_OUTPUTSTR VARCHAR2(50);
BEGIN
/* INSERE DUAS LINHAS NA TABELA TEMP_TABLE, USANDO OS VALORES DAS VARIÁVEIS */
INSERT INTO TEMP_TABLE (NUM_COL, CHAR_COL) VALUES (V_NUM1, V_STRING1);
INSERT INTO TEMP_TABLE (NUM_COL, CHAR_COL) VALUES (V_NUM2, V_STRING2);
/* AGORA SELECIONA AS 2 LINHAS INSERIDAS E MOSTRA-AS NA TELA UTILIZANDO A PACKAGE
DBMS_OUTPUT. */
SELECT CHAR_COL INTO V_OUTPUTSTR
FROM TEMP_TABLE
WHERE NUM_COL = V_NUM1;
DBMS_OUTPUT.PUT_LINE(V_OUTPUTSTR);
SELECT CHAR_COL INTO V_OUTPUTSTR
FROM TEMP_TABLE
WHERE NUM_COL = V_NUM2;
DBMS_OUTPUT.PUT_LINE(V_OUTPUTSTR);
/* EFETUAR ROLLBACK NAS ALTERAÇÕES */
ROLLBACK;
END;
PROCEDIMENTO
CREATE OR REPLACE PROCEDURE InsereEmTemp AS
/* DECLARA VARIÁVEIS */
V_NUM1 NUMBER:= 1;
V_NUM2 NUMBER:= 2;
V_STRING1 VARCHAR2(50):='Olá Mundo!';
V_STRING2 VARCHAR2(50):=' Esta mensagem é mostrada pelo PL/SQL';
V_OUTPUTSTR VARCHAR2(50);
BEGIN
/* INSERE DUAS LINHAS NA TABELA TEMP_TABLE, USANDO OS VALORES DAS VARIÁVEIS */
INSERT INTO TEMP_TABLE (NUM_COL, CHAR_COL) VALUES (V_NUM1, V_STRING1);
INSERT INTO TEMP_TABLE (NUM_COL, CHAR_COL) VALUES (V_NUM2, V_STRING2);
/* AGORA SELECIONA AS 2 LINHAS INSERIDAS E MOSTRA-AS NA TELA UTILIZANDO A PACKAGE
DBMS_OUTPUT.*/
SELECT CHAR_COL INTO V_OUTPUTSTR
FROM TEMP_TABLE
WHERE NUM_COL = V_NUM1;
DBMS_OUTPUT.PUT_LINE(V_OUTPUTSTR);
SELECT CHAR_COL INTO V_OUTPUTSTR
FROM TEMP_TABLE
WHERE NUM_COL = V_NUM2;
DBMS_OUTPUT.PUT_LINE(V_OUTPUTSTR);
/* EFETUAR ROLLBACK NAS ALTERAÇÕES */
ROLLBACK;
ENDInsereEmTemp;

Bloco anônimo para chamar a procedure
BEGINobrigatório
InsereEmTemp;
END;obrigatório

Mais conteúdo relacionado

Mais procurados

Gerenciando arquivos de controle(controlfile)
Gerenciando arquivos de controle(controlfile)Gerenciando arquivos de controle(controlfile)
Gerenciando arquivos de controle(controlfile)elieziomesquita
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura OraclePablo Garcia
 
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)Dirceu Resende
 
Oracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosOracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosDaniela Macedo
 
Comandos DDL para o MySQL
Comandos DDL para o MySQLComandos DDL para o MySQL
Comandos DDL para o MySQLArley Rodrigues
 
Oracle OEM Grid Control 11g
Oracle OEM Grid Control 11gOracle OEM Grid Control 11g
Oracle OEM Grid Control 11gRodrigo Almeida
 
ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?Rodrigo Almeida
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebDalton Martins
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Oracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosOracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosRodrigo Almeida
 
Curso de Certificação Linux LPI - Terminal Root
Curso de Certificação Linux LPI - Terminal RootCurso de Certificação Linux LPI - Terminal Root
Curso de Certificação Linux LPI - Terminal RootMarcos Quinho
 
Exercícios de mysql
Exercícios de mysqlExercícios de mysql
Exercícios de mysqlLeo Frazão
 

Mais procurados (20)

Apostila Oracle 10g
Apostila Oracle 10gApostila Oracle 10g
Apostila Oracle 10g
 
Gerenciando arquivos de controle(controlfile)
Gerenciando arquivos de controle(controlfile)Gerenciando arquivos de controle(controlfile)
Gerenciando arquivos de controle(controlfile)
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura Oracle
 
Oracle 11g
Oracle 11gOracle 11g
Oracle 11g
 
Treinamento DBA Essential
Treinamento DBA EssentialTreinamento DBA Essential
Treinamento DBA Essential
 
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
 
Orm android
Orm androidOrm android
Orm android
 
Oracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de DadosOracle 11g – Inteligência em Banco de Dados
Oracle 11g – Inteligência em Banco de Dados
 
Comandos DDL para o MySQL
Comandos DDL para o MySQLComandos DDL para o MySQL
Comandos DDL para o MySQL
 
Oracle OEM Grid Control 11g
Oracle OEM Grid Control 11gOracle OEM Grid Control 11g
Oracle OEM Grid Control 11g
 
Oracle Data Guard
Oracle Data GuardOracle Data Guard
Oracle Data Guard
 
ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
Oracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dadosOracle Day - Produtos de banco de dados
Oracle Day - Produtos de banco de dados
 
Curso de Certificação Linux LPI - Terminal Root
Curso de Certificação Linux LPI - Terminal RootCurso de Certificação Linux LPI - Terminal Root
Curso de Certificação Linux LPI - Terminal Root
 
Exercícios de mysql
Exercícios de mysqlExercícios de mysql
Exercícios de mysql
 
Aula 05 acessando o mysql
Aula 05   acessando o mysqlAula 05   acessando o mysql
Aula 05 acessando o mysql
 

Destaque

Banco II - PostgreSQL - Funções
Banco II - PostgreSQL - FunçõesBanco II - PostgreSQL - Funções
Banco II - PostgreSQL - FunçõesGustavo Sávio
 
Oracle 11g - Fundamentos
Oracle 11g - FundamentosOracle 11g - Fundamentos
Oracle 11g - FundamentosGustavo Sávio
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosDanilo Braga
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-ptguest519a5b6
 
Apostila completa-oracle-programando-oracle
Apostila completa-oracle-programando-oracleApostila completa-oracle-programando-oracle
Apostila completa-oracle-programando-oracle79anderson
 
TOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLTOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLFábio Delboni
 

Destaque (12)

Apostila de sql oracle
Apostila de sql oracleApostila de sql oracle
Apostila de sql oracle
 
Banco II - PostgreSQL - Funções
Banco II - PostgreSQL - FunçõesBanco II - PostgreSQL - Funções
Banco II - PostgreSQL - Funções
 
Oracle 11g - Fundamentos
Oracle 11g - FundamentosOracle 11g - Fundamentos
Oracle 11g - Fundamentos
 
Oracle 9i curso_completo
Oracle 9i curso_completoOracle 9i curso_completo
Oracle 9i curso_completo
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos Básicos
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
 
SQL Oracle
SQL OracleSQL Oracle
SQL Oracle
 
Apostila completa-oracle-programando-oracle
Apostila completa-oracle-programando-oracleApostila completa-oracle-programando-oracle
Apostila completa-oracle-programando-oracle
 
Exercícios PL/SQL
Exercícios PL/SQLExercícios PL/SQL
Exercícios PL/SQL
 
TOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLTOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQL
 
Apostila banco de dados
Apostila banco de dadosApostila banco de dados
Apostila banco de dados
 
SGBD Oracle
SGBD OracleSGBD Oracle
SGBD Oracle
 

Semelhante a Oracle 11g resumo

Apostila de Sql Server 2005
Apostila de Sql Server 2005Apostila de Sql Server 2005
Apostila de Sql Server 2005Andre Nascimento
 
Php curso de php com my sql
Php   curso de php com my sqlPhp   curso de php com my sql
Php curso de php com my sqlrobinhoct
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdfQuitriaSilva550
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29Juliana Nascimento
 
Performance Sql Server
Performance Sql ServerPerformance Sql Server
Performance Sql Serverjarlei
 
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6Wagner Bianchi
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
Armazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL ServerArmazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL ServerHebert Dorigon
 
MySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - NaveggMySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - NaveggFelipe Guimarães
 
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...Edisio Nascimento
 

Semelhante a Oracle 11g resumo (20)

Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 
Apostila de Sql Server 2005
Apostila de Sql Server 2005Apostila de Sql Server 2005
Apostila de Sql Server 2005
 
Sql
SqlSql
Sql
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
Apostila sql
Apostila sqlApostila sql
Apostila sql
 
Php curso de php com my sql
Php   curso de php com my sqlPhp   curso de php com my sql
Php curso de php com my sql
 
Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016Otimizando a performance com in memory no sql 2016
Otimizando a performance com in memory no sql 2016
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
364722271-Modulo-III-Linguagem-SQL-Versao-Final.pdf
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
 
3260 php truquesmagicos
3260 php truquesmagicos3260 php truquesmagicos
3260 php truquesmagicos
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
Performance Sql Server
Performance Sql ServerPerformance Sql Server
Performance Sql Server
 
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
UNIFAL - MySQL Linguagem SQL Básico - 5.0/5.6
 
Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
Armazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL ServerArmazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL Server
 
Apostila ib
Apostila ibApostila ib
Apostila ib
 
Apostila sqlserver65v1a
Apostila sqlserver65v1aApostila sqlserver65v1a
Apostila sqlserver65v1a
 
MySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - NaveggMySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - Navegg
 
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
Silo.tips utilizando os-componentes-da-paleta-dbexpress-para-acesso-ao-banco-...
 

Oracle 11g resumo

  • 1. Introdução ao conceito de Tablespaces Comecemos com a seguinte pergunta: Qual é a relação entre tablespaces e arquivos de dados? Bom, para responder esta pergunta, primeiro precisamos entender como os dados são armazenados no banco de dados. O Oracle armazena dados logicamente em tablespaces e fisicamente em arquivos de dados (datafiles). Apesar dos arquivos de dados e os tablespaces estarem muito "inter-relacionados", os mesmos possuem diferenças importantes: Um banco de dados Oracle consiste em uma ou mais unidades de armazenamento lógicas denominadas tablespaces, que armazenam coletivamente todos os dados do banco de dados. Cada tablespace em um banco de dados Oracle consiste em um ou mais arquivos denominados arquivos de dados (datafiles), que são estruturas físicas compatíveis com o sistema operacional no qual o Oracle é executado. Os dados de um banco de dados são armazenados coletivamente nos arquivos de dados que constituem cada tablespace do banco de dados. Como um banco de dados é um conjunto de arquivos de dados, é muito importante que entendamos como um banco de dados Oracle agrupa esses arquivos. Como dito anteriormente, o Oracle faz isso sob a proteção de um objeto de banco de dados chamado tablespace. Antes de poder inserir dados em um banco de dados Oracle, primeiro é necessário criar um tablespace e depois uma tabela dentro desse tablespace que conterá os dados. Podemos observar que na criação de um banco de dados utilizando o DBCA, o Oracle como padrão sempre cria um tablespace de dados chamado USERS. Ao criar uma tabela é necessário incluir todas as informações sobre o tipo de dados que deseja manter. O código abaixo, gerado para criar a tabela CLIENTE, ilustra como o Oracle armazena informações sobre o tipo de dado que irá registrar: SQL> create table cliente 2 (cod_cliente number constraint pk_cliente primary key, 3 nomevarchar2(60) not null, 4 enderecovarchar2(100) not null, 5 telefone number, 6data_cadastro date) 7tablespaceusers; Tabela criada. SQL>desc cliente Nome Nulo? Tipo ----------------------------- -------- -------------------COD_CLIENTE NOT NULL NUMBER NOME NOT NULL VARCHAR2(60) ENDERECO NOT NULL VARCHAR2(100) TELEFONE NUMBER DATA_CADASTRO DATE
  • 2. SQL> select table_name,tablespace_name 2 fromuser_tables 3 wheretable_name='CLIENTE'; TABLE_NAME TABLESPACE_NAME ------------------------------ -----------------------------CLIENTE USERS Na instrução acima, foi criada uma tabela que é o meio mais comum de armazenar dados em um banco de dados. Os dados de um segmento de tabela são armazenados aleatoriamente no tablespace e o DBA tem pouco controle sobre a localização das linhas dos blocos de uma tabela. Por falar nisso, o que é um segmento? Os segmentos são objetos que ocupam espaço em um banco de dados. Existem vários tipos de segmentos como tabelas, índices, de undo, temporários, LOB, entre outros. Já uma extensão (extent), é um espaço usado por um segmento em um tablespace. Para terminar, um bloco Oracle consiste em um ou mais blocos do sistema operacional e seu tamanho é definido na criação do tablespace. Então a estrutura lógica de um banco de dados Oracle se resume em tablespaces que contém segmentos que contém extensões que contém blocos. A figura abaixo ilustra esta estrutura lógica: estrutura lógica de um banco de dados Oracle SQL> select segment_name, segment_type, tablespace_name, 2 bytes, blocks, extents 3 fromuser_segments 4 wheresegment_name='CLIENTE'; SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES -------------- ------------ ---------------- -------- ------- --------CLIENTE TABLE USERS 65536 8 1 BLOCKS EXTENTS Vale a pena salientar que foi incluído o nome do tablespace USERS no comando de criação da tabela, apenas para exemplificar, já que uma tabela sempre será criada no tablespace padrão do usuário definido na sua criação (createuser). SQL> select default_tablespace from user_users; DEFAULT_TABLESPACE -----------------------------USERS
  • 3. Agora que você entende porque isso se chama tablespace, vamos tentar compreender porque precisamos de tablespaces para agrupar arquivos de dados. A melhor analogia para se explicar banco de dados, tablespace, arquivo de dados, tabelas e dados é a imagem de um fichário. Imagine um banco de dados como um fichário: as gavetas dentro do fichário são os tablespaces; as pastas nessas gavetas são os arquivos de dados; os papéis em cada pasta são as tabelas; a informação escrita no papel de cada pasta são os dados. Em resumo, o tablespace é um modo de agrupar arquivos de dados É aconselhável não misturar dados de aplicativos no mesmo tablespace. Então, ao criar tablespaces para seus aplicativos, dê a eles um nome descritivo (por exemplo, dados de um sistema de RH podem ser mantidos no tablespace RECURSOS_HUMANOS). Em resumo, aplicação separada corresponde a tablespace separado. O que é o tablespace USERS? Como demonstrado anteriormente, este geralmente é o tablespace padrão para os usuários. Se um usuário criar um objeto, tal como uma tabela ou um índice, sem especificar o tablespace, o Oracle o cria no tablespace padrão do usuário, isso se o tablespace padrão do usuário foi definido para utilizar o tablespace USERS. O que é o tablespace SYSTEM? O tablespace SYSTEM (tablespace de sistema) é uma parte obrigatória de todo banco de dados Oracle. É onde o Oracle armazena todas as informações necessárias para o seu próprio gerenciamento. Em resumo, SYSTEM é o tablespace mais crítico do banco de dados porque ele contém o dicionário de dados. Se por algum motivo ele se tornar indisponível, a instância do Oracle abortará. Por esse motivo, o tablespace SYSTEM nunca pode ser colocado offline, ao contrário de um tablespace comum como, por exemplo, o tablespace USERS. O que é o tablespace TEMP? O tablespace TEMP (tablespace temporário) é onde o Oracle armazena todas as suas tabelas temporárias. É o quadro branco ou papel de rascunho do banco de dados. Assim como às vezes precisamos de um lugar para anotar alguns números para pode somá-los, o Oracle também precisa de algum espaço em disco temporário. O Oracle geralmente utiliza o tablespace temporário para armazenar objetos transitórios durante as classificações e agrupamentos de dados durante a execução de uma SQL contendo as cláusulas ORDER BY e GROUP BY, entre outras. É importante dizer também que os dados de sessão das tabelas temporárias globais (Global TemporaryTables) também ficam no tablespace TEMP. Assim como o tablespace SYSTEM é o tablespace mais crítico do banco dados, o tablespace TEMP é o menos crítico do banco de dados exatamente porque armazena apenas os segmentos temporários durante as operações de classificação de dados e, como tal, no caso de uma falha, ele pode simplesmente ser dropado e recriado, em vez de ser restaurado e recuperado. O que é o tablespace UNDO? Todos os bancos de dados Oracle precisam de um local para armazenar informações a desfazer. O que isso significa? Esse tablespace que contém seus segmentos de reconstrução em versões anteriores ao Oracle 9i chamado de RBS (tablespace de rollback), possui a capacidade de recuperar transações incompletas ou abortadas. Um segmento de undo é usado para salvar o valor antigo quando um processo
  • 4. altera dados de um banco de dados. Ele armazena a localização dos dados e também os dados da forma como se encontravam antes da modificação. Basicamente, os objetivos dos segmentos de undo são: Rollback de transação: Quando uma transação modifica uma linha de uma tabela, a imagem original das colunas modificadas é salvas no segmento de UNDO, e se for feito o rollback da transação, o servidor Oracle restaurará os valores originais gravando os valores do segmento de UNDO novamente na linha Recuperação de Transação: Se ocorrer uma falha de instância enquanto houver transações em andamento, o servidor Oracle precisará desfazer as alterações não submetidas à commit quando o banco de dados for aberto novamente. Esse rollback faz parte da recuperação da transação. Portanto, a recuperação só é possível porque as alterações feitas no segmento de UNDO também são protegidas pelos arquivos de redo log online. Consistência de Leitura: Enquanto houver transações em andamento, outros usuários do banco de dados não deverão ver as alterações não submetidas à commit feitas nessas transações. Além disso, uma instrução não deverá ver as alterações submetidas à commit após o início da execução dessa instrução. Os valores antigos (dados de undo) dos segmentos de UNDO também são usados para oferecer aos leitores uma imagem consistente de uma instrução específica. O que é o tablespace SYSAUX? Este tablespace auxiliar não existe nas versões anteriores ao Oracle 10g e foi criado especialmente para aliviar o tablespace SYSTEM de segmentos associados a algumas aplicações do próprio banco de dados como o Oracle ultra search, Oracle Text e até mesmo segmentos relacionados ao funcionamento do Oracle Enterprise Manager entre outros. Como resultado da criação dessetablespace, alguns gargalos de I/O freqüentemente associados ao tablespace SYSTEM foram reduzidos ou eliminados. Vale a pena salientar que não é bom que o tablespace SYSAUX seja colocado no modo offline, pelo fato de correr o risco do banco de dados não funcionar corretamente. Portanto, podemos dizer que o mesmo é parte integrante e obrigatório em todos os bancos de dados à partir do Oracle 10g. Existe uma view de dicionário de dados que mostra os ocupantes neste tablespace: SQL> select occupant_name, schema_name, space_usage_kbytes2 fromv$sysaux_occupants; OCCUPANT_NAME SCHEMA_NAME SPACE_USAGE_KBYTES --------------- -------------------- -----------------LOGMNR SYSTEM 7488 LOGSTDBY SYSTEM 0 STREAMS SYS 192 AO SYS 960 XSOQHIST SYS 960 SM/AWR SYS 68352 SM/ADVISOR SYS 7360 SM/OPTSTAT SYS 21120 SM/OTHER SYS 3328 STATSPACK PERFSTAT 0 ODM DMSYS 5504 SDO MDSYS 6080 WM WMSYS 6656 ORDIM ORDSYS 512 ORDIM/PLUGINSORDPLUGINS 0
  • 5. ORDIM/SQLMM SI_INFORMTN_SCHEMA EM SYSMAN 61632 TEXT CTXSYS 4736 ULTRASEARCH WKSYS 7296 JOB_SCHEDULERSYS 256 0 Uma outra informação bastante útil que esta view oferece é o nome de uma procedure que o DBA pode utilizar para mover dados de um ocupante para um outro tablespace: SQL> select occupant_name,move_procedure 2 fromv$sysaux_occupants whereoccupant_name='LOGMNR'; OCCUPANT_NAME MOVE_PROCEDURE --------------- --------------------------------------LOGMNR SYS.DBMS_LOGMNR_D.SET_TABLESPACE Gerenciamento de Espaço em Tablespaces Os tablespaces alocam espaço em extensões (extents). Eles podem ser criados para usar um dos dois métodos de controle de espaço livre e utilizado: Tablespaces gerenciados localmente: As extensões são gerenciadas no tablespace por bitmaps. Cada bitmap corresponde a um bloco ou a um grupo de blocos. Quando uma extensão é alocada ou liberada para reutilização, o servidor Oracle altera os valores do bitmap para mostrar o novo status dos blocos. A partir do Oracle 9i este gerenciamento local é o padrão. Tablespaces gerenciados por dicionário: As extensões são gerenciadas pelo dicionário de dados. O servidor atualiza as tabelas apropriadas no dicionário de dados sempre que uma extensão é alocada ou desalocada. Nas versões anteriores ao Oracle 8i, os extents de todos os tablespaces eram gerenciados centralmente por meio das tabelas do dicionário de dados, quando os extents são alocados ou desalocados em qualquer lugar do banco de dados, o Oracle atualiza as tabelas do dicionário de dados para registrar o novo mapa de armazenamento. A partir do Oracle 8i um novo recurso possibilitando o gerenciamento local dos extents dentro de um tablespace praticamente decretou a morte do tablespace gerenciado por dicionário de dados Como dito anteriormente, o Oracle mantém um bitmap em cada arquivo de dados de um tablespace gerenciado localmente. Para se criar um tablespace gerenciado localmente, é necessário usar a cláusula EXTENT MANAGEMENT LOCAL como o comando createtablespace. Comparando com os tablespaces gerenciados por dicionário, os tablespaces gerenciados localmente têm um modo completamente diferente de dimensionar os extents. Os parâmetros de armazenamento NEXT, PCTINCREASE, MINEXTENTS, MAXEXTENTS e DEFAULT_STORAGE não são válidos nos casos dos tablespaces gerenciados localmente. Em vez disso, existe a opção de especificar um tamanho uniforme para todos os extents ou especificar apenas o tamanho do extent inicial e deixar que o Oracle determine automaticamente o tamanho de todos os extentssubseqüentes. Os extents uniformes ou dimensionados automaticamente
  • 6. podem ser selecionados especificando as opções UNIFORM ou AUTOALLOCATE, respectivamente, ao criar um tablespace gerenciado localmente com o comando CREATE TABLESPACE. OBS: Os tablespaces gerenciados localmente ajudam a reduzir a overhead de gerenciamento de espaço eliminando a necessidade de várias gravações nas tabelas do dicionário de dados ou nos segmentos de rollback, o que ocorre necessariamente quando o espaço é gerenciado centralmente por meio do dicionário de dados. Segundo a Oracle, os tablespaces gerenciados por dicionário não serão mais suportados nas futuras versões do Oracle: "Oracle strongly recommends that you create only locally managed tablespaces. Locally managed tablespaces are much more efficiently managed than dictionary-managed tablespaces. The creation of new dictionary-managed tablespaces is scheduled for desupport." Outra informação importante é que um tablespace gerenciado por dicionário não pode ser criado caso o tablespace SYSTEM seja gerenciado localmente: SQL> create tablespacetbs_test 2 logging 3 datafile /u01/oradata/BD01/test01.dbf' size 5m 4 extent management dictionary; createtablespacetbs_test * ERRO na linha 1: ORA-12913: Não é possível criar um tablespace gerenciado por dicionário SQL> select extent_management 2 fromdba_tablespaces 3 wheretablespace_name='SYSTEM'; EXTENT_MANAGEMENT ----------------LOCAL
  • 7. ORACLE 11g Instalar SQL Developer Criar uma conexão com o banco: Exibir / Conexões Em conexões, clicar para NOVA CONEXÃO Nome da Conexão: xemesmo nome do banco Nome do Usuário: sys as sysdba Senha: Simone mesmo nome informado durante a instalação Salvar senha. Clicar em conectar Abre janela de script Para saber se está conectado no banco:select * fromv$instance; Instalar o Oracle 11g Criar usuários: Menu Iniciar  Todos os programas  Oracle  Conceitos Básicos Primeiro, criar WORKSPACE: Clicar em Application Express Username: system usamos o usuário system porque ainda não criamos nenhum usuário. Password: Simone Database Username: TREINAWEB Application Express Username: marcos Password: Simone Clicar em: CreateWorkspace Na aba Application Express, conceitos básicos, clicar em: log-in no seu espaço de trabalho do Application Express. Workspace: TREINAWEB Username: marcos Password: Simone Criar usuário: Clicar na aba: Administração Clicar em: Gerenciar usuários e grupos Clicar em: Criar usuário Identificação do usuário: Nome do usuário: TREINA Endereço de email: treina@treinaweb.com.br Nome: marcos Sobrenome: soares Esquema Default: TREINAWEB O usuário é um administrador do espaço de trabalho: Sim Definir conta disponibilidade: Desbloqueado Senha: simon Confirmar: simon Exibir mudança de senha na primeira utilização: Sim Clicar em: Criar usuário
  • 8. Efetuar logout no ícone, no topo superior direito. Clicar no link login: Espaço de trabalho: TREINAWEB Nome do usuário: treina Senha: simon Aparece a mensagem  A senha para essa conta deve ser mudado. Nome de usuário: treina  não pode ser mudado. Digitar senha atual: treina Digite nova senha: Simone Clicar no botão: retornar Informar a nova senha Workspace: TREINAWEB Nome de usuário: treina Senha: Simone Criando usuário via código: Antes, conceder todos os privilégios no banco de dados para o usuário principal TREINAWEB Executar linha de comando SQL: connsys/oracle as sysdba conectado Conceder todos os privilégios: GRANT ALL PRIVILEGES TO TREINAWEB; concessão bem-sucedida. Criar novo usuário por comando SQL: CREATE USER nome_usuário IDENTIFIED [BY senha_usuario | EXTERNALLY ] DEFAULT TABLESPACE nome TEMPORARY TABLESPACE nome QUOTA [<valor em K ou M> | UNLIMITED] ON TABLESPACE Voltarao Application Express Selecionar Workshop > Comando SQL Digitar na tela que aparece CREATE USER usuario_teste IDENTIFIED BY senha_teste DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS; Resposta: Usercreated Para acessar o sistema com esse usuário, é necessário dar permissão de conexão para ele. GRANT CONNECT TO usuario_teste; Observação: Não é possível acessar o Application Service com o usuário: usuario_teste
  • 9. Exclusão de usuários: DROP USER nome_usuario; Criar usuário: CREATE USER vou_ser_excluido IDENTIFIED BY senha; Excluir usuário: DROP USER vou_ser_excluido; Login usando SQL Plus Conectar ao banco de dados: CONNECT usuário_teste/senha_teste; Para desconectar: disconnect; Criando tabelas CREATE TABLE nome_tabela( nome_coluna1tipo_dado, nome_coluna2tipo_dado); Criar tabelas no construtor visual Abrir o Application Express Menu: SQL Workshop > Browser de Objetos Clicar em: Create Clicar no link table Nome da tabela: FUNCIONARIO Nome da Coluna Tipo PrecisãoEscala Não nulo CODIGO_FUNCIONARIO NUMBER 10 x CPF CHAR 11 NOME VARCHAR2 60 x SALARIO NUMBER 10 2 DEPARTAMENTO VARCHAR2 60 Clicar em: Próximo Marcar: Notpopulated Primary Key Constraint Name: Funcionario_pk Primary Key: CODIGO_FUNCIONARIO(NUMBER) Composite Primary Key: xxxx Clicar em: Próximo Adicionar chave estrangeira Nome: Funcionario_fk Marcar: DisallowDelete Clicar em: Próximo Esta tela permite a definição de Restrições de Constraint de Verificação e Constraint Exclusiva: Constraint Adicionar Constraint Marcar: verificar Nome: FUNCIONARIO_ck1clicar em Adicionar e Próxima
  • 10. Criar tabela Esquema: TREINAWEB Nome Tabela: FUNCIONARIO SQL CREATE TABLE “FUNCIONARIO” ( “CODIGO_FUNCIONARIO”NUMBER NOT NULL, “CPF” CHAR(11), “NOME” VARCHAR2(60) NOT NULL, “SALARIO”NUMBER(10,2), “DEPARTAMENTO”VARCHAR(60), Constraint “FUNCIONARIO_PK” primarykey (“CODIGO_FUNCIOARIO”)) / Altertable “FUNCIONARIO” add Constraint “FUNCIONARIO_ck1” Check(salario> 0) / Clicar em: Criar Criar tabelas por SQL Selecionar SQL Workshop > Comandos SQL Digitar: CREATE TABLE cidade( codigo_cidade INT NOT NULL, nome VARCHAR(50) NOT NULL, uf VARCHAR(2) NOT NULL, taxa NUMBER(10,2) NOT NULL, PRIMARY KEY(codigo_cidade) ); Clicar em: Executar Tipos de Constraints NOT NULL: não permite valor nulo. UNIQUE: exige que cada valor da coluna seja único (exclusivo) para todos os registros da tabela. PRIMARY KEY: define uma chave primária para uma tabela. FOREIGN KEY: cria um relacionamento entre as tabelas. CHECK: define uma condição a ser satisfeita.
  • 11. CREATE TABLE cliente( codigo_cliente INT NOT NULL, nome VARCHAR(60) NOT NULL, endereco VARCHAR(60) NOT NULL, telefone VARCHAR(13) NOT NULL, email VARCHAR(100) NOT NULL, renda NUMBER(10,2) NOT NULL, Primary key(codigo_cliente)); Clicar em: executar Criar tabela que tenha colunas com chave estrangeira CREATE TABLE frete( codigo_freteINT NOT NULL, data DATE NOT NULL, descricao VARCHAR(60) NOT NULL, codigo_cliente INT NOT NULL, codigo_cidadeINT NOT NULL, codigo_funcionario INT NOT NULL, peso NUMBER(10,2) NOT NULL, valor_freteNUMBER(10,2) NOT NULL, PRIMARY KEY(codigo_frete)); ALTER TABLEfreteADD(FOREIGN KEY(codigo_cliente) REFERENCES cliente); ALTER TABLEfreteADD(FOREIGN KEY(codigo_cidade) REFERENCES cidade); ALTER TABLEfreteADD(FOREIGN KEY(codigo_funcionario) REFERENCES funcionario); Clicar em: Executar Obs: Popular as tabelas individualmente. INSERT INTO CIDADE VALUES(1, ‘SÃO PAULO’,’SP’,10); INSERT INTO CIDADE VALUES(2, ‘RIO DE JANEIRO’,’RJ’,8); INSERT INTO CLIENTE VALUES(1, ‘CARLOS SILVA’,’RUA DO CONDE,80’,’33445500’,’carlos@mail.com.br’,1000); INSERT INTO CLIENTE VALUES(2, ‘MANOEL ANTONIO’,’RUA DO ACRE,10’,’22445512’,’manoel@mail.com.br’,2000); INSERT INTO FUNCIONARIO (CODIGO_FUNCIONARIO,CPF,NOME,SALARIO,DEPARTAMENTO) VALUES(1, ‘11122233344’,’ALICE’,1000,’FINANCEIRO’); INSERT INTO FRETE VALUES(1, ‘SYSDATE’,’FRETE DE ENTREGA DE SEOJA’,1,1,1,100,1000);
  • 12. Adicionar coluna em tabela existente ALTER TABLE nome_tabela ADD nome_do_campotipo_dado; ALTER TABLE CLIENTE ADD CAMPO1 CHAR(25); Excluir coluna em uma tabela ALTER TABLE nome_tabela DROP COLUMN nome_campo; ALTER TABLE CLIENTE DROP COLUMN CAMPO1; Excluir tabela DROP TABLE nome_tabela; CRIAR SINÔNIMOS ( Criar apelido para a referência de uma tabela ) Usado para simplificar o acesso a um objeto com nome muito longo. CREATE SYNONYM ref FOR REFERENCIA; CREATE SYNONYM cid FOR CIDADE; SELECT * FROM CID; VIEW ( Consulta, atualização e eliminação de dados ) CREATE [OR REPLACE] VIEW nome_view AS ---Instruções--[WITH READ ONLY]; Com o código abaixo, a View permite a atualização dos dados. CREATE OR REPLACE VIEW LISTA_FUNCIONARIOS AS SELECT NOME FROM FUNCIONARIOS; Visualizar dados com a View SELECT * FROM LISTA_FUNCIONARIOS; Permite a atualização de dados CREATE OR REPLACE VIEW VISAO_CIDADE AS SELECT * FROM CIDADE; Inserir dados com a View INSERT INTO VISAO_CIDADE VALUES (10,’TAUBATÉ’,’SP’,2);
  • 13. VIEW apenas de leitura CREATE OR REPLACE VIEW VISAO_LEITURA_CIDADE AS SELECT * FROM CIDADE WITH READ ONLY; Ao executar o código abaixo para incluir outro registro na tabela CIDADE, ocorrerá um erro. INSERT INTO VISAO_LEITURA_CIDADE VALUES( 11, ‘CAMPINAS’,’SP’,18); Excluir uma VIEW DROP VIEW nome_view; DROP VIEW VISAO_LEITURA_CIDADE; Ver todas as VIEWS de usuário SELECT * FROM USER_VIEWS; Sequence Para criar campos de auto numeração.Utililiza-se esse objeto para que, na inserção de determinado registro, não seja necessário especificar um valor para o campo que deve possuir um código sequencial. CREATE SEQUENCE nome_sequencia [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] OR [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE n | NOCACHE]; Criar uma sequência CREATE SEQUENCE MINHA_SEQUENCIA START WITH 1 INCREMENT BY 1 MAXVALUE 999 CYCLE CACHE 10; Para executar o exemplo de SEQUENCE, criar a tabela ALUNO. CREATE TABLE ALUNO ( CODIGO INT NOT NULL, NOME VARCHAR2(60) NOT NULL, CURSOVARCHAR2(100) NOT NULL); Inserir dados na tabela ALUNO INSERT INTO ALUNO(CODIGO,NOME,CURSO) VALUES(MINHA_SEQUENCIA.NEXTVAL,’CARLOS’,’SISTEMAS DE INFORMAÇÃO’); Para visualizar todas as sequencias que estão no schema SELECT * FROM USER_SEQUENCES;
  • 14. Excluir uma sequencia DROP SEQUENCE nome_sequencia CONSULTAS SQL SELECT [DISTINCT] lista_colunas FROM lista_tabelas WHERE condições GROUP BY lista_colunas HAVING condições_grupo ORDER BY lista_colunas DISTINCT: eliminar linhas com registro repetido. SELECT DISTINCT UF FROM CIDADE; SELECT DISTINCT SALARIO, DEPARTAMENTO FROM FUNCIONARIO; AS: DEFINE APELIDO PARA QUAQUER COLUNA DURANTE A SELEÇÃO. SELECT NOME, SALARIO, SALARIO * 12 AS “SALÁRIO ANUAL” FROM FUNCIONARIO ORDER BY CAMPO DESC; SELECT CODIGO_CLIENTE, NOME,ENDERECO, TELEFONE, RENDA FROM CLIENTE WHERE (RENDA = 1000 AND CODIGO_CLIENTE > 1) ORDER BY NOME; COMPARADORES: BETWEEN, AND, IN, LIKE e IS NULL SELECT CODIGO_CLIENTE, NOME, ENDERECO, TELEFONE, EMAIL, RENDA FROM CLIENTE WHERE (RENDA BETWEEN 1000 AND 2000) ORDER BY NOME; CLÁUSULA: IN Compara o valor da coluna com o conjunto de valores informados. SELECT CODIGO_CLIENTE, NOME FROM CLIENTE WHERE CODIGO_CLIENTE IN (1,2,4) ORDER BY NOME; LIKE:utilizado exclusivamente em colunas com sequência caracteres. SELECT CODIGO_CLIENTE, NOME, ENDERECO FROM CLIENTE WHERE NOME LIKE ‘M%’ ORDER BY NOME;
  • 15. WHERE NOME ‘M%’ seleciona todos os nomes que iniciam com a letra M. WHERE NOME ‘%M%’qualquer nome que tenha a letra A no nome. WHERE NOME ‘_M%’ nomes que tenham obrigatoriamente a letra M na segunda posição. WHERE CPF IS NULL  seleciona as colunas nulas. LIKE: utilizado exclusivamente em colunas com sequência de caracteres. SELECT CODIGO_CLIENTE, NOME, ENDERECO FROM CLIENTE WHERE NOME LIKE ‘M%’ ORDER BY NOME; WHERE NOME LIKE ‘M%’  seleciona todos os nomes que iniciam com a letra M. WHERE NOME LIKE ‘%M%’ qualquer nome que tenha a letra A no nome. WHERE NOME LIKE ‘_A%’ nomes que tenham obrigatoriamente a letra A na segunda posição. WHERE CPF IS NULL  seleciona as colunas nulas. Selecionar dados de uma tabela SELECT * FROM CIDADE, FRETE WHERE CIDADE.CODIGO_CIDADE = FRETE.CODIGO_CIDADE; OU SELECT * FROM CIDADE INNER JOIN FRETE ONCIDADE.CODIGO_CIDADE = FRETE.CODIGO_CIDADE; Símbolo + pode ser usado para informar que se quer listar todos os dados da tabela que possua tal símbolo. SELECT * FROM CIDADE INNER JOIN FRETE ON CIDADE.CODIGO_CIDADE = FRETE.CODIGO_CIDADE (+); Alias SELECT * FROM CIDADE C INNER JOIN FRETE F ON C.CODIGO_CIDADE = F.CODIGO_CIDADE; PRIVILÉGIOS PRIVILÉGIODESCRICAO SELECT INSERT UPDATE DELETE REFERENCESCRIAR CONSTRAINT QUE REFERENCIE À ESSA TABELA ALTER ALTERA AS DEFINIÇÕES DA TABELA ATRAVÉS DO COMANDO ALTER TABLE INDEX CRIAR ÍNDICES
  • 16. GRANT: conceder privilégios em uma tabela GRANT [PRIVILEGES] ON [OBJECT] TO [USER] EXEMPLO: CONECTAR AO USUÁRIO:connectusuario_teste/senha_teste; SELECT * FROM treinaweb.cliente; Mensagem: Erro na linha 1 a tabela ou view não existe. Abrir Application Express, logar como usuário TREINAWEB GRANT SELECT ON CLIENTE TO USUARIO_TESTE; Voltar ao SQL Plus e executar novamente SELECT * FROM TREINAWEB.CLIENTE;  a instrução é executada com sucesso. Listar schemas de usuários criados SELECT USERNAME FROM DBA_USERS; REVOKE: revoga privilégios concedidos a um usuário. Revogar privilégio concedido ao usuário “USUARIO_TESTE” REVOKE SELECT ON CLIENTE FROM USUARIO_TESTE; Funções de grupo Podem aparecer na cláusula SELECT quanto na cláusula HAVING A cláusula GROUP BY divide as linhas de uma ou mais tabelas em grupos de linhas. HAVING: seleciona os grupos que serão aceitos. AVG(), COUNT(), MAX(), MIN(), SUM() AVG(): média aritmética dos valores da coluna. COUNT(): retorna número de linhas que satisfaz a condição, não conta valores nulos. MAX(): valor máximo da coluna. MIN(): valor mínimo da coluna. SUM(): soma dos valores da coluna. EXEMPLO: SELECT AVG(RENDA), MAX(RENDA), MIN(RENDA), SUM(RENDA) FROM CLIENTE; Todo SELECT que possuir colunas com funções de grupo e colunas que não fazem uso das funções, é obrigado a utilizar a cláusula GROUP BY. EXEMPLO: SELECT RENDA, COUNT(*) FROM CLIENTE GROUP BY RENDA;
  • 17. Não é possível utilizer a cláusula WHERE em conjunto com as funções de grupo. EXEMPLO: SELECT RENDA, COUNT(*) FROM CLIENTE WHERE COUNT(*) > 2 GROUP BY RENDA;ocorrerá um erro. Para esses casos, utilizar a cláusula HAVING SELECT RENDA, COUNT(*) FROM CLIENTE HAVING COUNT(*)> 2; não ocorrerá erro. SUBCONSULTAS Primeiro é executado o SELECT interno, em seguida o resultado é utilizado em uma condição da consulta principal. SELECT NOME, RENDA FROM CLIENTE WHERE RENDA = (SELECT MAX(RENDA) FROM CLIENTE); Se a subconsulta retornar mais de um resultado, será preciso utilizar a cláusula IN SELECT NOME, RENDA FROM CLIENTE WHERE RENDA IN (SELECT RENDA FROM CLIENTE); UPDATE UPDATE tabela SET nome_coluna1 = valor1 WHERE CONDIÇÃO Aumentar em 10% o salário do funcionário Mario UPDATE FUNCIONARIO SET SALARIO = SALARIO * 1.1 WHERE NOME = ‘MARIO’; INSERT INSERT INTO TABELA( COLUNA1, ... ) VALUES( VALOR1,... ); Pag.46 – Funcionamento da engine PL/SQL Pag.47 – Blocos PL/SQL A unidade básica em PL/SQL é um bloco. Todos os programas em PL/SQL são compostos por blocos que podem estar localizados uns dentro dos outros. Geralmente, cada bloco efetua uma ação lógica no programa.
  • 18. Estrutura do Bloco DECLARE Seção para declaração de variáveis, tipos, cursores e subprogramas locais. BEGIN Seção executável. Nesta seção ficam as instruções, procedimentos e SQL. Esta é a única seção do bloco que é indispensável e obrigatória. EXPECTION Seção/Setor onde ficam as instruções de tratamento de erro. END Exemplos de Blocos PL/SQL Criar tabela CREATE TABLE TEMP_TABLE( NUM_COL INT, CHAR_COL VARCHAR(50)); Bloco anônimo não rotulado DECLARE /* DECLARA VARIÁVEIS */ V_NUM1 NUMBER:= 1; V_NUM2 NUMBER:= 2; V_STRING1 VARCHAR2(50):='Olá Mundo!'; V_STRING2 VARCHAR2(50):=' Esta mensagem é mostrada pelo PL/SQL'; V_OUTPUTSTR VARCHAR2(50); BEGIN /* INSERE DUAS LINHAS NA TABELA TEMP_TABLE, USANDO OS VALORES DAS VARIÁVEIS */ INSERT INTO TEMP_TABLE (NUM_COL, CHAR_COL) VALUES (V_NUM1, V_STRING1); INSERT INTO TEMP_TABLE (NUM_COL, CHAR_COL) VALUES (V_NUM2, V_STRING2); /* AGORA SELECIONA AS 2 LINHAS INSERIDAS E MOSTRA-AS NA TELA UTILIZANDO A PACKAGE DBMS_OUTPUT. */ SELECT CHAR_COL INTO V_OUTPUTSTR FROM TEMP_TABLE WHERE NUM_COL = V_NUM1; DBMS_OUTPUT.PUT_LINE(V_OUTPUTSTR); SELECT CHAR_COL INTO V_OUTPUTSTR FROM TEMP_TABLE WHERE NUM_COL = V_NUM2; DBMS_OUTPUT.PUT_LINE(V_OUTPUTSTR); /* EFETUAR ROLLBACK NAS ALTERAÇÕES */ ROLLBACK; END;
  • 19. PROCEDIMENTO CREATE OR REPLACE PROCEDURE InsereEmTemp AS /* DECLARA VARIÁVEIS */ V_NUM1 NUMBER:= 1; V_NUM2 NUMBER:= 2; V_STRING1 VARCHAR2(50):='Olá Mundo!'; V_STRING2 VARCHAR2(50):=' Esta mensagem é mostrada pelo PL/SQL'; V_OUTPUTSTR VARCHAR2(50); BEGIN /* INSERE DUAS LINHAS NA TABELA TEMP_TABLE, USANDO OS VALORES DAS VARIÁVEIS */ INSERT INTO TEMP_TABLE (NUM_COL, CHAR_COL) VALUES (V_NUM1, V_STRING1); INSERT INTO TEMP_TABLE (NUM_COL, CHAR_COL) VALUES (V_NUM2, V_STRING2); /* AGORA SELECIONA AS 2 LINHAS INSERIDAS E MOSTRA-AS NA TELA UTILIZANDO A PACKAGE DBMS_OUTPUT.*/ SELECT CHAR_COL INTO V_OUTPUTSTR FROM TEMP_TABLE WHERE NUM_COL = V_NUM1; DBMS_OUTPUT.PUT_LINE(V_OUTPUTSTR); SELECT CHAR_COL INTO V_OUTPUTSTR FROM TEMP_TABLE WHERE NUM_COL = V_NUM2; DBMS_OUTPUT.PUT_LINE(V_OUTPUTSTR); /* EFETUAR ROLLBACK NAS ALTERAÇÕES */ ROLLBACK; ENDInsereEmTemp; Bloco anônimo para chamar a procedure BEGINobrigatório InsereEmTemp; END;obrigatório