упрощение создания пакетов и представлений

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

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

Или любой альтернативный, чтобы работать над этим.

13.10.2009 06:35:53
Добавление текста «Циркуляр», в надежде, что он будет добавлен в индекс SO и поможет другим найти этот хороший вопрос и ответы.
Rich Bianco 19.09.2017 23:17:16
3 ОТВЕТА
РЕШЕНИЕ

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

Поэтому вам нужно создать набор сценариев views1.sql, views2.sql, ... и packages1.sql, packages2.sql, ... Views1.sql содержит только те представления, которые не ссылаются ни на какие пакеты. Packages1.sql содержит только пакеты, которые не ссылаются на какие-либо представления. Views2.sql содержит только те представления, которые ссылаются на пакеты из packages1.sql. Packages2.sql содержит только пакеты, которые ссылаются на представления из views1.sql.

И так до тех пор, пока вы не закончите.

1
13.10.2009 06:48:50
@rics. +1. Спасибо за быстрый ответ. На самом деле я делаю то же самое, вызывая сценарии в этой последовательности. Хотел узнать, есть ли лучший способ справиться с этим.
Viky 13.10.2009 07:09:01
У меня был пакет, ссылающийся на представление, для которого то же самое представление ссылалось на другую функцию в пакете. Не уверен, что эта идея сработала бы. В итоге я сначала скомпилировал Spec, затем представление, ссылающееся на пакет, затем Body. Спасибо.
Rich Bianco 19.09.2017 23:13:54

Вы можете просто создать все ваши представления вначале, используя синтаксис

CREATE OR REPLACE FORCE VIEW

который создает представление, даже если указанные объекты еще не существуют, затем создайте все спецификации вашего пакета, а затем тела.

Теперь вы можете скомпилировать все недействительные объекты или просто позволить Oracle позаботиться об этом (см. Эту ссылку)

Спроси Тома - «недействительные объекты»

3
13.10.2009 09:56:57

Сначала создайте спецификации пакета.

Во-вторых, создайте представления - они ссылаются на спецификацию, а не на тело.

В-третьих, создайте тела пакетов - они ссылаются на представления.

4
13.10.2009 09:18:11
Работал как шарм. Наш DBA предпочитает всю DDL-компиляцию, как магию, так что это было лучше, чем компиляция недействительной. Когда я впервые столкнулся с этим, было представление, которое ссылалось на функцию в пакете, а другая функция в пакете ссылалась на то же представление. Мне понадобилось время, чтобы найти это - я использовал круговую ссылку в качестве критерия поиска.
Rich Bianco 19.09.2017 23:11:20