我尝试根据字段生成哈希,但出现以下错误:
查询:
select standard_hash(pk_time) from schema.table
错误:
"STANDARD_HASH": invalid identifier
列类型是 Integer,但我也尝试过其他类型,例如
varchar
、date
并得到了相同的结果。
作为额外的评论,我开始使用此函数是因为使用 DynamicFrame 并行读取 使用
hashfield
选项从 AWS Glue 读取分区表。
这在 Oracle 11g 中不起作用,因为
standard_hash
是在 Oracle 12c 中引入的。
使用
dbms_crypto
代替。一种选择是创建自己的函数,例如
SQL> select * From v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
SQL> CREATE OR REPLACE FUNCTION f_hash (par_string IN VARCHAR2)
2 RETURN RAW
3 IS
4 retval RAW (256);
5 BEGIN
6 retval :=
7 DBMS_CRYPTO.HASH (UTL_I18N.STRING_TO_RAW ('test', 'AL32UTF8'),
8 DBMS_CRYPTO.HASH_SH1);
9
10 RETURN retval;
11 END;
12 /
Function created.
SQL> SELECT f_hash ('test') FROM DUAL;
F_HASH('TEST')
--------------------------------------------------------------------------------
A94A8FE5CCB19BA61C4C0873D391E987982FBBD3
SQL>
只是为了验证结果 - 这是 21c XE,它确实提供了
standard_hash
:
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
SQL> select standard_hash('test') from dual;
STANDARD_HASH('TEST')
----------------------------------------
A94A8FE5CCB19BA61C4C0873D391E987982FBBD3
SQL>