2016-11-14 3 views
-1

DB에 값이없는 경우 중지되는 SQL 스크립트를 작성해야합니다. 이 (의사 코드)와 같은 뭔가 :MySql 조건부 중지 스크립트 실행

BEGIN; 
... 
set @a = (select ...); 
if @a IS NULL THEN STOP_WITH_ERROR_AND_ROLLBACK(); 
... 
COMMIT; 

이 사람이 나에게 도와 드릴까요?

업데이트 : 몇 가지 이유로 스토어드 프로 시저 또는 함수를 사용할 수 없습니다.

업데이트 2 : 참고 : 명시 적 롤백이 필요하지 않습니다. 스크립트 실행의 중단은 충분히 있습니다. 커밋되지 않은 트랜잭션의 변경 사항을 자동으로 롤백합니다.

+0

MySQL에서는 저장된 프로그램 내에 오류 처리기를 선언 할 수 있습니다 (예 :'DECLARE EXIT HANDLER FOR NOT FOUND ... '; [here] (http://dev.mysql.com/doc/refman/5.7/en)를 참조하십시오. /declare-handler.html) 당신이 저장 프로 시저/함수를 사용할 수 없다는 것을 말하는 이유는 무엇입니까? – FDavidov

+0

DB 관리자가 편집을 위해 사용할 스크립트를 작성합니다. 스크립트는 원격 컴퓨터에서 실행되지만 보안상의 이유로 MySql 서버에서 비활성화 된 원격 연결에서 저장 프로 시저를 변경 및/또는 생성 참고 : 명시 적 롤백이 필요하지 않습니다. 스크립트 실행 중단은 다음과 같습니다. 충분히 커밋되지 않은 트랜잭션의 변경 사항을 자동으로 롤백합니다. –

+0

쿠마르가 게시 한 솔루션이 작동합니까? – FDavidov

답변

2
start transaction; 

    set @a=(select ...); 
    -- whatever you want to execute your code like insert, update 

    set @b=(select if(@a is null,'ROLLBACK','COMMIT')); 
    -- @b is store **ROLLBACK** if @a is null nither store **COMMIT** 

    prepare statement1 from @b; 
    -- now statement1 store as @a value 
    execute statement1; 

나는이 문제를 해결할 수 있기를 바랍니다.

+0

예! 그것은 작동합니다! 당신에게 나의 학부모! –

0

이렇게하면 도움이됩니다. 트랜잭션을 사용하는 방법에 대한 연구는 mySQL입니다.

START TRANSACTION 
... 
set @a = (select ...); 
IF @a IS NULL 
THEN 
SELECT 'Error Message' as ErrorMsg 
ROLLBACK; 
END IF; 
... 
COMMIT; 
+0

실수가 아니라면 "IF"문은 저장 프로 시저에만 사용할 수 있습니다. 오류 메시지가 나타납니다 : "SQL 구문에 오류가 있습니다 : MySQL 서버 버전에 해당하는 설명서에서 올바른 구문을 사용하여 'IF @CplxSecDirHdrId IS NULL THEN SELECT'오류 메시지 '를 ErrorMsg ROLLBACK'과 같이 온라인에서 확인하십시오 2 " –

+0

구문을 확인하십시오. 뭔가를 놓친 것 같습니다. –

+0

이 간단한 스크립트에는 오류가 있습니다 : use test; START TRANSACTION; @a = (선택 1); IF @a IS NULL 그 다음 ErrorMsg로 '오류 메시지'를 선택하십시오. ROLLBACK; END IF; COMMIT; –