2017-02-14 12 views
0

Я работаю над CR, где мне нужно создать пакет PL/SQL, и я немного запутался в этом подходе.Как создать пакет PL/SQL для отказа от нескольких уровней каскадных представлений

Фон: есть вид названный 'D' который находится в конце цепи взаимозависимых видов в последовательности.
Мы можем поставить его как:
А - таблица фактов (Населенный использованием Informatica, источник MS-Dynamics)
Б - вид 1 на основе таблицы фактов
С - вид 2 на основе View1
D - View 3 на основе on view2
Каждый вид имеет несколько объединений с другими таблицами в структуре вместе с базовым видом.

Требование: Клиент хочет удалить все эти виды и создать пакет PL/SQL, который может вставлять данные непосредственно из MS-Dynamics в View3, т. Е. «D».

Прежде чем придумать что-нибудь сложное. Я хотел бы знать, существует ли какой-либо стандартный подход для решения таких требований.

Любые советы/предложения приветствуются.

ответ

1

Должно быть очевидно, что вам по-прежнему нужна таблица фактов для хранения некоторых данных.

Вы можете избавиться от B и C, сделав D более сложным (предложение WITH может помочь сохранить его надёжным).

Вставка данных в D (по всей вероятности) невозможна сама по себе, но вы можете создать триггер и INSTEAD OF INSERT, чтобы обрабатывать это, то есть вместо этого вставлять в таблицу фактов А.

Пример использования WITH пункт:

Вместо

create view b as select * from dual; 
create view c as select * from b; 
create view d as select * from c; 

вы могли бы написать

create view d as 
    with b as (select * from dual), 
     c as (select * from b) 
    select * from c; 

Как вы можете видеть, существующее определение представления идет 1: 1 в WITH , поэтому создать представление для объединения всех видов не так уж сложно.

0

Несколько наперво

1) Вид предопределенный запрос SQL, так что не представляется возможным вставлять записи прямо в нее. Даже материализованное представление, которое является устойчивой структурой таблицы, только заполняется результатами запроса, поэтому, поскольку все это стоит, это невозможно. Можно создать новую таблицу для заполнения данных, которые в настоящее время агрегируются в представлении D

2) Очень возможно агрегировать данные на уровнях множественности в Informatica, используя комбинацию нескольких встроенных сортировщиков и агрегатных преобразований, которые будут генерировать данные на уровне, который вы ищете.

3) Должны ли вы это сделать? Передовые методы хранения данных скажут «нет» и сохраните данные как можно более подробно по исходной таблице А, чтобы их можно было свертывать разными способами (см. Сайт группы Кимбалла и прочитать схему звезд для таких вопросов). У вас много шансов на выбор?

4) Текущий процесс (в то время как часто используется) не намного лучше с точки зрения звездообразной схемы

0

Если вы на Oracle 12c вы можете посмотреть на DBMS_UTILITY.EXPAND_SQL_TEXT, хотя вы, вероятно, хотите, чтобы убирать вывести бит для удобочитаемости.