このステートメントは、SQLDeveloper (Oracle DB) で実行されると完全に機能します。
select id,name,street,post_code,town,phone_number,web_site,email,short_description,
description, latitude,longitude,external_id,facebook_page_id
FROM poi WHERE ( 6371 * acos( cos( radians( 5 ) ) * cos( radians( latitude ) ) * cos(
radians( longitude ) - radians( 3 ) ) + sin( radians( 5 ) ) * sin( radians( latitude ) ) ) ) <= 1000000 ;
Javaクエリを介して実行した場合:
if (requestedDistance) {
String raw = "SELECT
id,name,street,post_code,town,phone_number,web_site,email,short_description, description,
latitude,longitude,external_id,facebook_page_id"
+ " FROM poi WHERE ( 6371 * acos( cos( radians( "
+ posLatitude.toString()
+ " ) ) * cos("
+ " radians( latitude ) ) * cos( radians( longitude ) -"
+ " radians( "
+ posLongitude.toString()
+ " ) ) + sin( radians( "
+ posLatitude.toString()
+ " ) ) * sin( radians( latitude"
+ " ) ) ) ) <= "
+ thresholdDistance.toString() + " ;";
次の例外がログに表示されます。
at java.lang.Thread.run(Thread.java:679) Caused by: javax.persistence.PersistenceException: Query threw
SQLException:ORA-00920: 無効な関係演算子バインド値:[] クエリ: select id,name,street,post_code,town,phone_number,web_site,email,short_description, description, latitude,longitude,external_id,facebook_page_id FROM poi WHERE ( 6371 * acos( cos( ラジアン( 5 ) ) * cos( ラジアン( 緯度) ) * cos( ラジアン( 経度) - ラジアン( 3 ) ) + sin( ラジアン( 5 ) ) * sin( ラジアン( 緯度) ) ) ) < = 1000000 ;
at com.avaje.ebeaninternal.server.query.CQuery.createPersistenceException(CQuery.java:834) at com.avaje.ebeaninternal.server.query.CQuery.createPersistenceException(CQuery.java:814) at com.avaje.ebeaninternal.server.query.CQueryEngine.findMany(CQueryEngine.java:229) at com.avaje.ebeaninternal.server.query.DefaultOrmQueryEngine.findMany(DefaultOrmQueryEngine.java:96) at com.avaje.ebeaninternal.server.core.OrmQueryRequest.findList(OrmQueryRequest.java:291) at com.avaje.ebeaninternal.server.core.DefaultServer.findList(DefaultServer.java:1521) at com.avaje.ebeaninternal.server.querydefn.DefaultOrmQuery.findList(DefaultOrmQuery.java:902) at com.infonova.experimedia.services.ServiceController.getPois(ServiceController.java:113) ... 34 more Caused by: java.sql.SQLSyntaxErrorException: ORA-00920: invalid relational operator at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207) at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884) at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493) at com.sun.gjc.spi.jdbc40.PreparedStatementWrapper40.executeQuery(PreparedStatementWrapper40.java:642) at com.avaje.ebeaninternal.server.query.CQuery.prepareBindExecuteQuery(CQuery.java:401) at com.avaje.ebeaninternal.server.query.CQueryEngine.findMany(CQueryEngine.java:193) ... 39 more
|#]
ログファイルからステートメントをコピーして sqldeveloper で再度実行すると、有効な出力が返されます。
いつも助けてくれてありがとう!
ニコ