Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
De Mian Профи
Вступление в Клуб: 26.09.2008
|
Вт Ноя 06, 2018 11:36  Запросы PL+ или SQL |
|
Полезность: Нет оценки
|
Небольшой мини опрос-вопрос:
Кто какой подход предпочитает предпочитает при написании запросов в ЦФТ и почему именно такой выбор?:
1) Синтаксис предложенный платформой развития ЦФТ, где используется точечная нотификация при разименовании реквизитов и соответственно работа соединения таблиц типов ложится на компилятор:
Код: | select x(
x.[PROV_USER].[NAME]
)
in ::[MAIN_DOCUM] all
where
x.[ACC_DT].[MAIN_V_ID] like '40702%'
AND
x.[ACC_KT].[MAIN_V_ID] like '706%' |
2) стандартный синтаксис SQL, где явно указывается ТБП и условия их соединения:
Код: | select x(
usr.[NAME]
)
in ::[MAIN_DOCUM] ,
(::[AC_FIN] af_d),
(::[AC_FIN] af_k),
(::[USER] usr)
all
where
x.[PROV_USER]=usr%id(true)
and
x.[ACC_DT]=af_d
and
x.[ACC_KT]=af_k
and
af_d.[MAIN_V_ID] like '40702%'
and
af_k.[MAIN_V_ID] like '706%' |
|
|
 |
Admin Site Admin
Вступление в Клуб: 09.06.2007
|
Вт Ноя 06, 2018 12:28   |
|
Полезность: Нет оценки
|
Для простых случаев результат компиляции 1 и 2 будет одинаков, поэтому я предпочел бы вариант 1.
"Ручную" связку, как и чистый PL/SQL, использую либо при хитрых условиях, либо при необходимости оптимизировать запрос. |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Ср Ноя 07, 2018 05:19   |
|
Полезность: Нет оценки
|
Когда много таблиц в первом варианте компилятор так в пакете запрос извратит, что приходится переписывать на второй вариант хотя бы частично.
В общем если в запросе собралось больше трёх таблиц , после варианта 1 всегда иду в пакет и смотрю что же родил больной недомозг. |
|
 |
Эмиралька Эксперт
Вступление в Клуб: 09.11.2015
|
Чт Ноя 08, 2018 06:14   |
|
Полезность: Нет оценки
|
De Mian пишет: | Небольшой мини опрос... |
Предпочитаю первый вариант, потому что зачастую он выглядит опрятнее, чем SQL и не затеняет бизнес-логику.
Но если план становится кривым, приходится запрос переписывать по-другому (c SQL-запросами для не-ИБСО проектами я поступаю полностью аналогично).
То есть Admin +1
Alkov пишет: | ...что же родил больной недомозг. | улыбнуло Но всё-таки правила построения SQL по PL+ вполне понятны и даже логичны, так что позволю себе не согласиться. |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Пт Ноя 09, 2018 10:14   |
|
Полезность: Нет оценки
|
Эмиралька пишет: | Но всё-таки правила построения SQL по PL+ вполне понятны и даже логичны, так что позволю себе не согласиться. |
нифига не логичны
на группировке часто лажает, приходится явно прописывать
А то скомпилит чорт знает во что успешно, а потом в рантайме падает с ошибкой |
|
 |
