A cláusula SELECT é usada para recuperar dados armazenados em uma ou mais tabelas/views da base de dados. Para poder executar um SELECT em uma tabela, uma das seguintes condições devem ser verdadeiras:
1) O usuário do banco de dados que está executando o SELECT
deve ser o owner dessa tabela
2) O usuário do banco de dados que está executando o SELECT deve ter o privilégio de SELECT concedido para a referida tabela.
Quando se executar um SELECT em cima de uma coluna VARCHAR2, “deve-se” colocar o valor a ser buscado entre aspas simples. O “deve-se” ficou entre aspas, pois caso não se coloque esse valor entre aspas simples, o Oracle irá tentar converter implicitamente (Implicit Conversion) esse valor para o tipo VARCHAR2. O mesmo vale para NUMBER. Caso o valor a ser buscado esteja entre aspas simples, o Oracle tentará converter de VARCHAR2 para NUMBER. Caso não seja possível essa conversão, o Oracle lançará o seguinte erro: “ORA-01722: Invalid number”. Ex:
–Colunas: NOME (VARCHAR2),IDADE(NUMBER) e SALARIO(NUMBER)
SELECT NOME,
IDADE,
SALARIO
FROM TAB_DADOS
WHERE NOME = 20 –conversao implicita bem-sucedida
AND IDADE = ’20’ –conversao implicita bem sucedida
AND SALARIO = ‘R$ 2000,00’ –conversao implicita falhara aqui, pois a coluna SALARIO (NUMBER) nao aceita strings
OBS: Esse tipo de conversão implicita degrada a performance na execução de queries. Recomenda-se usar o tipo correto de dados para evitar essa conversão implícita.
Quando se menciona o owner de uma tabela, é importante mencionar que existe a seguinte diferênça entre objetos na base de dados:
1) Schema Objects: São objetos que podem ter como dono uma conta de usuário. Ex:
* Tabelas
* Constraints
* Indices
* Views
* Sequences
* Private Synonyms
2) Non-Schema Objects: São objetos que não possuem um dono explícito. Ex:
* Users
* Roles
* Public Synonyms
OBS: A ordem que o ORACLE procura por uma referência a um objeto é:
1º) Um objeto cujo usuário corrente é o OWNER
2º) Um sinonimo PRIVATE cujo usuário corrente é o OWNER
3º) Um sinonimo PUBLIC.
Existem as seguintes categorias de SQL, sendo que o SELECT não esta em nenhuma destas. Ele tem sua própria categoria:
1) DATA DEFINITION LANGUAGE (DDL): Comandos usando CREATE, ALTER, DROP ou RENAME. Remover todas as linhas de uma base de dados sem dropar a estrutura (TRUNCATE). Realizar auditorias na base de dados (AUDIT, NOAUDIT). Adicionar uma descrição sobre um objeto ao dicionário de dados (COMMENT).
2) DATA CONTROL LANGUAGE (DCL): Comandos usando GRANT e REVOKE, para conceder ou revogar privilégios e roles a usuários.
3) DATA MANIPULATION LANGUAGE (DML): Comandos usando INSERT, UPDATE ou DELETE. Comandos usados em transações. Updates e Inserts condicionais (MERGE). Vêr o plano de execução de um SQL (EXPLAIN PLAN). “Lockar” uma tabela para ter acesso restrito (LOCK TABLE)
4) Transaction Control Language (TCL): Usado para agrupar estruturas DML em uma única transação. Efetivar (COMMIT) ou desfazer (ROLLBACK) alterações. Definir pontos para possíveis rollbacks (SAVEPOINT). Definir propriedades de uma Transação (SET TRANSACTION)
5) Session Control (Controle de sessão): Usado para controlar as propriedades de uma sessão de usuário (Sessão = Usuário conectado a base de dados). Controlar propriedades da sessão (ALTER SESSION). Permitir/não permitir ROLES (SET ROLE).
6) System Control (Controle do Sistema): Usado para gerênciar as propriedades da base de dados. A única propriedade dessa categoria é o ALTER SYSTEM
No próximo post, falaremos sobre o tópico 1.2: Executar uma cláusula SELECT básica. Até lá
Fabricio
Não é válido o trecho:
WHERE NOME = FULANO –conversao implicita bem-sucedida
Grande André!
O último homem do mundo a usar o Orkut…
O Fabricio não consegue te responder agora (rede bloqueada), mas obrigado pelo aviso!
Já corrigimos!
Grande abraço!
Caro Andre Santos… falta de atenção minha mesmo. Obrigado pela colaboração.
Acabei de marcar minha prova pro dia 25/01 e já dei a sorte de achar esse blog, já está nos favoritos, muito bom, dá um direcionamento muito bom pra quem tá estudando, ainda mais que não estou estudando pelo guia especifico pra prova. Vou passar as próximas semanas lendo e comentando cada tópico e espero passar na prova daqui duas semanas com a sua ajuda. Excelente trabalho e muito obrigado.
Thales, como foi a sua prova?
Abraços
Opa, fiz a prova no dia 25/01 mesmo, fui aprovado com 76%. Achei a prova detalhista, minuciosa, mas isso porque sou desenvolvedor java (scjp, scbcd, scwcd), não acho que essa seja uma prova pra quem “brinca” com oracle, é prova pra quem trabalha com o banco o dia inteiro. Outro detalhe é que duas semanas é pouco tempo pra estudar pra essa prova, mesmo quem já tem contato diario com sql. É isso ae, vou estudar pra segunda parte agora, até mais!
Thales,
obrigado pela resposta e parabéns!
Abraços e sucesso.