Запрос к базе данных Oracle с именами динамических таблиц - PullRequest
0 голосов
/ 05 февраля 2019

Я застрял в каком-то плохом дизайне базы данных, где мне приходится запрашивать таблицы с именами по дате.

Следующий запрос работает, когда имена таблиц жестко закодированы с соответствующими датами.

SELECT
  ajob.ORDER_ID
     , ajob.JOB_NAME
     , abim.SERVICE_ID
     , shist.SERVICE_NAME
  FROM
    obscuredschema.A190129001_AJOB               ajob --hardcoded YYMMDD table name
    INNER JOIN obscuredschema.A190129001_ABIMSVC abim --hardcoded YYMMDD table name
               ON (ajob.ORDER_ID = abim.ORDER_ID)
    INNER JOIN obscuredschema.SERVICE_HIST       shist
               ON (abim.SERVICE_ID = shist.SERVICE_KEY)
WHERE shist.SERVICE_NAME LIKE '%BIM'
  AND shist.BIM_AUTH_ID > 0
;

Отмечая два жестко закодированных имени таблицы (вместе с псевдонимами)

Как мне выполнить этот же запрос, используя динамические имена таблиц? (есть два)

код для динамической даты: TO_CHAR(trunc(sysdate - 7), 'YYMMDD')

Если бы первое имя таблицы было строкой, вот как я бы ее построил: 'A'||TO_CHAR(trunc(sysdate - 7), 'YYMMDD')||'001_AJOB'

Если бы второе имя таблицы было строкой, воткак бы я его построил: 'A'||TO_CHAR(trunc(sysdate - 7), 'YYMMDD')||'001_ABIMSVC'

1 Ответ

0 голосов
/ 05 февраля 2019

Не думаю, что вы можете написать простой SQL-запрос с динамическими именами таблиц.

Вы можете написать процедуру PL / SQL, которая использует execute immediate и возвращает курсор или что-то еще; кто-то спросил об этом только вчера .Если вы просто пытаетесь написать этот запрос для взаимодействия с некоторыми данными, это может быть вашим лучшим выбором.

Кроме того, вы можете изменить это, превратив процедуру PL / SQL в конвейерную функцию ., а затем вы можете вызвать его из запроса SQL, используя TABLE().

Если бы это был я, я бы подумал о создании синонима (или стандартного представления, которое просто выбирает из динамически именованного-tables) и планирование задания для его повторного создания при каждом создании новых таблиц.Это может быть проще, чем работа с конвейерными функциями.

...