Qual é a tabela dupla no Oracle?

229

Ouvi pessoas se referindo a esta tabela e não tinha certeza do que se tratava.

Brian G
fonte
2
asktom.oracle.com/pls/asktom/… detalhes sobre dual
SriniV
O melhor ans é aqui sobre dual asktom.oracle.com/pls/asktom/… , as pessoas não estão dando mais atenção ao link do comentário acima e é por isso que estou comentando aqui .. dê uma olhada, você não vai se arrepender
Varun

Respostas:

229

É uma espécie de tabela fictícia com um único registro usado para selecionar quando você não está realmente interessado nos dados, mas deseja os resultados de alguma função do sistema em uma instrução select:

por exemplo select sysdate from dual;

Consulte http://www.adp-gmbh.ch/ora/misc/dual.html

Sean McMains
fonte
79

É uma mesa fictícia com um elemento. É útil porque o Oracle não permite declarações como

 SELECT 3+4

Você pode contornar essa restrição escrevendo

 SELECT 3+4 FROM DUAL

em vez de.

mfx
fonte
70

Da Wikipedia

História

A tabela DUAL foi criada por Chuck Weiss, da Oracle Corporation, para fornecer uma tabela para ingressar em visualizações internas:

Criei a tabela DUAL como um objeto subjacente no Oracle Data Dictionary. Ele nunca foi concebido para ser visto por si mesmo, mas usado em uma exibição que se esperava que fosse consultada. A ideia era que você pudesse fazer uma JOIN na tabela DUAL e criar duas linhas no resultado para cada linha da sua tabela. Em seguida, usando GROUP BY, a junção resultante pode ser resumida para mostrar a quantidade de armazenamento para a extensão DATA e para a extensão INDEX. O nome, DUAL, parecia adequado para o processo de criação de um par de linhas a partir de apenas uma. 1

Pode não ser óbvio pelo exposto acima, mas a tabela DUAL original tinha duas linhas (daí o nome). Atualmente, ele possui apenas uma linha.

Otimização

O DUAL era originalmente uma tabela e o mecanismo de banco de dados executaria E / S de disco na tabela ao selecionar DUAL. Essa E / S de disco era normalmente E / S lógica (sem envolver acesso físico ao disco), pois os blocos de disco já estavam em cache na memória. Isso resultou em uma grande quantidade de E / S lógica contra a tabela DUAL.

Versões posteriores do banco de dados Oracle foram otimizadas e o banco de dados não executa mais IO física ou lógica na tabela DUAL, mesmo que a tabela DUAL ainda exista.

Ivan Bosnic
fonte
21

Acho que este artigo da Wikipedia pode ajudar a esclarecer.

http://en.wikipedia.org/wiki/DUAL_table

A tabela DUAL é uma tabela especial de uma linha presente por padrão em todas as instalações de banco de dados Oracle. É adequado para uso na seleção de uma pseudocoluna como SYSDATE ou USER. A tabela possui uma única coluna VARCHAR2 (1) chamada DUMMY que possui o valor "X"

Jorge Ferreira
fonte
10

É a tabela especial no Oracle. Costumo usá-lo para cálculos ou verificação de variáveis ​​do sistema. Por exemplo:

  • Select 2*4 from dual imprime o resultado do cálculo
  • Select sysdate from dual imprime a data atual do servidor.
Martin08
fonte
4

Tipo de uma pseudo tabela na qual você pode executar comandos e recuperar resultados, como sysdate. Também ajuda a verificar se o Oracle está ativo e verificar a sintaxe sql etc.


fonte
4

Uma tabela de utilitários no Oracle com apenas 1 linha e 1 coluna. É usado para executar várias operações aritméticas e pode ser usado geralmente onde é necessário gerar uma saída conhecida.

SELECT * FROM dual;

fornecerá uma única linha, com uma única coluna chamada "DUMMY" e um valor de "X", como mostrado aqui:

DUMMY
----- 
X
AB01
fonte
2

A tabela DUAL é uma tabela especial de uma linha presente por padrão em todas as instalações de banco de dados Oracle. É adequado para uso na seleção de uma pseudocoluna, como SYSDATE ou USER

A tabela possui uma única coluna VARCHAR2 (1) chamada DUMMY que possui o valor "X"

Você pode ler tudo sobre isso em http://en.wikipedia.org/wiki/DUAL_table

Sakin
fonte
1

DUAL é necessário no desenvolvimento PL / SQL para usar funções que estão disponíveis apenas no SQL

por exemplo

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
steevc
fonte
0

É um objeto para colocar a partir dessa linha de retorno 1 vazia. Por exemplo: selecione 1 de dual; retorna 1

selecione 21 + 44 de dual; retorna 65

selecione [sequence] .nextval de dual; retorna o próximo valor da sequência.


fonte
0

DUAL, usamos principalmente para obter o próximo número das seqüências.

Sintaxe: SELECT 'sequence_name'.NEXTVAL FROM DUAL

Isso retornará o valor de uma linha, uma coluna (nome da coluna NEXTVAL).

Vishwa G
fonte
1
Isso não é necessário desde 11g. Sequências podem ser usadas nativamente em PL / SQL.
Jon Heller
0

Outra situação que requer select ... from dual é quando queremos recuperar o código (definição de dados) para diferentes objetos de banco de dados (como TABLE, FUNCTION, TRIGGER, PACKAGE), usando a DBMS_METADATA.GET_DDLfunção incorporada:

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;

select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;

é verdade que atualmente os IDEs oferecem a capacidade de visualizar o DDL de uma tabela, mas em ambientes mais simples como o SQL Plus isso pode ser realmente útil.

EDITAR

uma situação mais geral: basicamente, quando precisamos usar qualquer procedimento PL / SQL dentro de uma instrução SQL padrão ou quando queremos chamar um procedimento a partir da linha de comando:

select my_function(<input_params>) from dual;

ambas as receitas são retiradas do livro 'Oracle PL / SQL Recipes' de Josh Juneau e Matt Arena

Ventilador de Newton 01
fonte
0

O DUAL é uma linha especial, uma tabela de coluna presente por padrão em todos os bancos de dados Oracle. O proprietário do DUAL é SYS.

DUAL é uma tabela criada automaticamente pelo Oracle Database junto com as funções de dados. É sempre usado para obter as funções do sistema operacional (como data, hora, expressão aritmética. Etc.)

SELECT SYSDATE from dual;  
Manjunatha B
fonte