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