数据库表列在JSP中的Oracle函数中被视为字符串值

时间:2016-01-11 12:54:50

标签: sql oracle jsp

Select decrypt(PRODUCT_NUMBER,'123456789') as PRODUCT_NUMBER FROM Test

PRODUCT_NUMBER是测试表中的一列,包含加密数据Decrypt()是一个已创建且运行正常的函数。

当我在 Oracle SQL Developer 上运行此Sql时,它会提供正确的结果,但是当我在 JSP 上运行时,它会在函数上给出错误。

JSP 中,我通过以下方式调用:

String sql = "Select decrypt(PRODUCT_NUMBER,'123456789') as PRODUCT_NUMBER FROM Test";
rs = conn.executeQuery(sql);

我认为它需要PRODUCT_NUMBER as String ('PRODUCT_NUMBER')而不是列名,因此它会出错。

java.sql.SQLException: ORA-01465: invalid hex number

这是解密函数

 create or replace FUNCTION decrypt(p_raw IN RAW, p_key IN VARCHAR2) RETURN VARCHAR2 IS
      v_retval RAW(255);
       p_key2 RAW(255);
      BEGIN
      p_key2 := utl_raw.cast_to_raw(p_key);
      dbms_obfuscation_toolkit.DES3Decrypt
         (
          input => p_raw,
          key   => p_key2,
          which => 1,
          decrypted_data => v_retval
          );
      RETURN RTRIM(utl_raw.cast_to_varchar2(v_retval), CHR(0));
END decrypt;

1 个答案:

答案 0 :(得分:0)

解决!!

查询和功能都很完美。

实际上,我的Co Developer已经将Connection指向了某些列中包含-1的数据库的另一个副本实例,这就是它给出错误的原因。

我还原了,查询就像一个魅力。

感谢您的时间每个人:)