powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
6 сообщений из 6, страница 1 из 1
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
    #38198393
hmmm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, всем доброго времени суток!

Возникла у меня ситуация вот какая: по ходу работы сервиса иногда создается таблица с агрегированной отчетностью. И чтобы не пугать пользователей всякими ошибками хотелось бы как-то автоматически узнать есть ли в базе такая таблица, или ее нет.

Если просто сделать запрос
Код: sql
1.
SELECT * FROM abc


То сразы попадаем на ошибку
Ошибка в запросe (1): no such table: abc
Может можно как-то на EXIST проверить существование таблицы с указанным названием?

P.S. Просто способ через обращение к служебной таблице 'sqlite_sequence' мне не очень нравится.
Код: sql
1.
SELECT name FROM 'sqlite_sequence' WHERE name='@tableName@'
...
Рейтинг: 0 / 0
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
    #38198422
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hmmm,

В sqlite_sequence ведь не все таблицы
надежнее обращаться к sqlite_master

Код: plsql
1.
select * from sqlite_master where type = 'table' and tbl_name = 'abc'



а зачем вообще дропаете abc ?
у нее меняется структура в зависимости от отчетности?
...
Рейтинг: 0 / 0
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
    #38198882
hmmm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

В принципе, те таблицы, которые попадают в 'sqlite_sequence' , меня устраивают. Т.к. там перечислены все пользовательские таблицы в которых есть хоть одна запись. Но огромное спасибо про sqlite_master , я в нее еще ни разу не лазил :)

В abc хранятся данные по услугам агрегированные по некоторому временному интервалу. Например, количество человек, пользовавшихся какой-то услугой в месяц, или сколько денег заплатили клиенты за какую-то услугу в месяц. В общем, таких параметров много и теоретически их набор может меняться.
Нужна эта таблица для того, чтобы не "трясти" всю базу выборками каждый раз, как кому-то захочется посмотреть отчеты по услугам компании.
И еще, этой таблицы первоначально не существует. Она появляется только после того, как впервые кто-то нажмет кнопку для создания отчета.
...
Рейтинг: 0 / 0
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
    #38198928
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hmmm,

Понятно. вы сделали самодельную материализацию.
имена колонок, их кол-во и названия ведь у таблицы abc не меняются?

Перед обновлением данных вы удаляйте данные из нее и заносите заново запросом.
в этом случае создать таблицу можно будет один раз в момент инсталляции системы.

Если структура таблицы меняется, то таким объектам лучше давать другие имена.

p.s.
Про sqlite_sequence немного ошибаетесь
в ней хранятся только те таблицы, где есть синтетический PK c AUTOINCREMENT
если создать таблицу без такого поля то она там не появится.
...
Рейтинг: 0 / 0
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
    #38199238
hmmm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,

Странно! Но в моей БД 10 таблиц и в sqlite_sequence отображаются только те таблицы, в которых есть записи. При этом, у меня все 10 таблиц с PK и AI ...
PPAвы сделали самодельную материализацию
Можно про это подробней? Что означает "материализация"? И какие есть встроенные?
...
Рейтинг: 0 / 0
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
    #38199839
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hmmm,

1. Материализации встроенной в sqlite нет.

2. В sqlite_sequence хранится число для генератора AI
если таблицу создать без поля AUTOINCREMENT и закинуть туда записи

CREATE TABLE aaaaaaaaaa( name text NOT NULL);
INSERT INTO aaaaaaaaaa (name) VALUES ('12121');

в sqlite_sequence таблицу aaaaaaaaa вы не найдете.
в общем случае нужно искать в sqlite_master
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]