Из словаря данных можно извлечь сигнатуры отдельных методов. Соответствующее представление - USER / ALL / DBA_ARGUMENTS.
Есть пара препятствий, на которые стоит обратить внимание. Если аргумент имеет позицию 0, это возвращаемое значение функции, а не параметр. Если параметр является сложным типом (например, вложенная таблица или запись PL / SQL), он будет отображаться несколько раз, причем каждый слой будет увеличивать значение data_level
.
Следующий запрос объединяет аргументы с их собственными процедурами. Я исключаю
записи в USER_PROCEDURES на уровне пакета (то есть subprogram_id=0
) и записи в USER_ARGUMENTS для более низких уровней complex_type (то есть data_level > 0
). Запрос также обрабатывает процедуры без каких-либо параметров.
SQL> select o.object_type
2 , case
3 when o.object_type in ( 'PACKAGE', 'TYPE') then p.object_name
4 else null
5 end as object_name
6 , case
7 when o.object_type in ( 'PACKAGE', 'TYPE') then p.procedure_name
8 else p.object_name
9 end as procedure_name
10 , case
11 when a.position != 0 then a.argument_name
12 when a.position = 0 then '** return value **'
13 else null
14 end as argument_name
15 , a.data_type
16 from user_arguments a
17 , user_procedures p
18 , user_objects o
19 where o.object_type in ( 'PACKAGE', 'TYPE', 'FUNCTION', 'PROCEDURE')
20 and p.object_name = o.object_name
21 and p.subprogram_id != 0
22 and a.object_id (+) = p.object_id
23 and a.subprogram_id (+) = p.subprogram_id
24 and a.data_level(+) = 0
25 order by o.object_type, o.object_name, p.subprogram_id, a.position
26 /
OBJECT_TYPE OBJECT_NAME PROCEDURE_NAME ARGUMENT_NAME DATA_TYPE
------------------- ------------------------------ ------------------------------ ------------------------------ -------
FUNCTION COMPARE_OBJECTS ** return value ** PL/SQL BOOLEAN
FUNCTION COMPARE_OBJECTS OBJ1 UNDEFINED
FUNCTION COMPARE_OBJECTS OBJ2 UNDEFINED
FUNCTION GET_EMPS ** return value ** REF CURSOR
FUNCTION GET_EMPS P_ARGS UNDEFINED
FUNCTION STR_TO_NUMBER_TOKENS ** return value ** TABLE
FUNCTION STR_TO_NUMBER_TOKENS P_STRING VARCHAR2
FUNCTION STR_TO_NUMBER_TOKENS P_SEPARATOR VARCHAR2
PACKAGE P23 POP_ARRAY ** return value ** TABLE
PACKAGE P23 POP_ARRAY P_NO NUMBER
PACKAGE P23 INS_TABLE P_ARRAY TABLE
PROCEDURE CHANGE_EMP_SAL P_ENO NUMBER
PROCEDURE CHANGE_EMP_SAL P_NEW_SAL NUMBER
PROCEDURE PRINTE
TYPE NEW_EMP EQUALS ** return value ** RAW
TYPE NEW_EMP EQUALS SELF OBJECT
22 rows selected.
SQL>
Я мог бы выбрать другую полезную информацию из USER_ARGUMENTS, например, IN_OUT или параметр DEFAULTED, но я подумал, что он уже достаточно прокручен.