10g Упаковка - Ограничение ссылок - PullRequest
0 голосов
/ 26 сентября 2011

Я создаю довольно большой пакет Oracle 10g, полный функций и т. Д.

Проблема в том, что некоторые из этих функций извлекают информацию из материализованного представления или таблиц, которые создают другие функции.

Есть ли способ успешно скомпилировать пакет, даже если некоторые функции не могут найти информацию, которую они ищут (но эти функции будут работать после создания представлений?).

Попытки: Я изучил PRAGMA RESTRICT_REFERENCES, но пока не добился успеха. Я даже на правильном пути или это даже невозможно?

1 Ответ

4 голосов
/ 26 сентября 2011

С помощью статического SQL нельзя ссылаться на объекты, которые не существуют, когда код компилируется.Вы ничего не можете с этим поделать.

Вам потребуется изменить код, чтобы использовать динамический SQL для ссылки на любой объект, созданный во время выполнения.Вы, вероятно, можете использовать EXECUTE IMMEDIATE, то есть

EXECUTE IMMEDIATE 
  'SELECT COUNT(*) FROM new_mv_name'
  INTO l_cnt;

вместо

SELECT COUNT(*)
  INTO l_cnt
  FROM new_mv_name;

При этом, однако, я был бы крайне сомнителен в реализации PL / SQL, которая требовала создания любогоновые таблицы и материализованные представления во время выполнения.Это почти всегда ошибка в Oracle.Зачем вам нужно создавать новые объекты во время выполнения?

...