2016-04-25 99 views
0

我有一個傳統的數據庫程序,我不能修改它。 它看起來像這樣:休眠PLS-00306錯誤

create or replace FUNCTION GETSESSION 
    (sUsername IN varchar) return varchar 
    IS 
    nSession number; 
    sRAWString RAW (32767); 
    sKey varchar(60); 
    sKey2 varchar(60); 
BEGIN 
    select webservice.seq_mgmt.NEXTVAL, sys_guid() into nSession, sKey2 from dual; 
    sRAWString := UTL_RAW.CAST_TO_RAW (sKey2); 
    sKey:=LOWER(SYS.DBMS_CRYPTO.HASH (sRAWString, SYS.DBMS_CRYPTO.HASH_MD5)); 
    update mgmt_session s set s.loggedout = sysdate where upper(s.userid) = upper(sUsername) and loggedout is null; 
    insert into mgmt_session a (userid, sessionid, token, loggedin) 
         (select upper(susername), nSession, sKey, sysdate from dual); 
    return sKey2; 
END; 

與此同時,我也有遺留代碼,那幸運的是,我可以和應該修改,使其漂亮。 所以我想改變直接調用數據庫過程來休眠調用,但我碰到錯誤PLS-00306,聲稱我有錯誤的數量或類型的參數。

這裏是我的電話:

StoredProcedureQuery query = entityManager.createStoredProcedureQuery("GETSESSION") 
       .registerStoredProcedureParameter(1, String.class, ParameterMode.IN) 
       .registerStoredProcedureParameter(2, String.class, ParameterMode.OUT) 
       .setParameter(1, username); 

     query.execute(); 
     return (String) query.getOutputParameterValue(2); 

我知道什麼是錯誤消息的珊瑚礁 - 我只是不明白這有什麼錯我的參數設置:/這個過程需要一個字符串,並返回另一個字符串。或者我錯了?

回答

0

Out參數在2.使用query.getOutputParameterValue(2);

+0

試過。沒有運氣。對不起 - 將編輯我的代碼是正確的 –