postgresql ERROR: syntax error at or near "RETURNS"
postgresql ERROR: syntax error at or near "RETURNS"
我对 psql 完全陌生。当我使用
http://sqlfiddle.com/
做功课,系统return这个错误。
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();
函数名需要有()
:
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 代码中使用嵌入的 ;
:
你然后 keep 函数内部的 ;
,但是将所有 "final" ;
替换为 /
单线。这仅对 SQLFiddle 是必需的,而不是当您使用例如命令行客户端 psql
或其他 Postgres 兼容 SQL 客户端。
我对 psql 完全陌生。当我使用 http://sqlfiddle.com/ 做功课,系统return这个错误。
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();
函数名需要有()
:
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 代码中使用嵌入的 ;
:
你然后 keep 函数内部的 ;
,但是将所有 "final" ;
替换为 /
单线。这仅对 SQLFiddle 是必需的,而不是当您使用例如命令行客户端 psql
或其他 Postgres 兼容 SQL 客户端。