ORA_HASH
निश्चित रूप से डेटा प्रकारों के लिए नियतात्मक है जिनका उपयोग विभाजन के लिए किया जा सकता है, जैसे कि NUMBER, VARCHAR, DATE, आदि।
लेकिन ORA_HASH
नहीं है कम से कम कुछ अन्य डेटा प्रकारों के लिए नियतात्मक, जैसे कि CLOB।
मेरा उत्तर इस
पर आधारित है ORA_HASH
. के बारे में जोनाथन लुईस लेख ।
जोनाथन लुईस स्पष्ट रूप से यह नहीं कहते हैं कि वे नियतात्मक हैं, लेकिन उन्होंने उल्लेख किया है कि ORA_HASH
"एक शून्य बीज के साथ आंतरिक रूप से उपयोग किया जाने वाला फ़ंक्शन प्रतीत होता है - यह निर्धारित करने के लिए कि हैश विभाजित तालिका में एक पंक्ति किस विभाजन से संबंधित है"। और यदि इसका उपयोग हैश विभाजन के लिए किया जाता है तो यह नियतात्मक होना चाहिए, अन्यथा विभाजन-वार जॉइन काम नहीं करेगा।
यह दिखाने के लिए कि ORA_HASH
कुछ डेटा प्रकारों के लिए गैर-नियतात्मक हो सकता है, नीचे दी गई क्वेरी चलाएँ। यह उसी लेख की एक टिप्पणी से है:
with src as (select to_clob('42') val from dual connect by level<=5)
select val,ora_hash(val,7) from src order by 2;
हैरानी की बात यह है कि dbms_sqlhash.gethash
. के साथ भी यही समस्या होती है ।