Suche Alle Felder In Allen Tabellen Nach Einem Bestimmten Wert (Oracle)
Ist es möglich, Suche Sie jedes Feld aus jeder Tabelle für einen bestimmten Wert in Oracle?
Gibt es Hunderte von Tabellen mit tausenden von Zeilen in Tabellen, damit ich weiß, dies könnte eine sehr lange Zeit dauern, um Abfrage. Aber das einzige was ich weiß ist, dass ein Wert für das Feld würde ich gerne die Abfrage ist 1/22/2008P09RR8
.
<
Ich habe versucht, mit dieser Erklärung unten finden Sie eine passende Spalte, basierend auf was ich denke, es sollte benannt werden, aber es brachte keine Ergebnisse.
SELECT * from dba_objects
WHERE object_name like '%DTN%'
Gibt es absolut keine Unterlagen über diese Datenbank und ich habe keine Ahnung, wo das Feld gezogen wird.
Irgendwelche Gedanken?
Können wir dies tun mit einer einzigen Abfrage statt einer gespeicherten Prozedur?
Ja, es ist möglich, es zu tun in reinem SQL. Siehe SQL zur Suche nach einem WERT in allen SPALTEN aller TABELLEN in ein ganzes-SCHEMA
Die Seite, die Sie aufgeführt ist nicht mehr frei zugänglich. Wäre es möglich, post einige Informationen als Antwort?
Die Seite ist zugänglich lalitkumarb.wordpress.com/2015/01/06/... Auch ich habe eine Antwort, bitte nach unten scrollen oder sehen, stackoverflow.com/a/27794127/3989608
Wenn Sie Probleme haben, herauszufinden, Lalit Kumar Abfrage, versuchen Sie, diese demo: sqlfiddle.com/#!4/76924c/2/0
Ja, es ist möglich, es zu tun in reinem SQL. Siehe SQL zur Suche nach einem WERT in allen SPALTEN aller TABELLEN in ein ganzes-SCHEMA
Die Seite, die Sie aufgeführt ist nicht mehr frei zugänglich. Wäre es möglich, post einige Informationen als Antwort?
Die Seite ist zugänglich lalitkumarb.wordpress.com/2015/01/06/... Auch ich habe eine Antwort, bitte nach unten scrollen oder sehen, stackoverflow.com/a/27794127/3989608
Wenn Sie Probleme haben, herauszufinden, Lalit Kumar Abfrage, versuchen Sie, diese demo: sqlfiddle.com/#!4/76924c/2/0
InformationsquelleAutor Chris Conway | 2008-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zitat:
Einer Spalte ist nicht ein Objekt. Wenn du meinst, dass Sie erwarten, dass die Spalte name like '%DTN%', die Abfrage, die Sie wollen, ist:
Aber wenn die 'DTN' string ist nur eine Vermutung ihrerseits, das wird wahrscheinlich nicht helfen.
Durch die Art und Weise, wie sicher sind Sie, dass "1/22/2008P09RR8' einen Wert ausgewählt, der direkt aus einer einzelnen Spalte? Wenn Sie nicht wissen, wo es herkommt, es könnte eine Verkettung von mehreren Spalten, oder das Ergebnis einer Funktion oder einen Wert, der sitzt in einer geschachtelten Tabelle-Objekt. So könnten Sie auf einem wild-goose chase versuchen, um zu überprüfen, jede Spalte für den Wert. Kann Sie nicht starten, egal mit welchem client-Anwendung ist die Anzeige diesen Wert und versuchen Sie herauszufinden, welche Abfrage ist es mit, um es zu erhalten?
Sowieso, diciu die Antwort gibt eine Methode zum generieren von SQL-Abfragen, um zu überprüfen jede Spalte jeder Tabelle für den Wert. Sie können auch ähnliche Sachen, die vollständig in eine SQL-Sitzung unter Verwendung einer PL/SQL-block und dynamische SQL. Hier ein paar hastig geschriebenen code:
Gibt es einige Möglichkeiten, wie Sie könnte es machen, effizienter zu werden.
In diesem Fall, da der Wert, den Sie suchen, können Sie eindeutig zu beseitigen, eine Spalte mit der ANZAHL oder DATUM geben, die Verringerung der Anzahl der Abfragen. Vielleicht sogar einschränken, es zu Spalten, wobei Typ like 'CHAR%'.
Anstatt eine Abfrage pro Spalte, die Sie bauen könnten, eine Abfrage pro Tabelle wie diese:
wie ich schon sagte, in der zweiten bis letzten Absatz?
Ich lief dieses auf 9i und ich bekomme column_name unbekannter Fehler. Kann mir jemand sagen, welche änderungen sind erforderlich, um diese laufen auf 9i?
sorry, das war tatsächlich ein Fehler in meinem code, nicht eine version Problem. Die Schleife sollte wurden angetrieben durch
all_tab_columns
nichtall_tables
. Ich habe es behoben.Vielen Dank für das Update, aber ich bekomme immer noch 'Tabelle oder view nicht vorhanden" Fehler in Zeile 6. Line 6 "Execute Immediate".
InformationsquelleAutor Dave Costa
Habe ich einige änderungen zu den obigen code, damit es funktioniert schneller, wenn Sie für die Suche nur einen Besitzer.
Sie müssen nur die 3 Variablen v_owner, v_data_type und v_search_string, um fit, was Sie suchen.
Ich brauchte, um setzen Sie doppelte Anführungszeichen um den Namen der Tabelle / Spalte name, um Probleme zu vermeiden, wenn Sie diese benötigen, zitiert zu werden:
'SELECT COUNT(*) FROM "'||t.table_name||'" WHERE "'||t.column_name||'" = :1'
InformationsquelleAutor Flood
Ja können Sie und Ihre DBA hassen Sie und finden Sie für Nagel Ihre Schuhe auf den Boden, weil das wird zu viel I/O und, um die Datenbank-Leistung wirklich runter, da der cache verfällt.
für einen start.
Ich würde beginnen mit dem ausführen von Abfragen, mit der
v$session
und diev$sqlarea
. Diese änderungen basieren auf oracle-version. Dies wird verengen den Raum und trifft nicht alles.InformationsquelleAutor jim
Ich weiß, das ist ein altes Thema. Ich sehe aber ein Kommentar auf die Frage, ob es getan werden könnte, in
SQL
anstattPL/SQL
. So dachte der post eine Lösung.Die unter demonstration wird Suchen nach einem WERT in allen SPALTEN aller TABELLEN in ein ganzes-SCHEMA:
Let ' s look für den Wert
KING
imSCOTT
schema.Let ' s look für den Wert
20
imSCOTT
schema.Error occurred in XML processing ORA-00932: inconsistent datatypes: expected NUMBER got BLOB
ORA-19202: Fehler bei XML-Verarbeitung ORA-00932: inkonsistente Datentypen: CHAR erwartet habe BLOB-ORA-06512: at "SYS.DBMS_XMLGEN", Zeile 288 ORA-06512: in Zeile 1 19202. 00000 - "Fehler in XML-Verarbeitung von%s" *Ursache: es trat Ein Fehler beim verarbeiten der XML-Funktion *Aktion: Überprüfen Sie die angegebene Fehlermeldung und beheben Sie das entsprechende problem
Irgendwelche Ideen? ORA-19202: Fehler bei XML-Verarbeitung ORA-22813: operand Wert übersteigt Systemgrenzen ORA-06512: at "SYS.DBMS_XMLGEN", Zeile 288 ORA-06512: in Zeile 1
InformationsquelleAutor Lalit Kumar B
Hier ist eine weitere modifizierte version, die Sie vergleichen, eine geringere übereinstimmung. Dies funktioniert in Oracle 11g.
InformationsquelleAutor xojins
Ich würde so etwas tun (generiert, die alle die wählt, die Sie brauchen).
Sie können später füttern Sie zu sqlplus:
Ergibt:
Ist und was es tut, ist - für jeden
table_name
aususer_tables
erhalten Sie jedes Feld (desc) und erstellen Sie ein select * from table where Feld gleich 'val'.InformationsquelleAutor diciu
Ich geändert Flut Skript ausgeführt werden, einmal für jede Tabelle, anstatt für jede Spalte in jeder Tabelle für eine schnellere Ausführung. Es erfordert Oracle 11g oder höher.
InformationsquelleAutor Mike Rodey
wenn wir wissen, die Tabelle und colum Namen, aber wollen, um herauszufinden, die Anzahl der Zeiten, die Zeichenfolge ist nicht für jeden-schema:
InformationsquelleAutor umesh
Verfahren zu Suchen Gesamte Datenbank:
Execute-Anweisung
Beispiel-Ergebnisse
InformationsquelleAutor Hemanth
Den code zu ändern, Suche Fall-unempfindlich mit einer LIKE-Abfrage statt finden, genaue übereinstimmungen...
InformationsquelleAutor Alexandru
Ich nicht von einer einfachen Lösung, die auf SQL promprt. Howeve es gibt durchaus ein paar Werkzeuge wie toad und PL/SQL-Entwickler, die eine GUI haben, wo ein Benutzer kann die Eingabe der Zeichenfolge durchsucht werden und es wird wieder die Tabelle/Prozedur/Objekt, wo dieser zu finden ist.
InformationsquelleAutor Dheer
Gibt es einige Kostenlose tools, die diese Art der Suche, zum Beispiel, dieses funktioniert gut und der Quellcode ist verfügbar:
https://sites.google.com/site/freejansoft/dbsearch
Müssen Sie den Oracle-ODBC-Treiber und DSN-um dieses tool zu verwenden.
InformationsquelleAutor john
Wurde ich mit folgenden Fragen für @Lalit Kumars Antwort,
Lösung ist:
InformationsquelleAutor bekur
--run completed -- kein Fehler
InformationsquelleAutor iCrazybest
Kreditaufnahme, etwas zur Verbesserung und Vereinfachung von in diesem Blog-post die folgende einfache SQL-Anweisung scheint den job ganz gut:
InformationsquelleAutor Steve Chambers