<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Wyliczana nazwa kolumny w zapytaniach]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=348&amp;type=atom"/>
	<updated>2009-11-30T18:45:36Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=348</id>
		<entry>
			<title type="html"><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1600#p1600"/>
			<content type="html"><![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)]]></content>
			<author>
				<name><![CDATA[psocha]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=519</uri>
			</author>
			<updated>2009-11-30T18:45:36Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1600#p1600</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1575#p1575"/>
			<content type="html"><![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ć :/]]></content>
			<author>
				<name><![CDATA[dar_pos]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1019</uri>
			</author>
			<updated>2009-11-17T11:46:05Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1575#p1575</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1574#p1574"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-11-17T09:22:42Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1574#p1574</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1573#p1573"/>
			<content type="html"><![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 .....]]></content>
			<author>
				<name><![CDATA[dar_pos]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1019</uri>
			</author>
			<updated>2009-11-17T08:26:26Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1573#p1573</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1571#p1571"/>
			<content type="html"><![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?]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2009-11-16T16:00:58Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1571#p1571</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Wyliczana nazwa kolumny w zapytaniach]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1570#p1570"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[dar_pos]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1019</uri>
			</author>
			<updated>2009-11-16T14:52:46Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1570#p1570</id>
		</entry>
</feed>
