Вот мой случай: у меня есть следующий файл sql (my_view.sql - содержащий определение материализованного представления, диалект Oracle), возвращающий все продукты, имеющие expire_date> sysdate:
CREATE MATERIALIZED VIEW my_view
BUILD DEFERRED
REFRESH COMPLETE ON DEMAND
AS
SELECT *
FROM product
WHERE expire_date > sysdate
Сейчас вкод приложения, который у меня есть Spring Service с использованием этого представления:
@Service
public class MyService {
private final JdbcTemplate jdbcTemplate;
@Value("${expire_date}")
private String expireDate;// property will be injected at runtime by Spring, but how to pass this string to be evaluated in the sql script through jdbcTemplate
public MyService(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void callMaterialisedView() {
try (Connection zs1DbConnection =
jdbcTemplate.getDataSource().getConnection()) {
jdbcTemplate.execute("BEGIN dbms_mview.refresh('my_view', 'c');END;");
}
}
}
Мой вопрос: можно ли сделать expire_date настраиваемым и передать его из кода приложения в качестве заполнителя в sqlscript?
Сделать его легко настраиваемым - я могу использовать аннотацию Spring @Value, чтобы добавить конкретное значение в код моего приложения.Мне не хватает, как (если это вообще возможно) передать это значение из jdbcTemplate в сценарий для правильной оценки.
В последнем варианте я представляю, что скрипт выглядит так ( expire_date передается из jdbcTempalte ):
CREATE MATERIALIZED VIEW my_view
BUILD DEFERRED
REFRESH COMPLETE ON DEMAND
AS
SELECT *
FROM product
WHERE expire_date > to_date(${expire_date})