Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Fazendo um sha1-hash de uma linha no Oracle


O pacote DBMS_CRYPTO é o pacote correto para gerar hashes. Não é concedido a PUBLIC por padrão, você terá que conceder especificamente (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1 ).

O resultado desta função é do tipo de dados RAW . Você pode armazená-lo em um RAW coluna ou converta para VARCHAR2 usando o RAWTOHEX ou UTL_ENCODE.BASE64_ENCODE funções.

O HASH a função está sobrecarregada para aceitar três tipos de dados como entrada:RAW , CLOB e BLOB . Devido às regras de conversão implícita, se você usar um VARCHAR2 como entrada, o Oracle tentará convertê-lo para RAW e provavelmente falhará, pois essa conversão só funciona com strings hexadecimais.

Se você usar VARCHAR2 então, você precisa converter a entrada para um tipo de dados binário ou um CLOB , por exemplo :
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;

você encontrará informações adicionais na documentação de DBMS_CRYPTO.hash