Перейти к содержимому

Oracle как найти таблицу по названию

  • автор:

Как получить список таблиц в базе данных Oracle?

Или можешь вывести все необходимые поля. Узнать их можно:

а что в них записано можно понять по названию этих полей.

Отслеживать
ответ дан 31 авг 2016 в 10:31
113 7 7 бронзовых знаков

  • oracle
  • sql
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Названия таблиц и полей в Oracle SQL?

Как принято писать названия таблиц и полей в oracle? C маленькой буквы используя underscore или PascalCase?

  • Вопрос задан более трёх лет назад
  • 1027 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 2
Евгений @Lorien_Elf
Keep calm and drop database

К таблицам и полям в ORACLE можно обращаться, используя любой регистр. Например выражения

select mycol from my_table; select MYCOL from MY_TABLE; select Mycol from My_table;

Полностью эквивалентны. Но только при условии, что таблица и поля при создании указывались без кавычек.

Иными словами create table my_table (mycol char(10)); хорошо, а create table «My_Table» («Mycol» char(10)); — плохо, лучше так не делать.

SQL: Поиск значения по всем колонкам всех таблиц

Однажды передо мной встала задача определить, в какую таблицу БД попадают определённые данные с веб-формы. Вызвано это, например, может быть тем, что у нас есть доступ к БД, но нет исходников приложения. А таблицы кто-то называл в стиле TABLE_1, TABLE_2, OT_1 и так далее.
К счастью, БД была Oracle, поэтому можно использовать тёмные стороны PL/SQL.

Думаю, смысл действа понятен, поэтому сразу к коду:

create or replace procedure whereIsValue(valueParam varchar2) AS TYPE VALCUR IS REF CURSOR; cursor tabl is select table_name from user_tables; cursor col (tablename varchar2) is select column_name from user_tab_columns where table_name like tableName; valueCursor VALCUR; tableName varchar2(50); columnName varchar2(50); columnValue varchar2(500); qq number(3); begin open tabl; LOOP fetch tabl into tableName; EXIT WHEN tabl%NOTFOUND; OPEN col(tableName); LOOP fetch col into columnName; EXIT WHEN col%NOTFOUND; OPEN valueCursor for 'select ' || columnName || ' from ' || tableName; LOOP BEGIN fetch valueCursor into columnValue; EXIT WHEN valueCursor%NOTFOUND; if (columnValue like valueParam) then dbms_output.put_line(tableName); exit; end if; EXCEPTION WHEN OTHERS then qq := 4; END; END LOOP; CLOSE valueCursor; END LOOP; CLOSE col; END LOOP; end;
  • проходим по всем таблицам схемы;
  • для каждой таблицы проходим по всем её колонкам;
  • для каждой колонки забираем список значений и сравниваем с тем, что передано в параметре процедуры;
  • если совпало, то печатаем имя таблицы в DBMS_OUTPUT;

Буду рад комментариям, как можно было сделать иначе, не изобретая велосипедов.

Oracle как найти таблицу по названию

ТЕ у меня есть куча таблиц с множеством строчек, мне нужно найти строку и (или хотябы) имя таблицы
в которое поле содержит что то заданое.
Т.е. это какой то селект где в условии поиска я не знаю имя поля в котором ищу и имя таблицы.
хочу select . from .. where tablespace.*.* like ‘some’
Хотелось бы увидеть запрос на sql если такое возможно.

Re: Oracle. Найти в tablespace таблицу, где поле содержи ‘s

От: Mckey
Дата: 17.01.08 13:12
Оценка:

Здравствуйте, Аноним, Вы писали:

А>ТЕ у меня есть куча таблиц с множеством строчек, мне нужно найти строку и (или хотябы) имя таблицы
А>в которое поле содержит что то заданое.
А>Т.е. это какой то селект где в условии поиска я не знаю имя поля в котором ищу и имя таблицы.
А>хочу select . from .. where tablespace.*.* like ‘some’
А>Хотелось бы увидеть запрос на sql если такое возможно.

Насколько я знаю PLSQL Developer такое может, там же можно посмотреть каким запросом он это делает — вот только я не уверен что это омжно сделать одним запросом.

Делай добро и бросай его в воду.
Re: Oracle. Найти в tablespace таблицу, где поле содержи ‘s

От: wildwind
Дата: 17.01.08 13:13
Оценка:

Здравствуйте, Аноним, Вы писали:

А>ТЕ у меня есть куча таблиц с множеством строчек, мне нужно найти строку и (или хотябы) имя таблицы
А>в которое поле содержит что то заданое.
А>Т.е. это какой то селект где в условии поиска я не знаю имя поля в котором ищу и имя таблицы.
А>хочу select . from .. where tablespace.*.* like ‘some’
А>Хотелось бы увидеть запрос на sql если такое возможно.

Нет, именно такое невозможно.
Если ты пытаешься реализовать полнотекстовый поиск, то начни с чтения документации на эту тему. Если нет, то постарайся объяснить свою исходную задачу так, чтобы было понятно другим.

P.S. Tablespace тут ни причем, не поминай его всуе.

Re[2]: Oracle. Найти в tablespace таблицу, где поле содержи

От: Аноним
Дата: 17.01.08 13:21
Оценка:

Здравствуйте, wildwind, Вы писали:

W>Нет, именно такое невозможно.
W>Если ты пытаешься реализовать полнотекстовый поиск, то начни с чтения документации на эту тему. Если нет, то постарайся объяснить свою исходную задачу так, чтобы было понятно другим.

W>P.S. Tablespace тут ни причем, не поминай его всуе.

