Цикличное заполнение отсутствующих записей
Представим две таблицы с таким набором данных.
Таблица Table_s
Характеризует собой вид продукта, мы будем рассматривать яблоко.
CREATE TABLE table_s(
s_id number,
s_value varchar(200)
);
INSERT INTO table_s VALUES
(10001, 'Яблоко'),
(10001, 'Огурцы');
S_id | s_value |
---|---|
10001 | Яблоко |
10002 | Огурцы |
На яблоки есть заказы, она же Table_o
, связываются они путем использоваться S_id
через fk_s_id
таблицы Table_s
, тип связи - один s_id
ко многим fk_s_id
.
CREATE TABLE Table_o(
order_value varchar(20),
fk_s_id number
);
INSERT INTO Table_o VALUES
('00/22', 10001),
('11/23', 10001);
order_value | fk_s_id |
---|---|
00/22 | 10001 |
11/23 | 10001 |
На каждый заказ можно задать свое количество яблок, количество можно задать через таблицу Table_C
, связь идет по order_value
таблицы заказов - table_o
, так и с помощью связи с S_id
таблицы Table_s
, связь типа 1 к 1 в обоих случаях, но вот незадача...
CREATE TABLE Table_C(
c_id number,
fk_s_id number,
fk_order_value varchar(20),
c_count number
);
--p.s. Сверху уже написал триггер на инсерт для генерации id по секвенции,
-- нет необходимости генерировать ID самостоятельно для данной таблицы
INSERT INTO Table_C VALUES
(null, 10001, 00/22, 25);
c_id | fk_s_id | fk_order_value | c_count |
---|---|---|---|
1 | 10001 | 00/22 | 25 |
Запись количества создана только на 1 заказ.
Следовательно при попытке запроса c_count
на заказ 11/23
мы будем получать null
.
Необходимо реализовать процедуру, при котором можно будет обнаруживать отсутствующие записи, а после этого insert'ить их с количеством по умолчанию "1"
Желаемый результат после исполнения процедуры
select * from Table_C
c_id | fk_s_id | fk_order_value | c_count |
---|---|---|---|
1 | 10001 | 00/22 | 25 |
2 | 10001 | 11/23 | 1 |