Дата пишется как date '2018-01-01'
, а не '2018-01-01'
.
define
ожидает одно значение, поэтому, если вы хотите, чтобы оно содержало пробелы, вам нужно будет заключить его в кавычки.
Чтобы построить строку в формате YYYYMM
из даты, вам нужно использовать to_char(dateval,'YYYYMM')
.
Вам также нужно вычислить выражение table_
, чтобы вы могли подставить буквенную строку в имя таблицы в последнем запросе.
define crop = "date '2018-01-01'"
define crop_n = "add_months(&crop, 1)" -- I want this to return 2018-01-01 plus `n = 1` months
column table_ new_value table_
select to_char(&crop_n,'YYYYMM') as table_ from dual;
prompt crop = &crop
prompt crop_n = &crop_n
prompt table_ = &table_
select person_id
, bank_id
, account_id
, start_date
, months_between(&crop_n, &crop) as period
, days_overdue
from MDB.CREDITS_&table_ -- I want this to be evaluated as 'MDB.CREDITS_201802'
where start_date >= &crop -- Credits that started on or after Jan 1 2018
and dcredfaperturacta < add_months(&crop, 1) -- Credits that started before Feb 1 2018
/
Параметр column x new_value y
фиксирует последнее значение столбца x
в переменной подстановки y
. Первоначально он предназначен для заголовков страниц в отчетах, но очень удобен для написания сценариев. Вы можете скрыть вывод, используя set termout off
. (set termout on
для восстановления вывода терминала.)
Это сгенерирует и запустит
crop = date '2018-01-01'
crop_n = add_months(date '2018-01-01', 1)
table_ = 201802
select person_id
, bank_id
, account_id
, start_date
, months_between(add_months(date '2018-01-01', 1), date '2018-01-01') as period
, days_overdue
from MDB.CREDITS_201802 -- I want this to be evaluated as 'MDB.CREDITS_201802'
where start_date >= date '2018-01-01' -- Credits that started on or after Jan 1 2018
and dcredfaperturacta < add_months(date '2018-01-01', 1) -- Credits that started before Feb 1 2018
Обратите внимание на следующие комментарии: это Oracle SQL* Plus синтаксис. Другие инструменты, такие как Toad, PL / SQL Developer и SQL Developer, в некоторой степени поддерживают его и используют другие методы. Не весь синтаксис SQL* Plus гарантированно работает во всех других инструментах. В PL / SQL Developer это работает только в командном окне. В SQL Developer вам нужно будет использовать «Запуск от имени» (F5), а не обычный «Выполнить» (Ctrl-Enter).