2012-07-13 22 views
5

Una tabla con una columna y una fila se pueden crear con:¿Cómo escribir una tabla literal en Oracle?

select 'create' as col from dual; 

Esto puede ser usado para construir uniones de tablas:

with 
    a as (select 'create' as ac from dual), 
    b as (select 'delete' as bc from dual) 
select * from a left outer join b on (ac = bc); 

Ahora me gustaría tener dos filas. Lo hice de esta manera:

select 'create' as col from dual 
union 
select 'delete' as col from dual; 

¿Pero hay una notación más compacta para esto? Intenté

select ('create', 'delete') as col from dual; 

pero no funciona.

+0

¿necesita cuerdas específicas? o al azar (ish)? – Randy

+0

@Randy: al azar. 'crear' y 'eliminar' por ejemplo. – ceving

Respuesta

9

Puede usar el tipo de colección y el operador TABLE, por ejemplo (funciona en Oracle 10g):

SQL> SELECT column_value FROM TABLE(SYS.ODCIVARCHAR2LIST('abc', 'def', 'ghi')); 

COLUMN_VALUE 
-------------------------------------------------------------------------------- 
abc 
def 
ghi 
2

Un par de formas de generar filas. Se podría utilizar rownum contra una mesa con un número mayor de filas:

SELECT roWnum AS a 
    FROM user_objects 
    WHERE rownum <= 3 

se puede utilizar una consulta jerárquica:

SELECT level AS a 
    FROM dual 
    CONNECT BY LEVEL <= 3 

EDIT: cambio de secuencia int a la secuencia de alfa:

SELECT CHR(ASCII('a') + level - 1) 
    FROM dual 
    CONNECT BY LEVEL <= 3 
+0

Lo siento, utilicé números enteros en mi ejemplo, pero en realidad necesito cadenas. – ceving

+0

Lo siento de nuevo. Los datos de la tabla no se pueden calcular. – ceving

Cuestiones relacionadas