2012-01-06 3 views
1

데이터베이스에서 무언가를 수행하기 위해 배치 (batch) MySQL 스크립트를 구현하고 싶습니다. 문제는, 각 마스터 ID에 대해 4 개의 튜플을 삽입하고 싶다는 것입니다. 그러나이 튜플은 트랜잭션에 추가되어야합니다. 즉,이 튜플 중 하나가 실패하면 트랜잭션이 롤백되어야합니다. 그런 다음 쿼리가 실패했다는 것을 포착하기위한 메커니즘을 잡아야합니다. 나는 PHP 나 PERL 등 순수한 MySQL을 사용할 수 없다. 심지어 그렇게하기위한 스토어 절차를 만들 수 없다. Microsoft SQL Server에는 내 문제를 해결하는 @@ 오류 변수가 있지만 MYSQL에는 오류 코드를 표시하는 시스템 변수가 없습니다. 어떻게 할 수 있습니까?MYSQL에서 캐치 오류

건배,

+0

트랜잭션을 롤백하려고합니다. – Nami

+0

PHP wrapper에서 '배치 MYSQL'스크립트를 래핑 할 수없는 이유는 무엇입니까? 그런 다음 try/catch를 롤백/커밋과 함께 사용할 수 있습니다. –

답변

0

이 못생긴 해결 방법이지만 어떤 경우에는 내가 롤백 할 수 있도록 내가, SQL 쿼리의 배치를 가져오고 트랜잭션 내에서 전체 일을 마무리하려고 할 때 나를 위해 일한 SQL 쿼리가 오류가 발생했습니다.

일} 처리 크기가 크기 때문에 조건 핸들러가있는 SQL 프로시 저는 옵션이 아니 었습니다.

는이 수동을해야 할, 그래서 당신은 배치하지 않는 한 그것은 정말 해결책이 아니다 :

먼저, 전체 배치가 SQL 파일에 저장되어 있는지 확인하십시오. SQL 파일에는 일} 처리 조회 W 트랜잭션 제어 조회 만 포함되어야합니다.

그리고 MySQL의 명령 줄 클라이언트를 시작하고 트랜잭션을 수동으로 명령을 입력 : 당신이 간단하게 할 수있는 그 후

mysql> SOURCE path/to/file.sql 

:

mysql> SET AUTOCOMMIT = 0; 
mysql> START TRANSACTION; 

그런 다음 배치 파일을 실행하는 명령 행 클라이언트에게 수동으로 COMMIT; 또는 ROLLBACK;을 입력하면 쿼리 결과에 얼마나 만족하는지 알 수 있습니다.

비록 이런 괴롭다. 누구든지 더 나은 접근법을 가지고 있습니까?