2013-02-14 2 views
2

Oracle 트리거를 MySQL로 이식하려고합니다. 방아쇠에 EXCEPTION WHEN OTHERS 문이 있으며 다른 모든 문항에서 동등한 문을 발견했지만이 문은 찾을 수 없습니다. 트리거는 다음과 같습니다.예외적 인 경우는 MySQL에있는 다른 항목

IF (yada yada) 
    THEN 
     BEGIN 
      SELECT a 
      INTO generic_variable1 
      FROM table 
      WHERE condition; 
      SET generic_variable2 = value1; 
    EXCEPTION WHEN OTHERS --this part needs to be replaced by valid MySQL syntax 
     SET generic_variable2 = value2; 
    END; 
END IF; 

어떻게하면 해당 파트를 MySQL로 변환 할 수 있습니까?

답변

6

MySQL은 Oracle에 비해 매우 제한된 저장 프로 시저/트리거 언어를 가지고 있음을 이해해야합니다. MySQL로 포팅하는 동안, 많은 오라클 사용자들은 "MySQL이 X를 할 수 없다고 믿을 수 없다 !!!!"라고 반복해서 말합니다.

다른 사람이 DECLARE CONTINUE HANDLER 일 때 예외적으로 가장 가까운 것은 예외입니다. (하지 테스트)

예 :

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @generic_variable2 = 1; 

하지만이 선언 것 그 후가 아니라 예외를 던질 수있는 코드의 전에 블록.

전체 문서는 http://dev.mysql.com/doc/refman/5.5/en/declare-handler.html을 참조하십시오.

+0

빌, 답변 해 주셔서 감사합니다! :) 전에는 IF 문 내에서 또는 그 전에도 의미합니까? 이 위치를 어디에 알려주시겠습니까? 감사! – CodingInCircles

+1

필자는 DECLARE가 다른 어떤 구문과도 같기 때문에 코드 블록이나 하위 블록 어디에서나 사용할 수 있다고 생각합니다. 그러나 DECLARE 문을 코드 블록의 시작 부분 즉 BEGIN 바로 뒤에 배치하는 것이 일반적입니다. –

+0

쿨! 나는 그것을 밖으로 시도하고 알려 드리겠습니다. 고맙습니다! :) – CodingInCircles

관련 문제