Temat: Funkcja która jako argument dostaje "listę"
select * from kto_dostarcza( ('jabłko', 'banan', 'mango'));
PostgreSQL to najbardziej zaawansowany system relacyjnych baz danych Open Source.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
select * from kto_dostarcza( ('jabłko', 'banan', 'mango'));
Ostatnio edytowany przez c_michal (2013-11-08 15:08:31)
Zamiast "owoc in ( select unnest)" można użyć owoc = any($1)
OK, działa.
I dlatego właśnie lubię to forum :-)
Teraz mam dłuższą chwilę, więc mogę przejrzeć dokładniej.
Po pierwsze - Nigdy nie nazywaj zmiennych tak jak nazwy kolumn/tabel (owoc to zmienna czy kolumna?!)
Po drugie - zamiast podawać jako argument arraya (oczywiście można), można też użyć variadiców:
create function kto_dostarcza( VARIADIC p_owoce text[] )
returns table (owoc text, dostawca text) as
$$
select owoc, dostawca from owocowy_rynek where owoc = any(p_owoce);
$$
language sql;
Dzięki czemu wywołanie funkcji będzie prostsze:
$ select * from kto_dostarcza( 'pomarancze', 'banany');
owoc | dostawca
------------+----------
pomarancze | a
banany | b
banany | c
(3 rows)
Variadic-om się kiedyś przyjrzę.
Czemu: "Nigdy nie nazywaj zmiennych tak jak nazwy kolumn/tabel" ???
Zastanów się jak postgres ma zrozumieć zapytanie:
select * from tabelka where owoc = any( owoc );
gdzie owoc to zarówno nazwa kolumny jak i zmiennej.
Pewnie wypisze odpowiedni komunikat.
A tak :
select * from tabelka where tabelka.owoc = any( owoc );
:-P
Pewnie, że można. Ale po co? Zdecydowanie lepiej jest używać unikatowych nazw. Ja osobiście zazwyczaj używam prefiksu "p_" do parametrów, i v_ do zmiennych (w plpgsql'u, bo w sqlu nie ma zmiennych).
Posty [ 9 ]
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
[ Wygenerowano w 0.007 sekund, wykonano 10 zapytań ]