首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql函数更新

Postgresql函数更新
EN

Stack Overflow用户
提问于 2015-04-07 02:52:22
回答 1查看 283关注 0票数 0

我有两张桌子:

  1. 包含日期和开放日的日历的第一个(布尔值)
  2. 第二是节假日表。

我做了一个改变日历上开放日状态的功能:

代码语言:javascript
复制
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 

但始终存在错误消息:

语法错误在或接近“更新”。

请问如何纠正这个问题?(我试过很多种方法,但没有结果.)

EN

回答 1

Stack Overflow用户

发布于 2015-04-07 03:04:10

你需要引用函数体。您可以使用普通的'引用,并将函数体中的所有'引用加倍,或者可以使用PostgreSQL扩展$$引用。

Update:另外,由于它不返回任何结果,所以应该声明为RETURNS void

代码语言:javascript
复制
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变量中设置值。

一个疯狂的猜测,但像这样的东西可能是你想要的:

代码语言:javascript
复制
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;

这是一个基于缺失信息的疯狂猜测。这可能是完全错误的。如果你在阅读手册后仍然被困在评论中,请发布一个新的问题,并对你想要解决的问题做出适当的解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29482910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档