2012-07-13 10 views
5

Tabela z jednej kolumny i jednym rzędzie mogą być tworzone z:Jak napisać literał tabeli w Oracle?

select 'create' as col from dual; 

To może być wykorzystane do budowy tabeli dołącza:

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); 

Teraz chciałbym mieć dwa wiersze. Zrobiłem to w ten sposób:

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

Ale czy jest na to bardziej kompaktowa notacja? Próbowałem:

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

ale to nie działa.

+0

potrzebujesz konkretnych ciągów znaków? lub losowe (ish)? – Randy

+0

@Randy: losowe. "create" i "delete" na przykład. – ceving

Odpowiedz

9

Możesz użyć typu kolekcji i operatora TABLE, na przykład (działa w Oracle 10g):

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

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

Kilka sposobów generowania wierszy. Można użyć rownum na stole z większej liczby wierszy:

SELECT roWnum AS a 
    FROM user_objects 
    WHERE rownum <= 3 

można użyć hierarchicznego zapytania:

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

EDIT: zmiana int sekwencji do sekwencji alpha:

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

Niestety użyłem liczb całkowitych w moim przykładzie, ale faktycznie potrzebuję ciągów. – ceving

+0

Przepraszam jeszcze raz. Dane tabeli nie mogą zostać obliczone. – ceving

Powiązane problemy