Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 161
от 31.10.2006, 11:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 384, Экспертов: 55
В номере:Вопросов: 1, Ответов: 6


Вопрос № 60162: Добрый день. Можно ли как-то проверить есть ли в базе данных таблица с определённым именем? Нужно создать таблицу в БД, но только в том случае, если такой таблицы ещё нет....

Вопрос № 60.162
Добрый день.
Можно ли как-то проверить есть ли в базе данных таблица с определённым именем?
Нужно создать таблицу в БД, но только в том случае, если такой таблицы ещё нет.
Отправлен: 25.10.2006, 19:39
Вопрос задал: Вiктор (статус: 7-ой класс)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Евгений Крюков
Здравствуйте, Вiктор!
Подход зависит от базы данных. Например, для Oracle можно обратиться к справочнику таблиц USER_TABLES или обработать ошибку ORA-942. В MySQL попытка обращения к несуществующей таблице вызовет исключение 1146 - его также можно обработать и создать нужную таблицу.
---------
Большинство ответов на вопросы в рассылках находиться через Яндекс за 1 мин.
Ответ отправил: Евгений Крюков (статус: Студент)
Ответ отправлен: 25.10.2006, 20:00

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Вiктор!

В приложении пример из рабочей программы. Связь с базой через DAO. Вместо QueryDefs ( коллекция запросов ) нужно поставить TableDefs (коллекция таблиц ) и метод CreateQueryDef заменить на CreateTableDef с соответствующими параметрами.
Если нет вопросов по созданию таблицы, то все.

С уважением.

Приложение:

Ответ отправил: Филатов Евгений Геннадьевич (статус: 5-ый класс)
Ответ отправлен: 25.10.2006, 20:01

Отвечает: Архангельский Андрей Германович
Здравствуйте, Вiктор!

Все зависит от типа СУБД.
Как правило есть системные таблицы описывающие архитектуру БД, соответственно есть таблица, которая содержит перечень таблиц и их полей.
К этим таблицам можно сделать запрос.
В Firebird эта таблица называется rdb$relations, а в ней поле rdb$relations_name в котором имена таблиц
---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 25.10.2006, 20:35

Отвечает: Grigory
Здравствуйте, Вiктор!
Если вы имеете дело с SQL Server 2000, то это можно проверить с помощью вот такого запроса:
SELECT count(*)
FROM sysobjects
WHERE (name = 'имя вашей таблицы')
Этот запрос вернет 1 если такая таблица уже в вашей БД есть, и 0 - если такой таблицы нет.
В Oracle это делается вот так:
входите в SQL Plus в качестве пользователя с правами доступа к этой таблице и вводите:
select count(*) from cat where table_name = 'имя вашей таблицы';

Удачи!
Ответ отправил: Grigory (статус: 3-ий класс)
Ответ отправлен: 25.10.2006, 20:49

Отвечает: Марк Крейн
Здравствуйте, Вiктор!
Как всегда соригинальничаю. Хотя то что я сейчас скажу, несмотря на свою дикость, работает. Проверялось только на MySQL. Итак, код:

SELECT * from table where (1=0)

Если выполнится без проблем, значит таблица table существует, в противном случае её нет. Я сам когда прочитал об этом в интернете был поражён (как может 1 равняться нулю??). Но тем не менее факт остаётся фактом - всё прекрасно работает.
Ответ отправил: Марк Крейн (статус: Практикант)
Ответ отправлен: 25.10.2006, 21:03

Отвечает: HookEst
Здравствуйте, Вiктор!
Мне отвечать проще, я знаю вашу СУБД...
В MySQL 3.23 и выше, Вы можете использовать IF NOT EXISTS так, что если таблица с таким именем уже существует - ошибки не возникнет(структура имеющейся таблицы не проверяется и не обновляется!!!).
например:

CREATE TABLE IF NOT EXISTS `users` (`id` INT(11), `name` VARCHAR(32));
INSERT INTO `users` ...
чтобы быть увереным также и в структуре таблицы, можно сначала безопасно удалять таблицу, потом создавать:

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`id` INT(11), `name` VARCHAR(32));
INSERT INTO `users` ...

Успехов.
Ответ отправил: HookEst (статус: 6-ой класс)
Ответ отправлен: 26.10.2006, 05:36


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное