안녕하세요,
어쩌다 정보계 DBA를 맡게 되어 헤메고 있는 1인입니다.
야간에 백업 및 적재 배치를 돌리고 있는데 이게 가끔 Parallel 오류를 내면서
적재가 안되는 상황이 발생해서
해당 오류가 발생하는 주 테이블의 TMP 테이블을 만들어서 데이터 적재 전에 두 테이블을 Switch 하는 프로시져를 만들려고 하는데요.
대상테이블 과 TMP 테이블명은 따로 정보성 테이블에서 관리합니다.
TMP테이블명과 동일한 테이블이 존재하는지 확인하고(이건 가능)
대상테이블과 TMP 테이블의 구조가 같은지(컬럼명, data type)를 비교한 후에
테이블 스위칭 작업을 하려고 합니다.
밑줄친 부분을 어떻게 체크할 수 있을지 고민중인데 잘 떠오르지 않아 이렇게 질문글 남깁니다.
/* UNION ALL 이용 샘플 FULL OUTER JOIN 이용하셔도 됩니다. CTAS 이용하시면 간단히 복사할수 있습니다. */ SELECT T.* FROM ( SELECT COLUMN_NAME , DATA_TYPE , DATA_LENGTH , DATA_PRECISION , DATA_SCALE FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'A' UNION ALL SELECT COLUMN_NAME , DATA_TYPE , DATA_LENGTH , DATA_PRECISION , DATA_SCALE FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'B' ) T GROUP BY COLUMN_NAME , DATA_TYPE , DATA_LENGTH , DATA_PRECISION , DATA_SCALE HAVING COUNT(*) = 1