Есть ли эквивалент команды iSeries OVRDBF в SQL?

У меня есть требование в среде SQL, чтобы при определенных обстоятельствах все ссылки на таблицу (или представление) A в процедуре фактически использовали таблицу (или представление) B. В iSeries я бы использовал команду OVRDBF для переопределения ссылок на таблицу A. с таблицей B: OVRDBF FILE(A) TOFILE(B). Что было бы эквивалентно этому в SQL? Есть ли один?

Моя цель - получить процедуру, которая не знает о переопределении. Мне не нужна условная логика внутри процедуры, которая направляет обработку в таблицу B при выполнении определенных условий. Видение:

В типичных обстоятельствах: просто вызовите процедуру

При определенных альтернативных обстоятельствах: выполните эквивалент OVRDBF, а затем вызовите процедуру.


person JBell6    schedule 04.02.2009    source источник


Ответы (2)


Не уверен, какая среда SQL поддерживает какие параметры:

Я считаю, что в DB2 есть оператор CREATE ALIAS. Напишите SQL по псевдониму.

Другая возможность: запускайте свои запросы по представлениям: там, где вы выполняете OVRDBF, отбрасывайте представление и перестраивайте его по нужной таблице.

person Community    schedule 04.02.2009
comment
Единственное, что мне не нравится в этом ответе, это то, что оба варианта предполагают временное переопределение ссылок для всех. Предполагая, что вы хотите, чтобы другие процессы работали с «обычными» объектами, возможно, было бы целесообразно использовать дополнительную схему или что-то в этом роде? - person JBell6; 05.02.2009

Как упоминает Эд, если вы можете изменить свою процедуру:

1) Создайте псевдоним для файла (A)

CREATE ALIAS XYZ FOR A

2) Измените процедуру, чтобы она ссылалась на XYZ вместо A.

3) При запуске процедуры использовать файл B выполнить

DROP ALIAS XYZ;
CREATE ALIAS XYZ FOR B;
CALL PROCEDURE;
DROP ALIAS XYZ;
CREATE ALIAS XYZ FOR A;

Если вы не можете изменить процедуру и вас не беспокоит одновременный доступ к таблице A, вы можете использовать:

RENAME TABLE A TO C;
CREATE ALIAS A FOR B;
CALL PROCEDURE;
DROP ALIAS A;
RENAME TABLE C TO A;
person Paul Morgan    schedule 05.02.2009
comment
В моем комментарии Эду я выразил беспокойство по поводу влияния на всех пользователей и процессов при использовании псевдонима. Разве все в конечном итоге не указывает на то, на что в данный момент указывает псевдоним? Есть ли способ сделать подход более конкретным для одного пользователя и/или процесса? - person JBell6; 06.02.2009
comment
@JBell6 JBell6 Вы должны иметь возможность создать псевдоним в QTEMP, чтобы он применялся только для одного пользователя и сеанса, что ближе к тому, как работает OVRDBF. - person Mike; 21.02.2020