Il pacchetto DBMS_CRYPTO è il pacchetto corretto per generare hash. Non è concesso a PUBLIC per impostazione predefinita, dovrai concederlo in modo specifico (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1
).
Il risultato di questa funzione è di tipo dati RAW
. Puoi salvarlo in un RAW
colonna o convertilo in VARCHAR2
utilizzando il RAWTOHEX
o UTL_ENCODE.BASE64_ENCODE
funzioni.
Il HASH
la funzione è sovraccaricata per accettare tre tipi di dati come input:RAW
, CLOB
e BLOB
. A causa delle regole di conversione implicita, se utilizzi un VARCHAR2
come input, Oracle proverà a convertirlo in RAW
e molto probabilmente fallirà poiché questa conversione funziona solo con stringhe esadecimali.
Se usi VARCHAR2
quindi, devi convertire l'input in un tipo di dati binario o in un CLOB
, ad esempio :
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;
troverai ulteriori informazioni nella documentazione di DBMS_CRYPTO.hash