Страница 1 из 1

Как использовать таблицу в подзапросе, чтобы обойти ее отсут

Добавлено: 12 апр 2006, 19:05
Aleksandr.
ствие?

Создается вид на запросе из таблицы 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. Как-то вообще можно сформировать запрос так, чтобы таблица в подзапросе участвовала только при ее наличии в базе?

Добавлено: 12 апр 2006, 19:13
Merlin
Вообще-то постановка задачи отдаёт проктологией.

Нет. Текст запроса не интерпретируется по ветвлениям внутри него. Запрос всегда сначала препарируется целиком, затем целиком же и выполняется. Касается и вьёв и процедур и триггеров.

В FB1.5 и выше можно вообще-то объехать на кривой козе в процедуре, формируя запрос динамически в строке и запуская её (строку) на исполнение через execute statement. Но это уже будет проктология в квадрате :)

Добавлено: 14 апр 2006, 16:31
entryway
Merlin писал(а):В FB1.5 и выше можно вообще-то объехать на кривой козе в процедуре, формируя запрос динамически в строке и запуская её (строку) на исполнение через execute statement.
Смотрю я ничего не изменилось за два то года :) Мне кажется я даже догадываюсь кем был/есть Merlin в одноименных ньсах. Я прав?
А execute statement такое впечатление, что умные сделали для дураков, чтобы потом их же в дурости и уличать :) Не смотря на кучу случаев где он практически незаменим. Опаски же "тормозов" связанных с такими запросами в большинстве случаев смешны и неуместны. Обычно ведь как: нажатие на кнопку == запрос. Ну да ладно. Умолкаю.

Добавлено: 16 апр 2006, 01:19
kdv
Не смотря на кучу случаев где он практически незаменим.
есть такой оператор - goto. некоторые тоже утверждают, что он незаменим.

Добавлено: 16 апр 2006, 20:39
entryway
А некоторые даже встроили его подобие в FB2