Hi Fernando,
sorry for the delay.
Please find attached my current Cursor code. The problem is that the included Select took a lot of time.
/*
* Loop over change ids and retrieve valid values for this time
*/
FOR change_record as c_change_id DO
IF change_record.CHANGEID = -1 THEN
lv_stmt := 'INSERT INTO "SAPSOPG"."GT_' || IV_PLAREA || '_PLANDATA_INT" (' || IV_FILTER || ', ' || IV_ATTRIBUTE || ', PERIODID0, CHANGEID) ' ||
'SELECT ' || IV_FILTER || ', ' || IV_ATTRIBUTE || ',PERIODID0, ' || change_record.CHANGEID || ' AS CHANGEID ' ||
'FROM ' || :lv_calc_scenario_name ||
'WHERE PERIODID0 = ' || change_record.PERIODID || ' ' ||
'ORDER BY ' || IV_FILTER || ' ' ||
'with parameters(''placeholder''=(''$$sqlselect$$'',''select ' || IV_FILTER || ', ' || IV_ATTRIBUTE || ',PERIODID0 from ''))';
ELSE
/* query calc for changed values */
lv_stmt := 'INSERT INTO "SAPSOPG"."GT_' || IV_PLAREA || '_PLANDATA_INT" (' || IV_FILTER || ', ' || IV_ATTRIBUTE || ', PERIODID0, CHANGEID) ' ||
'SELECT ' || IV_FILTER || ', ' || IV_ATTRIBUTE || ', PERIODID0, ' || change_record.CHANGEID || ' AS CHANGEID ' ||
'FROM ' || :lv_calc_scenario_name || ' ' ||
'WHERE PERIODID0 = ' || change_record.PERIODID || ' ' ||
'ORDER BY ' || IV_FILTER || ' ' ||
'with parameters(''placeholder''=(''$$sqlselect$$'',''select ' || IV_FILTER || ', ' || IV_ATTRIBUTE || ' ,PERIODID0, PERIODID from ''),''placeholder''=(''$$CHANGEID$$'',''' || change_record.CHANGEID || '''))';
END IF;
EXEC :lv_stmt;
END FOR;
Is a While loop handled like a cursor or is it parallelized by the optimizer?
Thanks,
Max