2015-07-28 3 views
1

Я пишу функцию postgresql, но я не могу найти, где ошибка. Postgresql находится в версии 9.4.
Следующая функция:Создание функции postgresql дает синтаксическую ошибку

CREATE FUNCTION custom_function1() 
RETURNS trigger 
LANGUAGE plpgsql 
AS 
$$ 
    DECLARE base_val integer; 
    BEGIN 
     base_val := (EXTRACT(YEAR FROM now())::integer * 10000000000); 

     IF (currval('custom_sequence') < base_val) THEN 
      setval('custom_sequence', base_val); 
     END IF; 

     NEW.id := custom_function2(); 
     RETURN NEW; 
    END; 
$$; 

Мой custom_sequence в формате YYYY0000000000 (например 20150000000000.).

Так что это в основном делает (должно делать), проверяет ли он, что base_val (минимальное значение для текущего года) больше, чем currval (текущее значение custom_sequence) и обновляет значение custom_sequence. Затем он возвращает новое значение для этой последовательности, сгенерированной с помощью функции custom_function2 (которая форматирует ее немного).

Когда я пытаюсь выполнить это дает мне:
ошибка синтаксиса или вблизи «SETVAL»
Я довольно новыми для обоих PostGreSQL и написания функций, так что я, вероятно, не seeying очевидную ошибку. Если кто-то может мне помочь, это будет очень признательно, спасибо.

ответ

2

ошибка связана с тем, что это объясняется в документ here:

40.5.2 Выполнение команды без результата
[...]

Иногда полезно оценить выражение или запрос SELECT, но отбрасывают результат, например, при вызове функции, которая имеет побочные эффекты, но не имеет полезного значения результата. Для этого в PL/pgSQL используйте утверждение PERFORM:

PERFORM query;

Вы должны написать:

PERFORM setval('custom_sequence', base_val); 
+0

Большое спасибо! И спасибо за объяснение ссылки –

Смежные вопросы