All thing of the world!

Oracle ORA_HASH 설명 : 오라클 함수 본문

IT/Oracle DBMS

Oracle ORA_HASH 설명 : 오라클 함수

WorldSeeker 2021. 3. 30. 10:39

1. 함수의 목적

    Oracle ORA_HASH는 파라미터로 들어온 표현식에 대한 오라클 해시(hash)로직값을 계산하는 함수이다.
    본 함수는 오라클 해쉬함수의 랜덤한 값을 이용하여 다양하게 활용가능하다.
   
     
꽤 유용한 함수이나 존재를 몰라 사용하지 않는 것 같다. 적극 사용을 권장한다.

2. 샘플을 통한 개념 퀵뷰

EMPLOYEES의 EMPLOYEE_ID를 가지고 max_bucket 2, seed_value 5로 ORA_HASH함수로 값을 만들어 ORA_HASH컬럼으로 출력한다.

SELECT EMPLOYEE_ID, ORA_HASH(EMPLOYEE_ID, 2, 5) "ORA_HASH'
FROM EMPLOYEES
ORDER BY 1
;

max_buket이 2라서 출력되어 나온 값이 0,1,2로 출력되며, 최대 2를 넘지 않는다.

DISTINCT로 확인하면 아래와 같다.

SELECT DISTINCT ORA_HASH
FROM
              (SELECT EMPLOYEE_ID, ORA_HASH(EMPLOYEE_ID, 2, 5) "ORA_HASH"
              FROM EMPLOYEES)
ORDER BY 1
;

3. 사용방법

4. 함수 PARAMETER 설명 

[expr]
expr 인수는 해시 값을 계산할 컬럼을 정의하는 입력 파라미터이다.
expr이 나타내는 데이터 길이에는 제한이 없으나, LONG 또는 LOB 유형은 불가능하다.
NESTED 테이블 유형이외 사용자 정의 오브젝트 유형은 불가능하다.

[max_bucket]
optional 파라미터로, max_bucket 인수는 해시 함수가 반환할 최대 버킷 값을 정의한다.
0에서 4294967295 사이의 값을 지정할 수 있다. 기본값은 최대값인 4294967295이다.
쉽게 말하면 출력되서 나오는 값의 종류를 지정한다고 보면 된다.

[seed_value]
optional 파라미터로, seed_value 인수를 사용하면 Oracle이 동일한 데이터 세트에 대해 여러가지 다양한 결과를 생성할 수 있다.
expr과 seed_value의 조합에 해시 함수를 적용하며, 0에서 4294967295 사이의 값을 지정할 수 있다.
기본값은 0이다.


5. 다양한 샘플표현

example1) "2. 샘플을 통한 개념 퀵뷰"의 다른 파라미터를 그대로 두고, seed_value만 6으로 변경하면 리턴되는 BUKET값이 달라진다.

SELECT EMPLOYEE_ID, ORA_HASH(EMPLOYEE_ID, 2, 6 ) "ORA_HASH"
FROM EMPLOYEES
ORDER BY 1
;

example2) sh.sales 테이블에 cust_id와 prod_id의 각 조합에 대한 해시 값을 생성하고 해시값을 최대 100 개의 버킷으로 나누고 첫 번째 버킷(버킷 0)에 amount_sold 값의 합계를 반환한다.
세 번째 인수(5)는 해시 함수의 시드값을 제공하며, 시드 값을 변경하면 동일한 쿼리에 대해 다른 해시 결과를 얻을 수 있다.


SELECT SUM(amount_sold)
FROM sales
WHERE ORA_HASH(CONCAT(cust_id, prod_id), 99, 5) = 0;

SUM(AMOUNT_SOLD)
----------------
989431.14

 

 

Comments