Oracle
 sql >> Baza danych >  >> RDS >> Oracle

treść deklaracji opakowania

Szczegółowe informacje o funkcjach i procedurach w pakiecie można znaleźć, wysyłając zapytanie do WSZYSTKIE_ARGUMENTY widok słownika danych lub jego braci USER_ARGUMENTS i DBA_ARGUMENTS.

Jako przykład stworzyłem następujący pakiet:

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;

Następnie uruchomiłem następujące zapytanie:

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

Tutaj możesz zobaczyć wszystkie argumenty funkcji i procedur w naszym pakiecie. Zauważ, że istnieje dodatkowy wpis z nazwą argumentu null dla wartości zwracanej dla każdej z dwóch funkcji. Ponadto procedura, która nie ma argumentów, ma wiersz z nazwą argumentu o wartości NULL i zerową SEQUENCE wartość.

Tak więc, aby wyświetlić wszystkie funkcje, możesz wyszukać wszystkie wpisy w tym widoku z nazwą argumentu pustego i SEQUENCE wartość nie równa 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

Procedury wystawiania w podobny sposób są nieco trudniejsze:

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

Chociaż wydaje się, że to podejście działa z procedurami i funkcjami, nie wiem, jak wyświetlić listę zmiennych zakresu pakietu, typów i innych rzeczy zadeklarowanych w nagłówku pakietu bez analizowania specyfikacji pakietu, jak sugeruje @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. (Oracle SQL) Wyłapywanie unikalnego błędu ograniczenia

  2. Jak wyświetlić rekordy z tabeli uporządkowanej jak w klauzuli where?

  3. Jak unieważnić instrukcję SQL w obszarze Oracle SQL, aby podczas zbierania statystyk powstał nowy plan?

  4. Jak załączyć plik z katalogu do wiadomości e-mail wysłanej za pomocą utl_smtp?

  5. Oracle SQL pierwszego i ostatniego dnia kwartału dowolnego roku