Модераторы: Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Имя таблицы входящим параметром, Передача в проц имени табл вход парам 
V
    Опции темы
Alkor135
Дата 29.5.2009, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(Akella @ 29.5.2009,  21:46)
Цитата(Alkor135 @  29.5.2009,  12:42 Найти цитируемый пост)
А может это ограничения персональной версии. 

Первый раз слышу про персональную версию.
Скачай полную
http://forum.vingrad.ru/index.php?showtopi...t&p=1866918

Да вроде у меня официальная версия.
user posted image

А вот эти функции не работают:
user posted image

Говорит:
user posted image

А если другую версию качать по ссылке, то файл называется setup_trial.exe  ?
PM MAIL   Вверх
Akella
Дата 30.5.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Alkor135 @  29.5.2009,  23:56 Найти цитируемый пост)
А если другую версию качать по ссылке, то файл называется setup_trial.exe  ? 

Да.
PM MAIL   Вверх
Alkor135
Дата 30.5.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.4.2009

Репутация: нет
Всего: нет



Цитата(Akella @ 30.5.2009,  00:20)
Цитата(Alkor135 @  29.5.2009,  23:56 Найти цитируемый пост)
А если другую версию качать по ссылке, то файл называется setup_trial.exe  ? 

Да.

Ой спасибо, Akella!

Теперь у меня время выполнения показывает.
 Сравнил я скорости выполнения запросов с min и без него.
Я оказался прав. Без использования min запрос обрабатывается быстрее.

Без min:
user posted image

C использованием min:
user posted image

Вот код процедуры без использования min:
Код

egin
/******************************************************************************/
/*                 Расчет AUDCAD для таблицы ранжирования                     */
/******************************************************************************/
  p_pair = 'AUDCAD';

  /* Если даты не существует, то берем следующую дату (в цикле) */
  while (NOT exists (SELECT da FROM audcad WHERE da = :p_input_date_min))  do
    p_input_date_min = p_input_date_min + 1;
  /* Если время нужной даты не существует, то берем следующее время (в цикле) */
  p_ti_min = '00:00';
  while (NOT exists (SELECT ti FROM audcad WHERE (da = :p_input_date_min) and ti = :p_ti_min))  do
    p_ti_min = p_ti_min + 1;

  /* Если даты не существует, то берем предыдущую дату (в цикле) */
  while (NOT exists (SELECT da FROM audcad WHERE da = :p_input_date_max))  do
    p_input_date_max = p_input_date_max - 1;
  /* Если время нужной даты не существует, то берем предыдущее время (в цикле) */
  p_ti_max = '23:59';
  while (NOT exists (SELECT ti FROM audcad WHERE (da = :p_input_date_max) and ti = :p_ti_max))  do
    p_ti_max = p_ti_max - 1;

  SELECT da, ti, op
  FROM audcad
  WHERE (da = :p_input_date_min and ti = :p_ti_min)
  INTO p_da_min, p_ti_min, p_op;

  SELECT da, ti, cl
  FROM audcad
  WHERE (da = :p_input_date_max and ti = :p_ti_max)
  INTO p_da_max, p_ti_max, p_cl;

  /* Разница в пунктах */
  p_point = (p_op - p_cl)* 100000;

  /* Разница в пунктах по модулю */
  if (p_point<0) THEN
    p_point_mod = p_point*(-1);
    else p_point_mod = p_point;

  suspend;
end


Вот код процедуры с использованием min:
Код

begin
/******************************************************************************/
/*                 Расчет AUDCAD для таблицы ранжирования                     */
/******************************************************************************/
  p_pair = 'AUDCAD';

  /* Если даты не существует, то берем следующую дату (в цикле) */
  SELECT min(da) FROM audcad WHERE da >= :p_input_date_min into :p_input_date_min;
  /* Если время нужной даты не существует, то берем следующее время (в цикле) */
  p_ti_min = '00:00';
  while (NOT exists (SELECT ti FROM audcad WHERE (da = :p_input_date_min) and ti = :p_ti_min))  do
    p_ti_min = p_ti_min + 1;

  /* Если даты не существует, то берем предыдущую дату (в цикле) */
  while (NOT exists (SELECT da FROM audcad WHERE da = :p_input_date_max))  do
    p_input_date_max = p_input_date_max - 1;
  /* Если время нужной даты не существует, то берем предыдущее время (в цикле) */
  p_ti_max = '23:59';
  while (NOT exists (SELECT ti FROM audcad WHERE (da = :p_input_date_max) and ti = :p_ti_max))  do
    p_ti_max = p_ti_max - 1;

  SELECT da, ti, op
  FROM audcad
  WHERE (da = :p_input_date_min and ti = :p_ti_min)
  INTO p_da_min, p_ti_min, p_op;

  SELECT da, ti, cl
  FROM audcad
  WHERE (da = :p_input_date_max and ti = :p_ti_max)
  INTO p_da_max, p_ti_max, p_cl;

  /* Разница в пунктах */
  p_point = (p_op - p_cl)* 100000;

  /* Разница в пунктах по модулю */
  if (p_point<0) THEN
    p_point_mod = p_point*(-1);
    else p_point_mod = p_point;

  suspend;
end


Может конечно, я что-то сделал необъективно. Предлагаайте проведу еще тест, чтобы выяснить действительно ли использование min и max увеличивает время исполнения запроса.
PM MAIL   Вверх
Deniz
Дата 1.6.2009, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Alkor135попробуй во 2 процедуре все перевести на min/max
Код
begin
/******************************************************************************/
/*                 Расчет AUDCAD для таблицы ранжирования                     */
/******************************************************************************/
  p_pair = 'AUDCAD';
  /* Если даты не существует, то берем следующую дату (в цикле) */
  SELECT min(da) FROM audcad WHERE da >= :p_input_date_min into :p_input_date_min;
  /* Если время нужной даты не существует, то берем следующее время (в цикле) */
  p_ti_min = '00:00';
  SELECT min(ti) FROM audcad WHERE da = :p_input_date_min into :p_ti_min;

  /* Если даты не существует, то берем предыдущую дату (в цикле) */
  SELECT max(da) FROM audcad WHERE da <= :p_input_date_max into :p_input_date_max;
  /* Если время нужной даты не существует, то берем предыдущее время (в цикле) */
  p_ti_max = '23:59';
  SELECT max(ti) FROM audcad WHERE da = :p_input_date_max into :p_ti_max;

  SELECT da, ti, op
  FROM audcad
  WHERE (da = :p_input_date_min and ti = :p_ti_min)
  INTO p_da_min, p_ti_min, p_op;
  SELECT da, ti, cl
  FROM audcad
  WHERE (da = :p_input_date_max and ti = :p_ti_max)
  INTO p_da_max, p_ti_max, p_cl;
  /* Разница в пунктах */
  p_point = (p_op - p_cl)* 100000;
  /* Разница в пунктах по модулю */
  if (p_point<0) THEN
    p_point_mod = p_point*(-1);
    else p_point_mod = p_point;
  suspend;
end
запусти обе процедуры по несколько раз.
И покажи какие индексы есть на таблицу audcad.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.