Citazione:
Ho provato a utilizzare questa istruzione di seguito per trovare una colonna appropriata in base a quello che penso dovrebbe essere nominato ma non ha restituito risultati. *
SELECT * from dba_objects WHERE
object_name like '%DTN%'
Una colonna non è un oggetto. Se intendi che ti aspetti che il nome della colonna sia come '% DTN%', la query che desideri è:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
Ma se la stringa "DTN" è solo un'ipotesi da parte tua, probabilmente non sarà d'aiuto.
A proposito, quanto sei sicuro che "1/22 / 2008P09RR8" sia un valore selezionato direttamente da una singola colonna? Se non sai affatto da dove proviene, potrebbe essere una concatenazione di più colonne, o il risultato di qualche funzione, o un valore che si trova in un oggetto tabella annidato. Quindi potresti essere in una caccia all'oca selvaggia cercando di controllare ogni colonna per quel valore. Non è possibile iniziare con qualsiasi applicazione client che visualizzi questo valore e provare a capire quale query sta utilizzando per ottenerlo?
Ad ogni modo, la risposta di diciu fornisce un metodo per generare query SQL per controllare ogni colonna di ogni tabella per il valore. Puoi anche fare cose simili interamente in una sessione SQL utilizzando un blocco PL / SQL e SQL dinamico. Ecco un po 'di codice scritto in fretta per questo:
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;
/
Ci sono anche alcuni modi per renderlo più efficiente.
In questo caso, dato il valore che stai cercando, puoi eliminare chiaramente qualsiasi colonna di tipo NUMERO o DATA, che ridurrebbe il numero di query. Forse anche limitarlo alle colonne in cui il tipo è come '% CHAR%'.
Invece di una query per colonna, puoi creare una query per tabella in questo modo:
SELECT * FROM table1
WHERE column1 = 'value'
OR column2 = 'value'
OR column3 = 'value'
...
;