Цитата:
Я намагався використати це твердження нижче, щоб знайти відповідний стовпчик на основі того, що, на мою, його слід назвати, але він не повернув результатів. *
SELECT * from dba_objects WHERE
object_name like '%DTN%'
Стовпець не є об’єктом. Якщо ви маєте на увазі, що очікуєте, що назва стовпця буде таким, як "% DTN%", потрібний запит:
SELECT owner, table_name, column_name FROM all_tab_columns WHERE column_name LIKE '%DTN%';
Але якщо рядок "DTN" - це лише здогадка з вашого боку, це, ймовірно, не допоможе.
До речі, наскільки ви впевнені, що "1/22 / 2008P09RR8" - це значення, вибране безпосередньо з одного стовпця? Якщо ви взагалі не знаєте, звідки він походить, це може бути об'єднання декількох стовпців, або результат якоїсь функції, або значення, що сидить у вкладеному об’єкті таблиці. Тож ви, можливо, переслідуєте диких гусей, намагаючись перевірити кожну колонку на ці значення. Ви не можете почати з того, що клієнтська програма відображає це значення, і спробувати розібратися, який запит він використовує для його отримання?
У будь-якому випадку, відповідь diciu дає один метод генерування SQL запитів для перевірки значення у кожному стовпчику кожної таблиці. Ви також можете робити подібні речі цілком за один сеанс SQL, використовуючи блок PL / SQL та динамічний SQL. Ось якийсь поспішно написаний код для цього:
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;
/
Є кілька способів, як ви могли б зробити це і більш ефективним.
У цьому випадку, враховуючи шукане значення, ви можете чітко усунути будь-який стовпець типу NUMBER або DATE, що зменшило б кількість запитів. Можливо, навіть обмежте його стовпцями, де тип схожий на "% CHAR%".
Замість одного запиту на стовпець ви можете створити один запит на таку таблицю:
SELECT * FROM table1
WHERE column1 = 'value'
OR column2 = 'value'
OR column3 = 'value'
...
;