ИСПОЛЬЗОВАНИЕ МНОГОКРАТНОГО ID ИЗМЕРЕНИЯ В FACT TABLE - PullRequest
0 голосов
/ 20 марта 2020

INSERT INTO DW_FACT_TABLE (factid, sessionid, tempid) SELECT DW_FACT_TABLE_SEQ.nextval, c .SESSIONID, t.TEMPID FROM DW_SESSION c, dw_temp t;

Я использую мой университетский сервер. Я не могу изменить квоту пространства, и я удалил много таблиц, которые я не использую. Я все еще получаю эту ошибку. Любой альтернативный способ использования идентификатора всех измерений и помещения его в таблицу фактов с помощью курсора. заранее спасибо. Как уже говорилось, я пытаюсь поместить все измерения, используя их ID в таблицу FACT. Я успешно пытался сделать SESSION, но добавление других с использованием INNER JOIN, CROSS JOIN и CURSOR не сработало. CROSS JOIN дает мне 64 000 записей, которые являются дубликатами каждой. СЕССИЯ имеет 357 записей, а TEMP имеет 182 записи.

1 Ответ

0 голосов
/ 20 марта 2020

Вам не нужен курсор, и вам даже не нужен 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...