有没有办法在oracle sql developer中对列的每个字段执行md5散列,并将结果散列存储在相应的列中(md5)
Posted
技术标签:
【中文标题】有没有办法在oracle sql developer中对列的每个字段执行md5散列,并将结果散列存储在相应的列中(md5)【英文标题】:Is there any way to perform md5 hashing in oracle sql developer on every field of an column, and store the result hash in corresponding column(md5) 【发布时间】:2021-11-09 13:26:30 【问题描述】:select standard_hash(‘text’,’MD5’) from dual.
以上脚本在oracle sql developer中提供了md5哈希 但我想对我的表列进行散列并将结果存储在相应的字段中。
我也试过了:
INSERT INTO TABLENAME(MD5)
SELECT standard_hash(TEXT,’MD5’) from TABLENAME
但它给出错误:ORA-01400 cannot insert into null
【问题讨论】:
你试过UPDATE TABLENAME SET MD5 = standard_hash(TEXT, 'MD5')
吗?目前,您正尝试在表中使用哈希值创建新行,而在我看来,您想将 MD5 哈希添加到现有行。
【参考方案1】:
通常,standard_hash
会给您一个输出,您可能无法将其存储在您拥有的同一列中,因为长度不会相同。为避免这种情况,我建议您使用 raw
作为要存储哈希值的列的数据类型。
MD5 将任意长度的消息处理成 128 位的固定长度输出,通常表示为 32 个十六进制数字的序列。
SQL> create table test_normal ( c1 varchar2(20) ) ;
Table created.
SQL> insert into test_normal values ( 'AbdiRSDAloPdi8978' ) ;
1 row created.
SQL> select standard_hash(c1) from test_normal ;
STANDARD_HASH(C1)
----------------------------------------
BD6062214847DB31BB40A0185E3F89B0FB6980BF
SQL> alter table test_normal add ( c2 raw(256) );
Table altered.
SQL> update test_normal set c2=standard_hash(c1) ;
1 row updated.
SQL> select * from test_normal ;
C1
--------------------
C2
--------------------------------------------------------------------------------
AbdiRSDAloPdi8978
BD6062214847DB31BB40A0185E3F89B0FB6980BF
SQL> select standard_hash(c1,'MD5') from test_normal ;
STANDARD_HASH(C1,'MD5')
--------------------------------
E404D2867EB21AD65827E2858A07CA65
【讨论】:
我还有其他列“MD5”,我将在其中存储所有相应的哈希。有什么办法可以将结果存储在 md5 列字段中 “将结果存储在 md5”是什么意思,没有这种数据类型。您可以将 md5 哈希值存储在raw
列中,而不会出现任何问题,如我的示例所示
Md5 是列名,我将使用它来存储所有哈希
该列的数据类型是什么?
Varchar(32 字节),以上是关于有没有办法在oracle sql developer中对列的每个字段执行md5散列,并将结果散列存储在相应的列中(md5)的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL Developer报错:Unable to find a Java Virtual Machine解决办法
如何在 Oracle SQL Developer 中设置自定义日期时间格式?
win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解决办法
Oracle SQL Developer 4 表数据选项卡初始过滤器