вобщем я не программирую на sql, знаю простейшие запросы только.
мне как админу понадобилось найти среди кучи таблиц ту в которой имеется строка с некоторым содержимым.
Причем имя поля я не знаю.
По идее я могу пройтись изменяя имя таблицы (вручную) в таком запросе по всем таблицам (соответсвено выполняя запрос каждый раз после изменения имени таблицы)

select "INFODBA"."PWORKSPACEOBJECT"."PUID", "INFODBA"."PWORKSPACEOBJECT"."POBJECT_NAME", "INFODBA"."PWORKSPACEOBJECT"."POBJECT_DESC", "INFODBA"."PWORKSPACEOBJECT"."POBJECT_TYPE", "INFODBA"."PWORKSPACEOBJECT"."POBJECT_APPLICATION", "INFODBA"."PWORKSPACEOBJECT"."VLA_34_6", "INFODBA"."PWORKSPACEOBJECT"."VLA_34_7", "INFODBA"."PWORKSPACEOBJECT"."VLA_34_9", "INFODBA"."PWORKSPACEOBJECT"."PREVISION_LIMIT", "INFODBA"."PWORKSPACEOBJECT"."PREVISION_NUMBER", "INFODBA"."PWORKSPACEOBJECT"."RWSO_THREADU", "INFODBA"."PWORKSPACEOBJECT"."RWSO_THREADC", "INFODBA"."PWORKSPACEOBJECT"."PDATE_RELEASED" from "INFODBA"."PWORKSPACEOBJECT" where "INFODBA"."PWORKSPACEOBJECT"."PUID" like 'some_id'

Хотелось бы автоматизировать этот процесс

Re[3]: Oracle. Найти в tablespace таблицу, где поле содержи

От: Аноним
Дата: 17.01.08 13:47
Оценка:

Здравствуйте, Аноним, Вы писали:
..skip..
А>Хотелось бы автоматизировать этот процесс

Забыл . имя поля я тоже не знаю , мне придется выполнять на каждое поле запрос отдельный

(число таблиц)*(число полей) запросов — мне кажется многовато для ручной работы

Re[4]: Oracle. Найти в tablespace таблицу, где поле содержи

От: _Oleg_
Дата: 17.01.08 14:27
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:
А>..skip..
А>>Хотелось бы автоматизировать этот процесс

А>Забыл . имя поля я тоже не знаю , мне придется выполнять на каждое поле запрос отдельный

А>(число таблиц)*(число полей) запросов — мне кажется многовато для ручной работы

Ну можно сократить поиск по типам поля.
К примеру, если это число, то не искать его в строковых полях.
Надо знать что за данные и где они теоретически могут лежать.

Re[5]: Oracle. Найти в tablespace таблицу, где поле содержи

От: Аноним
Дата: 17.01.08 14:35
Оценка:

Здравствуйте, _Oleg_, Вы писали:

_O_>Здравствуйте, Аноним, Вы писали:

А>>Здравствуйте, Аноним, Вы писали:
А>>..skip..
А>>>Хотелось бы автоматизировать этот процесс

А>>Забыл . имя поля я тоже не знаю , мне придется выполнять на каждое поле запрос отдельный

А>>(число таблиц)*(число полей) запросов — мне кажется многовато для ручной работы

_O_>Ну можно сократить поиск по типам поля.
_O_>К примеру, если это число, то не искать его в строковых полях.
_O_>Надо знать что за данные и где они теоретически могут лежать.

Да скрипт товарищу нужен, незнаю как в оракле
простой цикл в цикле: перебор объектов sysobjects и перебор всех колонок, формирование для каждой колонки текста нужного селекта.

Товарищ копипастнет результат в окошко sql developer’a запустит его и посмотрит выдачу.

Re: Oracle. Найти в tablespace таблицу, где поле содержи ‘s

От: AnSiSr
Дата: 18.01.08 04:05
Оценка:

Здравствуйте, Аноним, Вы писали:
А>Хотелось бы увидеть запрос на sql если такое возможно.
Используйте динамический sql и запросы к словарю: all_all_tables, all_tables_cols что-то типа такого. Очень просто решается.

Re: Oracle. Найти в tablespace таблицу, где поле содержи ‘s

От: bloom
Дата: 18.01.08 09:19
Оценка: 4 (1)

Здравствуйте, Аноним, Вы писали:

Хотелось бы уточнить: вам действительно нужен поиск по табличному пространству? а может по схеме ?

SELECT owner, table_name, colum_name, data_type FROM dba_tab_cols WHERE owner = 'SOME_SCHEMA'

если действительно табличное пространство:

SELECT cols.owner, cols.table_name, cols.column_name, cols.data_type FROM dba_tables tabs INNER JOIN dba_tab_cols cols ON cols.table_name = tabs.table_name AND cols.owner = tabs.owner WHERE tabs.tablespace_name = 'SOME_TABLESPACE'

ну и тогда что то типа:

DECLARE l_search_str VARCHAR2(2000) := 'MS_DATA_KIE'; l_tmp_count NUMBER; BEGIN FOR rec IN ( . тут запрос оговоренный выше . ) LOOP -- тут в зависимости от типа можно составлять различные условия отбора (не для всех типов можно применить LIKE). -- но не будем усложнять себе жизнь :) BEGIN l_tmp_count := 0; EXECUTE IMMEDIATE 'begin ' || ' SELECT COUNT(*) INTO :p ' || ' FROM ' || rec.owner || '.' || rec.table_name || ' WHERE ' || rec.column_name || ' LIKE ' || '''' || l_search_str || '''' || ';' || 'end;' USING OUT l_tmp_count; EXCEPTION WHEN OTHERS THEN NULL; -- нету LIKE дял типа и т.д. END; IF l_tmp_count <> 0 THEN dbms_output.put_line('Table: ' || rec.table_name || ' column: ' || rec.column_name); END IF; END LOOP; END;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *