Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ... / 21 сообщений из 21, страница 1 из 1
29.03.2017, 12:32
    #39429134
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
Здравствуйте! Всё же WITH - это из Оракла, вопрос теоретический. Интересуюсь +/- 'ми выбранной тактики.

Попросили отчёт типа квартального, описанный словесным алгоритмом, с итерациями, ветвлениями, неопределённостями формулировок и др. "украшениями".
Вообще-то напрашивалось "50 на 50" SQL и PL/SQL, но боялся зашиться с DBMS_OUTPUT и циклами, предположив, что задача будет проясняться и доформулировываться по мере разработки. Решил пойти "теоретико-множественным" путём.

В сущности, выбирал из 3-х вариантов, все в базе:
Код: plaintext
1.
2.
-- полностью на основе WITH  AS
-- PL/SQL с преимущественной обработкой циклами
-- PL/SQL пополам с курсорами, возможно и с циклами
Делал т.н. "эволюционным методом": создал боле-мене понятные "кубики" из курсоров и на их основе комбинировал. Раз даже начинал сначала, но всё свелось к тому же.

В итоге 15 промежуточных и конечных курсоров, а целиком типа такого:
Код: plsql
1.
2.
3.
4.
5.
6.
WITH 
	ccc1 AS ( select ...),
	ccc2 AS ( select ...),
	...
	ccc14 AS ( select ...)
Select ... ;

Он в принципе скорость не особо критична, ну выполняется 15-20 сек. и ладно. Из оптимизации: убрал, где можно, тормозящие DISTINCT, но кое-где пришлось и оставить.
Вымучил версию 9.3.1, 550 строк вместе с комментами, визуальными отступами, ин-лайн строками для промежуточной отладки каждого курсора. Сделал описание со схемой взаиимодействия кубиков.

Не думаю, что очень уж криво сделал, но всё же из-за не большой самостоятельной практики PL/SQL мне не ясны принципиальные подводные камни выбранной реализации в сравнении с другими. Вот об этом хотел бы услышать. Единственное, что запрос этот полностью серверный и другой вариант не рассматриваю.
...
Рейтинг: 0 / 0
29.03.2017, 12:37
    #39429144
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
exp98Всё же WITH - это из ОраклаWITH - это из ANSI-стандарта SQL, поддерживается всеми прогрессивными СУБД.
дальше не читал....
...
Рейтинг: 0 / 0
29.03.2017, 13:07
    #39429183
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
exp98,

Непонятно какой ответ ты ожидаешь на абстрактный вопрос в вакууме.
Если with использовано для декомпозиции логики и в каждом из них использован базовый SQL (без рекурсии и всяких моделей), то допустимый подход.
Другое дело, что у многие повторяют мантру, что курсоры это плохо не понимая почему именно. На самом деле, можно управлять какую порцию данных фетчить из курсора за раз и при грамотном подходе сделать решение, как правило, не уступающее по произвоизводительности SQL подходу (опять же, случаи бывают разные, все решает специфика).
Жирный минус в случае PL/SQL, что надо создавать пользовательский тип для строки результата и соответсвенно вызывать конструктор для каждой строки (ну или куда-то записывать результат перед выдачей).
Категорически рекомендуется для ознакомления эта white paper 20193942 .
...
Рейтинг: 0 / 0
29.03.2017, 13:24
    #39429197
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
Спасибо, мог и не знать. В конце 90-х я входил в SQL по 92-му и не помню чтоб вокруг упоминали об WITH. И недавно, довелось в старом Sybase - и тоже не встречал. А дальше тоже м.ск-ть не читал , поэтому и ассоциирую его с ораклом.
Тем не менее, сравнение с PL/SQL и база всё равно Оракла.
...
Рейтинг: 0 / 0
29.03.2017, 13:31
    #39429204
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
dbms_photoshop,
зачётный ответ, примерно таких и ожидал!
Нет, рекурсий не использовал, здесь не потребовалось, с моделями я наверное не знаком.
Из специфики - отчёт из тех, где сетевая синхронизация, т.е. 100% актуальность не актуальна.
...
Рейтинг: 0 / 0
29.03.2017, 13:33
    #39429207
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
Вот да,
"Best and Worst Practices" - именно на эту тему спрашивал
...
Рейтинг: 0 / 0
29.03.2017, 13:49
    #39429228
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
exp98не помню чтоб вокруг упоминали об WITH. И недавно, довелось в старом Sybase - и тоже не встречал. А дальше тоже м.ск-ть не читал , поэтому и ассоциирую его с ораклом(JFYI):
ANSI/ISO/IEC International Standard (IS) Database Language SQL — Part 2: Foundation (SQL/Foundation) «Part 2» September 1999 7.12 <query expression>(...)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<with clause> ::= WITH [ RECURSIVE ] <with list>
<with list> ::=
<with list element> [ { <comma> <with list element> }... ]
<with list element> ::=
<query name>
[ <left paren> <with column list> <right paren> ]
AS <left paren> <query expression> <right paren>
[ <search or cycle clause> ]
<with column list> ::= <column name list>
(...)
...
Рейтинг: 0 / 0
29.03.2017, 13:52
    #39429233
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
Даже не так уж долго после первых наводок начинает складываться уверенность, что собственно недостатки могут скрываться преимущественно в оракловых фичах. До сих пор я только умозрительно так думал.
Вот ещё себе самому ссылка .
...
Рейтинг: 0 / 0
29.03.2017, 15:10
    #39429318
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
exp98,

