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

Pobierz listę prywatnych procedur/funkcji z treści pakietu

Natura funkcji prywatnych polega na tym, że są prywatne. Nie ma widoków słowników danych, które domyślnie je uwidaczniają. USER_PROCEDURES i USER_ARGUMENTS pokazują tylko informacje dotyczące procedur publicznych (tych zdefiniowanych w specyfikacji pakietu 0).

Możemy jednak uzyskać informacje o nich za pomocą PL/SCOPE, ale wymaga to trochę dodatkowego wysiłku:

  1. SQL> alter session set plscope_settings='IDENTIFIERS:ALL';
  2. SQL> alter package your_package compile body;

Teraz możesz znaleźć swoje prywatne jednostki programu za pomocą tego zapytania:

select ui.type, ui.name, ui.usage_id
from user_identifiers ui
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DEFINITION'
and ui.type in ('PROCEDURE', 'FUNCTION')
minus
( select 'PROCEDURE', upr.procedure_name 
  from user_procedures upr
  where upr.object_name = 'YOUR_PACKAGE'
  union
  select 'FUNCTION', uarg.object_name
  from user_arguments uarg
  where uarg.package_name = 'YOUR_PACKAGE'
  and uarg.position = 0 
);

Aby uzyskać argumenty procedury prywatnej, podłącz USAGE_ID z poprzedniego zapytania do tego zapytania:

select ui.name
       , ui.type
       , ui.usage_id
       , ui2.type as param_datatype
from user_identifiers ui
     left join user_identifiers ui2
        on ui2.usage_context_id = ui.usage_id 
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DECLARATION'
and ui.usage_context_id = :private_proc_usage_id
/

To musi być lewe dołączenie, ponieważ user_identifiers zawiera wpisy typu danych dla skalarnych typów danych (znak, liczba, data, klob), ale nie złożone typy danych (xmltype, typy zdefiniowane przez użytkownika).

Możemy uzyskać wiele informacji o procedurach z PL/SCOPE, mimo że nie jest to tak proste jak odpytywanie USER_PROCEDURES lub USER_ARGUMENTS (w rzeczywistości jest to zaskakująco niezgrabne). Dowiedz się więcej. Należy pamiętać, że dane PL/SCOPE są przechowywane w przestrzeni tabel SYSAUX, więc nie wchodź do gorącej wody z DBA!




  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 - Clone table - Struktura, ograniczenia danych i wszystko

  2. Oracle Sequence nie generuje liczby ciągłej

  3. Jak przewidzieć i uciec od pojedynczego cytatu „w wyroczni”

  4. Brama PL/SQL w R11i

  5. Zmiany Asa Wyroczni