PostgreSQL - ОШИБКА: синтаксическая ошибка в или около ";" КОНЕЦ; В IF-ELSE IF-код - PullRequest
0 голосов
/ 01 февраля 2020

Я новичок в PostgreSQL и пытаюсь выполнить некоторые запросы. Я написал эту функцию в sql, но я получаю ошибку, когда пытаюсь выполнить следующий код:

CREATE OR REPLACE FUNCTION title_basics_partitioner() 
RETURNS TRIGGER AS $$ 
BEGIN  
    IF (startyear is null) THEN
        INSERT INTO startyear_null VALUES (NEW.*);
    ELSE IF (startyear >= '1874' AND startyear < '1894') THEN
        INSERT INTO startyear_1874_1894 VALUES (NEW.*);
    ELSE IF (startyear >= '1894' AND startyear < '1914') THEN
        INSERT INTO startyear_1894_1914 VALUES (NEW.*);
    ELSE IF (startyear >= '1914' AND startyear < '1934') THEN
        INSERT INTO startyear_1914_1934 VALUES (NEW.*);
    ELSE IF (startyear >= '1934' AND startyear < '1954') THEN
        INSERT INTO startyear_1934_1954 VALUES (NEW.*);
    ELSE IF (startyear >= '1954' AND startyear < '1974') THEN
        INSERT INTO startyear_1954_1974 VALUES (NEW.*);
    ELSE IF (startyear >= '1974' AND startyear < '1994') THEN
        INSERT INTO startyear_1974_1994 VALUES (NEW.*);
    ELSE IF (startyear >= '1994' AND startyear < '2014') THEN
        INSERT INTO startyear_1994_2014 VALUES (NEW.*);
    ELSE IF (startyear >= '2014' AND startyear < '2115') THEN
        INSERT INTO startyear_2014_2115 VALUES (NEW.*);
    ELSE         
        RAISE EXCEPTION 'Out of range year value. Fix the title_basics_insert_trigger() function!';
    END IF;     
    RETURN NULL; 
END;
$$ LANGUAGE plpgsql; 

И вот ошибка, которую я получаю:

ERROR:  syntax error at or near ";"
LINE 26: END;
            ^
SQL state: 42601
Character: 1174

Любые идеи

1 Ответ

1 голос
/ 01 февраля 2020

Ответ состоит в том, чтобы изменить выражение «ELSE IF» на «ELSIF» ...

Я также внес некоторые изменения, я превратил строки 'years' в ints ('1874 '-> 1874) и я добавил NEW.startyear вместо простого startyear.

CREATE OR REPLACE FUNCTION title_basics_partitioner() 
RETURNS TRIGGER AS $$ 
BEGIN  
    IF (NEW.startyear is null) THEN
        INSERT INTO startyear_null VALUES (NEW.*);
    ELSIF (NEW.startyear >= 1874 AND NEW.startyear < 1894) THEN
        INSERT INTO startyear_1874_1894 VALUES (NEW.*);
    ELSIF (NEW.startyear >= 1894 AND NEW.startyear < 1914) THEN
        INSERT INTO startyear_1894_1914 VALUES (NEW.*);
    ELSIF (NEW.startyear >= 1914 AND NEW.startyear < 1934) THEN
        INSERT INTO startyear_1914_1934 VALUES (NEW.*);
    ELSIF (NEW.startyear >= 1934 AND NEW.startyear < 1954) THEN
        INSERT INTO startyear_1934_1954 VALUES (NEW.*);
    ELSIF (NEW.startyear >= 1954 AND NEW.startyear < 1974) THEN
        INSERT INTO startyear_1954_1974 VALUES (NEW.*);
    ELSIF (NEW.startyear >= 1974 AND NEW.startyear < 1994) THEN
        INSERT INTO startyear_1974_1994 VALUES (NEW.*);
    ELSIF (NEW.startyear >= 1994 AND NEW.startyear < 2014) THEN
        INSERT INTO startyear_1994_2014 VALUES (NEW.*);
    ELSIF (NEW.startyear >= 2014 AND NEW.startyear < 2115) THEN
        INSERT INTO startyear_2014_2115 VALUES (NEW.*);
    ELSE         
        RAISE EXCEPTION 'Out of range year value. Fix the title_basics_insert_trigger() function!';
    END IF;     
    RETURN NULL; 
END; 
$$
LANGUAGE plpgsql; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...