【发布时间】:2009-07-01 12:44:21
【问题描述】:
我在 Oracle 数据库中有一个无法更改的 PL/SQL 函数。此函数接受一个标识实体的参数,创建该实体的副本,然后返回副本的 ID。这看起来像
FUNCTION copy_entity(id IN NUMBER) 返回号码
我需要从 Hibernate 调用这个函数。我尝试使用类似于
的内容创建命名 SQL 查询调用copy_entity(:id)
作为查询,但从中我似乎无法获得函数的返回值。 Hibernate 的“返回标量”和类似选项需要返回列名,而我没有列名。这导致我
选择 copy_entity(:id) AS newEntityId
使用 newEntityId 作为列名的“return-scalar”,但这也不起作用,因为 Oracle 随后会引发我无法在 SELECT 中调用 INSERT(以保存副本)的异常。
有没有什么办法可以得到这样一个PL/SQL函数的返回值呢?该函数实际上要复杂得多,并且在应用程序的其他部分仍然需要,因此重新编写它并不是一个真正的选择。
【问题讨论】:
-
不会“从 DUAL 中选择 copy_entity(id) 作为 rtnID”吗?
-
否,这会导致 ORA-14551 异常,因为不允许从 SELECT 插入或更新。