sql >> Databáze >  >> RDS >> Oracle

obsah prohlášení o balení

Podrobnosti o funkcích a postupech v balíčku můžete najít dotazem na VŠECHNY_ARGUMENTY zobrazení datového slovníku nebo jeho bratrů USER_ARGUMENTS a DBA_ARGUMENTS.

Pro příklad jsem vytvořil následující balíček:

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;

Poté jsem proti němu spustil následující dotaz:

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

Zde můžete vidět všechny argumenty funkcí a procedur v našem balíčku. Všimněte si, že pro vrácenou hodnotu pro každou ze dvou funkcí existuje další položka s názvem argumentu null. Procedura, která nemá žádné argumenty, má také řádek s nulovým názvem argumentu a nulou SEQUENCE hodnotu.

Chcete-li tedy vypsat všechny funkce, můžete vyhledat všechny položky v tomto zobrazení s názvem nulového argumentu a SEQUENCE hodnota není rovna 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

Vypisování postupů podobným způsobem je trochu složitější:

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

I když se zdá, že tento přístup funguje s procedurami a funkcemi, nevím, jak vypsat proměnné, typy a další věci deklarované v záhlaví balíčku bez analýzy specifikace balíčku, jak navrhuje @wweicker.



  1. Rekurzivní podřízené/nadřazené dotazy v T/SQL

  2. Který sloupec umístit na první místo v indexu? Vyšší nebo nižší mohutnost?

  3. Laravel ověřte jedinečné, pokud je id stejné

  4. Jak vypsat cizí klíče tabulky