Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
3m
- Сообщения: 13
- Зарегистрирован: 05 ноя 2006, 19:48
Сообщение
3m » 25 дек 2006, 23:07
Здравствуйте!
Есть таблица, один из столбцов blob, возникла необходимость в запросе select получать наряду с данными информацию о том пуст blob или нет.
Пока я придумал только один рабочий вариант - с использованием функции BlobSize из библиотеки FreeUDFLib, т.е. так:
Код: Выделить всё
SELECT name, param1, param2,...paramN, F_BLOBSIZE(audiodata) FROM mytable WHERE id=N
Смущает два момента: надо скачивать и устанавливать FreeUDFLib; размер blob мне знать не требуется, достаточно просто знать что audiodata IS NOT NULL.
Можно ли как-то более изящно решить данную задачу?
-
DS
- Сообщения: 41
- Зарегистрирован: 17 фев 2005, 16:54
Сообщение
DS » 26 дек 2006, 00:35
SELECT name, param1, param2,...paramN, IIF(audiodata IS NULL, 'yes', 'no') isnull
FROM mytable WHERE id=N
iif кажись в только в fb2 появилось, в более ранних смотри в сторону CASE
-
3m
- Сообщения: 13
- Зарегистрирован: 05 ноя 2006, 19:48
Сообщение
3m » 26 дек 2006, 01:42
DS писал(а):SELECT name, param1, param2,...paramN, IIF(audiodata IS NULL, 'yes', 'no') isnull
FROM mytable WHERE id=N
iif кажись в только в fb2 появилось, в более ранних смотри в сторону CASE
У меня FB 1.5.3 - iif не работает.
CASE заработал:
Код: Выделить всё
SELECT name, param1, param2,...paramN,
case
when audiodata IS NOT NULL THEN 1
ELSE 0
END
FROM mytable WHERE id=N
.
Есть еще вариант в разбивкой на два запроса:
Код: Выделить всё
/* 1 получаем данные */
SELECT name, param1, param2,...paramN FROM mytable WHERE id=N
/* 2 проверяем наличие blob */
SELECT COUNT(audiodata) FROM mytable WHERE id=N
Хотя COUNT везде ругают за "тяжеловесность", но в моем случае всегда берется только 1 строка.
-
Dimitry Sibiryakov
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Сообщение
Dimitry Sibiryakov » 26 дек 2006, 08:12
Я не понял, а почему бы не писать просто SELECT ..., audiodata.... а потом на клиенте проверять FieldByName('audiodata').IsNull? Слишком умные компоненты?
-
3m
- Сообщения: 13
- Зарегистрирован: 05 ноя 2006, 19:48
Сообщение
3m » 26 дек 2006, 12:13
Dimitry Sibiryakov писал(а):Я не понял, а почему бы не писать просто SELECT ..., audiodata.... а потом на клиенте проверять FieldByName('audiodata').IsNull? Слишком умные компоненты?
Именно так.
Использую IBPP - он сам проверяет тип и обойти это нет возможности без глубокой рихтовки исходников IBPP.