如何使用Scala的Slick sql插值与所有者/模式名称前缀

时间:2013-02-20 11:41:51

标签: sql oracle scala scalaquery slick

我们有一个数据库设置,我们为Oracle数据库中的数据库表的所有者和用户提供了单独的用户。这意味着实际上每个查询的前缀都是这样的:ownername.tablename

如果我只是在Slick的SQLInterpolation.sql函数中静态编写整个内容,这样就可以了。

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

问题是,所有者前缀根据test / prod而改变。环境。我想做的是:

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

但SQL插值不适用于它。我得到这个错误Oracle:

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

这样您就不需要为SQL添加前缀。请确保您没有CREATE TABLE或任何其他DML,因为它会尝试在所有者的架构上运行它。