Определить предложение SQL From во время выполнения? - PullRequest
0 голосов
/ 29 января 2019

У меня есть table1, который содержит столбец, в котором хранится имя другой таблицы.На основании значения в таблице1 запрос должен извлечь данные, соответствующие указанному в нем имени таблицы.

Например, пусть таблица, в которой хранится имя таблицы, будет tablelist (tablename, tableid)

Пусть другие таблицы, имена которых хранятся в tablelist.tablename, будут A, B, C

На основе заданного входного параметра tableid. Если значение, сохраненное в tablename, равно 'A', запрос должен получить результаты, эквивалентные:

Select A.name from A;

Если его 'B', запрос должен быть:

Select B.type from B;

Если его 'C', запрос должен быть:

Select C.msg from C;

Какя сделаю это в один запрос, который принимает идентификатор таблицы в качестве ввода?

Пожалуйста, совет

1 Ответ

0 голосов
/ 29 января 2019

Вы можете попробовать case when конструкция:

select case tableid 
       when 'A' then (select name from a) 
       when 'B' then (select type from b)
       when 'C' then (select msg  from c) 
       end
  from tbl

Пример с некоторыми данными:

with 
  tablelist(tablename, tableid) as (
      select 'A', 1 from dual union all
      select 'B', 2 from dual union all
      select 'B', 7 from dual union all
      select 'C', 3 from dual ), 
  a(name) as (select 'Chris' from dual),
  b(type) as (select 'T800'  from dual),
  c(msg)  as (select 'Hello' from dual)
select case tablename
       when 'A' then (select name from a) 
       when 'B' then (select type from b)
       when 'C' then (select msg  from c) 
       end as value
  from tablelist
  where tableid = 7

Результат T800.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...