Руководство по различиям между SQL Server и Oracle - переменные - PullRequest
0 голосов
/ 23 мая 2018

Допустим, я хочу взять текущее время, вычесть из него 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 этого не делать?

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете использовать SELECT..INTO в этом случае:

DECLARE
  a timestamp;
BEGIN
  SELECT systimestamp(3) - interval '1' hour
    INTO a
    FROM dual;
END;

или вы можете просто присвоить переменной:

DECLARE
  a timestamp;
BEGIN
  a := systimestamp(3) - interval '1' hour;
END;

Best of luck.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...