2011-02-08 6 views
-1

매시간 데이터로 채워진 'Source'테이블을 내부 프로 시저로 가정합니다. 프로가 실행될 때마다 새로운 테이블 'NEW'를 채우는 프로 시저를 실행하고 싶습니다. 프로 시저가 실행될 때마다 항상 새 테이블의 원본 행이 있어야합니다. 새 테이블은 항상 이미 삽입 된 데이터를 항상 유지해야합니다. 내 말은 프로세스가 삽입 될 때마다 솔루션을 의미합니다 ... 새로운 다음 임시 테이블에 고유 값을 삽입하고, NEW를 삭제하고, 임시 직원 등에서 삽입하는 것은 도움이되지 않습니다.)plsql- 다른 테이블의 데이터로부터 테이블을 농축

답변

1

내가 원하는대로 맞으면 새로운 레코드 만 SOURCE에서 NEW로 삽입하면되는 방법이 많습니다. 다음 중 일부는 다음과 같습니다.

1) NEW에 자동으로 삽입되는 SOURCE에 트리거를 작성하면 걱정할 필요가 없습니다.

2) SOURCE에서 새 행만 선택하려면이 명령문을 사용하십시오. 이 경우 두 테이블에서 동일한 기본 키가 있다고 가정합니다.

INSERT INTO NEW 
SELECT * FROM SOURCE s1 WHERE NOT EXISTS (SELECT 1 FROM NEW n1 WHERE n1.key=s1.key) 

3) 사용은보기 & MV 로그 기능을 구체화. 이것은 다소 복잡하기 때문에 오라클 문서 나 다른 리소스를 살펴 보는 것이 좋습니다.

4) SOURCE에 삽입하는 절차를 변경하여 NEW에 삽입하십시오.

물론 SOURCE에서 가능한 업데이트가있을 경우 수행 할 작업을 파악해야합니다. 원하는 경우 이러한 방법을 자세히 설명 할 수 있습니다.

0

투표 한 dsmoljanovic의 해결책. 절차 적 솔루션 (타임 스탬프 또는 시퀀스 포함)이 적합하지 않은 한 가지 이유는 커밋되지 않은 데이터입니다.

At 02:55:00: 75 rows are added to SOURCE and are timestamped '02:55:00' 
At 02:55:30: The 75 row insert is committed 
At 02:59:55: 100 rows are added to SOURCE and are timestamped '02:59:55' 
At 03:00:00: Your process kicks off and selects from source 
At 03:00:20: The 100 row insert is committed 

이 과정은 그 100 개의 행을 볼 수 없습니다 (그들은 최선을 다하고하지 않기 때문에)하고 03 후 소인이 행을 보이는 경우 다음에 실행될 때, 그것은 그들을 놓칠 수 :

예를 가지고 00 : 00.

관련 문제