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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация хранимой процедуры 
:(
    Опции темы
JohnnyQ
Дата 27.11.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть рабочая процедура, в которой используется цикл while. Все работает, но в универе потребовали изменить  while на  for select  first 3 , но что-то я никак не пойму как оно работает... может кто спец и поможет с этим. Наверняка все очень легко делается, но мне не допереть... smile 

Код


CREATE PROCEDURE SIX_PROC (
    fname varchar(20),
    lname varchar(20),
    sname varchar(20))
returns (
    status varchar(30))
as
declare variable min_chet integer;
declare variable n_chet integer;
declare variable i integer;
declare variable op varchar(30);
declare variable id integer;
begin
i=0;
op='обнуление счета';
 /*n_chet_tmp =0;  */
 select ID_CLIENTS
from  CLIENTS
where  F_NAME=:fname and  L_NAME=:lname and S_NAME=:sname
INTO  :id ;
 WHILE (i<3) DO
BEGIN 
select min(MONEY)
from  CHETA
where  CHETA.money >0 and  CHETA.id_clients=:id
INTO :min_chet ;
select N_CHETA
from  CHETA
where  CHETA.money =:min_chet and  CHETA.id_clients=:id
INTO  :n_chet ;
  UPDATE CHETA
SET MONEY = 0
WHERE MONEY = :min_chet and  CHETA.id_clients=:id;
i=i+1;
  if(:min_chet>0) then
   BEGIN
 INSERT INTO CHET_OPER ( N_CHET, OPERATIONS, MONEY, OP_DATE )
  VALUES( :n_chet, :op, 0, cast('now'  as  DATE) )  ;
  END
END

 status='обнуление счетов завершено';
  suspend;

end

PM MAIL   Вверх
JohnnyQ
Дата 1.12.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



все, я сам сделал...все очень легко... smile 
Код

CREATE PROCEDURE SIX_PROC (
    fname varchar(20),
    lname varchar(20),
    sname varchar(20))
returns (
    status varchar(30))
as
declare variable min_chet integer;
declare variable n_chet integer;
declare variable i integer;
declare variable op varchar(30);
declare variable id integer;
begin
i=0;
op='обнуление счета';
 /*n_chet_tmp =0;  */
 select ID_CLIENTS
from  CLIENTS
where  F_NAME=:fname and  L_NAME=:lname and S_NAME=:sname
INTO  :id ;
 for
 select first 3 MONEY
 from  CHETA
 where  CHETA.money >0 and  CHETA.id_clients=:id
 order by money
 INTO :min_chet
 DO
BEGIN 
select N_CHETA
from  CHETA
where  CHETA.money =:min_chet and  CHETA.id_clients=:id
INTO  :n_chet ;
  UPDATE CHETA
SET MONEY = 0
WHERE MONEY = :min_chet and  CHETA.id_clients=:id;
  /*if(:min_chet>0) then
   BEGIN  */
 INSERT INTO CHET_OPER ( N_CHET, OPERATIONS, MONEY, OP_DATE )
  VALUES( :n_chet, :op, 0, cast('now'  as  DATE) )  ;
  /*END */
END

 status='обнуление счетов завершено';
  suspend;

end

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

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

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

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

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

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

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


 




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


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

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