我想知道如何使用RAISE SQLSTATE
动态指令在PostgreSQL中使用触发器?
IF i>0 THEN
RAISE SQLSTATE '23505' USING MESSAGE = 'la planète est déjà occupée (planet_non_free)=(%, %, %)', NEW.galaxie, NEW.systeme_solaire, NEW.position;
END IF;
它不起作用。
答案 0 :(得分:1)
我建议使用:
IF i > 0 THEN
RAISE SQLSTATE '23505'
USING MESSAGE = format('la planète est déjà occupée (planet_non_free)=(%s, %s, %s)', NEW.galaxie, NEW.systeme_solaire, NEW.position);
END IF;
然后您的错误消息显示为:
la planète est déjà occupée (planet_non_free)=(<g>, <s>, <p>)
..而不是:
("la planète est déjà occupée (planet_non_free)=(%, %, %)",<g>, <s>, <p>)
答案 1 :(得分:0)
好的,我找到了解决方案。我只需用括号括起MESSAGE
值:
所以:
IF i>0 THEN
RAISE SQLSTATE '23505' USING MESSAGE = 'la planète est déjà occupée (planet_non_free)=(%, %, %)', NEW.galaxie, NEW.systeme_solaire, NEW.position;
END IF;
成为:
IF i>0 THEN
RAISE SQLSTATE '23505' USING MESSAGE = ('la planète est déjà occupée (planet_non_free)=(%, %, %)', NEW.galaxie, NEW.systeme_solaire, NEW.position);
END IF;
很简单,但我没有在网上看到动态MESSAGE
的明确示例。
希望这有帮助
编辑:
好的抱歉,正确的语法就是这个:
IF i>0 THEN
RAISE SQLSTATE '23505' USING MESSAGE = 'la planète est déjà occupée (planet_non_free)=(' || NEW.galaxie || ',' || NEW.systeme_solaire || ',' || NEW.position || ')';
END IF;
我们似乎无法将%
与USING MESSAGE
声明一起使用。