2012-08-06 4 views
1

나는 내가 한 실험에 근거하여 대답이 '아니오'라고 생각하고 있습니다. 그러나 내가 제대로하고 있는지 확실하지 않았습니다.Oracle dbms_utilities.get_hash_value는 항상 다른 입력에 대해 고유 한 값을 반환합니까?

내 기능은 다음과 같습니다

select buyer_key, DBMS_UTILITY.get_hash_value(buyer_key||'|'||buyer_entity_id||'|'||buyer_io_id||'|'||buyer_line_item_id||'|'||is_billing_enabled||'|'||currency_id_b_trgt||'|'||currency_id_b_prfrd||'|'||ymdh_max,1,POWER(2,16)-1) as hashvalue from network_buyer_dim order by hashvalue asc; 

내가이 중복 hashkey 값으로 여러 행을 반환 실행합니다. 하지만 데이터베이스에 가서 행 (BTW, 각 buyer_key가 고유 한)을 보면 행에 동일한 값이 들어 있지 않음을 알 수 있습니다.

함수를 올바르게 호출하고 있습니까?

+0

문서에서 한 가지 말은 크기에 2의 제곱을 사용하는 것입니다 (2에서 2의 제곱을 사용하고 있음). http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_util.htm#autoId33 – Glenn

+0

실제 코드에서 마이너스 1을 사용하기 때문에 필자가 잘못 입력 했어야합니다. –

답변

3

분명히 NOT !! hash function

는 고정 길이의 작은 데이터 세트로, 가변 길이의 큰 데이터 세트라고 키 맵핑 알고리즘 또는 임의의 서브 루틴이다. 예를 들어, 가변 길이 인 사람의 이름이 인 경우 단일 정수로 해시 될 수 있습니다. 해시 함수에 의해 반환 된 값을 해시 값, 해시 코드, 해시 합계, 체크섬 또는 단순히 해시라고합니다.

이것은 입력 도메인 집합 크기가 출력 도메인 집합 크기보다 크면 복제본이됩니다.

이 외에도 최상의 해시 기능은 모든 가능한 입력 값에 대해 동일한 수의 중복 출력 값을 제공하는 경향이있는 것으로 간주됩니다.

+0

입력 도메인 크기가 출력 도메인 크기가 너무 큽니다. 이 질문을 게시하기 전에 나는 2^32-1을 사용해 보았지만 오라클 기능은이를 거부했습니다. –

관련 문제