본문 바로가기

프로그래밍/SQL

[오라클] 데이터 해시 방법 MySQL은 SH1('해싱값'), MD5('해싱값') 하여 편하게 사용하였으나, 오라클은 방법이 약간 다르다. 암호화 처리를 위한 패키지를 제공한다. DBMS_OBFUSCATION_TOOLKIT DBMS_CRYPTO 우선 SYSTEM 계정에서 DBMS_CRYPTO 사용할 유저에 대한 권한을 부여 해야한다. GRANT EXCUTE ON DBMS_CRYPTO to 유저명 부여받은 유저는 이제 해당 함수를 사용 할 수 있게 된다. ex) RAWTOHEX(DBMS_CRYPTO.HASH(to_clob(해싱값),2)) ex) DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW(해싱값),2) DBMS_CRYPTO.HASH 에서 첫번째 파라메터는 해싱할 원본 데이터 두번째 파라메터(숫자) 는 아래와.. 더보기
INSERT SELECT INSERT SELECT 이란? - 이미 존재하는 테이블에 SELECT 한 결과를 삽입할수 있다. 즉, TABLE1 이라는 곳에 TABLE2에 존재하는 기본키의 MAX값을 넣고자 한다면? (먼저, TABLE1 에는 ID 라는 기본키에 대한 애트리뷰트 하나만 존재가정) INSERT INTO `TABLE1` SELECT MAX(id) FROM `TABLE2` 이렇게 된다면, TABLE2에 존재하는 id 라는 값의 최대값을 구해, TABLE1 테이블에 삽입 되게 된다. TABLE2 의 id MAX 값이 60인 경우, TABLE1 에 60 이라는 값이 삽입된됩니다. 더보기
MULTI DELETE 최근 여러 테이블에 존재하는 동일한 필드명을 제거해야 하는 문제가 생겼다.. 그래서 단일로 쿼리를 나누어 뿌렸는데.... 코드 줄만 늘어날 뿐이었다.. A,B,C 테이블에서 A테이블을 기준으로, 특정값을 찾아 3개의 테이블 필드를 삭제해준다. 단일 DELETE DELETE FROM `A` WHERE id = 10 멀티 DELETE DELETE `A`, `B`, `C` FROM `A` left join `B` on A.id = B.id left join `C` on A.id = C.id WHERE A.id = 10 더보기
EXISTS, IN 문제. A 테이블, B 테이블 서로 ID 라는 필드가 존재하며, 해당 필드값은 A,B 양쪽모두 동일해야한다. 단, B테이블에서 제거되어 NULL 이 되었고, A테이블 내 ID필드값 은 여전히 존재한다. 게임으로 생각해보자면.. B 캐릭터 정보 테이블, A 캐릭터 인벤토리 아이템 테이블 캐릭터가 삭제되었으나, 인벤토리 소지템이 DB 에 여전히 쓰레기값으로 존재하고 있다. 이를 지워야한다. 처음 while 문으로 해당 값을 비교하여 일일이 지워줄까도 생각해봤다.. 하지만 이작업은 존나 느리다. 방대한 데이터베이스일수록.. 아래 작업을 이용하면 바로 단 한줄로 모든게 해결된다. EXISTS나 IN을 이용하면 편하게 구할 수 있습니다. SELECT ID FROM B WHERE NOT EXISTS (SELECT .. 더보기