Zwraca mi tylko jeden wiersz a potrzebuje całość

0

Witam

Testuje funkcje, pętle i mam takie coś:

 
CREATE OR REPLACE FUNCTION test(IN id_test BIGINT) RETURNS RECORD AS $$
  DECLARE
    id_test ALIAS FOR $1;
	rrow  tabelka%rowtype;
  BEGIN
	FOR rrow IN SELECT * FROM tabelka WHERE id_test= 1
		LOOP
			RETURN rrow;
		END LOOP;
  END;
$$
LANGUAGE "plpgsql"
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER;

Jak robie zwykly SELECT to mam dwa wyniki a jak robię SELECT test(5); to zwraca mi tylko jeden wynik.
Jak odwołać się do konkretnego pola w rrow ? na przykład rrow.pole_w_tabeli ?
I czemu tylko jeden wiersz zwraca ?

0

return tak ma, że wywołanie go natychmiast przerywa dalsze działanie funkcji.
dla przykładu, który podałeś, użycie kursora wydaje mi się bez sensu. nie ma wolniejszego sposobu przetwarzania danych.

0

Dokładnie tak, jak napisał @ŁF kursor w tym przypadku to bezsens. Kursory przydają się wtedy, gdy koniecznym jest iterowanie po danych.

Zykfryd napisał(a):

Jak robie zwykly SELECT to mam dwa wyniki a jak robię SELECT test(5); to zwraca mi tylko jeden wynik.

Bo return przerywa działanie funkcji i właśnie zwraca wynik.

Zykfryd napisał(a):

Jak odwołać się do konkretnego pola w rrow ? na przykład rrow.pole_w_tabeli ?

Odwołać się do pola przy wywołaniu funkcji, która zwraca rekord? Np.
SELECT pole FROM Frunkcja(argument);

1 użytkowników online, w tym zalogowanych: 0, gości: 1