Pakiet DBMS_CRYPTO jest poprawnym pakietem do generowania skrótów. Nie jest domyślnie przyznana PUBLIC, musisz ją przyznać konkretnie (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1
).
Wynikiem tej funkcji jest typ danych RAW
. Możesz go przechowywać w RAW
kolumna lub przekonwertuj ją na VARCHAR2
za pomocą RAWTOHEX
lub UTL_ENCODE.BASE64_ENCODE
funkcje.
HASH
funkcja jest przeciążona, aby zaakceptować trzy typy danych jako dane wejściowe:RAW
, CLOB
i BLOB
. Ze względu na zasady niejawnej konwersji, jeśli używasz VARCHAR2
jako dane wejściowe Oracle spróbuje przekonwertować go na RAW
i najprawdopodobniej się nie powiedzie, ponieważ ta konwersja działa tylko z ciągami szesnastkowymi.
Jeśli używasz VARCHAR2
następnie musisz przekonwertować dane wejściowe na binarny typ danych lub CLOB
, na przykład :
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;
dodatkowe informacje znajdziesz w dokumentacji DBMS_CRYPTO.hash