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 に答える
0

基になるテーブルに挿入するだけではない非常に正当な理由はありますか? 可能であれば、テーブルに直接挿入して、この複雑さを回避してください。

オラクルに何を期待していますか?に新しいレコードを挿入することを期待していますi18n_fieldsか?

本当にこのようにしたい場合は、 INSTEAD OF トリガーを作成する必要があります。これは、挿入ステートメントを実行するときに、挿入する必要がある基になるテーブルを Oracle が判断できないためです。

于 2013-10-02T06:54:02.387 に答える