miércoles, 5 de septiembre de 2012

select * from Dual en Oracle



En Oracle existe una tabla llamada DUAL, normalmente se usa para referenciar consultas que no tienen una tabla sino que son resultado de una función; por ejemplo:

Select SYSDATE from dual;

De esta forma podemos saber la fecha del servidor. Pero que pasa si queremos saber que tiene dual podemos hacer lo siguiente:

desc dual


Name                    Null?    Type
 ----------------------- -------- ----------------
 DUMMY                            VARCHAR2(1)

Claro en realidad DUAL es una table con un solo registro, de esta forma siempre nos devuelve un valor las consultas a dual: Vamoa a hacer un select * from Dual para ver que nos devuelve:

select * from Dual

Y nos retornara una sola fila con un único valor X para la tabla Dual. Supongamos que migramos de oracle a otra base y hacemos uso de la tabla dual o estamos acostumbrados a usarla. Por ejemplo en Postgres no existe esta tabla solo debemos hacer el select si From:


SELECT SYSDATE
o como deberia ser en PostgreSQL
SELECT now()
o
SELECT current_date


Otra solución es crear la tabla DUAL de la siguiente manera:

 CREATE TABLE DUAL
(
DUMMY VARCHAR(1)
)

Luego insertamos el único valor: 

INSERT INTO DUAL (DUMMY)
VALUES ('X')

Eso es todo amiguitos...

Dejo link:

2 comentarios:

  1. muy bien. tambien se utiliza para traer datos que me puedan ser utiles y que no estan en ninguna tabla de la base de datos. yo lo uso bastante en mi trabajo en un BI de oracle que utilizamos. Por ejemplo si quiero armar un reporte y necesito mostrar un listado de las provincias por algun motivo y no lo tengo en la base lo que hago es:
    Select "Entre Ríos" from dual union
    Select "Santa Fe" from dual union
    Select "Buenos Aires" from dual union... y asi sustantivamente dijo el chavo.

    ResponderBorrar