De Wikipedia :
La tabla DUAL es una tabla especial de una fila presente de forma predeterminada en todas las instalaciones de bases de datos Oracle. Es adecuado para su uso en la selección de una pseudocolumna como SYSDATE o USER. La tabla tiene una sola columna VARCHAR2 (1) llamada DUMMY que tiene un valor de 'X'.
Por lo tanto, la tabla dual es una forma de realizar operaciones contra lo que equivale a una tabla vacía pero no nula. Esto es útil cuando a uno no le importa la tabla, pero necesita realizar operaciones a través de una instrucción select. Si la tabla tuviera más de una fila o columna, se devolverían múltiples resultados (debido a la operación en todo el conjunto de tuplas al realizar la operación).
No debe usarse en producción, a menos que necesite invocar ciertos procedimientos a través de SQL.
4*5
es una operación matemática, al igual 'Foo'
que una cadena. Por lo tanto, así como uno puede seleccionar 4 * 5 de cualquier tabla, así como uno puede seleccionar 'Foo' de cualquier tabla, DUAL es una forma de seleccionarlo de una tabla buena conocida que nunca tendrá múltiples resultados.
De la documentación (CONCEPTOS):
DUAL es una pequeña tabla en el diccionario de datos que Oracle Database y los programas escritos por el usuario pueden consultar para garantizar un resultado conocido. La tabla dual es útil cuando un valor debe devolverse solo una vez, por ejemplo, la fecha y hora actuales. Todos los usuarios de la base de datos tienen acceso a DUAL.
La tabla DUAL tiene una columna llamada DUMMY y una fila que contiene el valor X.
Y la referencia SQL :
DUAL es una tabla creada automáticamente por Oracle Database junto con el diccionario de datos. DUAL está en el esquema del usuario SYS pero es accesible por el nombre DUAL para todos los usuarios. Tiene una columna, DUMMY, definida como VARCHAR2 (1), y contiene una fila con un valor X. Seleccionar de la tabla DUAL es útil para calcular una expresión constante con la instrucción SELECT. Como DUAL solo tiene una fila, la constante se devuelve solo una vez. Alternativamente, puede seleccionar una constante, pseudocolumna o expresión de cualquier tabla, pero el valor se devolverá tantas veces como haya filas en la tabla. Consulte "Acerca de las funciones de SQL" para ver muchos ejemplos de selección de un valor constante de DUAL.
A partir de Oracle Database 10g Release 1, la E / S lógica no se realiza en la tabla DUAL cuando se calcula una expresión que no incluye la columna DUMMY. Esta optimización aparece como FAST DUAL en el plan de ejecución. Si SELECCIONA la columna DUMMY de DUAL, entonces esta optimización no tiene lugar y se produce una E / S lógica.
DUAL
es una tabla con exactamente una fila como se mostrará en la siguiente instrucción SQL:Tu
dual2
mesa no tiene filas. Si inserta uno, verá el mismo comportamiento.4 * 5 es una expresión que Oracle puede evaluar sin usar los datos de la tabla. Lo evaluará una vez para cada fila, al igual que lo haría con una expresión de columna normal. Entonces, si no hay una fila, no se devuelve ningún resultado, si hay dos filas, obtendrá el 20 dos veces.
fuente
La
dual
tabla "funciona" casi como funciona cualquier otra tabla: es una tabla de la que puede seleccionar registros.Esto significa, por ejemplo, que puede describir la tabla. Aquí, en
SQL*Plus
:Entonces, la tabla tiene una columna, llamada
dummy
cual es avarchar2(1)
.La tabla tiene, por diseño, un registro (al menos si nadie jugueteó con ella):
Entonces, para obtener el mismo comportamiento con el
dual2
que tienedual
, debe insertar un registro en dual. Mejor aún,create table as select
créelo con un (ctas):Ahora, su consulta funciona:
Anteriormente, dije que dual casi funciona como cualquier otra tabla. Entonces, ¿ cuándo no funciona como cualquier otra mesa?
Se comporta de manera diferente si no se selecciona ningún valor de la tabla en sí. Nuevamente, con sus consultas, dejo que Oracle las explique ...
... para ver cómo se accede a la tabla:
Se puede ver que la declaración hace un
full table access
encendidodual2
.Ahora, lo mismo con
dual
:Aquí es donde la
dual
tabla se comporta de manera diferente: el valor dedummy
no es necesario, por lofast dual
que se ejecuta una operación para que la instancia no lea el valor real en el disco.fuente
Por cierto, DUAL es una de las pocas 'tablas' que funciona cuando se inicia la instancia pero la base de datos no se ha abierto.
Obtienes algo como
fuente
Además de otras respuestas, Oracle no es tan exigente con los espacios de texto SQL (al menos en algunos lugares). El analizador SQL también tokeniza por diferencias de clase de caracteres en algunos casos, no solo por espacios en blanco.
Por ejemplo, puede ejecutar tales declaraciones:
También es posible ejecutar SQL sin ningún espacio en blanco:
Tengo algunos ejemplos más aquí:
http://blog.tanelpoder.com/2008/01/14/can-you-write-a-working-sql-statement-without-using-any-whitespace/
Tanel Poder
fuente
Una operación dual rápida reescribe su código para consultar x $ dual. Debido a que esta "tabla" es una estructura de datos C en el SGA, puede consultarla en modo nomount.
fuente
La pregunta ya está respondida. Estas son algunas notas sobre el propósito de la tabla dual. Dual se puede usar para evaluar expresiones en una cláusula select. Muchos otros sistemas de bases de datos no necesitan dicha tabla para este propósito. MS SQL Server, MySql, Posgres pueden evaluar la siguiente declaración
Oracle no puede. Una instrucción select de Oracle siempre necesita una cláusula "from".
Algunas funciones no se pueden usar en expresiones pl / sql como DUMP .
Asi que
planteará una excepción pero
trabajará.
Se puede usar para extender el conjunto de resultados de una consulta
que dio
o generar datos con consultas seleccionadas usando
CONNECT BY
:o un CTE recursivo:
que vuelve
en sqlfiddle
fuente
Por lo que vale, funciona exactamente de la misma manera en MySQL.
Y también parece que DUAL es algún tipo de estructura de memoria en MySQL también. Tenga en cuenta la diferencia en los dos planes explicativos: "no se utilizan tablas" para DUAL en MySQL.
Curiosamente, sin embargo, no puedo hacer un DESC en el dual de MySQL, que es diferente a Oracle, pero se introdujo específicamente AIUI para permitir que la sintaxis de Oracle funcione en MySQL.
fuente
En la base de datos Oracle, la tabla dual se usa básicamente para obtener el valor de las pseudocolumnas. Contiene las siguientes propiedades:
Si desea obtener más detalles, marque aquí
fuente