带有 slick 的 Oracle ref cursor

标签 oracle cursor slick

全部。

我们有一个返回引用游标的 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/

相关文章:

javascript - 如何在 css 中悬停时更改光标大小

drag-and-drop - JavaFX : Changing cursor during drag and drop

scala - Akka 中灵活的数据库 session 、效率和线程

sqlite - 为什么在带有Scala Slick和Joda DateTime的SQLite3上出现SQLITE_ERROR?

sql-server - 如何在单个事务中以流畅的方式运行多个普通 sql 查询?

java - Datepicker日期格式与oracle数据库日期不匹配

mysql - 加入性能 : Oracle vs MySQL

oracle - 从 Oracle Cursor 批量收集列的子集

sql - Oracle数据库: Like with multiple values

sql - Oracle UPDATE 作为 where 子句内的内部查询