A tabela DUAL é uma pseudo tabela, não é uma tabela real. A
tabela DUAL tem apenas uma
coluna chamada DUMMY, abaixo
segue a descrição da tabela.
SQL>
desc dual
Name Null? Type
----------------------- ----- -----------
DUMMY VARCHAR2(1)
Utilidade
A tabela DUAL é
criada automaticamente pelo banco de dados Oracle
juntamente com o dicionário de dados. Esta tabela
está no esquema do usuário “SYS”, mas
pode ser acessada por todos os usuários do banco de dados. A seleção
da tabela DUAL é
útil quando se utiliza uma expressão constante com a instrução SELECT. Porque a tabela DUAL tem
apenas uma linha e a constante retorna
apenas uma vez. Alternativamente,
se pode selecionar uma constante, pseudocoluna,
ou a expressão de qualquer
tabela, mas o valor será devolvido dependendo da
quantidade de linhas na tabela.
História
A tabela DUAL foi criada
por Chuck Weiss da Oracle Corporation para fornecer uma tabela para acessar visões internas.
De acordo com o seu criador, a tabela DUAL
original possuía duas linhas (daí
a origem do seu nome), mas, posteriormente, ele só tinha uma linha. Nas
versões do banco de dados Oracle apartir do 10g foram otimizadas para
que o banco de dados não execute
leituras físicas (Phisical I/O) ou leituras lógicas (Logical
I/O) na tabela DUAL.
Exemplos de uso
Para mostrar o usuário corrente.
SQL>
select user from DUAL;
USER
----
SYS
Para
mostrar a data corrente.
SQL>
select sysdate from DUAL;
SYSDATE
---------
15-JUN-13
Podemos também usar a tabela DUAL para realizar calculos aritiméticos.
SQL> select ((3*4)+5)/3 from DUAL;
((3*4)+5)/3
-----------
5.66666667
Para calcular o número PI.
SQL>
select 22/7 from DUAL;
22/7
----------
3.14285714
Para obter o caracter correspondente da tabela ASCII.
SQL> select
chr(172) from DUAL;
C
-
¬
Para exibir o dia da semana de qualquer data nos últimos 1.000 anos.
SQL> select to_char(to_date('18-apr-1972','dd-mon-yyyy'),'day') day from DUAL;
DAY
---------
tuesday
Para extrair o próximo valor de uma sequência.
SQL> select sequencia.nextval from DUAL;
Curiosidades
Nunca adicione linhas na tabela DUAL
ou realize qualquer outro tipo de alteração (adicionar ou alterar colunas). A alteração nesta tabela pode mudar o comportamento do banco
de dados e pode ser destrutivo para o banco
de dados.
Referências: Oracle® Database Concepts 11g Release 2 (11.2)
Oracle®
Database SQL Language Reference 11g Release
2 (11.2)
www.psoug.org
MSc.
Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com