Подвыбор оракула с динамической таблицей и столбцом - PullRequest
0 голосов
/ 21 мая 2009

Я бы хотел запустить следующий SQL-запрос:

SELECT ID,<br> NUMERATOR,<br> (SELECT m.COLUMNNAME FROM m.TABLENAME p WHERE p.numerator = m.numerator<br> ) VALUE,<br> TABLENAME,<br> COLUMNNAME<br> FROM MainTable m;

в текущем состоянии он вообще не работает, потому что oracle вообще не распознает m.TABLENAME. Можно ли как-то так поступить? То же самое для COLUMNNAME - даже если я временно заменю таблицу на какую-то "настоящую" таблицу, которую я получил, в текущем синтаксисе она просто выводит значение внутри m.COLUMNNAME вместо значения внутри p в столбце, имя m.COLUMNNAME.
Надеюсь, мне удалось прояснить ситуацию.

Полагаю, что другой мой путь - создать процедуру, которая перебирает результаты первого запроса, и выполняет еще один выбор для каждого из них, чтобы заполнить столбец VALUE. Это лучшее, на что я могу надеяться?

Ответы [ 3 ]

2 голосов
/ 21 мая 2009

Вам придется сделать это с динамическим SQL , т. Е. PL / SQL, или динамически создать оператор SQL в вашем приложении. Как вы заметили, Oracle не поддерживает такое поведение.

1 голос
/ 22 мая 2009

Если есть только несколько возможных имен таблиц / имен столбцов, вы можете сделать что-то вроде

SELECT ID,
      NUMERATOR,
      case 
        when m.table_name = 'A' and m.column_name = 'B' then
          (SELECT b FROM a WHERE a.numerator = m.numerator)
        when ....
      end VALUE,
      TABLENAME,
      COLUMNNAME
FROM MainTable m;

Что-нибудь больше, чем 3 или 4 сделало бы это довольно уродливым, хотя

1 голос
/ 21 мая 2009

Вероятно, проще использовать растворы клец.

Но это не совсем невозможно сделать, вы можете использовать dbms_xmlgen.getxml(' '), использование dbms_xmlgen.getxml(' ') позволяет создавать динамические операторы SQL внутри оператора SQL.

Не ожидайте хорошей производительности !!

См. Например: Определение таблицы с максимальным количеством строк в Oracle

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