powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как добавить в LOOP два условия
2 сообщений из 2, страница 1 из 1
Как добавить в LOOP два условия
    #39300026
bable
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня!

Я не специалист в БД, нужно решить вот такую задачу, дошла до точки "ступор" и не могу продвинутся. Рада любым подсказкам и ориентирам.

Есть функция приведенная ниже. Я хочу , что б в ней вместо в v и v2 подставлялись нужные значения мне. То есть Эти запросы мне не нужно было в функции прописывать 20 раз с разными комбинациями v и v2. Только вот как использовать LOOP с 1 параметром я разобралась, а как туда добавить еще и второй не понятно.
v- можно брать из значений другой таблици ( пример в самой функции). v2 - это просто соответсвенные названия полей sh1,sh2,sh3...sh20 для каждого полученного значения v .

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
CREATE OR REPLACE FUNCTION meta.master_plan_obj_composition_view()
  RETURNS trigger AS
$BODY$
DECLARE 
v text;
v2 text;

	BEGIN
	IF TG_OP='UPDATE' THEN

	FOR v IN (SELECT  doc_code   FROM meta.dc_planing_doc_sets_catalog)  LOOP

	IF (EXISTS (select * from meta.master_plan_obj_composition where doc_code="v" and class_loc_code=new.class_loc_code ) )
	and (new."v2" is not NULL or new."v2"  not in (0)) THEN
	UPDATE meta.master_plan_obj_composition  set (class_status)=(new."v2" ::integer)
where doc_code="v"  and class_loc_code=new.class_loc_code;end if;
	IF (NOT EXISTS (select * from meta.master_plan_obj_composition where doc_code="v"  and class_loc_code=new.class_loc_code ))  and 
 (new."v2" is not NULL or new."v2"  <>0)
	THEN
	INSERT INTO meta.master_plan_obj_composition( doc_code,  class_loc_code,class_status)
	VALUES ("v" ,new.class_loc_code,new.sh1 ); end if;


END LOOP;
	
	END IF;	

  return new      ;

	END;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 1000;
...
Рейтинг: 0 / 0
Как добавить в LOOP два условия
    #39300064
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bable,

В цикле можно перебирать и записи (record), идя по результатам запроса, который объединяет нужные вам значения.
Внутри цикла нужно использовать динамический запрос, т.к. имена идентификаторов без него никак не подставить.

Можно воспользоваться функцией format() для подстановки нужных идентификаторов и конструкцией USING для подстановки литералов в нужные места запроса.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как добавить в LOOP два условия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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