sql >> Databasteknik >  >> RDS >> Oracle

Hur man använder ora_hash på en kolumn med datatypen xmltype

Som du redan vet, ora_hash accepterar inte long eller LOB-värden. Du kan skicka in de första 4k eller 32k av XML-innehållet, men om du behöver se till att hela XML-dokumentet inte har ändrats räcker det inte. Och som Ben nämnde, ora_hash har maximalt 4294967295 hinkar, så kollisioner är snarare mer sannolika än med SHA-1 eller MD5. Som dokumentationen säger, ora_hash "är användbart för operationer som att analysera en delmängd av data och generera ett slumpmässigt urval".

Du kan använda dbms_crypto paket för att hasha hela XMLType-värdet, som en CLOB extraherad med getClobVal funktion, med en omslagsfunktion för att göra det enklare att använda:

create or replace function my_hash(xml xmltype) return raw is
begin
  return dbms_crypto.hash(src=>xml.getclobval(), typ=>dbms_crypto.hash_sh1);
end;
/

Du kan sedan skicka in din XMLType, som ett värde eller som en kolumn som en del av ett urval:

select my_hash(xml) from t42;

MY_HASH(XML)                                 
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289     



  1. Vilken joinsyntax är bättre?

  2. Uppskatta datakomprimeringsbesparingar i SQL Server

  3. Huawei GaussDB

  4. Dynamisk SQL (passerar tabellnamnet som parameter)