Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Aleksandr.
- Сообщения: 63
- Зарегистрирован: 18 май 2005, 19:13
Сообщение
Aleksandr. » 12 апр 2006, 19:05
ствие?
Создается вид на запросе из таблицы Trucks с участием в подзапросе таблицы Pascresp.
Таблица Pascresp может отсутствовать в базе, в таком случае нужно для подзапроса вернуть 0. Попытался реализовать запрос так:
Код: Выделить всё
select trucks."passingcarid", trucks."firmid",
case WHEN EXISTS(Select * from RDB$RELATIONS where UPPER(RDB$RELATION_NAME)='PASCRESP') THEN
(SELECT AVG(COALESCE("response",0)) FROM pascresp R WHERE R."id"=trucks."passingcarid" AND R."firmid"=trucks."firmid")
ELSE 0 END
from trucks
Однако попытка выполнить такой запрос через IBExpert или FIBQuery при отсутствии pascresp сразу возвращает ошибку table unknown. Как-то вообще можно сформировать запрос так, чтобы таблица в подзапросе участвовала только при ее наличии в базе?
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 12 апр 2006, 19:13
Вообще-то постановка задачи отдаёт проктологией.
Нет. Текст запроса не интерпретируется по ветвлениям внутри него. Запрос всегда сначала препарируется целиком, затем целиком же и выполняется. Касается и вьёв и процедур и триггеров.
В FB1.5 и выше можно вообще-то объехать на кривой козе в процедуре, формируя запрос динамически в строке и запуская её (строку) на исполнение через execute statement. Но это уже будет проктология в квадрате

-
entryway
- Сообщения: 71
- Зарегистрирован: 13 апр 2006, 18:06
Сообщение
entryway » 14 апр 2006, 16:31
Merlin писал(а):В FB1.5 и выше можно вообще-то объехать на кривой козе в процедуре, формируя запрос динамически в строке и запуская её (строку) на исполнение через execute statement.
Смотрю я ничего не изменилось за два то года :) Мне кажется я даже догадываюсь кем был/есть Merlin в одноименных ньсах. Я прав?
А execute statement такое впечатление, что умные сделали для дураков, чтобы потом их же в дурости и уличать :) Не смотря на кучу случаев где он практически незаменим. Опаски же "тормозов" связанных с такими запросами в большинстве случаев смешны и неуместны. Обычно ведь как: нажатие на кнопку == запрос. Ну да ладно. Умолкаю.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 16 апр 2006, 01:19
Не смотря на кучу случаев где он практически незаменим.
есть такой оператор - goto. некоторые тоже утверждают, что он незаменим.
-
entryway
- Сообщения: 71
- Зарегистрирован: 13 апр 2006, 18:06
Сообщение
entryway » 16 апр 2006, 20:39
А некоторые даже встроили его подобие в FB2