De Mian Профи
Вступление в Клуб: 26.09.2008
|
Пт Ноя 09, 2018 23:37   |
|
Полезность: Нет оценки
|
Эмиралька пишет: |
Alkov пишет: | ...что же родил больной недомозг. | улыбнуло Но всё-таки правила построения SQL по PL+ вполне понятны и даже логичны, так что позволю себе не согласиться. |
Вполне согласен. тем более что все правила подробно расписаны в документе PLPHINTS.TXT и либо вы понимаете как работает компилятор .. либо каждый раз искренне удивляетесь результату.
vtar пишет: |
нифига не логичны
на группировке часто лажает, приходится явно прописывать
А то скомпилит чорт знает во что успешно, а потом в рантайме падает с ошибкой |
Дайте пример.
Вообще этот небольшой опрос мнений затеял чисто из-за того что хоть и редко, но встречаются SQL-аборигены, которые вполне намеренно и явно не используют PL+ программируя в ЦФТ, объясняя свой выбор больше суевериями, чем конкретными фактами. Один аргумент правда слышал - ЭТО СЛОЖНО ПОНИМАТЬ, но это настолько субъективно, что тут остается только посочувствовать.
Я допускаю, что может что-то я не вижу или не понимаю и поэтому искренне интересно почему люди добровольно выбирают рубить дрова с помощью топора, зажатого между ног, вместо того чтобы взять топор в руки. |
|
 |
De Mian Профи
Вступление в Клуб: 26.09.2008
|
Чт Дек 27, 2018 14:04   |
|
Полезность: Нет оценки
|
По теме. Из разряда: нарочно не придумаешь или диверсанты среди нас.
Это реальный пример , не выдумка. собственно почему я и запилил эту тему. Хотя тут ближе тема "Юмор на работе".
Было код:
Код: | /* select x( x )
in P_OBJ.[REGISTR] all
where x.[REG_REF] = P_REG
and x.[ACC_REF]->(::[AC_FIN])[MAIN_V_ID] like p_bal ||'%' */ |
Стало.. но комментарий просто ... фиерия..
Код: |
--> -- привел запрос к более внятному виду
select v(x%id : id)
in ::[VEKSEL_GUIDE]
,(::[REG_VEK] all : x)
,(::[AC_FIN] all : ac)
all
where v%id=P_OBJ
and x%collection=v.[REGISTR]
and x.[REG_REF]=P_REG
and ac%id=x.[ACC_REF]
and ac.[MAIN_V_ID] like p_bal||'%'
into result; |
В плане SQL так же.. было объединение 2-х таблиц, стало объединение 3-х. Действительно , стало и проще и оптимальней. и главное понятней!  |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Чт Дек 27, 2018 14:29   |
|
Полезность: Нет оценки
|
Да , в такой нотации PL+ вроде и не нужен  |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пт Дек 28, 2018 02:44   |
|
Полезность: Нет оценки
|
De Mian пишет: | Эмиралька пишет: |
Alkov пишет: | ...что же родил больной недомозг. | улыбнуло Но всё-таки правила построения SQL по PL+ вполне понятны и даже логичны, так что позволю себе не согласиться. |
Вполне согласен. тем более что все правила подробно расписаны в документе PLPHINTS.TXT и либо вы понимаете как работает компилятор .. либо каждый раз искренне удивляетесь результату.
|
Остаюсь при своём мнении, на сложных запросах pl/plus чудит, пока не пропишешь в запросе таблицы и связи явно. |
|
 |
