在oracle 11g中使用standard_hash函数时出现无效标识符错误

问题描述 投票:0回答:1

我尝试根据字段生成哈希,但出现以下错误:

查询:

select standard_hash(pk_time) from schema.table

错误:

"STANDARD_HASH": invalid identifier

列类型是 Integer,但我也尝试过其他类型,例如

varchar
date
并得到了相同的结果。

作为额外的评论,我开始使用此函数是因为使用 DynamicFrame 并行读取 使用

hashfield
选项从 AWS Glue 读取分区表。

sql oracle plsql oracle11g aws-glue
1个回答
0
投票

这在 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>
© www.soinside.com 2019 - 2024. All rights reserved.