我正在尝试使用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:
任何线索?
添加了视图定义:
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 :(得分:5)
LANGUAGE_ID可能是一个计算字段,或者在任何情况下,数据库都无法根据您所需的更改推断对视图下的表所做的更改。必须要查看视图定义代码才能知道。
答案 1 :(得分:2)
我认为,为了使用视图进行插入或更新,视图中的所有表必须通过主键连接。这是为了防止由无法更新的视图引起的重复。
答案 2 :(得分:0)
有没有一个很好的理由你不只是插入基础表?如果可以,只需直接插入表中,避免这种复杂情况。
您期望Oracle做什么?您是否希望它将新记录插入i18n_fields
?
如果你真的想这样做,你需要创建一个INSTEAD OF触发器,因为Oracle在运行你的insert语句时无法弄清楚应该插入哪些底层表。