<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - błąd składni]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1932</link>
		<description><![CDATA[Najświeższe odpowiedzi w błąd składni.]]></description>
		<lastBuildDate>Mon, 20 Jan 2014 14:27:58 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: błąd składni]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4984#p4984</link>
			<description><![CDATA[ok , dzięki za pomoc. Mi chodziło głównie o to że mi nie kompilowało a nie sprawdziłem dokładnie składni IF . Jednak nauka i zbyt wielu języków jednocześnie może być zgubna, a tego typu literówki lub błędy składniowe najgorzej zauważyć.
I dzięki za link, rzeczywiście łączenie tabel wydaję się lepsze na pierwszy rzut oka :)]]></description>
			<author><![CDATA[dummy@example.com (mattd)]]></author>
			<pubDate>Mon, 20 Jan 2014 14:27:58 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4984#p4984</guid>
		</item>
		<item>
			<title><![CDATA[Odp: błąd składni]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4980#p4980</link>
			<description><![CDATA[[quote=depesz]W twoim przypadku wydaje mi się (sorry, na testowanie za wcześniej), że problemem jest użycie "create table".[/quote]

to nie do końca prawda co pisze depesz poniżej skrypt, który wykonuje create function wewnątrz funkcji na postgresql 9.3.2. 

Rozwiązanie, które proponuje mattd [b]jest z gruntu złe[/b] ale można oczywiście i tak tylko poco mattd poczytaj posta na [url=http://forum.postgresql.org.pl/viewtopic.php?id=1921]Forum PostgreSQL[/url] zwłaszcza, że dotyczy dokładnie twojego problemu (następnym razem czytaj posty).

drop table if exists rok2004;
create table rok2004 as select miesiac,2004,trunc(random()*12)::int as wynik from generate_series(1,12) as d(miesiac);
drop table if exists rok2005;
create table rok2005 as select miesiac,2005,trunc(random()*12)::int as wynik from generate_series(1,12) as d(miesiac);
CREATE OR REPLACE FUNCTION rap() RETURNS void
LANGUAGE 'plpgsql' AS $$
declare
    r4 decimal(10,2);
    r5 decimal(10,2);
BEGIN
    Create table if not exists raport(
    miesiac int not null,
    rok int,
    wynik decimal(10,2),
    PRIMARY KEY (miesiac)
    );
    delete from raport;
        for i IN 1 .. 12 LOOP
            Select into r4 wynik  from rok2004 where miesiac=i;
            Select into r5 wynik from rok2005 where miesiac=i;
            if (r4>r5) then
                Insert into raport (miesiac,rok,wynik)
                VALUES(i,2004,r4);
            elsif (r4<r5) then
                Insert into raport (miesiac,rok,wynik)
                VALUES(i,2005,r5);
            else
                Insert into raport (miesiac,rok,wynik)
                VALUES(i,20042005,r4);
            END IF;
        END LOOP;
END;
$$;

select rap();
select * from raport;]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Sat, 18 Jan 2014 20:09:40 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4980#p4980</guid>
		</item>
		<item>
			<title><![CDATA[Odp: błąd składni]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4979#p4979</link>
			<description><![CDATA[Najprostsza metoda debugowania: usuwaj kod dopóki nie usuniesz błędu. W twoim przypadku wydaje mi się (sorry, na testowanie za wcześniej), że problemem jest użycie "create table". O ile pamiętam nie można używać ddl'i wewnątrz funkcji, chyba, że użyjesz dynamicznych zapytań (execute 'create ...';)]]></description>
			<author><![CDATA[dummy@example.com (depesz)]]></author>
			<pubDate>Fri, 17 Jan 2014 10:45:09 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4979#p4979</guid>
		</item>
		<item>
			<title><![CDATA[błąd składni]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4977#p4977</link>
			<description><![CDATA[Witam, pisze funkcje która odczytuje dane z dwóch tabel o takich samych nazwach atrybutów i wstawiam do 3 tabeli w formacie (miesiac, rok , wynik) . Napisałem tak jakby się logicznie wydawało że powinno działać ale pgAdmin wyrzuca mi błąd składni przy END LOOP; . Siedzę już chwile nad tym problemem i nic nie mogę wymyślić wiec może by ktoś rzucił okiem na kod

CREATE OR REPLACE FUNCTION rap() RETURNS void 
LANGUAGE 'plpgsql' AS $$
declare 
	r4 decimal(10,2);
	r5 decimal(10,2);
BEGIN
	Create table if not exists raport(
	miesiac int not null,
	rok int,
	wynik decimal(10,2),
	PRIMARY KEY (miesiac)
	);
		for i IN 1 .. 12 LOOP
			Select wynik from rok2004 where miesiac=i into r4;
			Select wynik from rok2005 where miesiac=i into r5;
			if (r4>r5) then
				Insert into raport (miesiac,rok,wynik)
				VALUES(i,2004,r4);
			else if (r4<r5) then
				Insert into raport (miesiac,rok,wynik)
				VALUES(i,2005,r5);
			else 
				Insert into raport (miesiac,rok,wynik)
				VALUES(i,20042005,r4);
			END IF;
		END LOOP;
END;
$$;]]></description>
			<author><![CDATA[dummy@example.com (mattd)]]></author>
			<pubDate>Thu, 16 Jan 2014 14:09:11 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4977#p4977</guid>
		</item>
	</channel>
</rss>
