2009-05-12 26 views
21

Necesito escribir algunos sql que me permitan consultar todos los objetos en nuestra base de datos Oracle. Lamentablemente, las herramientas que podemos usar no tienen esto incorporado. Básicamente, necesito buscar en todas las tablas, procedimientos, disparadores, vistas, todo.SQL para buscar objetos, incluidos los procedimientos almacenados, en Oracle

Sé cómo buscar nombres de objetos. Pero necesito buscar el contenido del objeto. es decir, SELECCIONAR * FROM DBA_OBJECTS WHERE object_name = '% search string%';

Gracias, Glenn

+0

Un buen recurso: http://www.techonthenet.com/oracle/sys_tables/ –

Respuesta

15

No estoy seguro si entiendo, pero para consultar el código fuente de su disparadores, procedimientos, funciones del paquete y que puede probar con la mesa "user_source".

select * from user_source 
29

No estoy seguro de que entiendo bien la pregunta, pero si quieres buscar objetos en la base de datos para un determinado intento cadena de búsqueda:

SELECT owner, name, type, line, text 
FROM dba_source 
WHERE instr(UPPER(text), UPPER(:srch_str)) > 0; 

A partir de ahí, si usted necesita más información que solo puede buscar el número de objeto/línea.

+0

usted es mi héroe! –

+0

use 'SELECT owner, name, type FROM dba_source WHERE instr (UPPER (nombre), UPPER (': srch_strg'))> 0;' para solo buscar nombres ... tal vez más práctico para algunos – mCeviker

9

Usaría DBA_SOURCE (si tiene acceso) porque si el objeto que necesita no es propiedad del esquema con el que está conectado, no lo verá.

Si lo que necesita saber las funciones y Proc dentro de los paquetes de intentar algo como esto:

select * from all_source 
where type = 'PACKAGE' 
    and (upper(text) like '%FUNCTION%' or upper(text) like '%PROCEDURE%') 
    and owner != 'SYS'; 

La última línea impide que toda la materia sys (DBMS_ et al) sea devuelta. Esto funcionará en user_source si solo quieres tus propios esquemas.

+0

[PLUS ONE] ¡Esto me salvó el día! – GingerHead

1

ALL_SOURCE describe la fuente de texto de los objetos almacenados a los que tiene acceso el usuario actual.

Aquí es una de las soluciones

select * from ALL_SOURCE where text like '%some string%'; 
Cuestiones relacionadas