sql >> データベース >  >> RDS >> Oracle

Oracleで行のsha1-hashを作成する

    パッケージDBMS_CRYPTOは、ハッシュを生成するための正しいパッケージです。デフォルトではPUBLICに付与されていないため、具体的に付与する必要があります(GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1

    この関数の結果は、データ型RAWになります。 。 RAWに保存できます 列にするか、VARCHAR2に変換します RAWTOHEXを使用する またはUTL_ENCODE.BASE64_ENCODE 機能。

    HASH 関数がオーバーロードされ、入力として3つのデータ型を受け入れます:RAWCLOB および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のドキュメントに追加情報があります。



    1. 文字列を16進数に、またはその逆に変換するにはどうすればよいですか?

    2. OracleSQLステートメントの行を集約

    3. Oracleの簡単な変換/移行へのMSAccess

    4. postgresql:INSERT INTO ...(SELECT * ...)