У меня есть база данных с несколькими таблицами сопоставления.
Каждая из таблиц сопоставления содержит группу ключевых столбцов, сопоставленное значение и диапазон дат, когда сопоставление применимо.
Например,
mappingtable_a (
acol,
bcol,
ccol,
mapped,
startdate,
enddate
)
Я мог бы использовать это следующим образом
select
a.acol,
a.bcol,
a.ccol,
m.mapped
from
atable a left join
mappingtable_a m on (
a.acol = m.acol and
a.bcol = m.bcol and
a.ccol = m.ccol and
a.adate >= m.startdate and
a.adate <= m.enddate
)
Я хочу включить проверку ограничений для этих таблиц, чтобы убедиться, что в них никогда не будет совпаденийдиапазоны дат для комбинации столбцов сопоставления.
Это кажется довольно простым для отдельной таблицы, если я создал функцию проверки ограничений, специфичную для каждой таблицы, для которой установлено ограничение.
function checkrange_mappingtable_a(
acol_value,
bcol_value,
ccol_value,
startdate_value,
enddate_value
) {
--find all date ranges for this combination in mappingtable_a
--verify the new range doesn't overlap
}
Мне интересно, могу ли я создать функцию, которая будет обрабатывать все мои таблицы сопоставления, а не по отдельности.
Что-то вроде
function checkrange (
thetable,
columnlist,
valuelist,
startdate_value,
enddate_value
) {
--find all date ranges in thetable where columnlist=valuelist
--verify the new range doesn't overlap
}
, которое затем можно было бы передать как-то так дляmappingtable_a
.
checkrange(
'mappingtable_a',
['acol','bcol','ccol'],
[acol_value,bcol_value,ccol_value],
startdate_value,
enddate_value
)
Я на приличном пути?Я бы предпочел пойти по этому пути, так как это избавило бы от необходимости создавать функцию для каждой таблицы.