2016-12-20 2 views
1

여기에서 문제는 데이터베이스의 상위 관리 계층을 만드는 ArcGIS라는 응용 프로그램을 사용하고 사용자가 ArcGIS를 사용하여 데이터베이스에 새 객체를 만들 때 기본값을 추가한다는 것입니다. (0)을 기본 키에 추가하므로 두 번째 객체가 만들어지면 중복 값을 갖는 ORA 오류가 트리거됩니다.삽입 후 자동 증가 트리거

내 생각에 우리의 PK에 대한 자동 증가 트리거를 만드는 대신 AFTER INSERT를 사용했습니다. 나는이 특정 사건에 대한 온라인 어떤 예를 찾을 단순히 AFTER로 전 전환하는 것은 내가 뭘하려의

AFTER SQL 코드 NEW를 사용할 수 없다는 오류를 제공 할 수 없습니다 (다른 질문에서 가져온) :

CREATE OR REPLACE TRIGGER "IMOVEL_TRIGGER" 
    after insert on IMOVEL    
    for each row 
begin 
    select IMOVEL_SEQ.nextval into :NEW.GEOCODIGO_IMOVEL from dual; 
end; 

그것은 캔트 응용 프로그램이, 내가 필요한 것은이 시퀀스 .nextval에 PK를 업데이트 INSERT 트리거, 후에는하지 않는 것입니다 단순화 그것을

을 덮어 쓰기 때문에하는 BEFORE INSERT 트리거를 수 OLD 또는 : NEW를 사용하여 무엇을해야하는지 확신 할 수 없습니다. 만든 후에서만 실행 또는 갱신 트리거는

이것은 단지 당신 만 BEFORE 트리거에 :NEW 값을 변경할 수 있습니다이 문제

답변

1

를 해결하기 위해 지금 SQL을 배울 필요, 나를 위해 꽤 새로운 영역이다. AFTER 트리거에 도달하면 행이 이미 삽입되었으므로 열을 변경하기에는 너무 늦습니다.

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7004.htm는 말한다 : 전에서

제한이

BEFORE 트리거에는 다음과 같은 제한 사항이 적용됩니다 트리거 :

  • 당신이보기 나에 BEFORE 트리거를 지정할 수 없습니다 개체보기.

  • :NEW 값은 쓸 수 있지만 :OLD 값은 쓸 수 없습니다. 당신은보기 또는 개체보기에 AFTER 트리거를 지정할 수 없습니다

    • : AFTER에

    제한

    AFTER 트리거에는 다음과 같은 제한 사항이 적용됩니다 트리거합니다.

  • :OLD 또는 :NEW 값을 쓸 수 없습니다. 당신은 PK에 시퀀스 값을 할당하기위한 트리거 후를 사용하려는 이유

그것은 분명하지 않다. 일반적인 해결책은 BEFORE 트리거를 사용하는 것입니다.How to create id with AUTO_INCREMENT on Oracle?

+0

A는, 우리가 사용하고있는 응용 프로그램이 – Mojimi

+1

이는 ArcGIS에 대한 지원 문제 같은 소리 덮어 씁니다. 나는 ArcGIS를 모른다. 그래서 나는 그것을 도울 수 없다. 미안하다. –

+0

그래, 우리가 수동으로 오라클에서 아무것도하지 않아야하기 때문에 그들은 그것을 버그라고 생각하지 않는다. 나는 그것을 우회 할 방법이 있는지 궁금하다. – Mojimi

0
CREATE SEQUENCE IMOVEL_TRIGGER_SEQ START WITH 1; 

트리거 정의 :

예를 참조 트리거가 작동하지 않습니다하기 전에

CREATE OR REPLACE TRIGGER IMOVEL_TRIGGER 
BEFORE INSERT ON IMOVEL 
FOR EACH ROW 

BEGIN 
    SELECT IMOVEL_TRIGGER_SEQ.NEXTVAL 
    INTO :new.GEOCODIGO_IMOVEL 
    FROM dual; 
END;