Oracle STANDARD_HASH 在 PLSQL 中不可用?

标签 oracle hash plsql

我正在尝试在 PL/SQL 中使用 STANDARD_HASH Oracle (12c) 函数,但似乎不可用:

SQL> exec   dbms_output.put_line(STANDARD_HASH('test'));
BEGIN dbms_output.put_line(STANDARD_HASH('test')); END;

                           *
ERROR at line 1:
ORA-06550: line 1, column 28:
PLS-00201: identifier 'STANDARD_HASH' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

来自 sql 工作得很好:

SQL> select STANDARD_HASH('test') from dual;

STANDARD_HASH('TEST')
----------------------------------------
A94A8FE5CCB19BA61C4C0873D391E987982FBBD3
为什么?在 PLSQL 中实现 STANDARD_HASH 的最佳方法是什么?

问候

最佳答案

似乎它还不是 12c 中 PL/SQL 的一部分。

作为解决方法,请在 PL/SQL 中使用 SELECT INTO:

SQL> set serveroutput on
SQL> DECLARE
  2    str VARCHAR2(40);
  3  BEGIN
  4    SELECT STANDARD_HASH('test') INTO str FROM dual;
  5    dbms_output.put_line(str);
  6  END;
  7  /
A94A8FE5CCB19BA61C4C0873D391E987982FBBD3

PL/SQL procedure successfully completed.

SQL>

我建议创建一个函数,并在 PL/SQL 中需要时使用它。

例如,

SQL> CREATE OR REPLACE FUNCTION STANDARD_HASH_OUTPUT(str IN VARCHAR2)
  2    RETURN VARCHAR2
  3  AS
  4    op VARCHAR2(40);
  5  BEGIN
  6    SELECT STANDARD_HASH(str) INTO op FROM dual;
  7    RETURN op;
  8  END;
  9  /

Function created.

直接在PL/SQL block 中调用函数:

SQL> BEGIN
  2     dbms_output.put_line(STANDARD_HASH_OUTPUT('test'));
  3  END;
  4  /
A94A8FE5CCB19BA61C4C0873D391E987982FBBD3

PL/SQL procedure successfully completed.

SQL>

关于Oracle STANDARD_HASH 在 PLSQL 中不可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35574602/

相关文章:

不同格式的 Oracle Decode 函数结果

hash - 多个 JWT 的匹配哈希 JWT

perl - 序列化 Perl 包变量并从 CGI 脚本每 24 小时更新一次

mysql - 同一交易的多个日期和状态

oracle - perl + DBD::Oracle + mod_perl + oracle LDAP 名称解析器 = 崩溃?

ruby - 如何更新键在 ruby​​ 中出现多次的单个哈希值?

database - 在 Oracle 中将 varchar 数据类型更改为 Number

Oracle 使用 DDL 和嵌套表立即执行

oracle - 在 Oracle/ODP.NET 中查询 USER_OBJECTS 时遇到问题

oracle - 在 Oracle SQL 中查找层次关系中每个项目的顶级