Oracle ref光标与光滑

时间:2014-01-29 01:16:18

标签: 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函数调用和ref游标进行此工作的建议吗?提前谢谢。

-Patrick

1 个答案:

答案 0 :(得分:0)

Frome Typesafe:

  

Slick目前不支持OUT参数(你会这样做   需要正确返回引用游标)。如果您只需要光标   从存储的proc返回,我建议使用该方法   在SO帖子中推荐:使用提升结果集到顶层   表()。这适用于您的用例吗?

所以我们的解决方案就是这样做:

  

SELECT * FROM TABLE(my_function('text'))

我们收到了错误,但这是Lucas'和Typesafe的建议