konto usunięte
Temat: Błąd a concat w triggerze w pl/pgsql
Witam!Robię trigera w pl/pgsql. Triger ma za zadanie:
- gdy w tabeli tabelka1 pojawi się nowa wiadomość zwiększyć licznik w tebelce2 o 1 dla odpowiedniego wiersza
- jeśli miesiac_data_koncowa ma pozniejszy meisiac niz miesiac_data_poczatkowa to licznik ma byc zwiekszony rowniez dla kolejnych miesiecy
Prosze się nie zrażać, że w if jest inna konstrukcja niż w else if. Była taka sama ale n ie działałą więc zmieniam i patrzę co mi wyplówa php my admin
Na chwilę obecną jest to błąd:
ERROR: syntax error at or near "$1"
LINE 1: ...PDATE tabelka2 SET $1 := $1...
^
QUERY: UPDATE tabelka2 SET $1 := $1 + 1 WHERE data_zapytania = CONCAT(@ $2 ||'/'||@ $3 ) AND data_zainteresowania = CONCAT(@ $4 ||'/'||@ $5 ) IF ROWCOUNT() = 0 THEN INSERT INTO tabelka2 (miesiac_zapytania, miesiac_zainteresowania, $1 ) VALUES (CONCAT(@ $2 ||'/'||@ $3 ), CONCAT(@ $4 ||'/'||@i), 1) END IF
CONTEXT: SQL statement in PL/PgSQL function "akt_statystyki" near line 20
CREATE FUNCTION akt_aaa() RETURNS trigger AS $akt_aaa$
Bardzo prosze o pomoc bo siedze z tym już 3ci dzień :(
Oto kod triggera:
DECLARE
rok_data_poczatkowa VARCHAR := to_number(to_char(NEW.data_od, 'YYYY'), '9999');
miesiac_data_poczatkowa VARCHAR := to_number(to_char (NEW.data_od, 'MM'), '9999');
rok_data_koncowa VARCHAR := to_number(to_char (NEW.data_do, 'YYYY'), '9999');
miesiac_data_koncowa VARCHAR := to_number(to_char (NEW.data_do, 'MM'), '9999');
miesiac_data_pytania VARCHAR := to_number(to_char (NEW.data_kontaktu, 'MM'), '9999');
rok_data_pytania VARCHAR := to_number(to_char (NEW.data_kontaktu, 'YYYY'), '9999');
ilosc INTEGER;
BEGIN
IF rok_data_koncowa = rok_data_poczatkowa THEN
FOR miesiac_data_poczatkowa IN miesiac_data_poczatkowa..miesiac_data_koncowa LOOP
UPDATE tabelka2
SET ilosc := ilosc + 1
WHERE data_zapytania = CONCAT(@rok_data_pytania||'/'||@miesiac_data_pytania) AND data_zainteresowania = CONCAT(@rok_data_poczatkowa||'/'||@miesiac_data_poczatkowa)
IF ROWCOUNT() = 0 THEN
INSERT INTO tabelka2 (miesiac_zapytania, miesiac_zainteresowania, ilosc)
VALUES (CONCAT(@rok_data_pytania||'/'||@miesiac_data_pytania), CONCAT(@rok_data_poczatkowa||'/'||@i), 1)
END IF;
END LOOP;
END IF;
ELSE IF rok_data_koncowa > rok_data_poczatkowa THEN
FOR i = miesiac_data_poczatkowa IN i..12 LOOP
UPDATE tabelka2
SET ilosc := OLD.ilosc + 1
WHERE data_zapytania = CONCAT(@rok_data_pytania,'/',@miesiac_data_pytania) AND data_zainteresowania = CONCAT(@rok_data_poczatkowa,'/',@i)
IF ROWCOUNT() = 0 THEN
INSERT INTO tabelka2 (miesiac_zapytania, miesiac_zainteresowania, ilosc)
VALUES (CONCAT(@rok_data_pytania,'/',@miesiac_data_pytania), CONCAT(@rok_data_poczatkowa,'/',@i), 1)
END IF;
END LOOP;
FOR i = 1 IN i..miesiac_data_koncowa LOOP
UPDATE tabelka2
SET ilosc := OLD.ilosc + 1
WHERE data_zapytania = CONCAT(@rok_data_pytania,'/',@miesiac_data_pytania) AND data_zainteresowania = CONCAT(@rok_data_koncowa,'/',@i)
IF ROWCOUNT() = 0 THEN
INSERT INTO tabelka2 (miesiac_zapytania, miesiac_zainteresowania, ilosc)
VALUES (CONCAT(@rok_data_pytania,'/',@miesiac_data_pytania), 'CONCAT(@rok_data_koncowa,'/',@i), 1)
END IF;
END LOOP;
END IF;
RETURN NEW;
END;
$akt_statystyki$ LANGUAGE plpgsql;
CREATE TRIGGER akt_aaa BEFORE INSERT OR UPDATE ON tabelka1
FOR EACH ROW EXECUTE PROCEDURE akt_aaa();