<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Funkcja która jako argument dostaje "listę"]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1906&amp;type=atom"/>
	<updated>2013-11-12T17:08:51Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1906</id>
		<entry>
			<title type="html"><![CDATA[Odp: Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4806#p4806"/>
			<content type="html"><![CDATA[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).]]></content>
			<author>
				<name><![CDATA[depesz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1564</uri>
			</author>
			<updated>2013-11-12T17:08:51Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4806#p4806</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4805#p4805"/>
			<content type="html"><![CDATA[Pewnie wypisze odpowiedni komunikat.

A tak :
[code]select * from tabelka where tabelka.owoc = any( owoc );[/code] :-P]]></content>
			<author>
				<name><![CDATA[tomek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1459</uri>
			</author>
			<updated>2013-11-12T13:58:59Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4805#p4805</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4804#p4804"/>
			<content type="html"><![CDATA[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.]]></content>
			<author>
				<name><![CDATA[depesz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1564</uri>
			</author>
			<updated>2013-11-12T13:48:23Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4804#p4804</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4803#p4803"/>
			<content type="html"><![CDATA[Variadic-om się kiedyś przyjrzę.
Czemu: "Nigdy nie nazywaj zmiennych tak jak nazwy kolumn/tabel" ???]]></content>
			<author>
				<name><![CDATA[tomek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1459</uri>
			</author>
			<updated>2013-11-12T13:27:17Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4803#p4803</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4802#p4802"/>
			<content type="html"><![CDATA[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:

[code]
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;
[/code]

Dzięki czemu wywołanie funkcji będzie prostsze:

[code]
$ select * from kto_dostarcza( 'pomarancze', 'banany');
    owoc    | dostawca 
------------+----------
 pomarancze | a
 banany     | b
 banany     | c
(3 rows)
[/code]]]></content>
			<author>
				<name><![CDATA[depesz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1564</uri>
			</author>
			<updated>2013-11-12T10:20:40Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4802#p4802</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4801#p4801"/>
			<content type="html"><![CDATA[OK, działa.
I dlatego właśnie lubię to forum :-)]]></content>
			<author>
				<name><![CDATA[tomek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1459</uri>
			</author>
			<updated>2013-11-12T09:12:58Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4801#p4801</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4799#p4799"/>
			<content type="html"><![CDATA[Zamiast "owoc in ( select unnest)" można użyć owoc = any($1)]]></content>
			<author>
				<name><![CDATA[depesz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1564</uri>
			</author>
			<updated>2013-11-09T08:13:03Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4799#p4799</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4796#p4796"/>
			<content type="html"><![CDATA[create or replace function kto_dostarcza(owoc varchar[])
returns table (owoc varchar(50), dostawca varchar(50))
as
$$ select owoc, dostawca
   from owocowy_rynek
   where owoc in (select unnest($1));
$$
language sql;

wywołanie:
select * from kto_dostarcza(array['jabłko','śliwka']::varchar[]);]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-11-08T13:07:13Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4796#p4796</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Funkcja która jako argument dostaje "listę"]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4795#p4795"/>
			<content type="html"><![CDATA[Chcę mieć funkcję która będzie jako argument dostawać "listę" owoców:
[code]select * from kto_dostarcza( ('jabłko', 'banan', 'mango'));[/code]
Próbuję ją napisać tak:
[code]create or replace function kto_dostarcza(owoc varchar(50)[])
returns table (owoc varchar(50), dostawca vachar(50))
as
$$ select owoc, dostawca
   from owocowy_rynek
   where owoc in $1;
$$
language sql;[/code]
ale dostaję komunikat:
[quote]BŁĄD:  błąd składni w lub blisko "$1"
LINE 6:    where owoc in $1 [/quote]

Potrafi ktoś pomóc ?]]></content>
			<author>
				<name><![CDATA[tomek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1459</uri>
			</author>
			<updated>2013-11-08T09:28:05Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4795#p4795</id>
		</entry>
</feed>
