当前位置: 首页 > 面试题库 >

Oracle:如何调用重载过程?

马阳曦
2023-03-14
问题内容

如何正确拨打电话DBMS_OBFUSCATION_TOOLKIT.DESEncrypt?(如果可能,不使用PL / SQL)

select DBMS_OBFUSCATION_TOOLKIT.DESEncrypt('x','y') from dual;

不起作用,因为DESEncrypt已过载:

ORA-06553: PLS-307: Too many declarations of "DESENCRYPT" match this call
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:

有没有一种方法可以选择DESENCRYPT的一种实现(可能是VARCHAR2变体)来避免此错误?


问题答案:

在这里,只需提供参数名称就可以让它知道要使用哪个重载!

select DBMS_OBFUSCATION_TOOLKIT.DesEncrypt(INPUT_STRING=>'11112abc',KEY_STRING=>'4578ccde') 
from dual ;

退货

M5锟w5Z

请注意,您的密钥必须至少为8个字节:

ORA-28234:密钥长度太短ORA-06512:在“ SYS.DBMS_OBFUSCATION_TOOLKIT_FFI”,行21
ORA-06512:在“ SYS.DBMS_OBFUSCATION_TOOLKIT”,行12628234。00000-“密钥长度太短”
原因:指定的密钥对于算法而言太短了。DES需要至少8个字节的密钥。三键DES在两键模式下至少需要16个字节的密钥,而在三键模式下需要至少24个字节的密钥。操作:指定更长的密钥。

您可以随时使用包装函数来尝试(如Tony建议的那样)

create or replace
function DesEncrypt(pinputString IN VARCHAR2 , pKeyString in VARCHAR2) RETURN varchar2
IS
BEGIN
return DBMS_OBFUSCATION_TOOLKIT.DesEncrypt(INPUT_STRING=>INPUTSTRING,KEY_STRING=>KEYSTRING);
END DesEncrypt;
/
select DesEncrypt('11112abc' , '4578ccde') from dual ;

由于您的体重是10克,因此您可能需要使用DBMS_CRYPTO软件包
http://www.stanford.edu/dept/itss/docs/oracle/10g/network.101/b10773/apdvncrp.htm



 类似资料:
  • 下面是我的Oracle存储过程, 我得到以下异常:hibernate:{CALL REPORT_HIBERNATE(?)}org.hibernate.exception.GenericJDBcException:无法执行查询...并且由:java.sql.sqlException:无效的列索引引起 Plz让我知道在Spring中我将如何使用Hibernate注释调用这个存储过程??

  • 问题内容: 我有一个plsql程序 我尝试在Java代码中调用它。我已经使用其他过程执行了所有参数均为VARCHAR类型的过程,但是这里所有参数都是“ bd_tb_struct” 我也有一个带有此Comment的Java类。“数据库中对应类型的类。(bd_tb_struct)” 有人可以解释一下我该如何称呼我的程序吗? 问题答案: Oracle安装程序 : Java SQLData类 : 从Jav

  • 问题内容: 我有一个返回sys-refcursor的Oracle函数,当我使用Hibernate调用此函数时,出现以下异常。 我该如何解决? Oracle功能 我的实体班 在DAO中 问题答案: 可以通过以下方式使用EntityManager调用Oracle函数或存储过程。 对于Oracle功能 创建一个以sys_refcursor作为返回类型的函数 在实体类中,将函数定义为 对于Oracle存储

  • 我是Spring世界里的一个新人。我有一个问题,从oracle包调用过程并将游标返回到Spring的更好的方法是什么? 我可以像在经典java中那样使用“可调用语句”,但我认为还有更好、更干净的方法,如何做到这一点? 姓名:尼奥,玛丽姓:安德森,史密斯性别:M,W年龄:20,25卷:测试,测试 b)同时,我们有一个包含过程的包HOME_TEST_PKG 过程show_people_data(VAR

  • 我有一个非常复杂的oracle存储过程,它搜索和检索一些数据。该过程返回一个输出参数-oracle游标。我通过JDBC执行过程: 问题是,查询有时会花费相当长的时间(几分钟),我希望用户能够通过单击按钮随时取消查询。我引用了stmt对象,但不幸的是(从其他线程)调用stmt.cancel()没有效果。 另一方面,当我将CallableStatement sql更改为以下查询时: 在调用stmt.c

  • 像这段代码一样,C编译器将把char*转换为bool,然后调用第一个函数,这与我的初衷不一致。有没有办法阻止编译器执行我不想要的类型转换?比如“-fno permissive”,但不幸的是,它不起作用。