Чепуху там написал Дональд, при том сильно устаревшую, что удивляет учитывая дату статьи February 23, 2015.
Лучше вообще не читай тот сайт.
...
Рейтинг: 0 / 0
29.03.2017, 15:13
    #39429321
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
dbms_photoshopЛучше вообще не читай тот сайт.погорячился, на мой взгляд
...
Рейтинг: 0 / 0
29.03.2017, 15:22
    #39429328
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
dbms_photoshop,
да я там текст только пробежал наискосок, общаий смысл ясен - ну и х...орошо.
...
Рейтинг: 0 / 0
29.03.2017, 15:28
    #39429332
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
--Eugene--dbms_photoshopЛучше вообще не читай тот сайт.погорячился, на мой взглядЯ надеюсь когда-нибудь придет время и ты осознаешь опасность бурлесонщины.

PS. Абстрагируясь от его чудо-сайта, я вообще удивляюсь как он после споров с Льюисом на forums.oracle.com,
где он выглядел полным клоуном, еще умудряется привлекать клиентов. Вероятно, раскрутке у него стоит поучиться, но не Ораклу.
...
Рейтинг: 0 / 0
29.03.2017, 15:35
    #39429341
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
Меня печалит, что никто больше в разделе не не хочет высказать "Best and Worst Practices" на архитектурную философию с высоты своего опыта... Может, просто главное уже сказано?
Задавая вопрос, я боялся, что вскроется ситуация, когда задумка неплохая, но к-рая реализуема с костылями в силу разных фич.
...
Рейтинг: 0 / 0
29.03.2017, 15:39
    #39429343
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
exp98Меня печалит, что никто больше в разделе не не хочет высказать "Best and Worst Practices" на архитектурную философию с высоты своего опыта... Может, просто главное уже сказано?
Задавая вопрос, я боялся, что вскроется ситуация, когда задумка неплохая, но к-рая реализуема с костылями в силу разных фич.Да, бывает вскрывается ситуация, "когда задумка неплохая, но к-рая реализуема с костылями в силу разных фич".

С ув. Капитан Очевидность.
...
Рейтинг: 0 / 0
29.03.2017, 15:40
    #39429345
saxarock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
exp98,

Почему не использовать PL/SQL и коллекции?
...
Рейтинг: 0 / 0
29.03.2017, 16:22
    #39429373
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
в МССКЛ вполне себе работает
Код: sql
1.
with t as(select 1 id) select * from t

id1
...
Рейтинг: 0 / 0
29.03.2017, 16:31
    #39429381
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
andreymx,

Это к чему было написано?
Попробуй в МССКЛ теперь это

Код: plaintext
1.
2.
3.
select * from
(with t as
(select 1 id from dual)
select * from t) z
...
Рейтинг: 0 / 0
29.03.2017, 16:44
    #39429393
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
dbms_photoshop,

я тебе и так верю
...
Рейтинг: 0 / 0
29.03.2017, 17:46
    #39429446
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
saxarockПочему не использовать PL/SQL и коллекции? А почему этот вариант перевесил бы? Свои опасения я описал, в первую очередь - это сложности отладки, ИМХО, когда в SQL всё векторно и сразу перед глазами.
...
Рейтинг: 0 / 0
29.03.2017, 17:50
    #39429449
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
exp98А почему этот вариант перевесил бы?потомучто быстро
...
Рейтинг: 0 / 0
30.03.2017, 10:18
    #39429778
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ...
Быстро в написании, отладке и доработке, в условиях изначальной неясности конечного результата?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / об "+/-" тактики запроса на основе WITH cc1 AS (), cc2 AS () ... / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]