パッケージ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のドキュメントに追加情報があります。