0

我想知道如何在 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;

它不起作用。

4

2 回答 2

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>)
于 2012-12-26T03:59:21.753 回答
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;

看来我们不能使用%withUSING MESSAGE语句。

于 2012-12-25T20:05:24.913 回答