代码之家  ›  专栏  ›  技术社区  ›  Sebastian Olsen

在trigger函数中调用if语句内部的函数时出现语法错误

  •  1
  • Sebastian Olsen  · 技术社区  · 7 年前

    我正在尝试创建一个触发器函数,该函数只调用if语句中的函数:

    create or replace function public.“ontrack”()
    返回触发器
    语言“plpgsql”
    美元身价
    开始
    如果(tg oup='insert'),则
    “updateUserStats”(新。“userid”);
    elsif(tg oup='删除')然后
    “updateUserStats”(旧的“userid”);
    结束如果
    
    返回空值
    结束
    $$美元;
    < /代码> 
    
    

    但是,当我尝试创建函数时,我得到了这个错误

    我不知道我做错了什么,根据文档,这种语法是正确的。删除函数周围的引号将不起作用,因为名称区分大小写,而且仍然是一个语法错误。

    我在“PostgreSQL 9.5.14”版本上

    但是,当我尝试创建函数时,我得到了这个错误

    enter image description here

    我不知道我做错了什么,根据文档,这种语法是正确的。删除函数周围的引号将不起作用,因为名称区分大小写,而且仍然是一个语法错误。

    我在“PostgreSQL 9.5.14”版本上

    2 回复  |  直到 7 年前
        1
  •  1
  •   Mureinik    7 年前

    你好像错过了 perform 关键词:

    IF (TG_OP = 'INSERT') THEN
        PERFORM "updateUserStats"(NEW."userId");
    ELSIF (TG_OP = 'DELETE') THEN
        PERFORM "updateUserStats"(OLD."userId");
    END IF;
    
        2
  •  1
  •   Oto Shavadze    7 年前

    您只需要调用该函数:

    ...
    perform updateUserStats(NEW.userId);
    ...
    

    你还漏掉了后面的分号 END IF RETURN NULL