postgresql错误:“RETURNS”

时间:2016-02-23 06:54:46

标签: postgresql plpgsql database-trigger

我对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 个答案:

答案 0 :(得分:2)

函数名称中必须包含{a: 2}

()

CREATE OR REPLACE FUNCTION stopInsert() RETURNS trigger AS ^ --------------------------------------| 语句也不正确,您错过了IF

THEN

在SQLFiddle中,您还需要使用不同的语句终止符才能在PL / pgSQL代码中使用嵌入的if (availableArrDate > NEW.arrDate) then --<< THEN is required return null; end if;

enter image description here

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