Как использовать квадратную Scl-интерполяцию Scala с именами-префиксами владельца / схемы

У нас есть настройка базы данных, где у нас есть отдельный пользователь для владельцев и пользователей таблиц базы данных в базе данных 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-интерполяция не работает с этим. Я получаю эту ошибку Oracle:

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

Какие-либо предложения? Конечно, я могу вернуться к более подробному StaticQuery, но использование интерполяции sql/sqlu было бы гораздо более компактным.

2 ответа

С помощью $foo вставляет foo как переменную связывания. Вы должны префикс это с # вставить литерал:

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

Допустимо ли удаление префикса? В вашем коде вы можете запустить
ALTER SESSION SET CURRENT_SCHEMA=yourOwner

Таким образом, вам не нужно префикс SQL. Просто убедитесь, что у вас нет CREATE TABLE или любого другого DML, поскольку он попытается запустить его по схеме владельца.

Другие вопросы по тегам