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!
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.
> wtf?
Zamien typ zmiennej na tabelka.
--
Jaroslaw "jaros" Berezowski
Pozdrawiam.