sql >> Database >  >> RDS >> Oracle

Oracle krijgt checksum-waarde voor een gegevensblok gedefinieerd door een select-clausule

U kunt DBMS_SQLHASH.GETHASH . gebruiken voor deze. De zoekopdrachtresultaten moeten geordend zijn en mogen geen LOB's bevatten, anders zijn de resultaten niet bepalend.

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

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

Dat pakket wordt standaard aan niemand toegekend. Om het te gebruiken, moet je iemand hebben die inlogt als SYS en dit uitvoert:

SQL> grant execute on dbms_sqlhash to <your_user>;

De queryresultaten moeten worden geordend, zoals beschreven in "Bug 17082212:DBMS_SQLHASH VERSCHILLENDE RESULTATEN VAN VERSCHILLEND TOEGANGSPAD".

Ik weet niet zeker waarom LOB's niet werken, maar het kan te maken hebben met de manier waarop de functie ORA_HASH werkt niet goed met LOB's. Dit Jonathan Lewis-artikel bevat enkele voorbeelden van ORA_HASH het retourneren van verschillende resultaten voor dezelfde LOB-gegevens. En recente versies van de SQL Language Reference waarschuwen dat ORA_HASH ondersteunt geen LOB's.




  1. Wat is een vergelijkingsoperator?

  2. MySQL-aantal items binnen in clausule

  3. SQL Server 2016

  4. Hoe weet ik of ik niet-toegewezen werk heb in een Oracle-transactie?