Могу ли я объявить переменную ПОСЛЕ выбора в Oracle SQL? - PullRequest
0 голосов
/ 28 декабря 2018

Я использую проприетарный редактор запросов ASPX, который заставляет меня запускать каждый запрос с помощью SELECT.Это не позволит мне отправить какой-либо код в базу данных, где первое слово - это что-то отличное от SELECT.

Так что мне любопытно, есть ли способ объявить и установить переменные в запросе выбора ПОСЛЕ оператора SELECT?

declare @var datetime
set @var = (select sysdate from dual)
select @var from dual

Ошибка приложения: «SQLQuery должен начинаться с« SELECT »'keyword. "

Для ясности, это ошибка интерфейса приложения, а не ошибка Oracle.

РЕДАКТИРОВАТЬ: приведенный выше фрагмент кода не является PL / SQL (я нене думаю) но я использовал это, чтобы показать ошибку.

1 Ответ

0 голосов
/ 28 декабря 2018

Вы можете определить свои переменные во вложенном CTE:

select * from (
  -- CTE to define variables (sort of)
  with cte (some_date) as (
    select date '2018-12-31' from dual
  )
  -- your real query that joins to the CTE and used cte.some_date
  select d.*
  from cte
  cross join dual d
  where sysdate < cte.some_date
);

или, проще, во встроенном представлении:

select d.*
from (
  select date '2018-12-31' as some_date from dual
) t
cross join dual d
where sysdate < t.some_date;

В любом случае, cte или tэто таблица из одной строки, поэтому перекрестное соединение делает ее столбцы видимыми, но не умножает количество строк в конечном наборе результатов (точнее, только умножает его на 1, что одно и то же).

Вопрос о том, принимает ли ваш «клиент» ту или иную форму, это другой вопрос ...

...