2016-04-26 4 views
-1

Ich habe eine große Datenbank geerbt, und niemand scheint zu wissen, aus welcher Tabelle/Spalte ein bestimmter Datensatz stammt. Ich habe viel Zeit in Oracle SQL Developer Tabelle für Tabelle verbracht, aber ich kann es nicht finden. Gibt es in SQLDeveloper eine Möglichkeit, die gesamte Tabelle nach einem einzelnen Wert zu durchsuchen. Etwas wie:Einen Wert in Tabelle mit SQL Developer finden

Die db hat rund 1K + Tabellen mit jeder Menge Spalten, so dass manuell durchkämmen funktioniert nicht.

+0

Es ist unmöglich, dass Sie gleichzeitig MySQL, SQL Server und Oracle gleichzeitig verwenden. Bitte ** ** ** ** fügen Sie zufällig Stichwörter hinzu, die Ihrer Frage bekannt vorkommen. Fügen Sie ** nur die Tags hinzu, die tatsächlich relevant sind **. Wenn Sie nicht sicher sind, lesen Sie die Beschreibung des Tags. Wenn Sie sich danach nicht sicher sind, fügen Sie das Tag nicht hinzu. Wenn es benötigt wird, wird jemand hier hinzufügen. Tags haben eine spezifische Bedeutung. –

+0

Das waren die von SO vorgeschlagenen Tags. Jetzt entfernt. – whyeliah

+0

Leute schlagen vor, Änderungen zu meinen Umbauten vorzuschlagen. Ich stimme ihnen nur zu, wenn sie reinkommen. Ich benutze die Desktop-Software SQLDeveloper von Oracle. Markieren Sie den Beitrag, den Sie für richtig halten. – whyeliah

Antwort

0

Sie können das folgende Skript verwenden, um in allen Spalten Ihres Schemas nach einem Wert zu suchen. Die Ausführungszeit für das Skript hängt von der Anzahl der Tabellen in Ihrem Schema und der Anzahl der Zeilen in jeder Ihrer Tabellen ab.

Ersetzen Sie 'abc' mit dem Wert, den Sie suchen möchten. Außerdem wird das Skript jetzt alle VARCHAR2-Spalten durchsuchen. Sie können die Tabellennamen und -zählungen auch in eine Tabelle einfügen, anstatt eine DBMS_OUTPUT.PUT_LINE auszuführen.

DECLARE 

    CURSOR cur_tables 
    IS 
    SELECT table_name, 
      column_name 
    FROM user_tab_columns 
    WHERE data_type = 'VARCHAR2'; 

    v_sql   VARCHAR2(4000); 

    v_value  VARCHAR2(50); 
    v_count  NUMBER; 

BEGIN 

    v_value := 'abc'; 

    FOR c_tables IN cur_tables LOOP 
     v_sql := 'SELECT count(1) FROM ' || c_tables.table_name || ' WHERE ' || c_tables.column_name || ' = :val' ; 
     EXECUTE IMMEDIATE v_sql INTO v_count USING v_value; 
     IF v_count > 0 THEN 
      DBMS_OUTPUT.PUT_LINE('Table Name ' || c_tables.table_name || ' Column Name ' || c_tables.column_name || ' Row Count ' || v_count); 
     END IF; 
    END LOOP; 
END; 
Verwandte Themen