2011-08-24 59 views

답변

14

예, 대부분의 데이터베이스가이를 허용 내가 좋아하는 일을 할 수있는 방법 ..이있다. 보통 SQL 문을 무언가로 구분해야합니다. PostGRES와 MySQL에서는 세미콜론 (;)입니다. Microsoft SQL Server에서 GO 키워드를 사용해야합니다. [2013 년 5 월 업데이트 : SQL Server 2012부터는 문장을 구분하기 위해 세미콜론을 사용할 수도 있고 사용해야 할 수도 있습니다. SQL Server 2012 (즉, 다음 버전 이후) 이후에는 필수 항목입니다. 이제 GO를 사용하는 것은 SQL2012 이후의 작업을 수행하는 대신 사용되지 않는 방법입니다. ]

MySQL은/​​포스트 그레스 예 :

DELETE FROM DUMMYTABLE_A where X=${value}; 
DELETE FROM DUMMYTABLE_B where X=${value}; 
DELETE FROM DUMMYTABLE_C where X=${value}; 

MS-SQL 예 :도 TRAN/ROLLBACK TRAN COMMIT/TRAN을 BEGIN와의 거래를 지원

DELETE FROM DUMMYTABLE_A where X=${value} 
GO 
DELETE FROM DUMMYTABLE_B where X=${value} 
GO 
DELETE FROM DUMMYTABLE_C where X=${value} 

더 나은 데이터베이스 (즉,하지 MySQL을.) . 트랜잭션을 사용하면 실제로 모든 명령문을 하나의 원자 연산으로 일괄 처리 할 수 ​​있습니다.이 연산의 일부가 실패하면 모두 세 개가 롤백됩니다. 자세한 내용은 http://www.sqlteam.com/article/introduction-to-transactions을 참조하십시오.

대부분의 경우 SQL 문 사이의 세미콜론 만 있으면됩니다.

+1

나도 몰라하지만 내가 당신이 가진 두 문장을 분리하지 않는 것을 볼 수있는 다음 요점 https://gist.github.com/AdelinGhanaem/b565ca3a447e89087ab7를 부착하고 나를 위해 작동하지 않습니다 'query'with rollback ... – Adelin

+2

나는이 방법을 시도하고 myBatis는 예외를 던졌다. 문제는 JDBC URL에서 allowMultiQueries = true 플래그를 설정하지 않았다는 것입니다. 감사. –

+0

이것은 나를 위해뿐만 아니라 작동하지 않습니다, 나는 'in' 조건을 통해 데이터의 두 배치를 삭제하려고하지만, 나는 SQL 문법 오류가있어. –

16

저는 Oracle에서 myBatis를 사용하고 있습니다. 나는 다른 DB에서 비슷한 것을 추측한다. 실제로 DB에서 프로 시저를 생성 할 수 있습니다. 프로 시저를 지원해야 할 때 일반적으로 미래에 유용합니다.

<delete id="deleteUnfinishedData" parameterType="map"> 
    {call 
     declare 
     begin 
      delete from TABLE1 where id = #{valueFromMap1}; 
      delete from TABLE2 where id = #{valueFromMap2}; 
     end 
    } 
</delete> 
+1

오라클은이 주제의 특별한 동물입니다. 그 예를 보여 주셔서 감사합니다, 오늘 제가 필요로했던 것입니다. – Marc

+0

매력처럼 작동했습니다. 감사! –

+0

SQL Server에서는 어떻게 수정 될 수 있습니까? – SMKS

관련 문제