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á