3

私は、TcxGrid を使用してビュー VM_TEST からデータを操作し、Oracle DB の INSTEAD OF UPDATE トリガーを使用してそれを更新する、Delphi アプリケーションに取り組んでいます。

これはビューのコードです:

create or replace view VM_TEST 
AS   
select
  t_merce_ass.id_merce,
  t_merce_ass.id_posizione,
  t_merce_ass.prezzo,
  t_tipo_merci.nome
from
  t_merce_ass,
  t_tipo_merci
where
  t_tipo_merci.id_merce = t_merce_ass.id_merce

そして、これは代わりのトリガーです:

create or replace trigger TG_UPDATE_VM_TEST
instead of update on VM_TEST
for each row
begin   
  update
    t_tipo_merci
  set
    t_tipo_merci.nome = :NEW.nome
  where
    t_tipo_merci.id_merce = :OLD.id_merce;
  update
    t_merce_ass
  set
    t_merce_ass.prezzo = :NEW.prezzo
  where
    t_merce_ass.id_merce = :OLD.id_merce
    and
    t_merce_ass.id_posizione = :OLD.id_posizione;
end TG_UPDATE_VM_TEST;

更新は今、sqlplus を介して正常に動作していますが、グリッドでは動作していません。これは、return 句を使用して更新を実行するためです (Oracle Monitor でログに記録されます)。

00:31.996   00:00.001   Query.Execute update VM_TEST  set PREZZO = :v3  where rowid = :doa__rowid  returning rowid into :doa__rowid  

ORA-22816例外が発生します ( Unsupported feature with RETURNING clause)。

問題を解決するには?グリッドの更新コマンドを機能させるために、このタイプのトリガーで行 ID を返す方法はありますか?

4

1 に答える 1

1

Direct Oracle Access フォーラム(ORA-22816 を検索) によると、おそらく UniqueFields プロパティを設定する必要があります。

于 2013-02-28T08:02:44.040 に答える