2008-09-16 54 views
191

He oído a personas que se refieren a esta tabla y no estaba seguro de qué se trataba.¿Qué es la tabla dual en Oracle?

+1

http://asktom.oracle.com/pls/asktom/f?p=100:11:0 :::: P11_QUESTION_ID: 1562813956388 detalles sobre dual – SriniV

Respuesta

190

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

por ejemplo select sysdate from dual;

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

+4

Otra buena fuente de información -> http://en.wikipedia.org/wiki/DUAL_table –

20

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

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

La tabla DUAL es una tabla especial de una sola fila presente por defecto en todas las instalaciones de bases de datos Oracle . Es adecuado para su uso en la selección de un pseudocolumna como SYSDATE o USUARIO La tabla tiene un solo VARCHAR2 (1) columna llamada DUMMY que tiene un valor de "X"

3

tipo de una tabla de pseudo usted puede ejecutar comandos en contra y obtener resultados, como sysdate. También le ayuda a verificar si Oracle está activo y verificar la sintaxis sql, etc.

8

Es la mesa especial en Oracle. A menudo lo uso para cálculos o para verificar 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.
52

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

SELECT 3+4 

Puede solucionar esta limitación escribiendo

SELECT 3+4 FROM DUAL 

lugar.

+0

Esta es la mejor respuesta. – johnny

0

Es un objeto para poner en el de esa devolución 1 fila vacía. Por ejemplo: seleccione 1 de dual; devuelve 1

seleccione 21 + 44 desde dual; devuelve 65

seleccione [sequence] .nextval from dual; devuelve el siguiente valor de la secuencia.

2

La tabla DUAL es una tabla especial de una fila presente por defecto en todas las instalaciones de bases de datos Oracle.Es adecuado para su uso en la selección de un pseudocolumna como SYSDATE o USUARIO

La mesa tiene una sola VARCHAR2 (1) columna llamada ficticia que tiene un valor de "X"

Puede leer todos los detalles en http://en.wikipedia.org/wiki/DUAL_table

55

de Wikipedia

Historia

La tabla DUAL fue creado por Chuck Weiss de la corporación Oracle para proporcionar una tabl e para unirse en las vistas internas:

que crea la tabla DUAL como un objeto subyacente en el diccionario de datos de Oracle. Nunca se pensó para que se viera solo, sino que usó dentro de una vista que se esperaba consultar. La idea era que pudiera hacer una UNIÓN a la tabla DUAL y crear dos filas en el resultado por cada fila en su tabla. Luego, al usar GROUP BY, la unión resultante se puede resumir para mostrar la cantidad de almacenamiento para la extensión DATA y para la (s) extensión (es) INDEX. 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 a partir de lo anterior, pero la tabla DUAL original tenía dos filas en ella (de ahí su nombre). Hoy en día solo tiene una fila.

Optimización

DUAL era originalmente una mesa y el motor de base de datos realizaría S de disco en la mesa cuando se selecciona de DUAL. Este IO de disco usualmente era IO lógico (no involucraba el acceso físico al disco) ya que los bloques de disco generalmente ya estaban almacenados en la memoria caché. Esto dio como resultado 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.

1

DUAL es necesario en PL/SQL de desarrollo para utilizar las funciones que sólo están disponibles en SQL

por ejemplo

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

Una mesa de utilidad en Oracle con sólo 1 fila y 1 columna Se usa para realizar varias operaciones aritméticas y se puede usar generalmente donde se necesita generar un resultado conocido.

SELECCIONAR * DESDE dual;

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

DUMMY 
----- 
X 
0

DUAL que utiliza principalmente para conseguir el siguiente número de las secuencias

Sintaxis: SELECT 'sequence_name'.NEXTVAL FROM DUAL

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

+1

Eso no es necesario desde 11g. Las secuencias se pueden usar de forma nativa en PL/SQL. –

0

otra situación que requiere select ... from dual es cuando queremos recuperar el código (definición de datos) para diferentes objetos de bases de datos (como la mesa, FUNCIÓN, disparador, del paquete), utilizando el construido en DBMS_METADATA.GET_DDL función:

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 realmente útil.

EDITAR

una situación más general: básicamente, cuando tenemos que utilizar cualquier procedimiento PL/SQL dentro de una sentencia 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 se han extraído del libro 'Oracle PL/SQL recetas' Josh Juneau y Matt Arena

Cuestiones relacionadas