De Mian Профи
Вступление в Клуб: 26.09.2008
|
Пт Дек 28, 2018 09:15   |
|
Полезность: Нет оценки
|
Alkov пишет: | De Mian пишет: | Эмиралька пишет: |
Alkov пишет: | ...что же родил больной недомозг. | улыбнуло Но всё-таки правила построения SQL по PL+ вполне понятны и даже логичны, так что позволю себе не согласиться. |
Вполне согласен. тем более что все правила подробно расписаны в документе PLPHINTS.TXT и либо вы понимаете как работает компилятор .. либо каждый раз искренне удивляетесь результату.
|
Остаюсь при своём мнении, на сложных запросах pl/plus чудит, пока не пропишешь в запросе таблицы и связи явно. |
Чтобы разбить или подтвердить это суеверие нужен просто пример...ну почему то никто не может его предоставить и все уходят в тень. Все говорят : видел, было, когда-то, но никто не может дать конкретный пример. Можно тогда вообще plsql вставками программировать ссылаясь на то, что PL+ нелогичен. К слову и такое встречалось.
И что значит сложный запрос ? я встречал людей для которых работа с LOB была сложной и непонятно, а макросы вообще вводят в ступор. Значит ли что что -то не так с lob и макросами? Это всё очень-очень субъективно. Объективно то - что есть описание PLPHINTS.TXT. За всё время я сталкивался только с одним примером (пару раз за 15 лет)в котором нельзя было указать направление внешнего соединения средствами PL+ используя точечную нотацию.
Пример в студию. |
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пт Дек 28, 2018 10:22   |
|
Полезность: 1
|
De Mian пишет: | Alkov пишет: | De Mian пишет: | Эмиралька пишет: |
Alkov пишет: | ...что же родил больной недомозг. | улыбнуло Но всё-таки правила построения SQL по PL+ вполне понятны и даже логичны, так что позволю себе не согласиться. |
Вполне согласен. тем более что все правила подробно расписаны в документе PLPHINTS.TXT и либо вы понимаете как работает компилятор .. либо каждый раз искренне удивляетесь результату.
|
Остаюсь при своём мнении, на сложных запросах pl/plus чудит, пока не пропишешь в запросе таблицы и связи явно. |
Чтобы разбить или подтвердить это суеверие нужен просто пример...ну почему то никто не может его предоставить и все уходят в тень. Все говорят : видел, было, когда-то, но никто не может дать конкретный пример. Можно тогда вообще plsql вставками программировать ссылаясь на то, что PL+ нелогичен. К слову и такое встречалось.
И что значит сложный запрос ? я встречал людей для которых работа с LOB была сложной и непонятно, а макросы вообще вводят в ступор. Значит ли что что -то не так с lob и макросами? Это всё очень-очень субъективно. Объективно то - что есть описание PLPHINTS.TXT. За всё время я сталкивался только с одним примером (пару раз за 15 лет)в котором нельзя было указать направление внешнего соединения средствами PL+ используя точечную нотацию.
Пример в студию. |
Нельзя так просто взять и привести пример.
Я их не коллекционирую, попадётся в коде - выложу |
|
 |
De Mian Профи
Вступление в Клуб: 26.09.2008
|
Пн Апр 29, 2019 10:22   |
|
Полезность: Нет оценки
|
De Mian пишет: |
Пример в студию. |
Ну что ж.... примеров не было.
Значит всё же это суеверие.
Буду теперь коллег суеверных, на эту страницу отправлять для развенчивания мифов. |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Вт Апр 30, 2019 13:19   |
|
Полезность: Нет оценки
|
De Mian пишет: | De Mian пишет: |
Пример в студию. |
Ну что ж.... примеров не было.
Значит всё же это суеверие.
Буду теперь коллег суеверных, на эту страницу отправлять для развенчивания мифов. |
то , что ты не видел суслика
не значит что его нет |
|
 |
De Mian Профи
Вступление в Клуб: 26.09.2008
|
Вт Апр 30, 2019 13:54   |
|
Полезность: Нет оценки
|
vtar пишет: | De Mian пишет: |
Ну что ж.... примеров не было.
Значит всё же это суеверие.
Буду теперь коллег суеверных, на эту страницу отправлять для развенчивания мифов. |
то , что ты не видел суслика
не значит что его нет |
Да, в основном именно такой аргумент звучит или что-то вроде "Оракл\ЦФТ не хочет"... |
|
 |
kai Профи
Вступление в Клуб: 16.08.2012
|
Пн Май 06, 2019 10:55   |
|
Полезность: Нет оценки
|
Правила работы транслятора PL+ прописаны в файле PLPHINTS.TXT, входящем в состав дистрибутива технологического ядра.
Поддержка синтаксиса ANSI JOIN реализована в ТЯ 7.6.
Описание синтаксиса см. PLPLUS.doc п. 1.2.13.5.3., п. 1.4. Синтаксис. |
|
 |
|