我有两张桌子:
日历的第一个日期和开放日(布尔值)
第二个是假期表。
我在日历上创建了一个更改开放日状态的功能:
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
但总是有错误信息:
语法错误等于或接近"更新"。
请问如何纠正? (我试过很多方面,但没有结果......)
答案 0 :(得分:0)
您需要引用函数体。您可以使用正常的'
引用并将函数体内的所有'
加倍,也可以使用PostgreSQL扩展$$
引用。
更新:此外,由于它不返回任何结果,因此应将其声明为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;
这是基于缺失信息的疯狂猜测。这可能是完全错误的。如果您在阅读评论中链接的手册后仍然遇到问题,请发布新问题,并附上正确解释您要解决的问题< / em>的