2010-04-14 2 views
1

다른 업데이트/삽입/삭제 작업을 기록하기 위해 'updateinfo'테이블을 갖고 싶습니다. 오라클에서SQL 트리거를 사용하여 영향을받는 열의 행 번호를

나는이 작성했습니다 :

이 updateinfo 테이블 만들기 (rnumber 번호 (10), TABLENAME VARCHAR2 (100 BYTE), 액션 VARCHAR2 (100 BYTE), UPDATE_DATE 일)

DROP TRIGGER TRI_TABLE ;
(rnumber, TABLENAME
가 AFTER 삭제, 삽입 또는 UPDATE 데모 NEW OLD AS OLD EACH ROW FOR
새로운를 참조
ON

가 updateinfo으로 다음
삽입물을 삽입
경우를 BEGIN CREATE OR TRIGGER TRI_TABLE 교체 , action, update_date) 값 (rownum, 'demo', 'insert', sysdate);
elsif 업데이트
updateinfo (rnumber, tablename, action, update_date) 값 (rownum, 'demo', 'update', sysdate)에 삽입하십시오.
elsif 삭제 후
updateinfo (rnumber, tablename, action, update_date) 값 (rownum, 'demo', 'delete', sysdate)에 삽입하십시오.
end if; 다른 것들은 THEN
때 - -
- EXCEPTION
RAISE - 다음 에러를 기록하고 고려
다시 상승
END TRI_TABLE;

그러나 updateinfo를 검사 할 때 모든 rnumber 열은 0입니다. 올바른 행 번호를 검색하는 방법이 있습니까?

+0

데이터의 관계형 모델에는 "행 번호"와 같은 것이 없으며 단순히 개념이 적용되지 않습니다. –

답변

1

ROWNUM은 당신이 생각하는 것과 다릅니다. ROWNUM은 명령문 실행 중 컨텍스트 내에서만 의미가있는 카운터입니다 (즉, 첫 번째 결과 행은 항상 rownum = 1 등). 나는 행을 식별하는 ROWID를 찾고 있다고 생각합니다.

+0

다음 트리거에서 ROWID를 어떻게 사용할 수 있습니까? – Freeman

+0

ROWID가 행을 식별하지 않습니다. 고유 식별자는 행을 식별합니다. ROWID는 변경된 행의 물리적 위치에 대한 포인터이며 예를 들어 expdp impdp입니다. –

+0

Robert : 사실, 테이블의 기본 키를 사용하여 ROWID를 사용하는 것이 바람직합니다 –

관련 문제