一尘不染

Oracle:如何调用重载过程?

sql

如何正确拨打电话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变体)来避免此错误?


阅读 163

收藏
2021-03-08

共1个答案

一尘不染

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

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

2021-03-08