我在db上有遗留程序,我无法修改它。 它看起来像这样:
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;
除此之外,我还有遗留代码,谢天谢地,我可以而且应该修改它以使它漂亮。
所以我想将对数据库程序的直接调用更改为hibernate调用,但是我遇到错误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 :(得分:0)
Out参数位于2.使用query.getOutputParameterValue(2);