Поэтому в настоящее время я пытаюсь вставить агрегированные (суммированные) данные в таблицу с именем Значение .Я пытаюсь создать запись в таблице Расчет для каждого уникального года, который я могу извлечь из своего курсора.Затем я пытаюсь вставить эти отношения в таблицу Value_Calculation_Rel .Если уровень_группы равен '6', я буду вставлять 'YEAR_PEAK_COLOR' в столбец computing_name .Если значение для group_level равно '4', я буду вставлять 'YEAR_PEAK_SHAPE' в столбец computing_name .Поэтому, по сути, мне нужна отдельная запись в таблице Calculation для каждого года.Затем в таблице VALUE я хочу отдельную запись для каждого вычисляемого мной значения (будь то сумма для цвета, фигуры или максимум для цвета, фигуры, сгруппированных по YEAR ).Затем я хочу получить записи в таблице Value_Calculation_Rel , показывающие взаимосвязь между записями в Расчет и Значение (по годам).
Конечный результатчто я хочу, выглядит так:
ТАБЛИЦА РАСЧЕТОВ
CALCULATION_ID CALCULATION_DATE CALCULATION_NAME REPORT_PERIOD
1 sysdate 'YEAR PEAK COLOR' 1-1-2017
2 sysdate 'YEAR PEAK SHAPE' 1-1-2017
3 sysdate 'YEAR PEAK COLOR' 1-1-2018
4 sysdate 'YEAR PEAK COLOR' 1-1-2019
5 sysdate 'YEAR PEAK SHAPE' 1-1-2019
СТОИМОСТЬ ЗНАЧЕНИЯ
VALUE_ID VALUE YR
1 55 1-1-2017
2 10 1-1-2017
3 18 1-1-2018
4 22 1-1-2019
5 77 1-1-2018
6 101 1-1-2019
7 33 1-1-2019
CALCULATON_VALUE REL TABLE
CALCULATION_VALUE_ID CALCULATION_ID VALUE_ID SHAPE COLOR
1 1 1 null RED
2 2 2 CIRCLE null
3 3 3 null BLUE
4 4 4 null BLUE
5 3 5 SQUARE null
6 4 6 null RED
7 5 7 SQUARE null
Ниже приведен мой код (который в настоящее время создает новую запись расчета для каждого значения, что неверно):
create or replace procedure STORED_PROC
IS
CURSOR c1 is
select
trunc(hr, 'yyyy') yr,
shape,
sum(value) total,
max(value) maxval,
color,
grouping_id(trunc(hr, 'yyyy'), shape, color) AS group_level_nb
from value v
join calculation_value cv on v.value_id = cv.value_id
group by cube (trunc(hr, 'yyyy'), shape, color);
l_var c1%ROWTYPE;
v_value_id value.value_id%type;
v_calculation_id calculation.calculation_id%type;
--
BEGIN
IF l_var.group_level_nb = '6'
THEN
INSERT INTO CALCULATION(calculation_id, calculation_date, calculation_name, report_period_dt)
VALUES (null, sysdate, 'YEAR_PEAK_COLOR' || to_char(sysdate, 'hh24:mi:ss'), l_var.yr)
returning calculation_id into v_calculation_id;
INSERT INTO value(value_id, value, yr)
VALUES (null, l_var.total, l_var.yr)
returning value_id into v_value_id;
INSERT INTO calculation_value (calculation_value_id, calculation_id, value_id, color)
VALUES (null, v_calculation_id, v_value_id, l_var.color);
commit;
--
ELSIF l_var.group_level_nb = '4'
THEN
INSERT INTO CALCULATION(calculation_id, calculation_date, calculation_name, report_period_dt)
VALUES (null, sysdate, 'YEAR_PEAK_SHAPE ' || to_char(sysdate, 'hh24:mi:ss'), l_var.yr )
returning calculation_id into v_calculation_id;
--
INSERT INTO value (value_id, value, yr)
VALUES (null, l_var.maxval, l_var.yr) returning value_id into v_value_id;
INSERT INTO calculation_value (calculation_value_id, calculation_id, value_id, shape)
VALUES (null, v_calculation_id, v_value_id, l_var.shape);
END IF;
--
commit;
--
END STORED_PROC;
Пожалуйста, дайте мне знатьесли есть какая-либо дополнительная информация, которую я мог бы опустить, которую мне необходимо добавить.Заранее спасибо.