0

我们有一个数据库设置,其中我们有一个单独的用户,用于 Oracle 数据库中数据库表的所有者和用户。这意味着实际上每个查询的前缀如下:ownername.tablename

如果我只是在 Slick 的 SQLInterpolation.sql 函数中静态地编写整个内容,这会很好:

(sql"select foo_owner.foo_sequence.nextval from dual").as[Long].first()

问题是,所有者前缀会根据测试/产品而变化。环境。我想做的是:

(sql"select $owner.foo_sequence.nextval from dual").as[Long].first()

但是 SQL 插值不适用于它。我收到此错误甲骨文:

An exception or error caused a run to abort: ORA-22806: not an object or REF 

有什么建议么?我当然可以回退到更详细的 StaticQuery,但使用 sql/sqlu 插值会更紧凑。

4

2 回答 2

3

使用$foo插入 foo 作为绑定变量。您需要为其添加前缀#以插入文字:

(sql"select #$owner.foo_sequence.nextval from dual").as[Long].first()
于 2013-02-20T12:52:26.120 回答
0

删除前缀可以接受吗?在您的代码中,您可以运行
ALTER SESSION SET CURRENT_SCHEMA=yourOwner

这种方式,您不需要为 SQL 添加前缀。只要确保您没有 CREATE TABLE 或任何其他 DML,因为它会尝试在所有者的模式上运行它。

于 2013-02-20T12:42:19.387 回答