1

我对 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();
4

1 回答 1

2

函数名称需要包含()在其中:

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 代码中的嵌入:

在此处输入图像描述

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

于 2016-02-23T07:07:14.903 回答