2010-11-21 2 views
1

Как я могу программно узнать, отмечена ли процедура пакета с помощью каких-либо прагм. RESTRICT_REFERENCES (WNDS, WDPS, RNDS ...)?, запрашивающий RESTRICT_REFERENCES pragma

+0

Мне пришло в голову, что я могу попытаться вызвать эту процедуру из другой процедуры, помеченной прагмой (скажем, WNDS), используя __execute__ __immediate__, и я бы получил ошибку, если рассматриваемая процедура не является WNDS. Я знаю, это перебор. Любые лучшие решения приветствуются! – milan

ответ

0

Единственный способ, которым я могу сказать, чтобы запросить исходный код пакета, например:

select text from all_source 
where UPPER(text) like '%PRAGMA RESTRICT_REFERENCES%' 
and owner = :owner 
and name = :package_name 
and type = 'PACKAGE'; 

Не полностью достоверны (это не будет забрать его, если определение Прагма разделяется на несколько строк и имеет дополнительное пространство или что-то еще).

+0

Не будет работать вообще, если для каждой подпрограммы (процедуры функции) в пакете заданы прагмы. – milan

+0

@milan: на самом деле это именно то, что этот запрос даст вам - по одной строке для каждой процедуры или функции. Затем вы можете проанализировать имя, если хотите, в зависимости от того, насколько совместим стиль кодирования. –

Смежные вопросы