Определение, существует ли где-нибудь хранимая процедура? - PullRequest
0 голосов
/ 27 января 2012

Это вопрос Oracle.

Мне нужно написать функцию pl / sql, которая получает имя и определяет, соответствует ли она какой-либо хранимой процедуре в любом месте, которая может быть вызвана.То есть имя может быть любой из этих форм:

somename - может быть процедурой в текущей схеме или синонимом процедуры в другом месте firstpart.secondpart - может означать пакет firstpart (в текущей схеме ИЛИ aсиноним) с процедурой secondpart в нем, ИЛИ это может означать user firstpart и процедуру secondpart first.second.third - предположительно означает пользователя first, package second, процедуру третий

(я думаю, это все возможности.)*

Я мог бы пройтись по каждой из возможностей по очереди, просматривая all_synonyms и all_procedures, но есть ли лучший способ, чтобы Oracle выполняла большую часть работы?т.е. пытаться вызвать процедуру и перехватить исключение, если оно не существует?К сожалению, я заметил, что вызов процедуры (через блок begin; end в EXECUTE IMMEDIATE) возвращает ту же ошибку, -6550, когда я пробовал имя процедуры, которая не существует (в пакете, который делает), как когда япробовал правильную процедуру с неверными аргументами.

Предложения?

1 Ответ

0 голосов
/ 27 января 2012

Я бы не советовал пытаться вызвать процедуру, потому что тогда все побочные эффекты процедуры возникнут в случае успешного вызова.ИМХО лучше запросить метаданные.

Делись и наслаждайся.

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