sql >> Database >  >> RDS >> Oracle

inhoud van de pakketaangifte

U kunt details over de functies en procedures in een pakket vinden door de ALL_ARGUMENTEN datadictionary-weergave, of de broeders USER_ARGUMENTS en DBA_ARGUMENTS.

Als voorbeeld heb ik het volgende pakket gemaakt:

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;

Ik heb er toen de volgende query tegen uitgevoerd:

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

Hier ziet u alle argumenten voor de functies en procedures in ons pakket. Merk op dat er een extra invoer is met een null-argumentnaam voor de retourwaarde voor elk van de twee functies. Ook heeft de procedure die geen argumenten heeft een rij met een null-argumentnaam en een nul SEQUENCE waarde.

Om alle functies op te sommen, zou u dus naar alle items in deze weergave kunnen zoeken met een null-argumentnaam en een SEQUENCE waarde niet gelijk aan 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

Procedures op een vergelijkbare manier opsommen is wat lastiger:

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

Hoewel deze benadering lijkt te werken met procedures en functies, weet ik niet hoe ik de pakketbereikvariabelen, typen en andere dingen die in een pakketheader zijn gedeclareerd, moet weergeven zonder de pakketspecificaties te ontleden, zoals voorgesteld door @wweicker.



  1. Veelvoorkomende MySql-interviewvragen en -antwoorden voor frisser + ervaren

  2. Gehumaniseerde of natuurlijke nummersortering van gemengde woord-en-nummerreeksen

  3. Django formulier/database fout:waarde te lang voor type karakter variërend(4)

  4. Is er een manier om in postgres te indexeren voor snelle substring-zoekopdrachten?