postgresql 错误:“返回”处或附近的语法错误

Posted

技术标签:

【中文标题】postgresql 错误:“返回”处或附近的语法错误【英文标题】:postgresql ERROR: syntax error at or near "RETURNS" 【发布时间】:2016-06-04 21:20:48 【问题描述】:

我对 psql 完全陌生。当我使用 http://sqlfiddle.com/ 做一些功课,系统返回这个错误。

ERROR: syntax error at or near "RETURNS"

感谢任何帮助。 这是我的 psql:

CREATE TABLE HotelStays
(roomNum INTEGER NOT NULL,
arrDate DATE NOT NULL,
depDate DATE NOT NULL,
guestName CHAR(30) NOT NULL,
PRIMARY KEY (roomNum, arrDate))
;

CREATE OR REPLACE FUNCTION stopInsert RETURNS trigger AS
$body$
DECLARE
  availableArrDate DATE;
  checkRoomNum INTEGER;
BEGIN
  if (NEW.arrDate >= NEW.depDate) then
    return null;
   end if;

  checkRoomNum = NEW.roomNum;

  select h.depDate into availableArrDate
  from HotelStays h
  where h.roomNum = checkRoomNum
  order by h.depDate DESC
  LIMIT 1;
  if (availableArrDate > NEW.arrDate)
    return null;
  end if;
END;
$body$ LANGUAGE plpgsql;

create trigger stopInsert before insert ON HotelStays 
For each row
execute procedure stopInsert();

【问题讨论】:

【参考方案1】:

函数名中需要有()

CREATE OR REPLACE FUNCTION stopInsert() RETURNS trigger AS
                                      ^
--------------------------------------|

IF 语句也不正确,您缺少THEN

if (availableArrDate > NEW.arrDate) then --<< THEN is required
  return null;
end if;

在 SQLFiddle 中,您还需要使用不同的语句终止符才能在 PL/pgSQL 代码中使用嵌入的 ;

然后保留函数内部的;,但在一行中将所有“最终”; 替换为/。这仅对 SQLFiddle 是必需的,而不是在您使用例如命令行客户端 psql 或其他 Postgres 兼容的 SQL 客户端。

【讨论】:

以上是关于postgresql 错误:“返回”处或附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 中的“'order' 处或附近的语法错误”

Postgresql 字符串连接:错误:“msg”处或附近的语法错误

PostgreSQL 与 TypeORM 错误“在 \"Sep\" 处或附近出现语法错误”

将 TSQL 转换为 Postgresql - SQL 错误:错误:“[”处或附近的语法错误

" " postgresql 函数处或附近的语法错误

Postgresql: 在 ""ViewShifts"" 处或附近出现语法错误 为啥我在下面的查询中会出现此错误?