带有光滑的 Oracle ref 游标
Posted
技术标签:
【中文标题】带有光滑的 Oracle ref 游标【英文标题】:Oracle ref cursor with slick 【发布时间】:2014-01-29 01:16:17 【问题描述】:全部。
我们有一个返回引用游标的 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:无效的列类型:getInt 没有为类 oracle.jdbc.driver.T4CResultSetAccessor 实现]
当我只使用函数中的 select 语句 (SELECT MLS_SID FROM MLS;) 时,SQL 语句有效,但是当我将它作为引用游标打开并返回引用游标时,它会失败。我查看了 T4CResultSetAccessor,它只有一个方法 getBytes()。
谁能提供有关如何使用 Oracle 函数调用和引用游标来完成这项工作的建议?提前致谢。
-帕特里克
【问题讨论】:
您不能以这种方式使用查询。你必须制作一个 PL/SQL 来调用你的函数。不知道如何在光滑的情况下做到这一点。示例执行? := 调用 yourpackage.function 我建议将此函数转换为带有 OUT 参数的 ref 游标的过程。从 slick 调用这个存储过程,必须有一些方法可以做到这一点。谷歌它! 我试过了? = 调用创建本质上是一个 2 参数语句,巧妙地将第一个参数设置为 $text,然后它错误地显示“IN/OUT 参数 2 未设置” 如果您重复发布,请交叉链接。 groups.google.com/forum/#!topic/scalaquery/7uPwCYENjLA 我删除了我的答案。您的 SQL 字符串是正确的。不过,我不知道如何用 Slick 做到这一点...... 【参考方案1】:Frome Typesafe:
Slick 目前不支持 OUT 参数(你会 需要正确返回一个引用光标)。如果您只需要光标 要从您的存储过程中返回,我建议使用该方法 在 SO 帖子中推荐:将结果集提升到顶层 桌子()。这对您的用例有用吗?
所以我们的解决方案是这样做:
SELECT * FROM TABLE(my_function('text'))
我们遇到了一个错误,但这是 Lucas 和 Typesafe 的建议
【讨论】:
以上是关于带有光滑的 Oracle ref 游标的主要内容,如果未能解决你的问题,请参考以下文章