Oracle 데이터베이스 용 MyBatis DAO 계층에 대한 테스트를 작성 중이며 배치 삽입 작업에 문제가 있습니다. 오라클 문 INSERT ALL
로 구현되어 실제 데이터베이스에 대해H2 데이터베이스는 Oracle 'Insert All'문과 호환됩니까?
<insert id="batchInsertElements" parameterType="java.util.List" useGeneratedKeys="false">
INSERT ALL
<foreach collection="list" item="element">
INTO table1
(
col1, col2, col3, col4
)
VALUES
(
#{element.col1},
(select nvl(c.ID, -1) from table2 c where c.name = #{element.col2}),
#{element.col3},
#{element.col4}
)
</foreach>
SELECT 1 FROM DUAL
</insert>
, 그것은 오류없이 노력하고 있습니다. 테스트를 위해 H2 데이터베이스와 spring-dbunit을 사용하고 있습니다. 테스트 데이터베이스의 구성 : 저는 SQL 구문 오류를 받고 있어요 일괄 삽입에 대한 테스트 동안
<bean id="testDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;MODE=Oracle" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
:
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "INSERT ALL[*]
INTO TABLE1
(
COL1, COL2, COL3, COL4
)
VALUES
(
?,
(SELECT NVL(C.ID, -1) FROM TABLE2 C WHERE C.NAME = ?),
?,
?
)
SELECT 1 FROM DUAL "; expected "INTO";
[42001-193]; bad SQL grammar [];
내가 INSERT ALL
문 H2 데이터베이스에서 지원하지 않는 것으로 의심하고있다. 그렇지? 해결 방법은 없습니까? HSQLDB가 Oracle DAO 테스트에 더 적합 할 수 있습니까?
감사합니다. 지원되는 작업 목록은 어디에서 찾을 수 있습니까? – sphinks
각각의 일반 문서에서. 다음은 H2 SQL 문법 [sql-grammer] (http://h2database.com/html/grammar.html)에 대한 링크입니다. 다음은 HSQLDB [sql-index] (http://www.hsqldb.org/doc/guide/sql-ind.html)에 대한 SQL 색인 부록입니다. –