2013-04-22 3 views
2

Я пытаюсь вставить строку в таблицу, используя VIEW вВиртуальный столбец здесь не допускается

INSERT INTO FIELDI18N(LANGUAGE_ID) VALUES (1); 

, но это дает мне следующую ошибку:

Error starting at line 5 in command: 
INSERT INTO FIELDI18N(LANGUAGE_ID) VALUES (1) 
Error at Command Line:5 Column:22 
Error report: 
SQL Error: ORA-01733: virtual column not allowed here 
01733. 00000 - "virtual column not allowed here" 
*Cause:  
*Action: 

Любой Clue?

Добавлен View Definition:

CREATE OR REPLACE VIEW FIELDI18N("FIELDID", "NAME", "TYPE", "DESCRIPTION", "LANGUAGE_ID") 
AS 
    (SELECT field.fieldid, 
    field.type, 
    NVL(i18n.name, field.name) name, 
    NVL(i18n.description, field.description) description, 
    i18n.language_id 
    FROM fields field 
    JOIN i18n_fields i18n 
    ON (field.fieldid = i18n.fieldid) 
); 
+0

Пожалуйста, разместите инструкции представления вида и таблицы для объектов, на которые это влияет. –

+0

Вид с соединением не обновляется, если вы не создаете триггер 'INSTEAD OF'. Подробнее см. В руководстве: http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_8004.htm#SQLRF54782 и здесь http://docs.oracle.com/cd/E11882_01/server.112 /e25494/views.htm#ADMIN11782 –

ответ

5

LANGUAGE_ID, вероятно, вычисляемое поле, или в любом случае база данных не может сделать вывод, что изменения должны быть внесены в таблицы, лежащие в основе зрения на основе изменения вы требующих , Должен видеть код определения вида, чтобы знать.

0

Есть ли веская причина, по которой вы не просто вставляете в базовую таблицу? Если вы можете, просто вставьте в таблицу напрямую и избегите этого осложнения.

Что вы ожидаете от Oracle? Ожидаете ли вы вставить новую запись в i18n_fields?

Если вы действительно хотите это сделать, вам нужно создать триггер INSTEAD OF, потому что Oracle не может определить, какую из базовых таблиц он должен вставить, когда вы запустите свой оператор insert.

+0

Да, он должен быть вставлен через представления. –

1

Я считаю, что для того, чтобы сделать вставку или обновление, используя представление, что все таблицы в представлении должны быть соединены с помощью первичного ключа. Это делается для предотвращения дублирования, вызванного представлением, которое невозможно обновить.

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