Показаны сообщения с ярлыком 11g. Показать все сообщения
Показаны сообщения с ярлыком 11g. Показать все сообщения

Еще один забавный баг, теперь с with...

0 коммент.

Самое смешное, что еще три месяца назад про него читал на sql.ru и otn, а сегодня забыл: дело в том, что с 11.1 снято ограничение на обязательное использование всех "named queries" из subquery factoring clause в основном запросе, правда в документации ни на 11.2, ни на 11.1, ни на 10.2 я не нашел ни информации о снятии ограничения, ни его самого(кроме, естественно, самой ошибки в списке). Зато появилась забавная ORA-01762: vopdrv: view query block not in FROM.
Ясно, конечно, что это связано с улучшениями/изменениями механизма трансформации запроса при работе с subquery factoring clause и, скорее всего, с появлением Recursive Subquery Factoring 

Чтобы в очередной раз не забыть, запишу тут протестированное на 11.2.0.1.

Группировка и проверка условия внутри нее до первого удовлетворяющего

2 коммент.

На очередной коротенький quiz, натолкнул такой вопрос:

Здравствуйте!
Столкнулся с запросом вида
SELECT   ...
   MAX
   (CASE
      WHEN <большое условие>
      THEN 1
      ELSE 0
   END) AS FLAG
   ...
FROM  <большая таблица>
GROUP BY ...
В котором, как вы видите, надо просто определить, есть ли в рамках "окна группировки" хотя бы одна строка удовлетворяющая <большое условие>.
Можно ли сделать так, чтобы после нахождения первой такой строки никаких вычислений в рамках окна больше не производилось?

На самом деле можно несколькими способами, но условие должно быть действительно тяжелое и никак иначе не решаемое, чтобы получить какой-то профит.

Например, я попробую с помощью создания функции с result_cache, но вместо "relies on" + "какая-то таблица для хранения значения" буду использовать пакетную переменную(можно, конечно, и sys_context) и функцию DBMS_RESULT_CACHE.INVALIDATE.