2016-04-25 5 views
0

DB上に従来の手順があり、変更できません。 それは次のようになります。これに伴いhibernate 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); 

私はどのようなエラーメッセージの岩礁を知っている - 私はちょうど私のパラメータ設定で間違っているものを理解することはできません:この手順/ 1つの文字列を取り、他の文字列を返します。または私は間違っていますか?

答えて

0

Outパラメータは2です。query.getOutputParameterValue(2);を使用します。

+0

それを試しました。運がない。申し訳ありません - 私のコードを正しいものに編集します –

関連する問題