I am trying to use HSQLDB as an embedded database in a spring application (for testing). As the target production database is Oracle, I would like to use HSQLDBs Oracle syntax mode feature.
In the Spring config I use
<jdbc:embedded-database type="HSQL" id="dataSource"> </jdbc:embedded-database> <jdbc:initialize-database data-source="dataSource" enabled="true"> <jdbc:script location="classpath:schema.sql"/> </jdbc:initialize-database>
And in schema.sql at the top I wrote:
SET DATABASE SQL SYNTAX ORA TRUE;
However, when running my test, I get the following error:
java.sql.SQLException: Unexpected token: DATABASE in statement [SET DATABASE SQL SYNTAX ORA TRUE]
Is this a syntax error or a permissions error or something entirely different?
Thanks - also for any pointers that might lead to the answer.
Given that HSQL is the Spring default for jdbc:embedded-database and given the target is Oracle, this scenario should actually be very common. However, I found nothing on the Web even touching the issue.
Update:
The issue above is resolved thanks to answer #1.
However, I now get another exception:
org.springframework.dao.DataAccessResourceFailureException: Failed to populate database; nested exception is java.sql.SQLException: java.lang.RuntimeException: unsupported internal operation: StatementCommand unsupported internal operation: StatementCommand
Any idea what this is caused by?
Even if it only change some basic syntax here is an example of how you can do it:
This option was introduced with HSQLDB 2.0.
Are you sure you are using the correct version?
Maybe you have 1.8 still in the classpath somewhere.
But that won't get you far in terms of testing anyway, because this only turns on some basic syntax "replacing", there is no real behaviour change involved here (and I'm not even talking about more advanced Oracle features like analytical functions, CONNECT BY or something similar).
It is very seldom a good idea to test your application with a DBMS that will not be used in production. It is simply not a valid test.
The
sql.syntax_ora=true
URL property enables syntax compatibility, including the NUMBER type and the DUAL table. Additional properties can be used for more behavior compatibility. These are documented in the HSQLDB Guide:http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_oracle