Ошибка PostgreSQL sql синтаксиса функций, сочиняя функцию

Я пытаюсь написать функцию Пост-ГРЭС. Я делаю его впервые, так не чувствуйте себя раздраженными, если вы находите некоторые глупые ошибки:

CREATE  FUNCTION proc_test(userId int)
returns void 
begin
UPDATE pl_payroll SET remarks =viw.remarks from pl_payroll   
diff,viwPayDifference viw 
where diff.userid = cast(userId as varchar); 
end;

Это дает ошибку как

синтаксическая ошибка в или рядом "начинается"

Что случилось здесь?

1
добавлено отредактировано
Просмотры: 1

1 ответы

SQL functions don't have BEGIN and END like plpgsql functions.

CREATE FUNCTION proc_test(userId int)
  RETURNS void AS
$func$
UPDATE pl_payroll
SET    remarks = viw.remarks
FROM   pl_payroll diff, viwPayDifference viw
WHERE  diff.userid = cast(userId as varchar);
$func$ LANGUAGE sql;

Ваш ОБНОВЛЕНИЕ также выглядит неправильный по сути.

  • Там не ГДЕ присоединение условия pl_payroll к дополнительным столам.
  • Вы не должны присоединяться pl_payroll во второй раз.
  • второе возникновение идентификатор пользователя не квалифицирован столом и вероятно неоднозначный.

Проверьте UPDATE syntax in the manual. Должно быть что-то как:

CREATE FUNCTION proc_test(userId int)
  RETURNS void AS
$func$
UPDATE pl_payroll p
SET    remarks = viw.remarks
FROM   viwPayDifference viw
WHERE  viw.userid = p.userId::varchar;
$func$ LANGUAGE sql;

Как в стороне: выглядит очень подозрительным, что необходимо бросить diff.userId , чтобы varchar . Что-то прочь с вашими типами данных в ваших базовых таблицах?

2
добавлено