PostgreSQL日期触发器语法错误求助:SQL新手编写函数遇报错
修复PostgreSQL触发器函数的语法错误
嘿,我来帮你排查这个触发器函数的问题~ 你的代码里有两个明显的语法问题,导致了报错:
问题1:赋值语句中多余的select关键字
PostgreSQL里给NEW对象的字段赋值时,直接写表达式即可,不需要加select。比如你原来写的new.creation_date := select current_timestamp;是错误的,去掉select就能解决这部分问题。
问题2:单引号嵌套导致的语法冲突
你用单引号'包裹整个触发器函数体,而函数内部的interval '2 week'又用到了单引号,这会让PostgreSQL误以为函数体在'2这里就结束了,从而抛出语法错误。解决这个问题最简洁的方式是用美元引号($$)来包裹函数体,这样内部的单引号就不需要转义了。
修正后的完整代码
CREATE FUNCTION annouc_dates() RETURNS TRIGGER AS $$ BEGIN IF new.creation_date IS NULL THEN new.creation_date := current_timestamp; END IF; IF new.removal_date IS NULL THEN new.removal_date := new.creation_date + interval '2 week'; END IF; RETURN new; END; $$ LANGUAGE plpgsql;
另外补充一点:最好显式指定函数的语言为plpgsql,虽然PostgreSQL可能会自动识别,但显式声明更规范哦。
内容的提问来源于stack exchange,提问作者3va
相关产品推荐
相关产品推荐

