簡體   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