Oracle SQL: usando variabili bind per le date
Domanda
Ecco una semplice query di lavoro senza le variabili di bind:
select * from table1 where time_stamp > sysdate - INTERVAL '1' day;
dove time_stamp
è di tipo DATE
.
I dovrebbe essere in grado di inserire qualsiasi numero di giorni nella query sopra utilizzando variabili bind.
Così ho provato quanto segue e non sembra al lavoro:
select * from table1 where time_stamp > sysdate - INTERVAL :days day;
Ho provato inserendo l'input numerico sia come 10 e '10', per es. Si ottiene ORA-00933 di errore sul 10g.
Soluzione
Il INTERVAL '1' day
stringa della query originale è un letterale intervallo, cioè esso è valutata dal parser ad un singolo valore. Non è possibile sostituire una parte di esso con una variabile bind.
Se si utilizza invece NUMTODSINTERVAL( 1, 'DAY' )
, poi 1 è un letterale intero che si dovrebbe essere in grado di sostituire con una variabile bind.