SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 22.06.2011 14:13:35

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

работа с курсором в ХП

Доброго времени суток, коллеги!

Подскажите пожалуйста, куда мне копнуть, уже и не соображу sad.

CREATE TABLE `npogoda` (
  `t` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `d` bigint(10) DEFAULT NULL
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;


mysql> select * from npogoda;
+----+------+
| t  | d    |
+----+------+
|  1 |   59 |
|  2 |    3 |
|  3 |    0 |
|  4 |   20 |
|  5 |   78 |
|  6 |   56 |
|  7 |   36 |
|  8 |   28 |
|  9 |   17 |
| 10 |   76 |
+----+------+
10 rows in set (0.00 sec)

Есть хранимая процедура:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`deadka`@`%` PROCEDURE `proc_npogoda`(OUT p_out INT)
BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE t INT;
    DECLARE cur CURSOR FOR SELECT t FROM npogoda;
   
    OPEN cur;
    FETCH cur INTO t;
    set @max_diff = t;
    SET p_out = t;
    CLOSE cur;
END


Хочу для начала получить первое значение t в переменную, идущую формальным параметром и в "глобальную переменную".

Но в переменные пишутся NULL.

mysql> set @max_diff = 0,@m = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> call proc_npogoda(@m);
Query OK, 0 rows affected (0.00 sec)

mysql> select @m,@max_diff;
+------+-----------+
| @m   | @max_diff |
+------+-----------+
| NULL |      NULL |
+------+-----------+
1 row in set (0.00 sec)


В то же время, если в переменные @max_diff и p_out записывать не значение t, а просто константы численные, то они благополучно присваиваются. А вот значение t не хочет фетчиться sad.

Отредактированно deadka (22.06.2011 14:53:48)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#2 22.06.2011 16:37:48

devart
ISV
MySQL Enterprise Gold Partner
Откуда: www.devart.com
Зарегистрирован: 12.04.2010
Сообщений: 22

Re: работа с курсором в ХП

Причина в имени колонки и переменной, они не должны совпадать, попробуйте так:

DECLARE done INT DEFAULT 0;
DECLARE var1 INT;
DECLARE cur CURSOR FOR SELECT t FROM npogoda;
   
OPEN cur;
FETCH cur INTO var1;
set @max_diff = var1;
SET p_out = var1;
CLOSE cur;

Отредактированно devart (22.06.2011 16:38:38)

Неактивен

 

#3 22.06.2011 19:01:54

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: работа с курсором в ХП

devart, спасибо большое!, вопрос снят.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

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