In jeder Spalte jeder Oracle-Tabelle einen bestimmten Wert finden
Diese Anleitung erklärt, wie Sie in jedem Feld jeder Tabelle in einer großen Oracle-Datenbank nach einem bestimmten Wert („22.01.2008P09RR8“) suchen. Die Herausforderung liegt im unbekannten Spaltennamen und der schieren Datenmenge.
Der erste Versuch mit SELECT * from dba_objects WHERE object_name like '%DTN%'
erwies sich als erfolglos. Hier sind wirksame Strategien:
Verfeinern der Suche nach Spaltennamen:
Verbessern Sie die Suche nach Spaltennamen mit:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
Dies konzentriert sich auf Spalten, die „DTN“ enthalten und möglicherweise die Zielspalte identifizieren.
Umfassende Tabellen- und Spaltensuche (PL/SQL-Ansatz):
Diese robuste Methode verwendet einen PL/SQL-Block und dynamisches SQL, um jede Spalte zu durchsuchen:
SET SERVEROUTPUT ON SIZE 100000 DECLARE match_count INTEGER; BEGIN FOR t IN (SELECT owner, table_name, column_name FROM all_tab_columns WHERE owner NOT IN ('SYS', 'SYSTEM') AND data_type LIKE '%CHAR%') LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || t.owner || '.' || t.table_name || ' WHERE '||t.column_name||' = :1' INTO match_count USING '1/22/2008P09RR8'; IF match_count > 0 THEN dbms_output.put_line( t.owner || '.' || t.table_name || '.' || t.column_name || ': ' || match_count ); END IF; END LOOP; END; /
Hinweis: Die WHERE owner NOT IN ('SYS', 'SYSTEM')
-Klausel wurde aus Effizienzgründen hinzugefügt, mit Ausnahme von Systemtabellen.
Optimierung der Suche:
Effizienz ist entscheidend. Durch die Beschränkung der Suche auf CHAR
-ähnliche Datentypen (da der Zielwert eine Zeichenfolge ist) wird die Verarbeitungszeit erheblich verkürzt.
Alternative: Konsolidierte Abfragen pro Tabelle:
Anstelle einzelner Spaltenabfragen erstellen Sie eine einzelne Abfrage pro Tabelle:
SELECT * FROM table1 WHERE column1 = '1/22/2008P09RR8' OR column2 = '1/22/2008P09RR8' OR column3 = '1/22/2008P09RR8' ...;
Dieser Ansatz erfordert die vorherige Kenntnis der Tabellenstruktur.
Diese Methoden bieten effiziente Lösungen zum Auffinden eines bestimmten Werts in allen Tabellen und Spalten in einer Oracle-Datenbank, selbst bei einem zunächst unbekannten Spaltennamen. Denken Sie daran, die LIKE
-Klausel in der all_tab_columns
-Abfrage anzupassen, um zusätzliches Wissen über den Spaltennamen widerzuspiegeln.
Das obige ist der detaillierte Inhalt vonWie finde ich effizient einen bestimmten Wert über alle Spalten in jeder Oracle-Tabelle hinweg?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!