2013-06-06 2 views
7

어디에서나 MySQL 저장 프로 시저가 트랜잭션을 처리 할 수 ​​있습니다. 1422 명시 적 또는 암시가 저장 기능 또는 트리거에서 허용되지 않습니다 커밋 : 내 저장 기능오류 코드 : 1422. 명시 적 또는 암시 적 커밋이 저장 함수 나 트리거에 허용되지 않습니다.

create function test(a int) 
returns int 
MODIFIES SQL DATA 
BEGIN 
    START TRANSACTION ; 
    update t set col='some value' where id=a ; 
    COMMIT ; 
    return 0 ; 
END // 

를 선언 할 때 그러나 나는

오류 코드를 얻을.

답변

10

사실 내부 거래는 허용되지 않습니다. 기능은입니다. 내부 거래는 허용 된 절차에만 저장됩니다.

create procedure test(a int) 
MODIFIES SQL DATA 
BEGIN 
    START TRANSACTION ; 
    update t set col='some value' where id=a ; 
    COMMIT ; 
END // 

SP에서 값을 반환하려면 출력 매개 변수를 사용하거나 SP의 마지막 select 문에서 결과 집합을 사용하십시오.

+6

또한 트리거 내에서 프로 시저를 호출하면 '_Explicit 또는 Implicit Commit이 저장 함수에 허용되지 않거나 trigger_'오류로 인해 보 상받을 수 있습니다. 실망. – aroth

+0

이봐, 이건 좀 오래되었지만, 지금 당장이 문제에 부딪 히고 있습니다. 그 주위에 어떤 방법이 있습니까? – user2223059