我正在开发一个 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 但它不适用于网格,因为它使用返回子句执行更新(使用 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 以使网格的更新命令起作用?