我有两张桌子:
我做了一个改变日历上开放日状态的功能:
CREATE OR REPLACE FUNCTION add_hol ()
RETURNS boolean AS
UPDATE calendar SET open_day = 'false'
WHERE day IN (
SELECT jour FROM calendar AS c
INNER JOIN calendar_hol AS h
ON c.day=h.day_hol)
LANGUAGE sql 但始终存在错误消息:
语法错误在或接近“更新”。
请问如何纠正这个问题?(我试过很多种方法,但没有结果.)
发布于 2015-04-07 03:04:10
你需要引用函数体。您可以使用普通的'引用,并将函数体中的所有'引用加倍,或者可以使用PostgreSQL扩展$$引用。
Update:另外,由于它不返回任何结果,所以应该声明为RETURNS void。
CREATE OR REPLACE FUNCTION add_hol ()
RETURNS void AS
$$
UPDATE calendar SET open_day = 'false'
WHERE day IN (
SELECT jour FROM calendar AS c
INNER JOIN calendar_hol AS h
ON c.day=h.day_hol)
$$
LANGUAGE sql;详情请参阅手册。
更新,因为你正在寻找一个触发程序,但没有这样说。
作为一个触发器,这没有任何意义。我认为您实际上是在尝试在插入或更新行时修改它。为此,必须在NEW变量中设置值。
一个疯狂的猜测,但像这样的东西可能是你想要的:
CREATE OR REPLACE FUNCTION add_hol ()
RETURNS trigger AS
$$
BEGIN
IF tg_op = 'INSERT' OR tg_op = 'UPDATE'
THEN
NEW.open_day = NOT EXISTS (
SELECT 1
FROM calendar_hol AS h
WHERE h.day_hol = NEW.day
);
RETURN NEW;
END IF;
END;
$$
LANGUAGE plpgsql;这是一个基于缺失信息的疯狂猜测。这可能是完全错误的。如果你在阅读手册后仍然被困在评论中,请发布一个新的问题,并对你想要解决的问题做出适当的解释。
https://stackoverflow.com/questions/29482910
复制相似问题