Oracle
 sql >> база данни >  >> RDS >> Oracle

съдържанието на декларацията за пакета

Можете да намерите подробности за функциите и процедурите в пакет, като направите заявка към ВСИЧКИ_АРГУМЕНТИ изглед на речник на данни или неговите братя USER_ARGUMENTS и DBA_ARGUMENTS.

За пример създадох следния пакет:

CREATE OR REPLACE PACKAGE demo AS
    PROCEDURE p_none;
    PROCEDURE p_two(a INTEGER, b INTEGER);

    FUNCTION f_none RETURN INTEGER;
    FUNCTION f_three(c INTEGER, q INTEGER, z INTEGER) RETURN INTEGER;
END;

След това изпълних следната заявка срещу него:

SQL> select object_name, argument_name, sequence, in_out
  2    from all_arguments
  3   where package_name = 'DEMO'
  4   order by object_name, sequence;

OBJECT_NAME                    ARGUMENT_NAME                    SEQUENCE IN_OUT
------------------------------ ------------------------------ ---------- ---------
F_NONE                                                                 1 OUT
F_THREE                                                                1 OUT
F_THREE                        C                                       2 IN
F_THREE                        Q                                       3 IN
F_THREE                        Z                                       4 IN
P_NONE                                                                 0 IN
P_TWO                          A                                       1 IN
P_TWO                          B                                       2 IN

Тук можете да видите всички аргументи на функциите и процедурите в нашия пакет. Имайте предвид, че има допълнителен запис с нулево име на аргумент за върнатата стойност за всяка от двете функции. Освен това процедурата, която няма аргументи, има ред с нулево име на аргумент и нула SEQUENCE стойност.

Така че, за да изброите всички функции, можете да търсите всички записи в този изглед с нулево име на аргумент и SEQUENCE стойност не е равна на 0:

SQL> select distinct object_name
  2    from all_arguments
  3   where package_name = 'DEMO'
  4     and argument_name is null
  5     and sequence != 0;

OBJECT_NAME
------------------------------
F_THREE
F_NONE

Изброяването на процедури по подобен начин е малко по-трудно:

SQL> select distinct object_name
  2    from all_arguments a1
  3   where package_name = 'DEMO'
  4     and (   sequence = 0
  5          or not exists (select 0
  6                           from all_arguments a2
  7                          where a2.package_name = 'DEMO'
  8                            and a2.object_name = a1.object_name
  9                            and a2.argument_name is null));

OBJECT_NAME
------------------------------
P_TWO
P_NONE

Докато изглежда, че този подход работи с процедури и функции, не знам как да изброя променливите, типовете и другите неща, декларирани в заглавката на пакета, без да анализирам спецификацията на пакета, както е предложено от @wweicker.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо заявката SELECT не стартира транзакцията? [Оракул]

  2. Тригери:как мога да инициализирам стойността на таблица със стойност на друга?

  3. Преместване на данни от oracle към HDFS, обработка и преместване към Teradata от HDFS

  4. Разделяне на низ, ограничен от тръбата, в колони?

  5. Предайте масив като входен параметър към съхранена процедура на oracle, използвайки просто jdbc извикване