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
);