パッケージDBMS_CRYPTOは、ハッシュを生成するための正しいパッケージです。デフォルトではPUBLICに付与されていないため、具体的に付与する必要があります(GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1
。
この関数の結果は、データ型RAW
になります。 。 RAW
に保存できます 列にするか、VARCHAR2
に変換します RAWTOHEX
を使用する またはUTL_ENCODE.BASE64_ENCODE
機能。
HASH
関数がオーバーロードされ、入力として3つのデータ型を受け入れます:RAW
、CLOB
およびBLOB
。暗黙的な変換の規則により、VARCHAR2
を使用する場合 入力として、OracleはそれをRAW
に変換しようとします この変換は16進文字列でのみ機能するため、失敗する可能性が高くなります。
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
のドキュメントに追加情報があります。