<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Wyliczana nazwa kolumny w zapytaniach]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=348</link>
		<description><![CDATA[Najświeższe odpowiedzi w Wyliczana nazwa kolumny w zapytaniach.]]></description>
		<lastBuildDate>Mon, 30 Nov 2009 18:45:36 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1600#p1600</link>
			<description><![CDATA[Można to zrobić na kilka sposobów. 

Pierwszy jaki mi przychodzi do głowy i najłatwiejszy, to funkcje i refcursory. 
Refcursor nabiera kształtu podczas wykonywania danych, zatem nie trzeba mu deklarować odpowiedniej struktury.

Wyglądać to może tak
[code]
merlin=# BEGIN;
BEGIN
merlin=# SELECT * FROM nr_tygodnia(49, 'cursorek');   cur    
----------
 cursorek
(1 row)

merlin=# fetch all from cursorek;
     49    
------------
 2009-11-30
 2009-12-01
 2009-12-02
 2009-12-03
 2009-12-04
 2009-12-05
 2009-12-06
(7 rows)

merlin=# END;
COMMIT
[/code]

i funkcja (klępnięta na szybko)
[code]
CREATE  OR REPLACE FUNCTION nr_tygodnia(IN arg1 integer, IN OUT cur refcursor) RETURNS refcursor AS
$BODY$declare
nrtg int;
begin
    SELECT EXTRACT(week FROM NOW()) INTO nrtg;
    OPEN cur FOR EXECUTE 'SELECT current_date+gs.a as "'||nrtg||'"
                            FROM generate_series(0,10) as gs(a) 
                           WHERE EXTRACT(week FROM current_date + gs.a)='||arg1;
    return;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
[/code]

Plusy:
- nie dajesz developerom dostępu do pure sqla, dostają tylko funkcje która ma w sobie mega optymalne zapytanie :P

- jako programista bazodanowy ty optymalizujesz zapytania i masz władze nad zapytaniami do bazy
i nie masz obawy ze bokiem idzie jakieś analityczne zapytanie :]


Minusy:
- to parametryzowanie funkcji, które trzeba wołać w transakcji (bo gdyż na przestrzeni danej transakcji będzie istniał Twój nazwany kursor)]]></description>
			<author><![CDATA[dummy@example.com (psocha)]]></author>
			<pubDate>Mon, 30 Nov 2009 18:45:36 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1600#p1600</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1575#p1575</link>
			<description><![CDATA[Właśnie mam nadzieję, że może się da ;)
Próbowałem już wielu rzeczy, łącznie z funkcjami. Żeby zwracać rekordy poprzez funkcje w jej deklaracji trzeba podać typ zwracanych rekordów (... RETURNS SETOF ... ) gdzie podawałem nazwę widoku, który definiował pola. Problem polega na tym, że funkcja taka zwraca dane z takimi nazwami kolumn jakie są w widoku definiującym dane. Nie znalazłem metody na to, żeby te aliasy podmieniać :/]]></description>
			<author><![CDATA[dummy@example.com (dar_pos)]]></author>
			<pubDate>Tue, 17 Nov 2009 11:46:05 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1575#p1575</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1574#p1574</link>
			<description><![CDATA[Moze da sie to zrobic przez utworzenie widoku i odpytywanie go.
Bardzo prawdopodobne, że można to rozwiązać poprzez utworzenie na bazie funkcji i odpytywanie jej.]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Tue, 17 Nov 2009 09:22:42 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1574#p1574</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1573#p1573</link>
			<description><![CDATA[Tak, dokładnie tak. 
Nie chcę zmieniać nazw kolumn na bazie. To alias ma być zmienny (w moim przypadku zależny od tygodnia)
Oczywiście, mogę po stronie aplikacji wyliczyć aliasy i złożyć select,a, ale chciałbym, żeby to baza dbała o te nazwy a aplikacja pytała: select * from .....]]></description>
			<author><![CDATA[dummy@example.com (dar_pos)]]></author>
			<pubDate>Tue, 17 Nov 2009 08:26:26 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1573#p1573</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1571#p1571</link>
			<description><![CDATA[Ale rozumiem że chodzi o 'wyliczanie' nazw kolumn na bazie (nie chcesz chyba zmieniać fizycznie nazw kolumn na bazie), tylko aliasów które wypisujesz poleceniem select tak?]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Mon, 16 Nov 2009 16:00:58 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1571#p1571</guid>
		</item>
		<item>
			<title><![CDATA[Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1570#p1570</link>
			<description><![CDATA[Witam,

Czy wiecie może jak stworzyć zapytanie, w którym nazwy kolumn będą zmienne (wyliczane)?
Dokładnie chciałbym uzyskać taki efekt, aby wykonując zapytanie w tygodniu 45, jedna z kolumn nazywała się właśnie '45', Jeżeli to samo (niezmodyfikowane) zapytanie wykonam w tygodniu 50, kolumna powinna nazywać się '50'.

Pozdrawiam
Darek]]></description>
			<author><![CDATA[dummy@example.com (dar_pos)]]></author>
			<pubDate>Mon, 16 Nov 2009 14:52:46 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1570#p1570</guid>
		</item>
	</channel>
</rss>
