2009-05-12 10 views
21

Ich muss einige SQL schreiben, die es mir ermöglichen, alle Objekte in unserer Oracle-Datenbank abzufragen. Leider haben die Tools, die wir verwenden dürfen, diese nicht eingebaut. Grundsätzlich muss ich alle Tabellen, Prozeduren, Trigger, Ansichten, alles durchsuchen.SQL zum Suchen von Objekten, einschließlich gespeicherter Prozeduren, in Oracle

Ich weiß, wie man nach Objektnamen sucht. Aber ich muss nach dem Inhalt des Objekts suchen. d. H. SELECT * FROM DBA_OBJECTS WHERE objektname = '% suchzeichenfolge%';

Danke, Glenn

+0

Eine gute Quelle: http://www.techonthenet.com/oracle/sys_tables/ –

Antwort

15

ich bin nicht sicher, ob ich Sie verstehen, aber den Quellcode Ihrer Trigger, Prozeduren, Paket und Funktionen, die Sie mit dem „user_source“ Tabelle versuchen können abzufragen.

select * from user_source 
29

Ich bin mir nicht sicher, ob ich recht verstehe die Frage, aber wenn Sie Objekte auf der Datenbank für einen bestimmten Suchbegriff try suchen wollen:

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

Vom wenn Sie brauchen mehr Informationen, die Sie kann nur die Objekt-/Zeilennummer nachschlagen.

+0

du mein Held bist! –

+0

Verwenden Sie SELECT Besitzer, Name, Typ FROM dba_source WHERE Instr (UPPER (Name), UPPER (': srch_strg'))> 0; 'für nur in Namen suchen .. vielleicht praktischer für einige – mCeviker

9

Ich würde DBA_SOURCE verwenden (wenn Sie Zugriff darauf haben), denn wenn das Objekt, das Sie benötigen, nicht dem Schema gehört, unter dem Sie angemeldet sind, werden Sie es nicht sehen.

Wenn Sie die Funktionen und Procs innerhalb der Verpackungen wissen müssen versuchen, so etwas wie dieses:

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

Die letzte Zeile alle sys Sachen verhindert (DBMS_ et al) von zurückgegeben wird. Dies funktioniert in user_source, wenn Sie nur Ihre eigenen Schemata haben wollen.

+0

[PLUS ONE] Das hat meinen Tag gerettet! – GingerHead

1

ALL_SOURCE beschreibt die Textquelle der gespeicherten Objekte, auf die der aktuelle Benutzer zugreifen kann.

Hier ist einer der Lösung

select * from ALL_SOURCE where text like '%some string%'; 
Verwandte Themen