Maslov писал(а):
А если сортировка результата нужна, всё ещё хуже - надо вытаскивать ORDER BY из исходного запроса и переносить во внешний.
Я, кстати, в этом случае писал бы примерно так (очень упрощенный вид, ессно):
select t.F1, t.F2,...,
(select count(*)
from Tbl t
where t.G1 = :p1 and t.G2 = :p2 and ...) as CNT
from Tbl t
where t.G1 = :p1 and t.G2 = :p2 and ...
order by t.H
Maslov писал(а):
Честно говоря, не очень понимаю, в чем Ваша проблема.
Есть два основных способа работы с выборкой из базы:
1. Живой коннект (курсор) - результат возвращается после получения из базы первой записи, остальные записи извлекаются по мере необходимости (при навигации по курсору). В этом случае количество результирующих записей не известно до тех пор, пока мы не уперлись в конец выборки.
2. Результат возвращается после того, как из базы извлечены все записи. В этом случае результирующий объект обычно позволяет довольно просто определить количество записей.
Вы с какой базой и через какой программный интерфейс работаете?
Дело в том, что тут у меня несколько способов работы с базой и с разными целями. Есть запросы из Delphi - там просто SQL, хотя есть и хранимые процедуры, где можно использовать PL/SQL, но запросы тут необходимы. Есть некоторые серверные объекты, которые используют только SQL. Короче так: в некоторых частных случаях я бы мог это проблему решить, используя какие-то свои уловки в каждом случае (хотя это бы не везде прошло) (в Delphi например можно найти число строк в результирующем запросе), но было бы решение в общем случае, было бы вообще прекрасно - пользуешься где хочешь и не заморачиваешься.
Maslov писал(а):
Очевидно, что построение нужного Вам запроса (без ограничений на длину) возможно. Что же касается длины, так я о таких доказательствах даже не слышал никогда
Ну я значит тем более. Все-таки еще в книжках пошарюсь...