Ошибка 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
nl ja de

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
добавлено
pgsql – PostgreSQL
pgsql – PostgreSQL
2 429 участник(ов)

Чат про PostgreSQL

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)