|
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
|
|||
---|---|---|---|
#18+
Коллеги, всем доброго времени суток! Возникла у меня ситуация вот какая: по ходу работы сервиса иногда создается таблица с агрегированной отчетностью. И чтобы не пугать пользователей всякими ошибками хотелось бы как-то автоматически узнать есть ли в базе такая таблица, или ее нет. Если просто сделать запрос Код: sql 1.
То сразы попадаем на ошибку Ошибка в запросe (1): no such table: abc Может можно как-то на EXIST проверить существование таблицы с указанным названием? P.S. Просто способ через обращение к служебной таблице 'sqlite_sequence' мне не очень нравится. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2013, 11:52 |
|
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
|
|||
---|---|---|---|
#18+
hmmm, В sqlite_sequence ведь не все таблицы надежнее обращаться к sqlite_master Код: plsql 1.
а зачем вообще дропаете abc ? у нее меняется структура в зависимости от отчетности? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2013, 12:11 |
|
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
|
|||
---|---|---|---|
#18+
PPA, В принципе, те таблицы, которые попадают в 'sqlite_sequence' , меня устраивают. Т.к. там перечислены все пользовательские таблицы в которых есть хоть одна запись. Но огромное спасибо про sqlite_master , я в нее еще ни разу не лазил :) В abc хранятся данные по услугам агрегированные по некоторому временному интервалу. Например, количество человек, пользовавшихся какой-то услугой в месяц, или сколько денег заплатили клиенты за какую-то услугу в месяц. В общем, таких параметров много и теоретически их набор может меняться. Нужна эта таблица для того, чтобы не "трясти" всю базу выборками каждый раз, как кому-то захочется посмотреть отчеты по услугам компании. И еще, этой таблицы первоначально не существует. Она появляется только после того, как впервые кто-то нажмет кнопку для создания отчета. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2013, 16:00 |
|
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
|
|||
---|---|---|---|
#18+
hmmm, Понятно. вы сделали самодельную материализацию. имена колонок, их кол-во и названия ведь у таблицы abc не меняются? Перед обновлением данных вы удаляйте данные из нее и заносите заново запросом. в этом случае создать таблицу можно будет один раз в момент инсталляции системы. Если структура таблицы меняется, то таким объектам лучше давать другие имена. p.s. Про sqlite_sequence немного ошибаетесь в ней хранятся только те таблицы, где есть синтетический PK c AUTOINCREMENT если создать таблицу без такого поля то она там не появится. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2013, 16:21 |
|
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
|
|||
---|---|---|---|
#18+
PPA, Странно! Но в моей БД 10 таблиц и в sqlite_sequence отображаются только те таблицы, в которых есть записи. При этом, у меня все 10 таблиц с PK и AI ... PPAвы сделали самодельную материализацию Можно про это подробней? Что означает "материализация"? И какие есть встроенные? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2013, 18:40 |
|
Каким запросом узнать существует ли таблица с @tableName@ в базе @dbName@?
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2013, 06:54 |
|
|
start [/forum/topic.php?fid=54&msg=38199238&tid=2008920]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 270ms |
total: | 391ms |
0 / 0 |