Oracle:如何调用重载过程?

MRa*_*ser 3 sql oracle encryption plsql ora-06553

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

select DBMS_OBFUSCATION_TOOLKIT.DESEncrypt('x','y') from dual;
Run Code Online (Sandbox Code Playgroud)

因为DESEncrypt超载而无效:

ORA-06553: PLS-307: Too many declarations of "DESENCRYPT" match this call
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

有没有办法选择DESENCRYPT的一个实现(可能是VARCHAR2变体)来避免这个错误?

Ton*_*ews 9

在Oracle 11G中,您可以使用这样的命名表示法:

select DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(input_string=>'x',key_string=>'y')
from dual;
Run Code Online (Sandbox Code Playgroud)

我不认为可以在早期版本的Oracle中明确地调用这些函数,除非创建一个包装函数并调用它.


Har*_*son 7

在这里,让它通过提供param名称让它知道使用哪个重载!

select DBMS_OBFUSCATION_TOOLKIT.DesEncrypt(INPUT_STRING=>'11112abc',KEY_STRING=>'4578ccde') 
from dual ;
Run Code Online (Sandbox Code Playgroud)

回报

M5w5Z

请注意,您的密钥至少需要8个字节:

ORA-28234:密钥长度太短ORA-06512:在"SYS.DBMS_OBFUSCATION_TOOLKIT_FFI",第21行ORA-06512:在"SYS.DBMS_OBFUSCATION_TOOLKIT",第126行28234. 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 ;
Run Code Online (Sandbox Code Playgroud)

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

  • 我收到00907. 00000 - "缺少右括号"*原因:*行动: (2认同)