sql >> Database teknologi >  >> RDS >> Oracle

indholdet af pakkedeklarationen

Du kan finde detaljer om funktionerne og procedurerne i en pakke ved at forespørge på ALLE_ARGUMENTS dataordbogsvisning eller dens brødre USER_ARGUMENTS og DBA_ARGUMENTS.

Som et eksempel oprettede jeg følgende pakke:

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;

Jeg kørte derefter følgende forespørgsel mod det:

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

Her kan du se alle argumenterne til funktionerne og procedurerne i vores pakke. Bemærk, at der er en ekstra post med et null-argumentnavn for returværdien for hver af de to funktioner. Den procedure, der ikke har nogen argumenter, har også en række med et nul-argumentnavn og et nul SEQUENCE værdi.

Så for at liste alle funktioner kan du søge efter alle poster i denne visning med et null-argumentnavn og en SEQUENCE værdi ikke lig med 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

Listeprocedurer på en lignende måde er lidt vanskeligere:

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

Selvom denne tilgang ser ud til at fungere med procedurer og funktioner, ved jeg ikke, hvordan jeg skal liste pakkeomfangsvariabler, typer og andre ting, der er erklæret i en pakkeheader uden at parse pakkespecifikationen, som foreslået af @wweicker.



  1. Konfigurer SQL Server Always ON Tilgængelighedsgrupper mellem to synkrone replikaer. Del 2

  2. Efter at have åbnet csv-fil i wordpad, vil jeg ikke have dobbelte anførselstegn for feltnavnet

  3. Oracle (+) ydre sammenføjning og konstante værdier

  4. Hvordan kan vi bruge ISNULL til alle kolonnenavne i SQL Server 2008?