您可以避免使用光标,并尝试使用源SQL插入/创建行,下面的SQL查询将为您提供如何在不使用光标的情况下实现这一点的基本概念。
ex(在op更新问题后编辑,根据组级别处理):
假设(您的原始SQL不完整,并且不清楚哪个字段存储在哪个字段中,哪个字段存储在哪个字段中,哪个字段存储在cursor变量的for value表中)-YYYY存储在value表的日期字段中。
--create value table rows
INSERT INTO Value (Value, Date, Color)
SELECT
case
when group_level_nb = 2 then total
when group_level_nb = 3 then maxval
end, yyyy, color from
(
select
sum(value_nb) total,
to_char(hr, 'yyyy') yyyy,
sum(value_nb) total,
max(value_nb) maxval,
color
form_field form_field,
grouping_id(to_char(hr, 'yyyy'), form_field, color) AS group_level_nb
from
value v
left outer join submission_value_rel sv on v.value_id = sv.value_id
left outer join submission s on sv.submission_id = s.submission_id
group by cube (to_char(hr, 'yyyy'), form_field_tx, color)
) src
WHERE group_level_nb IN (2,3);
--create calculation table rows
INSERT INTO Calculation (year)
SELECT DISTINCT Date From Value;
--create rel table
INSERT INTO Calculation_Rel (Calculation_id, Value_Id)
SELECT B.Calculation_id, A.Value_Id
FROM Value A
INNER JOIN Calculation B ON A.Date = B.Year;