Получение схемы процедуры PL / SQL - PullRequest
4 голосов
/ 15 февраля 2012

Мне нужно получить определения параметров процедуры PL / SQL.

В MS SQL мы используем Information_schema.Parameters;что такое аналог (если есть) в Oracle?

Ответы [ 2 ]

7 голосов
/ 15 февраля 2012

Большинство (если не все) одних и тех же данных доступны в Oracle из таблицы словаря данных ALL_ARGUMENTS . ALL_ARGUMENTS показывает аргументы для всех процедур, которые вы имеете право выполнять. USER_ARGUMENTS показывает вам аргументы для всех процедур, которыми вы владеете. И DBA_ARGUMENTS показывает вам аргументы для всех процедур, существующих в базе данных, но вам нужны дополнительные привилегии для доступа к DBA_* представлениям.

0 голосов
/ 15 февраля 2012

Большая часть информации о параметрах хранимой процедуры находится в ALL_ARGUMENTS и аналогично в USER_ARGUMENTS и DBA_ARGUMENTS

Вот быстрый пример с использованием USER_ARGUMENTS

CREATE OR REPLACE PROCEDURE my_proc
(p_number IN NUMBER,
p_varchar  IN OUT  VARCHAR2 ,
p_clob  IN OUT  NOCOPY CLOB,
p_timestamp  OUT  TIMESTAMP
)
IS
BEGIN
   NULL;
END;
/

CREATE OR REPLACE FUNCTION my_func
(p_date IN DATE,
p_varchar IN VARCHAR2)
RETURN BOOLEAN
IS
BEGIN
return TRUE;
END;
/

SELECT package_name,object_name, argument_name,  IN_OUT , pls_type ,position
FROM user_arguments
WHERE object_name IN ('MY_PROC','MY_FUNC')
ORDER BY package_name, object_name, position;

, который дает вывод ..

Procedure created.

Function created.

 PACKAGE_NAME          OBJECT_NAME                    ARGUMENT_NAME             IN_OUT    PLS_TYPE              POSITION
--------------------- ------------------------------ ------------------------- --------- -------------------- ----------
                       MY_FUNC                                                  OUT       BOOLEAN                      0
                       MY_FUNC                        P_DATE                    IN        DATE                         1
                       MY_FUNC                        P_VARCHAR                 IN        VARCHAR2                     2
                       MY_PROC                        P_NUMBER                  IN        NUMBER                       1
                       MY_PROC                        P_VARCHAR                 IN/OUT    VARCHAR2                     2
                       MY_PROC                        P_CLOB                    IN/OUT    CLOB                         3
                       MY_PROC                        P_TIMESTAMP               OUT       TIMESTAMP                    4

7 rows selected.

Как вы можете видеть, он имеет наиболее полезную информацию ... но не показывает подсказку NOCOPY. значение ARGUMENT_NAME, равное нулю, является «возвращаемым значением» функции

версия ALL_ и DBA_ будет иметь дополнительный столбец OWNER.

дополнительная информация о самой хранимой процедуре может быть найдена в ALL_PROCEDURES , ALL_PLSQL_OBJECT_SETTINGS и ALL_OBJECTS в зависимости от того, какой уровень детализации вы ищете.

...