Zitat:
Ich habe versucht, diese Anweisung unten zu verwenden, um eine geeignete Spalte zu finden, die meiner Meinung nach benannt werden sollte, aber es wurden keine Ergebnisse zurückgegeben. *
SELECT * from dba_objects WHERE
object_name like '%DTN%'
Eine Spalte ist kein Objekt. Wenn Sie meinen, dass der Spaltenname '% DTN%' lautet, lautet die gewünschte Abfrage:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
Aber wenn die 'DTN'-Zeichenfolge nur eine Vermutung von Ihrer Seite ist, wird das wahrscheinlich nicht helfen.
Wie sicher sind Sie übrigens, dass '1/22 / 2008P09RR8' ein Wert ist, der direkt aus einer einzelnen Spalte ausgewählt wird? Wenn Sie überhaupt nicht wissen, woher es kommt, kann es sich um eine Verkettung mehrerer Spalten oder um das Ergebnis einer Funktion oder um einen Wert handeln, der sich in einem verschachtelten Tabellenobjekt befindet. Sie könnten also auf einer wilden Gänsejagd sein und versuchen, jede Spalte auf diesen Wert zu überprüfen. Können Sie nicht mit einer Clientanwendung beginnen, die diesen Wert anzeigt, und versuchen, herauszufinden, mit welcher Abfrage sie abgerufen wird?
Wie auch immer, die Antwort von diciu bietet eine Methode zum Generieren von SQL-Abfragen, um jede Spalte jeder Tabelle auf den Wert zu überprüfen. Sie können ähnliche Aufgaben auch vollständig in einer SQL-Sitzung mit einem PL / SQL-Block und dynamischem SQL ausführen. Hier ist ein hastig geschriebener Code dafür:
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 <> 'SYS' 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.table_name ||' '||t.column_name||' '||match_count );
END IF;
END LOOP;
END;
/
Es gibt einige Möglichkeiten, wie Sie es auch effizienter gestalten können.
In diesem Fall können Sie angesichts des gesuchten Werts jede Spalte vom Typ NUMBER oder DATE eindeutig entfernen, wodurch die Anzahl der Abfragen verringert wird. Vielleicht beschränken Sie es sogar auf Spalten, in denen der Typ '% CHAR%' ist.
Anstelle einer Abfrage pro Spalte können Sie eine Abfrage pro Tabelle wie folgt erstellen:
SELECT * FROM table1
WHERE column1 = 'value'
OR column2 = 'value'
OR column3 = 'value'
...
;