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.

È stato utile?

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.

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