我需要编写一个非常简单的函数。我将传递三个参数(employeeid、employeetitle 和employeeaddress)。如果传递的 employeeid 等于 0,则将向表中插入一条新记录。如果传递的 employeeid 大于 0,则记录将被更新。在这两种情况下,employeeid 都将作为结果返回(id 是 employee 表中的自动递增值)。我正在使用 pgAdmin,这是我编写的代码:
CREATE FUNCTION public.addupdateemployee(IN employeeid bigint, IN employeetitle text, IN employeeaddress text)
RETURNS bigint
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
DECLARE affectedrecordid bigint = 0
IF employeeid = 0 THEN
INSERT INTO employeemaster(title, address)
values(employeetitle, employeeaddress)
RETURNING id INTO affectedrecordid;
RETURN affectedrecordid;
ELSE
UPDATE employeemaster
SET title = employeetitle,
address = employeeaddress
WHERE id = employeeid
RETURN employeeid;
END IF
END
$BODY$;
当我执行上述语句时出现以下错误:
ERROR: syntax error at or near "IF"
LINE 8: IF employeeid = 0 THEN
^
SQL state: 42601
Character: 218
我无法弄清楚这个问题。有人可以帮我修复上述功能吗?
最佳答案
declare
需要在第一个begin
之前进行。而且您缺少变量声明的 ;
和 IF
block 之后。语言名称是一个标识符,不应放在单引号中。并且 UPDATE 语句需要 RETURNING
而不是 RETURN
所以应该是:
CREATE FUNCTION public.addupdateemployee(IN employeeid bigint, IN employeetitle text, IN employeeaddress text)
RETURNS bigint
LANGUAGE plpgsql
AS $BODY$
DECLARE
affectedrecordid bigint = 0;
begin
IF employeeid = 0 THEN
INSERT INTO employeemaster(title, address)
values(employeetitle, employeeaddress)
RETURNING id INTO affectedrecordid;
RETURN affectedrecordid;
ELSE
UPDATE employeemaster
SET title = employeetitle,
address = employeeaddress
WHERE id = employeeid
RETURNING employeeid;
END IF;
END;
$BODY$;
关于postgresql - Postgres : unable to create function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54763200/