Допустим, я хочу взять текущее время, вычесть из него 1 час и запросить таблицу с этим временем.
В SQL Server я бы сделал следующее:
DECLARE @a datetime = DATEADD(hour, -1, GETDATE())
--I can then return for troubleshooting via
SELECT @a
--And use in a select query via
SELECT * FROM Table t WHERE(t.datetime >= @a)
В Oracle я могу сделать следующее:
--Subtract 1 hour from now
SELECT systimestamp(3) - interval '1' hour FROM dual;
--But when I try to use the following it doesn't work
DECLARE a timestamp := (SELECT systimestamp(3) - interval '1' hour FROM dual);
BEGIN
SELECT :a FROM dual;
END;
--Also, I've tried this
variable a timestamp := (SELECT systimestamp(3) - interval '1' hour FROM dual);
SELECT :a from dual;
--And, this...
DECLARE a timestamp;
BEGIN
SELECT (systimestamp(3) - interval '1' hour) INTO a FROM dual
SELECT :a FROM dual;
END;
--And, lastly this...
def a timestamp := (SELECT systimestamp(3) - interval '1' hour FROM dual);
SELECT :a FROM dual;
SELECT &a FROM dual;
--My goal
var a timestamp := (SELECT systimestamp(3) - interval '1' hour FROM dual);
SELECT * FROM table t WHERE(t.datetime >= &a);
--Also have the ability to test the calculated variable for troubleshooting via
SELECT &a FROM dual;
Приведенный выше пример не обязательно является тем, что я хочу вычислить, а просто примером.
Я не хочу вводить вручнуюНа входе я хочу вычислить переменную, которая будет использоваться внутри запроса.Может ли Oracle этого не делать?