0

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;

うまくいきません。

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シンプルですが、動的なWeb の明示的な例は見当たりませんでした。

お役に立てれば

編集 :

申し訳ありませんが、正しい構文は次のとおりです。

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 に答える