繁体   English   中英

用Java调用Oracle过程

[英]Calling Oracle procedures in java

我在oracle中有一个过程可以使用一进一出参数解密密码。 我试图按如下方式在我的Java程序中调用,但它显示SQLGrammarException。 我是Oracle的新手,并且是第一次尝试。 抱歉,我在互联网上搜索,但没有找到任何东西。 在SQL Server中,我使用的是这种方式。

Iterator it = hibernateSession.createSQLQuery("EXEC DAN_DANAPP_DECRYPPWD '" + username.getText().trim() + "'").list().iterator();

它在SQL Server中工作。 当我在Oracle中尝试相同的方法时,它不起作用。 谁能发现我曾尝试过的错误。

我的Oracle程序如下

CREATE OR REPLACE PROCEDURE DAN0703.DAN_DANAPP_DECRYPPWD 
(EMPNO IN VARCHAR2,P_STRING OUT VARCHAR2)
IS

 P_KEY_STRING  VARCHAR2(12) := 'xxxxxxxxxxxx';
 P_ERROR_NO NUMBER;
 RAW_KEY RAW(128);
 DECRYPTED_RAW RAW(2048);

BEGIN

 RAW_KEY := UTL_RAW.CAST_TO_RAW(P_KEY_STRING);

 select USER_PASSWD into P_STRING  FROM MENU_USER  WHERE USER_ID = EMPNO  AND 
 USER_FLAG = 'O' and (USER_DISABLE_FLAG='N' or USER_DISABLE_FLAG='V');

 DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT(INPUT => P_STRING, KEY => RAW_KEY,  
 DECRYPTED_DATA => DECRYPTED_RAW );

 P_STRING := UTL_RAW.CAST_TO_VARCHAR2(DECRYPTED_RAW);

END;

预先感谢您的支持。

在oracle中调用过程必须编写代码:

loginSession.createSQLQuery("CALL DAN0703.DAN_DANAPP_DECRYPPWD(:username)")
    .setParameter("username", username.getText().trim());

也许是这样的:

Iterator it = loginsession.createSQLQuery("CALL DAN_DANAPP_DECRYPPWD(:EMPNO)")
.setParameter("EMPNO", username.getText().trim()).list().iterator();

编辑

解释使用JPA处理参数的链接:

https://vladmihalcea.com/how-to-call-oracle-stored-procedures-and-functions-from-hibernate/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM