2009-06-05 4 views

risposta

23

La vista DBA_OBJECTS elencherà le procedure (oltre a quasi tutti gli altri oggetti):

SELECT owner, object_name 
FROM dba_objects 
WHERE object_type = 'PROCEDURE' 

Il DBA_SOURCE vista elencherà le linee di codice sorgente per una procedura in questione:

SELECT line, text 
FROM dba_source 
WHERE owner = ? 
    AND name = ? 
    AND type = 'PROCEDURE' 
ORDER BY line 

Nota: seconda dei privilegi, non si può essere in grado di interrogare i DBA_OBJECTS e DBA_SOURCE vista. In questo caso, è possibile utilizzare ALL_OBJECTS e ALL_SOURCE. Le viste DBA_ contengono tutti gli oggetti nel database, mentre le viste ALL_ contengono solo gli oggetti a cui è possibile accedere.

+1

Si desidera eseguire object_type in ('PROCEDURE', 'FUNCTION', 'PACKAGE') per ottenere tutto il possibile codice sorgente. –

+0

Mi spiace, totale noob Oracle qui. Non riesco a vedere quella vista/tabella. Significa che ho effettuato l'accesso come utente sbagliato? –

+0

È possibile che non si disponga dei privilegi necessari per interrogare tali viste. Puoi provare ALL_OBJECTS e ALL_SOURCE invece. –

0

Se si desidera ottenere tutte le chiamate di introspezione stored procedure (parametri, ecc), si può tirare fuori da questo pacchetto open source:

http://code.google.com/p/orapig

OraPIG è l'Oracle Python Interface Generator. Introspects oracle packages e genera wrapper python per loro.

0

Penso enumerare da DBA_OBJECTS può aver perso un sacco di procedure: (io sono su Oracle 12c, esegui il login come SYS)

select count(*) from dba_objects where object_type = 'PROCEDURE'; 
     202 

E 'davvero guardato impossibile che l'intero database Oracle può avere solo 202 procedure.

e l'interrogazione da DBA_PROCEDURES:

select owner||'-'||object_name || '-'||procedure_name from 
dba_procedures WHERE PROCEDURE_NAME IS NOT NULL; 

26539 rows selected. 

ora concentrando sullo schema SYS, che viene fornito di default per tutti i database (non riguardano solo il mio):

Interrogazione per le stored procedure ANONIME (http://www.praetoriate.com/t_high_perform_calling_procedures.htm) appartenenti a SYS :

select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NULL and owner = 'SYS'; 
994 rows selected. 

e stored procedure non anonimi di SYS hanno 15K:

select owner||'-'||object_name || '-'||procedure_name from dba_procedures WHERE PROCEDURE_NAME IS NOT NULL and owner = 'SYS'; 
15408 rows