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' DAY
che è apparentemente più standard, ma non funziona in HSQLDB.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top