Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[postgres] różne pola dla for/setof

0 views
Skip to first unread message

gryfi

unread,
Dec 12, 2009, 5:38:42 PM12/12/09
to
Witam,

Googlujďż˝, googlujďż˝ i dogooglowaďż˝ siďż˝ nie mogďż˝..

mam takie cudo:

create or replace function listuj_tabelke(v_tabelka_id integer) returns
setof tabelka as $$
declare
rec record;
begin
FOR rec IN (SELECT * FROM tabelka where tabelka_id = v_tabelka_id) LOOP
RETURN NEXT rec;
END LOOP;
end;
$$ language plpgsql;


Funkcja og�lnie dzia�a, jednak je�li zmieni� gwiazdk� na pola, np.
tabelka_id,nazwa,itd.. i pytam:

select * from listuj_tabelke(1);

system wywala b��d:

ERROR: wrong record type supplied in RETURN NEXT

wtf?

Pozdrawiam!

Paweł Matejski

unread,
Dec 12, 2009, 7:04:52 PM12/12/09
to

1. returns setof tabelka - oznacza, �e funkcja b�dzie zwraca�a wiersze zgodne w typie z 'tabelka'.
2. rec recor - �e zmienna rec mo�e by� rekordem o dowolnych polach
3. FOR rec IN (SELECT * FROM tabelka ...) - wrzuca do rec wiersz z 'tabelka' czyli rec ma typ zgodny z wierszami 'tabelka'
4. RETURN NEXT rec; - zwraca jeden wiersz jako wynik - postgres spodziewa siďż˝ w tym miejscu rekordu zgodnego z
'tabelka'

Wi�c je�li w p. 3 co� zmienisz, to w p.4 typy si� nie b�d� zgadza�y. Je�li chcesz co� zmieni� w li�cie p�l zwracanych z
selecta upewnij si�, �e jest ta sama ilo�� kolumn co i s� tego samego typu co w tabeli tabelka - nie pami�tam tylko jak
z nazwami p�l, czy musz� by� takie same).

--
P.M.

Jaroslaw Berezowski

unread,
Dec 12, 2009, 6:14:41 PM12/12/09
to
Dnia Sat, 12 Dec 2009 23:38:42 +0100, gryfi napisał(a):

> wtf?
Zamien typ zmiennej na tabelka.

--
Jaroslaw "jaros" Berezowski

gryfi

unread,
Dec 17, 2009, 1:57:06 PM12/17/09
to
Paweďż˝ Matejski pisze:
OK, dzi�kuj� za dok�adne wyja�nienie!

Pozdrawiam.

0 new messages