Как получить тип метода внутри пакета? - PullRequest
0 голосов
/ 28 мая 2019

Как я могу получить тип метода (будь то ФУНКЦИЯ или ПРОЦЕДУРА) внутри пакета?

CREATE OR REPLACE PACKAGE SAMPLE_PACKAGE IS

PROCEDURE procedure1;

PROCEDURE procedure2;

FUNCTION function1(
  key_           IN VARCHAR2) RETURN BOOLEAN;

END SAMPLE_PACKAGE;

Мой пакет будет таким, он будет иметь несколько функций и процедур.

Я пробовал примеры типа Как отличить процедуры и функции в метаданных Oracle? с использованием таблиц user_arguments и user_procedures, но это кажется дорогостоящим, когда дело доходит до большого набора данных

SELECT up.object_name, up.procedure_name, up.overload,
CASE WHEN ua.object_id IS NULL THEN 'PROCEDURE' ELSE 'FUNCTION' END AS method_type
FROM user_procedures up LEFT JOIN user_arguments ua ON ( ua.object_id = up.object_id
         AND ua.subprogram_id = up.subprogram_id AND ua.position = 0 )
WHERE up.object_name = 'MY_OBJECT';

1 Ответ

0 голосов
/ 28 мая 2019
select object_name, object_type, name, type
from user_identifiers
where  object_type like 'PACKAGE%'
and usage in ('DECLARATION', 'DEFINITION')
and type in ('FUNCTION', 'PROCEDURE');

Этот простой запрос возвращает все определенные пользователем пакеты. Не стесняйтесь отфильтровать то, что вам нужно.

...