2

hsqldb と dbunit を使用して、Oracle でサポートされているデータベースをスポット テストしようとしていますが、問題が発生しました。

問題は、次の EJB-QL にあります (少し単純化されています)。

SELECT o 
FROM Offer o 
WHERE :nowTime 
  BETWEEN o.startDate AND o.startDate + 7

これは、Oracle のバージョンの SQL でのみ機能するようです。

これを hsqldb と oracle の両方で動作するように変換する最も簡単な方法は何ですか? 引数の間の 2 つを名前付きパラメーターに変更するのは非常に難しいリファクタリングであると仮定します。

o.開始日 + 7


編集:さらに調査を行った後、Oracleは上記のスニペットを次のように変換するようです

o.startdate + INTERVAL '7' 日
これは明らかにより標準的ですが、HSQLDB では機能しません。

4

3 に答える 3

4

HSQLDB 2.0 (2010 年にリリース) は構文をサポートしています。

SELECT o 
FROM Offer o 
WHERE nowTime 
  BETWEEN o.startDate AND o.startDate + 7 DAY

また、サポートしています

o.startdate + INTERVAL '7' DAY

アップデート:

HSQLDB 2.2 以降に導入された ORA 互換モードでは、式o.startDate + 7もサポートされています。

于 2010-12-16T20:17:35.283 に答える
1

あなたの方法論は正しいようです。何に困っているのかわからない。これは、以下のスクリプトを使用して Oracle および HSQLDB で機能しています。

CREATE TABLE OFFER (ID INTEGER, STARTDATE DATE);
INSERT INTO OFFER (ID, STARTDATE) VALUES (1, DATE '2009-01-01');
SELECT ID, STARTDATE, STARTDATE + INTERVAL '7' DAY FROM OFFER;

どちらの環境でも、1 月 1 日と 8 日を示す結果が得られます。

于 2009-12-21T20:01:56.007 に答える
0

日付操作のための HSQLDB 構文は、Oracle とはかなり異なります。最善の方法は、HSQLDB 関数/プロシージャの動作をシミュレートするストアド プロシージャを Oracle DB に記述することです。

于 2009-12-19T17:59:02.193 に答える