2013-02-27 2 views
3

나는 TcxGrid를 사용하여 Oracle VM에서 뷰 VM_TEST 및 INSTEAD OF UPDATE 트리거의 데이터를 조작하여 델파이 애플리케이션을 업데이트하고 있습니다. 대신 오라클 트리거 및 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로 기록 된) 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).

문제를 해결하는 방법? 이 유형의 트리거에서 rowid를 반환하여 그리드의 업데이트 명령을 작동시키는 방법이 있습니까?

+0

보기에서 ROWID가 반환됩니다. – tbone

+0

어떤 데이터베이스 구성 요소를 사용합니까? – jachguate

+0

우리는 TOracleDataSet을 사용하고 있습니다. 구성 요소가 내부 테이블의 수정 된 레코드를 찾기 위해 업데이트 후에 rowid를 요청한다고 가정합니다. – shaman74

답변

1

Direct Oracle Access forum (ORA-22816 검색)에 따르면 UniqueFields 속성을 설정해야합니다.

+0

이것은 나를 위해 위대한 작품, 감사합니다 !!! – shaman74