1

Temat: błąd składni

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;
$$;

2

Odp: błąd składni

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 ...';)

--
The best thing about modern society is how easy it is to avoid contact with it.

3

Odp: błąd składni

4

Odp: błąd składni

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 smile