我想知道如何在 PostgreSQL 中通过RAISE SQLSTATE
动态指令使用触发器?
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;
它不起作用。
我想知道如何在 PostgreSQL 中通过RAISE SQLSTATE
动态指令使用触发器?
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 = 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>)
好的,我找到了解决方案。我只需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;
看来我们不能使用%
withUSING MESSAGE
语句。