我们有一个数据库设置,我们为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插值会更加紧凑。
答案 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,因为它会尝试在所有者的架构上运行它。