Можно ли в Oracle искать в каждом поле каждой таблицы определенное значение?
Существуют сотни таблиц с тысячами строк в некоторых таблицах, поэтому я знаю, что запрос может занять очень много времени. Но единственное, что я знаю, это то, что значение поля, которое я хотел бы запросить, равно 1/22/2008P09RR8
. <
Я попытался использовать этот оператор ниже, чтобы найти соответствующий столбец на основе того, что, по моему мнению, следует назвать, но он не дал результатов.
SELECT * from dba_objects
WHERE object_name like '%DTN%'
По этой базе данных нет абсолютно никакой документации, и я понятия не имею, откуда берется это поле.
Есть предположения?
Ответы:
Quote:
Столбец - это не объект. Если вы имеете в виду, что ожидаете, что имя столбца будет иметь вид "% DTN%", то вам нужен следующий запрос:
Но если строка 'DTN' - это всего лишь предположение с вашей стороны, это, вероятно, не поможет.
Кстати, насколько вы уверены, что «1/22 / 2008P09RR8» - это значение, выбранное непосредственно из одного столбца? Если вы совсем не знаете, откуда он исходит, это может быть объединение нескольких столбцов, или результат какой-либо функции, или значение, находящееся во вложенном табличном объекте. Так что вы можете быть на охоте, пытаясь проверить каждый столбец на это значение. Разве вы не можете начать с любого клиентского приложения, отображающего это значение, и попытаться выяснить, какой запрос он использует для его получения?
В любом случае, ответ diciu дает один метод генерации SQL-запросов для проверки значения каждого столбца каждой таблицы. Вы также можете делать аналогичные вещи полностью в одном сеансе SQL, используя блок PL / SQL и динамический SQL. Вот для этого наспех написанный код:
Есть несколько способов сделать его более эффективным.
В этом случае, учитывая искомое значение, вы можете однозначно исключить любой столбец, имеющий тип NUMBER или DATE, что уменьшит количество запросов. Может быть, даже ограничить его столбцами, где тип подобен "% CHAR%".
Вместо одного запроса на столбец вы можете создать один запрос на таблицу следующим образом:
источник
all_tab_columns
notall_tables
. Я исправил это.Я внес некоторые изменения в приведенный выше код, чтобы он работал быстрее, если вы ищете только одного владельца. Вам просто нужно изменить 3 переменные v_owner, v_data_type и v_search_string, чтобы они соответствовали тому, что вы ищете.
источник
'SELECT COUNT(*) FROM "'||t.table_name||'" WHERE "'||t.column_name||'" = :1'
dbms_output
? Потому что запросы успешно выполняются в DataGrip, но после этого я не вижу результата.Я знаю, что это старая тема. Но я вижу комментарий к вопросу о том, можно ли это сделать,
SQL
а не использоватьPL/SQL
. Вот и решил выложить решение.Приведенная ниже демонстрация предназначена для поиска ЗНАЧЕНИЯ во всех СТОЛБЦАХ всех ТАБЛИЦ во всей СХЕМЕ :
Поищем значение
KING
вSCOTT
схеме.Поищем значение
20
вSCOTT
схеме.источник
Error occurred in XML processing ORA-00932: inconsistent datatypes: expected NUMBER got BLOB
Вот еще одна модифицированная версия, которая будет сравнивать совпадение более низкой подстроки. Это работает в Oracle 11g.
источник
Да, вы можете, и ваш администратор баз данных будет вас ненавидеть и обнаружит, что вы прибиваете к ногам, потому что это вызовет много операций ввода-вывода и действительно снизит производительность базы данных при очистке кеша.
для начала.
Я бы начал с текущих запросов, используя символы
v$session
иv$sqlarea
. Это изменяется в зависимости от версии оракула. Это сузит пространство и не затронет все.источник
Я бы сделал что-то вроде этого (генерирует все нужные вам выборки). Позже вы можете передать их в sqlplus:
Это дает:
И что он делает - для каждого
table_name
fromuser_tables
получить каждое поле (из desc) и создать select * from table, где field равно 'val'.источник
Я изменил скрипт Flood, чтобы он выполнялся один раз для каждой таблицы, а не для каждого столбца каждой таблицы, для более быстрого выполнения. Требуется Oracle 11g или выше.
источник
У меня возникли следующие проблемы с ответом @Lalit Kumars,
Решение:
источник
если мы знаем имена таблиц и столбцов, но хотим узнать, сколько раз строка появляется для каждой схемы:
источник
Процедура поиска по всей базе данных:
Выполнить заявление
Образцы результатов
источник
У меня нет простого решения на запросе SQL. Однако существует довольно много инструментов, таких как toad и PL / SQL Developer, которые имеют графический интерфейс, в котором пользователь может ввести строку для поиска, и он вернет таблицу / процедуру / объект, где он найден.
источник
Есть несколько бесплатных инструментов, которые делают такой поиск, например, этот отлично работает и доступен исходный код: https://sites.google.com/site/freejansoft/dbsearch
Для использования этого инструмента вам понадобится драйвер Oracle ODBC и DSN.
источник
Изменение кода для поиска без учета регистра с использованием запроса LIKE вместо поиска точных совпадений ...
источник
- запуск завершен - ошибок нет
источник
Заимствуя, немного улучшая и упрощая из этого сообщения в блоге, следующий простой оператор SQL, похоже, неплохо справляется со своей задачей:
источник
источник