所有
我们有一个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函数调用和ref游标进行此工作的建议吗?提前谢谢。
-Patrick
答案 0 :(得分:0)
Frome Typesafe:
Slick目前不支持OUT参数(你会这样做 需要正确返回引用游标)。如果您只需要光标 从存储的proc返回,我建议使用该方法 在SO帖子中推荐:使用提升结果集到顶层 表()。这适用于您的用例吗?
所以我们的解决方案就是这样做:
SELECT * FROM TABLE(my_function('text'))
我们收到了错误,但这是Lucas'和Typesafe的建议