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