在Oracle中创建一个sha1-hash行

前端之家收集整理的这篇文章主要介绍了在Oracle中创建一个sha1-hash行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Oracle数据库中的select中创建一行的sha1-hash有问题.我在MSsql中做了如下:
SELECT *,HASHBYTES('SHA1',CAST(ID as varchar(10)+
  TextEntry1+TextEntry2+CAST(Timestamp as varchar(10)) as Hash
FROM dbo.ExampleTable
WHERE ID = [foo]

但是,在使用Oracle时,似乎找不到类似的功能.
就我的谷歌给我带来的是,我猜到dbms_crypto.hash_sh1与它有关系,但是我还没有能够围绕着我的脑袋呢?

任何指针都将不胜感激.

@H_301_11@ 软件包 DBMS_CRYPTO是产生哈希值的正确包.默认情况下,它不会授予PUBLIC,您必须具体授予(GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1).

函数的结果是数据类型为RAW.您可以将其存储在RAW列或使用RAWTOHEX或UTL_ENCODE.BASE64_ENCODE函数将其转换为VARCHAR2.

HASH函数被重载以接受三个数据类型作为输入:RAW,CLOB和BLOB.由于rules of implicit conversion,如果您使用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的文档中找到更多信息

猜你在找的Oracle相关文章