Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА:

работа с пользовательскими переменными 12 года 9 мес. назад #1749

  • Nad
  • Nad аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Здравствуйте!

В mysql есть возможность использовать пользовательские переменные в запросах, что позволяет оптимизировать определенные вычисления.

например - есть таблица pogoda с двумя полями - t и d, t - это временная метка, а d - это результат измерения погоды. Требуется найти максимальный перепад.

Срабатывает следующая конструкция:

Код:
SET @data=NULL, @next_data=NULL, @max_value=0;

SELECT @next_data:=`d` `nextdata`,IF (@next_data - @data>@max_value, @max_value:=@next_data-@data, @max_value), @data:=d FROM `pogoda`;

SELECT @max_value;

Суть в том, что на n-й строке мы знаем значение d на (n-1)-й строке, и можем вычислить разницу за один проход.

Вопрос: можно ли такую же конструкцию выполнить на oracle? Без хранимых процедур, именно вот так, по ходу выполнения запроса. Если можно, то приведите пожалуйста текст запроса.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Nad.

Re: работа с пользовательскими переменными 12 года 9 мес. назад #1752

Попробуйте так:
WITH pogoda AS
(SELECT TO_DATE('01.01.2011','dd.mm.yyyy') t, 1 d FROM dual UNION ALL
SELECT TO_DATE('02.01.2011','dd.mm.yyyy') t, 5 d FROM dual UNION ALL
SELECT TO_DATE('03.01.2011','dd.mm.yyyy') t, 15 d FROM dual UNION ALL
SELECT TO_DATE('04.01.2011','dd.mm.yyyy') t, 17 d FROM dual)
SELECT MAX(difference)
FROM(SELECT d-LAG(d) OVER (ORDER BY t) difference
FROM pogoda)

если задача вычислить максимальную разницу, а не воспользоваться переменными

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: работа с пользовательскими переменными 12 года 9 мес. назад #1759

  • Nad
  • Nad аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Спасибо за ответ.

А если в табличке будет много записей? Например, несколько тысяч?

а с переменными можно как-нибудь? Мне необходимо воспользоваться именно ими.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: работа с пользовательскими переменными 12 года 9 мес. назад #1781

Конструкция WITH - это некоторый аналог временной таблицы и в тест-кейсах часто используется для моделирования реальной таблицы. Т.е. в твоем случае часть до SELECT MAX() будет отсутствовать.
надо отвыкать от MS SQL, у них с Oracle достаточно много отличий.
В частности, в классическом SQL никаких переменных нет, это относится к процедурному расширению. При этом в MS SQL процедурное расширение выполнено за одно целое с SQL, а в Oracle SQL и PL/SQL - это 2 разные машины

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: работа с пользовательскими переменными 12 года 9 мес. назад #1785

  • Nad
  • Nad аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Спасибо за ответ!

Скажите - в запросе (как я приводил для MySQL) без процедурки на PL/SQL нельзя использовать пользовательские переменные?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: работа с пользовательскими переменными 12 года 9 мес. назад #1786

Существуют в PL/SQL тексте, а так же есть еще переменные SQLPLUS они работеют в SQL но только в программе SQLPLUS.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.206 секунд