Как сделать выборку по другой таблице в зависимости от аргумента? - PullRequest
0 голосов
/ 17 февраля 2020

В функции myVariable этот выбор делается из другой таблицы.

select 
     *
from
    table(decode(myVariable,1,sys.odcinumberlist(1,2),sys.odcinumberlist(3)))

результат

если myVAriable = 1, то 1,2 еще 3

I Я хотел бы сделать то же самое, но вместо того, чтобы иметь sys.odcinumberlist, я хотел бы иметь список всех целых чисел ниже 100.

Я пробовал много способов сделать это. Это, например, но ни один из них не сработал

select *
from
    table(decode(myvariable,1,table(select level from dual connect by level<100),sys.odcinumberlist(3)))

желаемый результат:

myvariable = 1, затем 1,2,3 .... 99, в противном случае 3

1 Ответ

1 голос
/ 17 февраля 2020

Вы должны разыграть этот подзапрос как odcinumberlist:

select * from
    table(decode(myvariable, 1,
                   cast(multiset(
                        select level from dual connect by level<100) 
                        as sys.odcinumberlist),
                   sys.odcinumberlist(3)))
...