我工作的一个Delphi应用程序,使用TcxGrid从视图VM_TEST操作数据和INSTEAD OF UPDATE触发器上的Oracle数据库进行更新。Oracle触发器,而不是更新和ORA-22816错误
这是视图代码:
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以使网格的更新命令起作用?
你从一个视图返回的ROWID? – tbone 2013-02-27 13:47:01
你使用什么数据库组件? – jachguate 2013-02-27 15:26:49
我们正在使用TOracleDataSet。我猜想组件在更新后请求rowid以在内部表中查找修改后的记录。 – shaman74 2013-02-27 15:58:13