全部。
我们有一个返回引用游标的 Oracle 包:
CREATE OR REPLACE PACKAGE BODY sandbox AS FUNCTION my_function (text VARCHAR2) RETURN result_cv IS result result_cv; BEGIN OPEN result FOR SELECT MLS_SID FROM MLS; RETURN result; END; END sandbox;
我正在使用以下 Scala 代码调用该函数:
lazy val database = Database.forDataSource(DB.getDataSource()) database withSession { val x = sql"select sandbox.my_function($text) from DUAL".as[(Int)] x foreach (x => println(x)) Ok(String.valueOf(x.first)) }
代码失败并出现以下错误:
[SQLException:无效的列类型:类 oracle.jdbc.driver.T4CResultSetAccessor 未实现 getInt]
当我只使用函数中的 select 语句 (SELECT MLS_SID FROM MLS;) 时,SQL 语句有效,但是当我将它作为引用游标打开并返回引用游标时,它失败了。我查看了 T4CResultSetAccessor,它只有一种方法 getBytes()。
任何人都可以提供有关如何使用 Oracle 函数调用和引用游标进行这项工作的建议吗?提前致谢。
-帕特里克
最佳答案
Frome 类型安全:
Slick doesn’t support OUT parameters at the moment (which you would need to properly return a ref cursor). If the cursor is all you need to return from your stored proc, I suggest to use the method recommended in the SO post: Lift the result set to the top level with TABLE(). Does this work for your use case?
所以我们的解决方案是这样做:
SELECT * FROM TABLE(my_function('text'))
我们得到一个错误,但那是 Lucas 和 Typesafe 的建议
关于带有 slick 的 Oracle ref cursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420231/