una multiple filas ejemplos dinamico consultas concatenar columns columna 10g sql oracle

sql - multiple - Seleccione sin una cláusula FROM en Oracle



pivot oracle columns to rows (6)

es una buena práctica usar la mesa dual

Sí, la mesa doble generalmente se usa para este propósito exacto. Es bastante estándar en Oracle cuando no tiene ninguna tabla para seleccionar.

en SQL Server es posible ejecutar un SELECT, sin referencia a una tabla; algo como:

Select 1.2 +3, ''my dummy string''

Como Oracle no permite un SELECT sin un FROM, utilizo la tabla dual para este tipo de operación; algo como:

Select 1,2+3, ''my dummy string'' FROM DUAL

Hay una mejor manera de hacer este tipo de consulta? ¿es una buena práctica usar la mesa doble?


Creo que debes usar dual. se usa cuando necesita ejecutar SQL que no tiene un nombre de tabla. No puedo decir que lo use mucho más que en las secuencias de comandos SQL para repetir la fecha en que algo se ejecuta o algo así de estúpido.


En realidad, la implementación de SQL Server no es estándar. El estándar SQL-92 (Sección 7.9) requiere una cláusula FROM en una instrucción SELECT. DUAL es la forma de Oracle de proporcionar una tabla para seleccionar para obtener una fila escalar.


No, en Oracle no hay SELECT sin FROM .

Usar la mesa dual es una buena práctica.

dual es una tabla en memoria. Si no selecciona DUMMY , utiliza una ruta de acceso especial ( FAST DUAL ) que no requiere I/O

Érase una vez, el dual tenía dos registros (de ahí el nombre) y estaba destinado a servir como un conjunto de registros ficticio para duplicar los registros que se unen.

Ahora solo tiene un registro, pero aún puede generar un número arbitrario de filas con él:

SELECT level FROM dual CONNECT BY level <= 100

MySQL también admite dual (así como la sintaxis fromless).


Sí, la tabla dual es la forma habitual de hacer esto en Oracle. De hecho, fue presentado solo para esto.

La principal ventaja de DUAL es que el optimizador en Oracle sabe que es especial, por lo que las consultas que lo usan pueden ser más rápidas que si utilizara una tabla de una sola fila creada por usted mismo. Aparte de eso, no hay nada especial al respecto.


no olvides que la mayoría de las veces no necesitas usar SELECT.

En lugar de:

SELECT sysdate INTO l_date FROM dual; SELECT CASE WHEN i = j THEN 0 ELSE 1 END INTO l_foo FROM dual; ...

puedes usar

l_date := sysdate; l_foo := CASE WHEN i = j THEN 0 ELSE 1 END; ...