Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Информация о пакетах  [new]
tolik_che
Member

Откуда: Питер
Сообщений: 35
Гуру oracle`a, подскажите пожалуйста как получить следующую информацию о пакетах:
1 имена процедур и функций пакета
2 параметры этих процедур и функий
3 значения по умолчанию и то, является ли аргумент "входящим" или "выходящим"?

Я нашел только такое представление как ALL_ARGUMENTS. В нем есть столбец defaul_value, но значений в нем нет. И ALL_PROCEDURES в котором есть только имена процедур.

Откуда еще можно получить подобную информацию?
9 окт 06, 15:23    [3237563]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Вы на верном путитоварисч....
ALL_OBJECTS
9 окт 06, 15:37    [3237666]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
tolik_che
Member

Откуда: Питер
Сообщений: 35
Дык из ALL_OBJECTS для пакетов ничего нового кроме как валидность не достать. Еще ест время создания и владелец но все это есть и в преведенных выше представлениях.
Еще заодно вопрос возник. Если в качестве значения по умалчинию используется такая конструкция
 tblowner_   IN   VARCHAR DEFAULT USER 
как это будет отображаться где нибуь, где оно должно отображаться в представлении...
9 окт 06, 15:44    [3237735]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
Elic
Member

Откуда:
Сообщений: 30023
tolik_che
Я нашел только такое представление как ALL_ARGUMENTS.
И это всё.
tolik_che
В нем есть столбец defaul_value, но значений в нем нет.
Это нигде не формализовано. ALL_ARGUMENTS - это информация для SQL-движка. А ему важно лишь, можно ли не задавать параметр.
tolik_che
И ALL_PROCEDURES в котором есть только имена процедур.
Смотри тщательней. Там много чего есть.
tolik_che
Откуда еще можно получить подобную информацию?
Синтаксический анализатор в зубы и ...

______________________________________________________________________

2 Vint
Твой гон совершенно вне темы.
9 окт 06, 15:45    [3237747]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
tolik_che
Member

Откуда: Питер
Сообщений: 35
Elic, спасибо.
9 окт 06, 15:52    [3237798]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15490
упомянутый выше факт(не значение) есть ли у парамера default_value
можно найти выполнив SYS.DBMS_DESCRIBE.DESCRIBE_PROCEDURE
9 окт 06, 17:37    [3238504]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10100
Elic
Это нигде не формализовано. ALL_ARGUMENTS - это информация для SQL-движка. А ему важно лишь, можно ли не задавать параметр.


??? If ему важно, then how does it make that decision based on NULL ALL_ARGUMENTS.DEFAULT_VALUE? Truth is, SQL engine does not care, it passes the call to PL/SQL engine as is. It is PL/SQL engine that raises an error when mandatory parameter is missing. That is why ALL_ARGUMENTS.DEFAULT_VALUE is always null:

SQL> create or replace
  2  function f2(x number) return number is begin return x; end;
  3  /

Function created.

SQL> select f2 from dual;
select f2 from dual
       *
ERROR at line 1:
ORA-06553: PLS-306: wrong number or types of arguments in call to 'F2'


SQL> 

SY.
10 окт 06, 06:46    [3239553]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10100
orawish
упомянутый выше факт(не значение) есть ли у парамера default_value
можно найти выполнив SYS.DBMS_DESCRIBE.DESCRIBE_PROCEDURE


True. But fact is, Oracle, IMHO, had to provide that information in XXX_ARGUMENTS views. They are based on SYS.ARGUMENT$ table which besides always NULL columns default$ (maps into DEFAULT_VALUE) and deflength (maps into DEFAULT_LENGTH) has column default# which is NULL for arguments without default value and 1 for arguments with default value. At the same time, as I already replied to Elic, SQL does not care - PL/SQL will figure it out.

SY.
10 окт 06, 07:10    [3239569]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10100
SY
Truth is, SQL engine does not care, it passes the call to PL/SQL engine as is.


Just to clarify myself. "does not care" and "as is" applies to argument count only. Obviously SQL engine cares about argument datatypes and will raise an error if argument can not be converted to corresponding datatype.

SY.
10 окт 06, 07:49    [3239599]     Ответить | Цитировать Сообщить модератору
 Re: Информация о пакетах  [new]
Elic
Member

Откуда:
Сообщений: 30023
SY
Elic
ALL_ARGUMENTS - это информация для SQL-движка. А ему важно лишь, можно ли не задавать параметр.
Truth is, SQL engine does not care, it passes the call to PL/SQL engine as is. It is PL/SQL engine that raises an error when mandatory parameter is missing. That is why ALL_ARGUMENTS.DEFAULT_VALUE is always null:
Действительно, all_arguments.default_* - это изначальная фикция.
Хотя в глубинах словаря актуальная информация о default-ности хранится:
SQL> select default#, count(*) from sys.argument$ group by default#;

     DEFAULT#      COUNT(*)
------------- -------------
            1          5561
                      36694

2 rows selected.
, но не используется SQL-движком:
select position#,sequence#,level#,argument,type#,charsetid,charsetform,
    properties,
    nvl(length, 0), nvl(precision#, 0),nvl(scale, 0),nvl(radix, 0),type_owner,type_name,type_subname,type_linkname,pls_type
  from argument$
  where obj#=:1 and procedure#=:2
  order by sequence# desc
, а только пакетом dbms_describe.


SY
column default# which is NULL for arguments without default value and 1 for arguments with default value. At the same time, as I already replied to Elic, SQL does not care - PL/SQL will figure it out.
Just to clarify myself. "does not care" and "as is" applies to argument count only.
Тем не менее, несмотря на всё вышесказанное, SQL-движок(9i) имеет имеет информацию о default-ности аргументов:
SQL> select default#, bitand(properties, 1), count(*) from sys.argument$ group by default#, bitand(properties, 1);

     DEFAULT# BITAND(PROPERTIES,1)      COUNT(*)
------------- -------------------- -------------
                                 0         28048
            1                    1          5175

2 rows selected.
и использует её до обращения к PL/SQL-движку. На 9-ке доказать это сложно, поскольку рекурсивные вызовы PL/SQL из SQL не попадают в трассу. На 7-ке же в трассе видно, что "плохие"(ORA-06553: PLS-306) вызовы PL/SQL даже не пытаются парситься, что доказывает их отвергание ещё SQL-движком (откуда 7-ка берёт информацию о default-ности аргументов - не докопал).

BTW, ни там, ни там сам запрос с "плохим" вызовом PL/SQL подленько так не попадает в трассу
10 окт 06, 11:22    [3240486]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить