-- 신상번호 업데이트
UPDATE EXAM200 T1 - [지원자마스터]
SET STD_PERS_NO = (SELECT MAX(D1.STD_PERS_NO) -- 신상번호
FROM INU_UNI.SREG100 D1 -- [학생신상]
WHERE D1.IDNO = T1.IDNO -- 주민번호
GROUP BY T1.IDNO
)
WHERE T1.COLL_YY = '2018' -- 모집년도
;
[EXAM200(지원자마스터)]에서 신상번호 를 업데으트 하고자 함.
<[SREG100(학생신상)]:암호화된테이블 IDNO(주민번호):암호화 칼럼>
암호화된 칼럼으로 인덱스 처리시 처리가 안 되는것으로 알고 있는데,
복호화 함수를 사용해서 변환해서 인덱스 걸어야 하는건지 ?
오라클 힌트나 다른 방법을 써서 처리할수는 없는건지?
[SREG100(학생신상)]:암호화 테이블이어서 임의의 인덱스 걸기가 곤란한 상황입니다.
답변 부탁드립니다.
★아래 여러분이 남겨주신 방법으로 다 해 보아도 여전히 속도가 느리네요,
★★[SREG100_DAMO(학생신상)] 테이블의 인덱스 정보 입니다 .
FUNCTION-BASED ..... 걸어서 어이 하면 될것 같은데... 해당의 내용은 처음사용하는것이라 도저희 모르겠습니다. 어떻게 하면 될까요? 도움 부탁드립니다.
UPDATE EXAM200 T1
SET STD_PERS_NO = (SELECT MAX(D1.STD_PERS_NO) -- 신상번호
FROM INU_UNI.SREG100_DAMO D1
WHERE INU_COM.F_DECRYPT(D1.SEC_IDNO) = T1.IDNO -- F_DECRYPT(주민등록번호 해제용.)
)
WHERE T1.COLL_YY = '2018' -- #모집년도
--입시종별구분[UA001]
AND T1.EXAM_CLSF_GBN IN ('01','03','04','05' )
AND SUBSTR(T1.PASS_GBN,1,1) IN ( '0', '1', '2', '3' ) -- 본합격 + 추가합격
AND T1.STUNO IS NOT NULL -- 학번부여된 학생
AND EXISTS (SELECT 1
FROM EXAM650 S1
WHERE S1.COLL_YY = T1.COLL_YY
AND S1.EXAM_CLSF_GBN = T1.EXAM_CLSF_GBN
AND S1.EXAM_NO = T1.EXAM_NO
AND S1.TUIT_STD_GBN = '2' -- [UA075]등록금구분<1:예치금,2:등록금>
AND S1.REG_GBN = '1' -- [UA076]등록구분<0:미등록,1:등록,2:환불>
);
INU_COM 에 있는 F_DECRYPT(주민등록번호 해제용) 을 FBI()
걸어서 처리하려면 어떻게 하면 될까요?
FBI는 처음 접하는 거라 도저히 모르겠습니다
답변 부탁드립니다.
제가 사용했었던 디아모의 경우 구조가 다음과 같았습니다.
- 암호화 테이블 : 테이블명_DAMO
- 복호화 뷰 : 테이블명
"테이블명" 을 사용해 Select 하고 Update 한다면?
이는 복호화된 뷰를 이용하고 계신 것입니다.
Update 는 Insted of trigger 를 이용할 것입니다.
동일한 구조로 사용하고 계시다면?
"테이블명" 뷰를 이용해 Update 하지 마시고 직접 테이블을 이용해 업데이트 해보세요.
UPDATE exam200_damo t1 -- [지원자마스터] SET std_pers_no = (SELECT MAX(d1.std_pers_no) -- 신상번호 FROM inu_uni.sreg100_damo d1 -- [학생신상] WHERE d1.idno_sec = t1.idno_sec -- 주민번호 -- GROUP BY t1.idno_sec -- 불필요함 ) WHERE t1.coll_yy = '2018' -- 모집년도 ;
UPDATE EXAM200 T1
SET STD_PERS_NO = (SELECT MAX(D1.STD_PERS_NO) -- 신상번호
FROM INU_UNI.SREG100_DAMO D1
WHERE INU_COM.F_DECRYPT(D1.SEC_IDNO) = T1.IDNO -- F_DECRYPT(주민등록번호 해제용.)
)
WHERE T1.COLL_YY = '2018' -- #모집년도
--입시종별구분[UA001]
AND T1.EXAM_CLSF_GBN IN ('01','03','04','05' )
AND SUBSTR(T1.PASS_GBN,1,1) IN ( '0', '1', '2', '3' ) -- 본합격 + 추가합격
AND T1.STUNO IS NOT NULL -- 학번부여된 학생
AND EXISTS (SELECT 1
FROM EXAM650 S1
WHERE S1.COLL_YY = T1.COLL_YY
AND S1.EXAM_CLSF_GBN = T1.EXAM_CLSF_GBN
AND S1.EXAM_NO = T1.EXAM_NO
AND S1.TUIT_STD_GBN = '2' -- [UA075]등록금구분<1:예치금,2:등록금>
AND S1.REG_GBN = '1' -- [UA076]등록구분<0:미등록,1:등록,2:환불>
);
와 같이 걸어서 했는데 계속 30분째 돌고 있네요.
INU_UNI.SREG100_DAMO 테이블의 SEC_IDNO 칼럼
EXAM200 테이블의 IDNO 칼럼 에 인덱스 거는 것 말고는 방법이 없을까요 ?
복호화해서 비교하지 마시고 --> 반대로 암호화해서 비교하세요.
인덱스가 없다면 느린것은 당연합니다. --> 없다면 만들어야 합니다.
암호화 제품을 사용했다면? --> 인덱스가 있을 것 같습니다.
필요 인덱스 --> sreg100_damo(sec_idno)
UPDATE exam200 t1 SET std_pers_no = (SELECT MAX(d1.std_pers_no) -- 신상번호 FROM inu_uni.sreg100_damo d1 -- WHERE inu_com.f_decrypt(d1.sec_idno) = t1.idno -- f_decrypt(주민등록번호 해제용.) WHERE d1.sec_idno = inu_com.f_encrypt(t1.idno) -- f_encrypt(주민등록번호 암호화.) ) WHERE ... ;