[英]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.