Paketet DBMS_CRYPTO är det korrekta paketet för att generera hash. Det är inte beviljat till PUBLIC som standard, du måste bevilja det specifikt (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1
).
Resultatet av denna funktion är av datatypen RAW
. Du kan lagra den i en RAW
kolumn eller konvertera den till VARCHAR2
med RAWTOHEX
eller UTL_ENCODE.BASE64_ENCODE
funktioner.
HASH
Funktionen är överbelastad för att acceptera tre datatyper som indata:RAW
, CLOB
och BLOB
. På grund av reglerna för implicit konvertering, om du använder en VARCHAR2
som indata kommer Oracle att försöka konvertera den till RAW
och kommer sannolikt att misslyckas eftersom denna omvandling bara fungerar med hexadecimala strängar.
Om du använder VARCHAR2
sedan måste du konvertera indata till en binär datatyp eller en CLOB
, till exempel :
DECLARE
x RAW(20);
BEGIN
SELECT sys.dbms_crypto.hash(utl_raw.cast_to_raw(col1||col2||to_char(col3)),
sys.dbms_crypto.hash_sh1)
INTO x
FROM t;
END;
du hittar ytterligare information i dokumentationen för DBMS_CRYPTO.hash