|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] /SQL/ Поиск значения в ячейках всех таблиц базы данных Oracle |
|
Разное - [решено] /SQL/ Поиск значения в ячейках всех таблиц базы данных Oracle
|
![]() Пользователь Сообщения: 133 |
Добрый день!
Можно ли на SQL написать запрос к базе данных Oracle, который бы выполнил поиск строкового значения по ячейкам всех имеющихся таблиц и вывел в качестве результата список имён этих таблиц (в которых присутствует искомое значение) ? Может у кого есть подобный уже готовый примерчик? Или есть стандартные средства реализующие подобный функционал? Заранее спасибо ![]() |
|
------- Отправлено: 11:10, 06-08-2010 |
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать Любопытно, с какой целью такое потребовалось.
Я думаю, что стандартных средств в СУБД для решения такой задачи не существует. Полнотекстовый поиск - это задача несколько иная, чем управление БД. Зато есть поисковые движки типа Thinking Sphinx. Посмотри вот тут: http://sphinxsearch.com/ |
------- Отправлено: 15:10, 07-08-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать EvgeniyQQQ, встроенными путями такое сделать не получится. Необходимо минимум 2 цикла - первый берет список таблиц из указанной базы, второй - список полей в таблице . Ну и далее уже в циклах - выборка.
|
------- Отправлено: 00:40, 09-08-2010 | #3 |
![]() Пользователь Сообщения: 133
|
Профиль | Сайт | Отправить PM | Цитировать noname00.pas, есть у нас PLM-система, она использует СУБД Oracle. Я проводил эксперименты с помощью внешнего приложения, вносил и удалял некоторую информацию... это приложение обращается к базе не напрямую, а через саму PLM. Так вот, я удалил идентификатор одного объекта PLM с помощью внешнего приложения. Пока PLM была запущена, всё работало, но стоило её перезапустить, как она стала ругаться, что не может найти объект с удалённым мной идентификатором и при этом вылетает (завершает свою работу). Вернуть идентификатор на место с помощью внешнего приложения я не могу, так как PLM не запущена. Остаётся только внести его назад в базу в ручную... но вот засада... таблиц много.... очень много, а где хранятся идентификаторы не известно
![]() |
------- Отправлено: 12:07, 09-08-2010 | #4 |
![]() Пользователь Сообщения: 133
|
Профиль | Сайт | Отправить PM | Цитировать Delirium, спасибо за ссылки. Они натолкнули меня на правильные мысли
![]() Так как в SQL я чайник и разбираться нет времени, то написал поиск используя симбиоз Java и SQL. Вот сам код, может кому пригодится: public static void main(String[] args) { final String SEARCH_STRING_OF_CELL = "Искомый текст в ячейке"; final String HOST = "localhost"; final String PORT = "1521"; final String BASE_ID = "wind"; final String USER = "guest"; final String PASSWORD = "guest"; try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); Connection myCon = DriverManager.getConnection("jdbc:oracle:thin:@" + HOST + ":" + PORT + ":" + BASE_ID, USER, PASSWORD); Statement mySt = myCon.createStatement(); System.out.println("Выполняю поиск..."); ResultSet rs = mySt.executeQuery("select * from user_tables"); //Формируем список имён таблиц List<String> listTables = new ArrayList<String>(); while (rs.next()) listTables.add(rs.getString(1)); for(int i = 0; i<listTables.size(); i++) { ResultSet rs1 = mySt.executeQuery("select * from " + listTables.get(i)); while(rs1.next()) { for(int j = 1; j<rs1.getMetaData().getColumnCount() + 1; j++) { Object cell = rs1.getObject(j); if((cell instanceof String) && ((String)cell).compareToIgnoreCase(SEARCH_STRING_OF_CELL) == 0) { System.out.println("Имя таблицы \"" + listTables.get(i) + "\", имя столбца \"" + rs1.getMetaData().getColumnName(j) + "\", значение \"" + cell + "\""); } } } } mySt.close(); myCon.close(); } catch(Exception e) { e.printStackTrace(); } System.out.println("Поиск завершен!"); } |
|
------- Отправлено: 19:46, 09-08-2010 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Загрузка - Планировщики меняющие значения в ячейках КМОП ОЗУ. | elibom | Microsoft Windows 2000/XP | 3 | 24-05-2009 20:28 | |
MySQL - [решено] Выборка данных со всех таблиц, которые начинаются с test_ | Artem-Samsung | Программирование и базы данных | 2 | 31-03-2009 15:42 | |
MSFT SQL Server - Размер файла базы данных MS SQL | Odessit | Программирование и базы данных | 7 | 29-04-2007 07:35 | |
SQL и базы данных | Ivian | Программирование и базы данных | 3 | 18-03-2005 12:50 | |
SQL, базы данных и ASP | anridir | Вебмастеру | 2 | 23-09-2002 07:07 |
|