我正在开发一个Delphi应用程序,使用TcxGrid处理来自视图VM_TEST的数据和Oracle DB上的INSTEAD OF UPDATE触发器来更新它。
这是视图的代码:
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但它不能与网格一起使用,因为它使用returns子句执行更新(使用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
)。
如何解决问题?有没有办法在这种类型的触发器中返回rowid以使网格的更新命令有效?