Вам не нужен курсор, и вам даже не нужен PL / SQL; Вы можете просто использовать:
INSERT INTO DW_FACT_TABLE( fact_id, sessionid )
SELECT DW_FACT_TABLE_SEQ.nextval,
c.SESSIONID
FROM DW_SESSION s
CROSS JOIN DW_TEMP a
CROSS JOIN DW_REFERENCES b
CROSS JOIN DW_EMPLOYEE_DETAILS c;
И вы, вероятно, не хотите использовать CROSS JOIN
(и это, вероятно, является причиной ваших проблем, поскольку вы генерируете слишком много строк), но без дополнительной информации о вашем Структура таблицы и ссылки на внешние ключи мы не можем предложить, как ее улучшить.
Что-то вроде:
INSERT INTO DW_FACT_TABLE( fact_id, sessionid )
SELECT DW_FACT_TABLE_SEQ.nextval,
c.SESSIONID
FROM DW_SESSION s
INNER JOIN DW_TEMP t
ON ( s.fk_to_dw_temp_id = t.id )
INNER JOIN DW_REFERENCES r
ON ( t.fk_to_dw_references_id = r.id )
INNER JOIN DW_EMPLOYEE_DETAILS e
ON ( r.fk_to_dw_employee_id = e.id );