2012-12-25 5 views
0

PostgreSQL에서 동적 명령 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; 

작동하지 않습니다.

+1

"작동하지 않는"문제가되지 않습니다 기술. – melpomene

+0

알았어, 방금 해결책을 찾았는데 ... 괄호로 둘러싼 메시지 값을 다음과 같이 괄호로 묶었 다.'MESSAGE = ('la planète ..., NEW.position);' –

+0

당신은 답으로 써서 받아 들여야한다. :-) – melpomene

답변

0

좋아, 해결책을 찾았습니다. 그래서

:

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; 

단순하지만 내가 본하지 않았다 명시 예 난 단지 괄호로 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%을 사용할 수 없습니다 것 같다

희망이

편집을 할 수 있습니다.

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>)