Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle erhält den Prüfsummenwert für einen Datenblock, der durch eine Auswahlklausel definiert ist

Sie können DBMS_SQLHASH.GETHASH verwenden dafür. Die Abfrageergebnisse müssen geordnet sein und dürfen keine LOBs enthalten, sonst sind die Ergebnisse nicht deterministisch.

select dbms_sqlhash.gethash(q'[select * from some_table order by 1,2]', digest_type => 1)
from dual;

Wobei digest_type 1 =HASH_MD4, 2 =HASH_MD5, 3 =HASH_SH1.

Dieses Paket wird standardmäßig niemandem gewährt. Um es zu verwenden, brauchen Sie jemanden, der sich als SYS anmeldet und Folgendes ausführt:

SQL> grant execute on dbms_sqlhash to <your_user>;

Die Abfrageergebnisse müssen sortiert werden, wie in "Bug 17082212:DBMS_SQLHASH DIFFERENT RESULTS FROM DIFFERENT ACCESS PATH" beschrieben.

Ich bin mir nicht sicher, warum LOBs nicht funktionieren, aber es könnte mit der Art und Weise zusammenhängen, wie die Funktion ORA_HASH funktioniert funktioniert nicht gut mit LOBs. Dieser Artikel von Jonathan Lewis enthält einige Beispiele für ORA_HASH Rückgabe unterschiedlicher Ergebnisse für dieselben LOB-Daten. Und neuere Versionen der SQL Language Reference warnen, dass ORA_HASH unterstützt keine LOBs.