2010-03-17 3 views
0

나는 새로운 ID가 ID를 통해 업데이트에서 레코드를 업데이트,하지만 난 테이블 B의 같은 테이블 A의 마스터 레코드에 대한 ID와 그 부양 가족을 유지하기 위해 필요업데이트 테이블 커서를 사용뿐만 아니라 다른 테이블

주석으로 묶은 덩어리는 내가 알 수없는 부분이다. 나는 테이블 A에 대한 찾고 있어요 현재 레코드와 같은 ID를 공유하는 테이블 B의 모든 레코드를 업데이트 할 필요가 가정을 바탕으로

DECLARE CURSOR_A CURSOR FOR 
SELECT * FROM TABLE_A 
FOR UPDATE 

OPEN CURSOR_A 
FETCH NEXT FROM CURSOR_A 

WHILE @@FETCH_STATUS = 0 
BEGIN 

BEGIN TRANSACTION 
    UPDATE KEYMASTERTABLE 
    SET RUNNING_NUMBER=RUNNING_NUMBER+1 
    WHERE TRANSACTION_TYPE='TABLE_A_NEXT_ID' 

-- FOLLOWING CHUNK IS WRONG!!! 
    UPDATE TABLE_B 
    SET TABLE_B_ID=(SELECT RUNNING_NUMBER 
    FROM KEYMASTERTABLE WHERE TRANSACTION_TYPE='TABLE_A_NEXT_ID') 
    WHERE TABLE_B_ID = (SELECT TABLE_A_ID 
    FROM CURRENT OF CURSOR A) 
-- END OF BAD CHUNK 

    UPDATE TABLE_A 
    SET TABLE_A_ID=(SELECT RUNNING_NUMBER 
    FROM KEYMASTERTABLE WHERE TRANSACTION_TYPE='TABLE_A_NEXT_ID') 
    WHERE CURRENT OF CURSOR_A 
COMMIT 
    FETCH NEXT FROM CURSOR_A 
END 

CLOSE CURSOR_A 
DEALLOCATE CURSOR_A 
GO 
+2

같은

뭔가. 포스트그레스? MySQL은? –

답변

0

그 하나 아무튼에 의해 현재의 데이터를 증가의 과정 데이터 그 자체에 문제를 일으키지 않으면 번역 테이블을 만들 것입니다. Column1은 이전 ID이고 Column2는 새 ID입니다. 두 테이블 모두 동일한 업데이트를 통해 실행됩니다. 이것은 또한 문제가 발생할 경우를 대비해 프로세스를 감사합니다. 오라클 PLSQL 코드가 아닙니다

Update table TargetA a 
    set a.id =(select t.column2 from tranlation_table t where t.column1 = a.id); 

Update table TargetB b 
    set b.id =(select t.column2 from tranlation_table t where t.column1 = b.id)