Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Проверить в процедуре, вывела ли она что-то в table?  [new]
Devillio
Member

Откуда: Волгоград
Сообщений: 349
Добрый день!

Процедура возвращает table, записи формируются в нескольких местах через return next;

Можно ли в конце процедуры какой-то командой узнать, вывелась ли хотя бы одна строка?
(Или добавлять переменную и считать кол-во при каждом return next?)

Спасибо!
23 янв 20, 18:00    [22065438]     Ответить | Цитировать Сообщить модератору
 Re: Проверить в процедуре, вывела ли она что-то в table?  [new]
entrypoint
Member

Откуда:
Сообщений: 227
Devillio,

CREATE OR REPLACE FUNCTION public.test(
	)
    RETURNS TABLE(y integer, result text) 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$
DECLARE notHasRows BOOL DEFAULT true;
BEGIN
    FOR y, result IN 
		-- здесь есть строки
                -- SELECT s.y, 'hi' result FROM generate_series(1,10,1) AS s(y)
		-- Здесь нет строк
		SELECT s.y, 'hi' result FROM generate_series(1,0,1) AS s(y)
    LOOP
        RETURN NEXT;
    END LOOP;
	
   IF FOUND AND notHasRows THEN
	notHasRows = false;
   END IF;
    
  FOR y, result IN 
		-- здесь есть строки
                -- SELECT s.y, 'hi' result FROM generate_series(1,10,1) AS s(y)
		-- Здесь нет строк
		SELECT s.y, 'hi' result FROM generate_series(1,0,1) AS s(y)
    LOOP
        RETURN NEXT;
    END LOOP;

   IF FOUND AND notHasRows THEN
	notHasRows = false;
   END IF;

    IF notHasRows THEN
 	RAISE EXCEPTION 'нет строк';
    END IF;  
END;
$BODY$;


SELECT test();
23 янв 20, 18:48    [22065472]     Ответить | Цитировать Сообщить модератору
 Re: Проверить в процедуре, вывела ли она что-то в table?  [new]
Devillio
Member

Откуда: Волгоград
Сообщений: 349
entrypoint, благодарю!
Хотелось что-то типа FOUND для результата этой же процедуры (не только последнего селекта).
24 янв 20, 09:28    [22065724]     Ответить | Цитировать Сообщить модератору
 Re: Проверить в процедуре, вывела ли она что-то в table?  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 973
entrypoint
FOR y, result IN
-- здесь есть строки
-- SELECT s.y, 'hi' result FROM generate_series(1,10,1) AS s(y)
-- Здесь нет строк
SELECT s.y, 'hi' result FROM generate_series(1,0,1) AS s(y)
LOOP
RETURN NEXT;
END LOOP;

просто return query select без перекладываний лишних.
loop имеет смысл если нужна еще какая-то логика.

по теме - не припоминаю таких сведений изнутри хранимки.
24 янв 20, 10:50    [22065809]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить