Postgresql函数更新

时间:2015-04-07 02:52:23

标签: postgresql function boolean

我有两张桌子:

  1. 日历的第一个日期和开放日(布尔值)

  2. 第二个是假期表。

  3. 我在日历上创建了一个更改开放日状态的功能:

    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 
    

    但总是有错误信息:

      

    语法错误等于或接近"更新"。

    请问如何纠正? (我试过很多方面,但没有结果......)

1 个答案:

答案 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>的