Conversione Oracle aritmetica delle date di lavorare in HSQLDB
Domanda
Sto cercando di spot-test di un database Oracle sostenuto con HSQLDB e DBUnit, ma ho incontrato un intoppo.
Il problema è con il seguente EJB-QL (semplificato un po '):
SELECT o
FROM Offer o
WHERE :nowTime
BETWEEN o.startDate AND o.startDate + 7
Questo sembra funzionare solo nella versione di Oracle di SQL.
Qual è il modo più semplice per me, per convertire questo per lavorare sia hsqldb e Oracle? Si supponga che cambiando i due tra gli argomenti di parametri denominati è un refactoring molto difficile, quindi ho intenzione di favorire le risposte che fornisce un analogo più standardizzato per
o.startdate + 7
EDIT: Dopo aver fatto qualche ricerca, sembra che Oracle converte il frammento di codice qui sopra per
o.startdate + INTERVAL '7' DAYche è apparentemente più standard, ma non funziona in HSQLDB.
Soluzione
HSQLDB 2.0 (uscito nel 2010) supporta la sintassi.
SELECT o
FROM Offer o
WHERE nowTime
BETWEEN o.startDate AND o.startDate + 7 DAY
E 'offrano il supporto anche
o.startdate + INTERVAL '7' DAY
Aggiornamento:
In modalità compatibilità ORA introdotto dal HSQLDB 2.2, è supportato anche il o.startDate + 7
espressione.
Altri suggerimenti
Il metodo sembra corretto. Non so che cosa hai problemi con. Questo è il lavoro in Oracle e HSQLDB utilizzando lo script di seguito:
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;
In entrambi gli ambienti ottengo i risultati che mostra il primo e l'ottavo di gennaio.
La sintassi HSQLDB per la manipolazione data è molto diverso da Oracle. La vostra migliore possibilità è quella di scrivere una stored procedure in Oracle DB che simula il comportamento dei HSQLDB funzioni / procedure.