2014-01-09 2 views
0

Как создать связанную таблицу из представления Oracle? Я могу создать связанную таблицу из таблицы Oracle кода нижеH2: Как создать связанную таблицу из представления Oracle?

--TEST is a table in Oracle 
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM TEST)'); 

Но когда я изменить таблицу TEST для просмотра VIEW_TEST, как показано ниже,

--VIEW_TEST is an view in Oracle 
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM VIEW_TEST)'); 

исключения выбросит: ORA-00942: таблица или представление делает не существует.

Итак, как создать связанную таблицу из представления Oracle?

обновление:

Если изменить вид на материализованные представления, он также работает.

--MV_TEST is a materialized view in Oracle 
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM MV_TEST)'); 
+0

Ошибка довольно прямая. Это означает, что либо представление не существует, либо пользователь 'sa' не имеет права (привилегий) на него. Попробуйте добавить гранты к этому представлению пользователю и сообщите нам –

+0

Собственно, это не проблема. Я считаю, что это тоже нормально, если представление представляет собой материализованное представление. См. Обновление. – Garnett

ответ

1

Ну, документация H2 о Связанной таблице недостаточно ясна для просмотра. Я предполагаю, что, поскольку он работал с материализованным представлением, он работает только с физическими объектами. Просмотр оракула не является физическим объектом, это ресурс ссылки на запрос в базе данных.

Как Docs утверждает случаи, которые LINKED TABLE не будут работать

Следующие не поддерживаются, поскольку они могут привести в тупик: создание связанной таблицы в той же базе данных, а также создание связанной таблицы в другую используя режим сервера, если другая база данных открыта на том же сервере (вместо этого используется встроенный режим).

Типы данных, которые не поддерживаются в H2, также не поддерживаются для связанных таблиц, например, неподписанных типов данных, если значение находится вне диапазона подписанного типа. В таких случаях столбцы должны быть приведены к поддерживаемому типу.

Таким образом, неясно, принимает ли они виды или нет.

Лучшее, что вы можете сделать, это попробовать команду FORCE как documentation states, что она будет создавать связанную таблицу, даже если таблица не существует. Так оно и будет:

CREATE FORCE LINKED 
    TABLE LINK ('', 
       'jdbc:oracle:thin:@url:1521:se', 
       'sa', 
       'sa', 
       '(SELECT * FROM VIEW_TEST)'); 
+0

@a_horse_with_no_name спасибо за исправления :) –

+0

Да, мы должны поместить представление в круглые скобки, например '' (VIEW_TEST) '', это сработает. Спасибо за Ваш ответ. – Garnett

Смежные вопросы