Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проверить в процедуре, вывела ли она что-то в table? / 4 сообщений из 4, страница 1 из 1
23.01.2020, 18:00
    #39918035
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить в процедуре, вывела ли она что-то в table?
Добрый день!

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

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

Спасибо!
...
Рейтинг: 0 / 0
23.01.2020, 18:48
    #39918059
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить в процедуре, вывела ли она что-то в table?
Devillio,

Код: plsql
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.
35.
36.
37.
38.
39.
40.
41.
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$;



Код: plsql
1.
SELECT test();
...
Рейтинг: 0 / 0
24.01.2020, 09:28
    #39918201
Devillio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить в процедуре, вывела ли она что-то в table?
entrypoint, благодарю!
Хотелось что-то типа FOUND для результата этой же процедуры (не только последнего селекта).
...
Рейтинг: 0 / 0
24.01.2020, 10:50
    #39918246
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверить в процедуре, вывела ли она что-то в table?
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 имеет смысл если нужна еще какая-то логика.

по теме - не припоминаю таких сведений изнутри хранимки.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проверить в процедуре, вывела ли она что-то в table? / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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