Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Хмурый анонимный блок  [new]
qwwq
Member

Откуда:
Сообщений: 2889
per,
охватывающий (самого верхнего уровня) блок бегин/енда поставляет вам return неявным образом. это (послабление) -- "синтаксический сахар". а его вы и хотите обойти. поместите его как сабблок внутрь более базового блока. или своими руками делайте return вместо exit из "базового" блока
5 фев 20, 12:50    [22073632]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
per
Member

Откуда:
Сообщений: 100
Victor Nevsky, проверил - из цикла RETURN выводит.
5 фев 20, 12:50    [22073633]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
Victor Nevsky
Member

Откуда:
Сообщений: 81
per, да
DO 
$$
<<anonymus_block>>  
BEGIN 
  <<ablock>>
  DECLARE 
	count INT DEFAULT 0;
  BEGIN 
        <<loop1>> 
	LOOP
	  count = count + 1;
	  RAISE NOTICE '%', count;

          --EXIT loop1 WHEN count > 8;
	  IF (count > 9)
	  THEN
	    RETURN;
	  END IF;
	END LOOP loop1;
	
	RAISE NOTICE 'работа продолжается после выхода из цикла';	

        LOOP
		EXIT ablock WHEN count > 999;
		RAISE NOTICE 'сюда не попадаем';
		count = count + 1;
		RAISE NOTICE '%', count;
	END LOOP;

      RAISE NOTICE 'и сюда не попадаем';	
  END ablock; 
END anonymus_block ;
$$ LANGUAGE 'plpgsql'
5 фев 20, 12:55    [22073645]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
per
Member

Откуда:
Сообщений: 100
Victor Nevsky
per, да
DO 
$$
<<anonymus_block>>  
BEGIN 
  <<ablock>>
  DECLARE 
	count INT DEFAULT 0;
  BEGIN 
        <<loop1>> 
	LOOP
	  count = count + 1;
	  RAISE NOTICE '%', count;

          --EXIT loop1 WHEN count > 8;
	  IF (count > 9)
	  THEN
	    RETURN;
	  END IF;
	END LOOP loop1;
	
	RAISE NOTICE 'работа продолжается после выхода из цикла';	

        LOOP
		EXIT ablock WHEN count > 999;
		RAISE NOTICE 'сюда не попадаем';
		count = count + 1;
		RAISE NOTICE '%', count;
	END LOOP;

      RAISE NOTICE 'и сюда не попадаем';	
  END ablock; 
END anonymus_block ;
$$ LANGUAGE 'plpgsql'





Что-то все запустано как-то....

Попробую так:

EXIT убрать совсем.

В каждом действии и внутри каждого цикла проставить проверку условия и RETURN.


блок
действия1
цикл1
действия2
цикл2
действия3
цикл3
...
действияN
циклN
конец блока
5 фев 20, 12:59    [22073657]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
Victor Nevsky
Member

Откуда:
Сообщений: 81
per
...
А EXIT не использовать совсем?
нет, зависит от задачи.
5 фев 20, 13:01    [22073658]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
per
Member

Откуда:
Сообщений: 100
Victor Nevsky
per
...
А EXIT не использовать совсем?
нет, зависит от задачи.


В общем пока так работает:

в каждом действии есть проверка на условие и RETURN
в каждом цикле есть проверка на условие и EXIT

Отрабатывает корректно.

НО по структуре в принципе - непонятно.


Такой вариант нормальный?

Или лучше в цикле EXIT менять на RETURN ?
5 фев 20, 13:04    [22073663]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
Victor Nevsky
Member

Откуда:
Сообщений: 81
per

Или лучше в цикле EXIT менять на RETURN ?

откуда я знаю, может завтра у вас появятся циклы/блоки внутри циклов/блоков ... и нужно будет выйти на какой-то уровень ... а я скажу, ДА, ставьте ретурн?
5 фев 20, 13:14    [22073673]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
per
Member

Откуда:
Сообщений: 100
Victor Nevsky,


Спасибо за помощь! ;-)
5 фев 20, 13:37    [22073703]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3411
per
Victor Nevsky,


Спасибо за помощь! ;-)


ну, о чем вы, не за што
5 фев 20, 15:18    [22073920]     Ответить | Цитировать Сообщить модератору
 Re: Хмурый анонимный блок  [new]
Guzya
Member

Откуда:
Сообщений: 415
Что-то такое хотели?

DO
$$
BEGIN
  DECLARE
        trig float := 0.85;
        count int := 0;
  BEGIN
        LOOP
          count = count + 1;
          RAISE NOTICE '%', count;
          IF (trig < random())
          THEN
            RAISE NOTICE 'Return из первого цикла.';
            RETURN;
          END IF;
          EXIT WHEN count > 10;
        END LOOP;

        RAISE NOTICE 'Переходим ко второму циклу.';
        count = 0;
        LOOP
          EXIT WHEN count > 10;
          count = count + 1;
          RAISE NOTICE '%', count;
          IF (trig < random())
          THEN
            RAISE NOTICE 'Return из второго цикла.';
            RETURN;
          END IF;

        END LOOP;

  END;
  RAISE NOTICE 'Достигли конца блока.';
END;
$$ LANGUAGE 'plpgsql';
5 фев 20, 15:31    [22073947]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / PostgreSQL Ответить