5

我正在尝试使用VIEWas在表中插入一行

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)
  );
4

3 回答 3

5

LANGUAGE_ID 可能是一个计算字段,或者在任何情况下,数据库都无法根据您需要的更改来推断要对视图下的表进行哪些更改。得看视图定义代码才知道。

于 2013-04-22T07:45:47.930 回答
2

我相信,为了使用视图进行插入或更新,视图中的所有表都必须通过主键连接。这是为了防止由于无法更新的视图导致的重复。

于 2016-10-21T18:27:48.620 回答
0

您是否有充分的理由不只是插入基础表?如果可以,只需直接插入表中即可避免这种复杂性。

你希望甲骨文做什么?您是否期望它将新记录插入到 中i18n_fields

如果您真的想这样做,您将需要创建一个 INSTEAD OF 触发器,因为当您运行插入语句时,Oracle 无法确定它应该插入哪个基础表。

于 2013-10-02T06:54:02.387 回答