SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.04.2010 10:49:07

Наталья
Участник
Зарегистрирован: 23.03.2010
Сообщений: 12

Курсоры

DELIMITER $$
CREATE PROCEDURE OBOROT_SO (In NumTmc    decimal(11),    /* ном.номер*/
                                In Price        float,        /* учет.цена*/   
                    In    Uperiod    int)        /* учет.период*/     

BEGIN
   DECLARE is_end INT Default 0;
   /* Объявляем курсор */
   DECLARE cur1 CURSOR FOR SELECT * FROM TMP_table1;   
   
/*Объявляем обработчик для ситуации, когда курсор достигает конца результирующей таблицы*/
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_end = 1;
/* 1 */
/* Создание временной таблицы1*/
/* В нее добавляем все приходы*/
CREATE TEMPORARY TABLE TMP_table1 ( DatD     int,    /* месяц прихода */
                                                   Kol     float,    /* количество */
                                    KolMes    smallint/* срок использования в мес.*/  );
/* 2 */
/* ДОБАВЛЕНИЕ ДАННЫХ из документов - требования(вед-ть выдачи хоз.инв.) */
INSERT INTO TMP_table1 VALUES (DatD,Kol,KolMes);
   
SELECT DOKUM.DATD,SUM(DOKUMS.KOL),DOKUMS.SROK
    FROM  DOKUMS LEFT OUTER JOIN DOKUM ON DOKUMS.UN = DOKUM.UN
    WHERE DOKUM.VID_DOK = 17 AND DOKUMS.SROK > 12 AND DOKUMS.NUM_TMC       =               NumTmc AND DOKUM.DATD>=73783
    GROUP BY DOKUM.DATD,DOKUMS.SROK
    ORDER BY DOKUM.DATD;

   /* 3 */
/* Заполнение таблицы приходов/расходов     */
/* от мин.даты прихода до текущего месяца    */
   SELECT @DatMin = MIN(DatD) FROM TMP_table1 ;
   WHILE @DatMin <= Uperiod Do 
       INSERT INTO TMP_table2 VALUES (DatD,Prixod,Rasxod);
       SELECT @DatMin,0.00,0.00;
        SELECT @DatMin = DATEDIFF('1800-12-28', ADDDATE(ADDDATE('1800-12-28',         Interval 5  day), INTERVAL 1 month));   
   END WHILE;

   /* 4 */
/* Для каждой строки прихода считаем приходы и расходы и прибавляем к месяцам */
   
  OPEN CUR1;
  LOOP
     FETCH CUR1 INTO Datd1,Kol1,KolMes1;
     If is_end  Then   
           LEAVE;
     else     
        ...............
     End If;
  End Loop;     
end$$


Не дает досрочный выход из цикла Loop. Показывает ошибку. Подскажите в чем проблема???

Неактивен

 

#2 13.04.2010 12:29:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Курсоры

А какую ошибку то пишет?

Неактивен

 

#3 13.04.2010 14:30:24

Наталья
Участник
Зарегистрирован: 23.03.2010
Сообщений: 12

Re: Курсоры

Вот эту:


Прикрепленные файлы:
Attachment Icon Ошибка.bmp, Размер: 731,574 байт, Скачано: 772

Неактивен

 

#4 13.04.2010 16:56:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Курсоры

У вас LEAVE без указания метки.

См пример в http://sqlinfo.ru/forum/viewtopic.php?id=1041

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson