DB/Oracle
[oracle] 데이터 업데이트 롤백 시나리오
skydev
2022. 1. 7. 12:36
-- 테이블 데이터 백업
CREATE TABLE t_user_back_20220107 AS SELECT * FROM t_user WHERE COMPANYCODE = '회사코드';
-- 테이블 데이터 원복
MERGE INTO T_USER tu USING T_USER_BACK_20220107 tub ON (tu.userNo=tub.userNo)
WHEN MATCHED THEN UPDATE SET tu.loginId=tub.loginId, tu.authKey=tub.authKey, tu.userKey=tub.authKey;
-- loginId, authKey, userKey 기존 5자리에서 8자리로 업데이트
-- 기존 5자리가 모두 숫자로 되어 있는 경우만 업데이트
UPDATE t_user SET
loginId = '000' || loginId
, authKey = CASE WHEN LENGTH(authKey) = 5 THEN '000' || authKey ELSE authKey END
, userKey = CASE WHEN LENGTH(userKey) = 5 THEN '000' || userKey ELSE userKey END
WHERE COMPANYCODE = '회사코드' AND REGEXP_INSTR(LOGINID ,'[^0-9]') = 0 AND LENGTH(loginId) = 5
-- 이미 8자리 존재할때 제외
AND ('000' || loginId) NOT IN (
SELECT loginId FROM (
SELECT userNo, CASE WHEN LENGTH(loginId) = 5 THEN '000' || loginId ELSE loginId END AS loginId FROM t_user WHERE COMPANYCODE = '회사코드' AND REGEXP_INSTR(LOGINID ,'[^0-9]') = 0
) t
GROUP BY loginId
HAVING COUNT(*) > 1
);