同事们,您能帮我用Hibernate4调用MSSQL2008存储过程,其中包含两个输入和两个输出参数吗?存储过程如下所示:
PROCEDURE Product_Create(
@Return int output,
@ProdID numeric(18,0) output,
@PassID numeric(18,0),
@Amount numeric(18,2))
我正在尝试使用Session.CreateSQLQuery方法调用过程:
Query qr = session.createSQLQuery("{? = Product_Create (:PassID, :Amount")});
qr.setParameter("PassID", new BigInteger("999999999"));
qr.setParameter("Amount", new BigDecimal("87384738"));
但也有一些不明朗的时刻:
更新
我有一个MS SQL过程
PROCEDURE Product_Create(
@Return int output,
@ProdID numeric(18,0) output,
@IN$PassID numeric(18,0),
@IN$Amount numeric(18,2))
并具有映射文件:
<hibernate-mapping>
<sql-query name="Product_Create" callable="true">
<return-scalar column = "Return" type="int"/>
<return-scalar column = "ProdID" type="long"/>
<![CDATA[CALL IProduct_Create (:@IN$PassID, :@IN$Amount)]]>
</sql-query>
</hibernate-mapping>
运行应用程序时收到异常:
警告:[Tue-06 10:11:39,374]jdbc.spi.sqlexceptionhelper-SQL错误:102,SqlState:S0001错误:[Tue-06 10:11:39,374]jdbc.spi.sqlexceptionhelper-“@p0”附近语法不正确.线程“main”org.hibernate.Exception.sqlgrammarexception异常:无法提取org.hibernate.Exception.internal.sqlstateconversiondelegate.convert(Sqlstateconversiondelegate.java:123)在org.hibernate.Exception.internal.standardsqlexceptionconverter.convert(Standardsqlexceptionconverter.49)在org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(Sqlexceptionhelper.126)在eNonLazyCollections(loader.java:355)在org.hibernate.loader.loader.dolist(loader.java:2554)在org.hibernate.loader.loader.dolist(loader.java:2540)在org.hibernate.loader.loader.list(loader.java:2540)在org.hibernate.loader.loader.list(loader.java:2365)在org.hibernate.loader.loader.list(loader.java:2365)在在com.microsoft.sqlserver.jdbc.sqlserverexception.makefromdatabaseerror(sqlserverexception.java:216)在com.microsoft.sqlserver.jdbc.sqlserverstatement.getnextresult(sqlserverstatement.java:1515)在com.microsoft.sqlserver.jdbc.sqlserverstatement.doexecutepreparedstatement(sqlserver.jdbc.sqlserverstatement.404)在Ava:226)位于org.hibernate.dialt.SqlServerDialt.GetResultSet(SqlServerDialt.java:42)位于org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.Extract(ResultSetReturnImpl.java:121)...16其他
我试着在
<![CDATA[CALL IProduct_Create (:@IN$PassID, :@IN$Amount)]]>
但没有成功。
我的映射出了什么问题?
更新1
在调用过程中添加了方括号{}。当呼叫看起来像
<![CDATA[{CALL Product_Create (:@IN$PassID, :@IN$Amount)}]]>
使用getNamedQuery()
调用它。
Query query = session.getNamedQuery("product_create")
.setParameter("PassID", new BigInteger("999999999"))
.setParameter("Amount", new BigDecimal("87384738"));
List result = query.list(); // here you have DTO List i.e. List<Product>
问题内容: 我在SQL Server 2008 R2中有一个Oracle链接服务器。我需要执行Oracle存储过程(在第一个过程中使用输出参数,在第二个过程中使用输入参数): 我没有找到有关此问题的完整文档,只有带有无参数选择/非选择过程的简单示例,并且想知道如何调用这些过程,具有内部select的过程以及具有基本参数类型的多参数过程。 问题答案: 它应该像这样工作: 如果您有几个参数,则可能如下
问题内容: 我已经编写了一个VBScript函数来调用存储过程。过去,我编写了许多函数,这些函数使用输入参数调用存储过程,但是在这种情况下,我需要使用Output参数。 在另一个应用程序中,我使用实体框架调用完全相同的存储过程,因此该存储过程很好。 这是我的代码: adParamInput, 50, userId)) cmd.Parameters.Append(cmd.CreateParamete
尝试调用MSSQL存储过程。过程基本上是这样的:使用[DATABASE]GO SET ANSI _ NULLS ON GO SET QUOTED _ IDENTIFIER ON GO 更改过程。[stored procedure](@ username varchar(10))as 从表名中选择用户名 输出是:array(0) { }这个数据库中有大量的数据。 我知道与数据库的连接是有效的,但当我
问题内容: 我正在使用Sql Server2008。我的存储过程接受将近150个参数。在性能方面有什么问题吗? 问题答案: 在性能上没有错,但是闻起来可以用动态SQL更好地完成。不看代码很难说。
本文向大家介绍Sql Server 存储过程调用存储过程接收输出参数返回值,包括了Sql Server 存储过程调用存储过程接收输出参数返回值的使用技巧和注意事项,需要的朋友参考一下 创建存储过程: 接收输出参数: 2,带返回值 创建存储过程: 接收返回值: 以上所述是小编给大家介绍的Sql Server 存储过程调用存储过程接收输出参数返回值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小
问题内容: 我有一个来自此(google book )的mysql存储过程,一个例子是这样的: 该程序编译正常。(我在ubuntu中使用MySQL查询浏览器)。 但是,当我调用该过程时: (也在查询浏览器中) 它返回一个错误: 为什么这个例子不起作用? 问题答案: 无法复制。对我来说效果很好: 也许您应该粘贴整个错误消息,而不是对其进行汇总。