2013-01-08 6 views
1

위대한 게시물에 따라 업서 트를 구현했습니다 : Insert, on duplicate update in PostgreSQL? 그리고이 스크립트는 psql과 잘 작동합니다. 그러나, 나는 테스트를 위해 사용하는 hsqldb에 같은 쿼리를 실행할 수 없습니다. 내 SQL은 다음과 같습니다 하이퍼 니스와 결합 된 업데이트 및 삽입 사용

UPDATE account set name = ?, email = ?, type = ?, regts = ?, dao_updated = ? WHERE id = ?; 
INSERT INTO account (id, name, email, type, regts, dao_created,dao_updated) SELECT ?,?,?,?,?,?,? WHERE NOT EXISTS (SELECT 1 FROM account WHERE id = ?); 

내가 오류 메시지가 얻을 :

Caused by: java.sql.SQLSyntaxErrorException: unexpected token: INSERT 
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source) 
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source) 

이 HSQLDB의 한계입니다 또는 내가 뭔가 잘못하고있는 중이 야?

덕분에 사전 레온

답변

0

HSQLDB이의 MERGE 문을 지원합니다

http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement

병합 문은 일반적으로 UPSERT 및 표준이 아닌 대안보다 더 강력하다.

또는 CREATE PROCEDURE를 사용하여 링크 된 답변에 제공된 PostgreSQL 예제와 유사한 절차를 정의 할 수 있습니다.

http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_conditional

당신은 업데이트가 성공 여부를 확인하기 위해 GET DIAGNOSTICS 문을 사용할 수 있습니다.

http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_diagnostics_state

+0

감사합니다,하지만 아이디어는 생산을위한 JUnit 테스트 및 psql를위한 HSQLDB를 사용하는, 그리고이 두 가지 방언 작동하지 않습니다 ;-) – Leon

0

에서 당신은 분명히 하나의 executeUpdate() 전화 내부에 여러 개의 문을 사용할 수 없습니다. 두 번 처음 UPDATE을하고 전화 주시기 바랍니다, 다음에 일을 INSERT