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