Пакет DBMS_CRYPTO является правильным пакетом для генерации хэшей. По умолчанию он не предоставляется PUBLIC, вам придется предоставить его специально (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1
).
Результат этой функции имеет тип данных RAW
. Вы можете сохранить его в столбце RAW
или преобразовать в VARCHAR2
, используя функции RAWTOHEX
или UTL_ENCODE.BASE64_ENCODE
.
Функция HASH
перегружена для приема трех типов данных в качестве входных данных: RAW
, CLOB
и BLOB
. Из-за правил неявного преобразования , если вы используете VARCHAR2
в качестве ввода, Oracle попытается преобразовать его в RAW
и, скорее всего, потерпит неудачу, так как это преобразование работает только с шестнадцатеричными строками.
Если вы используете VARCHAR2
, вам необходимо преобразовать входные данные в двоичный тип данных или CLOB
, например:
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;
дополнительную информацию вы найдете в документации по DBMS_CRYPTO.hash