¿Qué es la tabla dual en Oracle?


He escuchado a personas referirse a esta tabla y no estaba seguro de qué se trataba.

Author: LittleBobbyTables, 2008-09-16

13 answers

Es una especie de tabla ficticia con un solo registro utilizado para seleccionar cuando no está realmente interesado en los datos, sino que desea los resultados de alguna función del sistema en una instrucción select:

Por ejemplo select sysdate from dual;

Véase http://www.adp-gmbh.ch/ora/misc/dual.html

 200
Author: Sean McMains,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-20 07:46:07

Es una tabla ficticia con un elemento en ella. Es útil porque Oracle no permite declaraciones como

 SELECT 3+4

Puede evitar esta restricción escribiendo

 SELECT 3+4 FROM DUAL

En su lugar.

 63
Author: mfx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-20 07:45:48

De Wikipedia

Historia

La tabla DUAL fue creada por Chuck Weiss de Oracle corporation para proporcionar una tabla para unirse en vistas internas:

Creé la tabla DUAL como un objeto subyacente en el Diccionario de datos de Oracle. Nunca fue destinado a ser visto en sí mismo, sino que se utiliza dentro de una vista que se esperaba que se consultara. La idea era que podría hacer una UNIÓN a la tabla DUAL y crear dos filas en el resultado para cada fila de tu mesa. Luego, mediante el uso de GRUPO POR, el la unión resultante podría resumirse para mostrar la cantidad de almacenamiento para la extensión de los DATOS y para la extensión(s) del ÍNDICE. El nombre, DUAL, parecía apto para el proceso de crear un par de filas a partir de una sola. 1

Puede no ser obvio por lo anterior, pero la tabla DUAL original tenía dos filas (de ahí su nombre). Hoy en día solo tiene una fila.

Optimización

DUAL fue originalmente un la tabla y el motor de base de datos realizarían el IO del disco en la tabla al seleccionar de DUAL. Este IO del disco era generalmente IO lógico (no implicando el acceso físico del disco) pues los bloques del disco eran generalmente ya almacenados en caché en memoria. Esto resultó en una gran cantidad de IO lógico contra la tabla DUAL.

Las versiones posteriores de la base de datos Oracle se han optimizado y la base de datos ya no realiza IO físico o lógico en la tabla DUAL, aunque la tabla DUAL todavía existe.

 60
Author: Ivan Bosnic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-08 15:10:02

Creo que este artículo de wikipedia puede ayudar a aclarar.

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

La tabla DUAL es una fila especial tabla presente por defecto en todo Oracle instalaciones de bases de datos. Es conveniente 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"

 20
Author: Jorge Ferreira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-07 23:34:01

Es la tabla especial en Oracle. A menudo lo uso para cálculos o comprobación de variables del sistema. Por ejemplo:

  • Select 2*4 from dual imprime el resultado del cálculo
  • Select sysdate from dual imprime la fecha actual del servidor.
 9
Author: Martin08,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-23 20:12:09

Tipo de pseudo tabla en la que puede ejecutar comandos y obtener resultados, como sysdate. También le ayuda a comprobar si Oracle está activo y comprobar la sintaxis sql, etc.

 4
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 15:45:01

Una tabla de utilidad en Oracle con solo 1 fila y 1 columna. Se utiliza para realizar una serie de operaciones aritméticas y se puede utilizar generalmente donde se necesita generar una salida conocida.

SELECCIONE * DE dual;

Dará una sola fila, con una sola columna llamada "DUMMY" y un valor de "X" como se muestra aquí:

DUMMY
----- 
X
 4
Author: AB01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-07 22:17:37

Más hechos sobre el DUAL....

Http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1562813956388

Experimentos emocionantes hechos aquí, y explicaciones más emocionantes por Tom

 3
Author: Venkataramesh Kommoju,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-31 10:30:15

La tabla DUAL es una tabla especial de una fila presente de forma predeterminada en todas las instalaciones de Oracle database. 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"

Puedes leer todo sobre esto en http://en.wikipedia.org/wiki/DUAL_table

 2
Author: Sakin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 15:48:44

DUAL es necesario en el desarrollo PL/SQL para usar funciones que solo están disponibles en SQL

Por ejemplo

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
 1
Author: steevc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 15:57:44

Es un objeto para poner en el desde que devuelve 1 fila vacía. Por ejemplo: seleccione 1 de dual; devuelve 1

Seleccione 21 + 44 de dual; devuelve 65

Seleccione [secuencia].nextval de dual; devuelve el siguiente valor de la secuencia.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 15:47:54

DUAL utilizamos principalmente para obtener el siguiente número de las secuencias.

Sintaxis: SELECCIONAR 'sequence_name'.NEXTVAL DE DUAL

Esto devolverá el valor de una fila una columna(nombre de columna NEXTVAL).

 0
Author: Vishwa G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-31 07:33:04

Otra situación que requiere select ... from dual es cuando queremos recuperar el código (definición de datos) para diferentes objetos de la base de datos (como TABLA, FUNCIÓN, DISPARADOR, PAQUETE), utilizando la función incorporada DBMS_METADATA.GET_DDL:

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

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

Es cierto que hoy en día los IDE ofrecen la capacidad de ver el DDL de una tabla, pero en entornos más simples como SQL Plus esto puede ser muy útil.

EDITAR

Una situación más general: básicamente, cuando necesitamos usar cualquier PL / SQL procedimiento dentro de una instrucción SQL estándar, o cuando queremos llamar a un procedimiento desde la línea de comandos:

select my_function(<input_params>) from dual;

Ambas recetas están tomadas del libro 'Oracle PL/SQL Recipes' de Josh Juneau y Matt Arena

 0
Author: Newton fan 01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-17 16:22:18