| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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. Синтаксис. | 
			 
		  | 
	
	
		  | 
	
	
		 |