Da Wikipedia :
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 um valor de 'X'.
Portanto, a tabela dupla é uma maneira de executar operações em relação ao que equivale a uma tabela vazia, mas não nula. Isso é útil quando alguém não se importa com a tabela, mas precisa executar operações através de uma instrução select. Se a tabela tivesse mais de uma linha ou coluna, vários resultados seriam retornados (devido à operação em todo o conjunto de tuplas ao executar a operação).
Não deve ser usado na produção, a menos que você precise invocar determinados procedimentos através do SQL.
4*5
é uma operação matemática, assim como 'Foo'
uma string. Assim, assim como se pode selecionar 4 * 5 em qualquer tabela, assim como se pode selecionar 'Foo' em qualquer tabela, o DUAL é uma maneira de selecioná-lo em uma tabela em bom estado que nunca terá vários resultados.
A partir da documentação (CONCEPTS):
DUAL é uma pequena tabela no dicionário de dados que o Oracle Database e os programas escritos pelo usuário podem fazer referência para garantir um resultado conhecido. A tabela dupla é útil quando um valor deve ser retornado apenas uma vez, por exemplo, a data e a hora atuais. Todos os usuários do banco de dados têm acesso ao DUAL.
A tabela DUAL possui uma coluna chamada DUMMY e uma linha contendo o valor X.
E a referência SQL :
DUAL é uma tabela criada automaticamente pelo Oracle Database junto com o dicionário de dados. DUAL está no esquema do usuário SYS, mas é acessível pelo nome DUAL a todos os usuários. Ele possui uma coluna, DUMMY, definida como VARCHAR2 (1) e contém uma linha com um valor X. A seleção na tabela DUAL é útil para calcular uma expressão constante com a instrução SELECT. Como DUAL possui apenas uma linha, a constante é retornada apenas uma vez. Como alternativa, você pode selecionar uma constante, pseudocoluna ou expressão de qualquer tabela, mas o valor será retornado quantas vezes houver linhas na tabela. Consulte "Sobre as funções SQL" para muitos exemplos de seleção de um valor constante no DUAL.
A partir do Oracle Database 10g Release 1, a E / S lógica não é executada na tabela DUAL ao calcular uma expressão que não inclui a coluna DUMMY. Essa otimização é listada como FAST DUAL no plano de execução. Se você SELECIONAR a coluna DUMMY de DUAL, essa otimização não ocorrerá e a E / S lógica ocorrerá.
DUAL
é uma tabela com exatamente uma linha, como a seguinte instrução SQL será exibida:Sua
dual2
tabela não possui linhas. Se você inserir um, verá o mesmo comportamento.4 * 5 é uma expressão que o Oracle pode avaliar sem realmente usar dados da tabela. Ele será avaliado uma vez para cada linha, como faria com uma expressão de coluna normal. Portanto, se não houver linha, nenhum resultado será retornado; se houver duas linhas, você receberá os 20 duas vezes.
fonte
A
dual
tabela "funciona" quase da mesma maneira que qualquer outra tabela: é uma tabela da qual você pode selecionar registros.Isso significa, por exemplo, que você pode descrever a tabela. Aqui, em
SQL*Plus
:Portanto, a tabela possui uma coluna, denominada
dummy
qual é avarchar2(1)
.A tabela possui, por design, um registro (pelo menos se ninguém mexer com ela):
Portanto, para obter o mesmo comportamento
dual2
que você temdual
, é necessário inserir um registro no dual. Melhor ainda, crie-o com umcreate table as select
(ctas):Agora, sua consulta funciona:
Anteriormente, eu disse que o dual quase funciona como qualquer outra tabela. Então, quando não funciona como qualquer outra tabela?
Ele se comporta de maneira diferente, se nenhum valor da tabela em si for selecionado. Novamente, com suas perguntas, deixo a Oracle explicá- las ...
... para ver como a tabela é acessada:
Pode-se ver que a declaração está
full table access
ativadadual2
.Agora, a mesma coisa com
dual
:É aqui que a
dual
tabela se comporta de maneira diferente: o valor dedummy
não é necessário; portanto, umafast dual
operação é executada para que a instância não leia o valor real no disco.fonte
Aliás, DUAL é uma das poucas 'tabelas' que funciona quando a instância foi iniciada, mas o banco de dados não foi aberto.
Você recebe algo como
fonte
Além de outras respostas, o Oracle não é tão exigente quanto ao texto SQL dos espaços (pelo menos em alguns lugares). O analisador SQL também simboliza por diferenças de classe de caracteres em alguns casos, não apenas por espaço em branco.
Por exemplo, você pode executar essas instruções:
Também é possível executar o SQL sem nenhum espaço em branco:
Eu tenho mais alguns exemplos aqui:
http://blog.tanelpoder.com/2008/01/14/can-you-write-a-working-sql-statement-without-using-any-whitespace/
Tanel Poder
fonte
Uma operação dupla rápida reescreve seu código para consultar x $ dual. Como essa "tabela" é uma estrutura de dados C na SGA, você pode consultá-la no modo nomount.
fonte
A pergunta já está respondida. Estas são algumas notas para o objetivo da tabela dupla. Dual pode ser usado para avaliar expressões em uma cláusula de seleção. Muitos outros sistemas de banco de dados não precisam dessa tabela para esse fim. MS SQL Server, MySQL, Posgres pode avaliar a seguinte declaração
Oracle não pode. Uma instrução de seleção Oracle sempre precisa de uma cláusula "from".
Algumas funções não podem ser usadas na expressão pl / sql como DUMP .
tão
irá gerar uma exceção, mas
vai funcionar.
Pode ser usado para estender o conjunto de resultados de uma consulta
que deu
ou gere dados com consultas selecionadas usando
CONNECT BY
:ou um CTE recursivo:
que retorna
em sqlfiddle
fonte
Pelo que vale, funciona exatamente da mesma maneira no MySQL.
E também parece que DUAL é algum tipo de estrutura de memória no MySQL também. Observe a diferença nos dois planos de explicação - "nenhuma tabela usada" para DUAL no MySQL.
Curiosamente, no entanto, não posso fazer um DESC no dual do MySQL, que é diferente do Oracle - mas foi introduzido especificamente o AIUI para permitir que a sintaxe do Oracle funcione no MySQL.
fonte
No banco de dados oracle, a tabela Dual é basicamente usada para obter valor de pseudo-colunas. Ele contém as seguintes propriedades:
Se você quiser obter mais detalhes, clique aqui
fonte