Сколько представлений можно создать в базе данных Oracle? - PullRequest
0 голосов
/ 26 сентября 2018

В отдел гипотетической отчетности нужны тысячи отчетов каждый день.Правильный ли это подход - создание одного отчета для каждого представления в базе данных Oracle 11g?Есть ли у Oracle 11g какие-либо ограничения на создание представлений в базе данных?

Пример кода представления приведен ниже.

    CREATE VIEW Report1DXC AS
select Phonenumber,DECODE(package, 'Package1', 'Package Normal',
                    'Package2', 'Package Normal',
                    'Package3', 'Package Premium',
                    'Package4', 'Package Premium',
                    'Package5', 'Package Normal',
                    'Package6', 'Package Normal',
                    'Package7', 'Package Premium',
                    'Package8', 'Package Premium',
                    'Package9', 'Package Normal',
                    'Package10', 'Package Premium',
                    'Package11', 'Package Premium',
                    'Package12', 'Package Premium') package,renewid,Sub_End_date from (
SELECT DISTINCT subs_id, ContractNo, phonenumber as Phonenumber,
Package, renewid, Sub_End_date,function_mobnum_format(phonenumber) ph_correct
FROM 
subscription_history rh
INNER JOIN sub_equipment se ON rh.subs_id = se.subs_id AND rh.contractno = se.contractno
INNER JOIN packages pk ON rh.pkid = pk.pkid
INNER JOIN sub_phones ph ON rh.subs_id = ph.subs_id and rh.contractno=ph.contractno
INNER JOIN 
(SELECT subs_id, contractno, MAX(sub_end_date) AS sub_end_date FROM subscription_history where currentid=sequenceid GROUP BY subs_id, contractno) lr
ON rh.subs_id = lr.subs_id AND rh.contractno = lr.contractno
WHERE rh.currentid=rh.sequenceid
and emodel LIKE 'DXN%'
and rh.origin='R'
and rh.pcode=09
and rh.cancellation is null
AND TRUNC(lr.sub_end_date) > '29-JAN-18'
AND TRUNC(lr.sub_end_date-5) = TRUNC(SYSDATE)
AND rh.subs_id not in (select subs_id from subscription_history where  TRUNC(sub_end_date-5) > TRUNC(SYSDATE))
and rh.subs_id not in (select subs_id from subscription_history where pkid IN ('PKID10','PKID11'))
ORDER BY rh.subs_id
)where ph_correct='OK';

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Я бы сказал, что Ограничения логической базы данных применимы здесь.«Представления» не указываются напрямую, но учитывается значение «Таблицы», а количество таблиц в базе данных составляет неограничено .

Хотя, как сказал Спросите Тома :

... дизайн схемы, содержащий 100 000 таблиц, я бы серьезно усомнился.Я не знаю ни одной команды людей, которая могла бы разработать, внедрить или поддерживать такую ​​вещь лично

Так что - создавайте столько представлений, сколько хотите, вы не достигнете пределов.

0 голосов
/ 26 сентября 2018

ИМХО там нет.Практически для случаев, когда слишком много представлений, которые зависят друг от друга, существует недокументированный параметр _complex_view_merging.Когда вы злоупотребляете этим шаблоном, оптимизатор Oracle просто сдается и производительность снижается.Этот параметр как-то влияет на его поведение.

Но это все же лучший способ, чем оборачивать SQL в функции PL / SQL и затем использовать их в другом SQL.

Если вы не создаете суперкомплексС зависимостями между представлениями все будет в порядке.Вы даже можете ограничить доступ к базовым таблицам и позволить пользователям видеть то, что им нужно видеть.

PS: вам не следует использовать «упорядочивать по» в представлениях, если вы хотите использовать их в другом представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...