Oracle 11g resumo
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Oracle 11g resumo

on

  • 847 views

RESUMO ORACLE

RESUMO ORACLE

Statistics

Views

Total Views
847
Views on SlideShare
847
Embed Views
0

Actions

Likes
1
Downloads
56
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Oracle 11g resumo Document Transcript

  • 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