ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 16.2.2.1\. 使用存储过程的规则和限制 为了在Hibernate中使用存储过程,你必须遵循一些规则.不遵循这些规则的存储过程将不可用.如果你仍然想要使用他们, 你必须通过`session.connection()`来执行他们.这些规则针对于不同的数据库.因为数据库 提供商有各种不同的存储过程语法和语义. 对存储过程进行的查询无法使用`setFirstResult()/setMaxResults()`进行分页。 建议采用的调用方式是标准SQL92: `{ ? = call functionName(<parameters>) }` 或者 `{ ? = call procedureName(<parameters>}`.原生调用语法不被支持。 对于Oracle有如下规则: * 函数必须返回一个结果集。存储过程的第一个参数必须是`OUT`,它返回一个结果集。这是通过Oracle 9或10的`SYS_REFCURSOR`类型来完成的。在Oracle中你需要定义一个`REF CURSOR`类型,参见Oracle的手册。 对于Sybase或者MS SQL server有如下规则: * 存储过程必须返回一个结果集。.注意这些servers可能返回多个结果集以及更新的数目.Hibernate将取出第一条结果集作为它的返回值, 其他将被丢弃。 * 如果你能够在存储过程里设定`SET NOCOUNT ON`,这可能会效率更高,但这不是必需的。