Plsql 使用游标更新表,但也更新另一个表中的记录

Plsql 使用游标更新表,但也更新另一个表中的记录,plsql,cursor,Plsql,Cursor,我正在用新ID更新ID,但是我需要为表A中的主记录和表B中的从属记录保留相同的ID 被注释括起来的部分是我无法理解的。我需要更新表B中与我正在查找的表A的当前记录具有相同ID的所有记录 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

我正在用新ID更新ID,但是我需要为表A中的主记录和表B中的从属记录保留相同的ID

被注释括起来的部分是我无法理解的。我需要更新表B中与我正在查找的表A的当前记录具有相同ID的所有记录

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

基于将当前数据增加+1的过程不会导致数据本身出现问题的假设,我将创建一个转换表。 Column1将是旧ID,Column2将是新ID。 这两个表将通过相同的更新运行。 这还可以让您对流程进行审核,以防出现问题

差不多

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)

这不是Oracle PLSQL代码。博士后?MySQL?