SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 25.10.2011 09:19:39

toha82
Участник
Зарегистрирован: 25.10.2011
Сообщений: 4

Процедуры не меняют данные в таблице

Здравствуйте!
Подскажите, пожалуйста, что не так
Я создал процедуры на вставку и обновление данных в таблице. При их вызове ничего не происходит, а если в ручную вбивать тот же insert и update то все нормально меняется.

Вот пример таблицы и процедуры на обновление строчки:

CREATE TABLE `table_trade` (
    `Number_Row` BIGINT(20) NOT NULL AUTO_INCREMENT,
    `date_trade` DATE NOT NULL,
    `time_open` TIME NULL DEFAULT NULL,
    `time_close` TIME NULL DEFAULT NULL,
    `order_type` TINYINT(50) NULL DEFAULT NULL,
    `order_num` INT(11) NULL DEFAULT NULL,
    `open_price` INT(11) NULL DEFAULT NULL,
    `close_price` INT(11) NULL DEFAULT NULL,
    `result` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`Number_Row`),
    INDEX `Ind` (`date_trade`, `result`)
)
COMMENT='Base of Trades'
COLLATE='cp1251_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=5;


Процедура обновления строки под номером Number_Row:
CREATE DEFINER=`root`@`localhost` PROCEDURE `ClosePos`(IN `NumRow` BIGINT, IN `PriceClose` INT)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT 'Close Position'
BEGIN
  SELECT order_type INTO @TypeOrder FROM table_trade WHERE Number_Row = @NumRow;
  SELECT open_price INTO @PriceOpen FROM table_trade WHERE Number_Row = @NumRow;
  SELECT order_num INTO @OrderNum FROM table_trade WHERE Number_Row = @NumRow;
  IF (@TypeOrder = 1)
   THEN SET @ResultTrade = (@PriceClose - @PriceOpen)*@OrderNum;
   ELSE SET @ResultTrade = (@PriceOpen - @PriceClose)*@OrderNum;
  END IF;
  UPDATE `tradebase`.`table_trade` SET `time_close` = CURTIME(), `close_price` = @PriceClose, `result` = @ResultTrade
    WHERE Number_Row = @NumRow;
END


Скажем в строке 3 стоят некоторые данные, вызываю процедуру:
CALL ClosePos(4, 199800);


В результате никаких ошибок, ничего нет. Полный ноль.
CALL ClosePos(3,199500);
/* 0 rows affected, 0 rows found. Duration for 1 query: 0,000 sec. */


Команда выполняется от имени root с полными правами.

В чем я не догоняю?

Неактивен

 

#2 25.10.2011 11:18:16

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

Re: Процедуры не меняют данные в таблице

А Вы на предупреждения смотрите?

Код:

root tradebase > CALL ClosePos(4, 199800);;
Query OK, 0 rows affected, 3 warnings (0.00 sec)

root tradebase > show warnings;;
+---------+------+-----------------------------------------------------+
| Level   | Code | Message                                             |
+---------+------+-----------------------------------------------------+
| Warning | 1329 | No data - zero rows fetched, selected, or processed |
| Warning | 1329 | No data - zero rows fetched, selected, or processed |
| Warning | 1329 | No data - zero rows fetched, selected, or processed |
+---------+------+-----------------------------------------------------+
3 rows in set (0.00 sec)

Ну и надо понимать, что NumRow ≠ @NumRow.

Неактивен

 

#3 25.10.2011 11:26:18

toha82
Участник
Зарегистрирован: 25.10.2011
Сообщений: 4

Re: Процедуры не меняют данные в таблице

да с NumRow понял что это другая переменная smile


call ClosePos(3,125800);
/* 0 rows affected, 0 rows found. Duration for 1 query: 0,000 sec. */
show warnings;
/* 0 rows affected, 0 rows found. Duration for 1 query: 0,016 sec. */

В окне вывода результатов пусто
а почему у меня нет предупреждений?

Отредактированно toha82 (25.10.2011 11:30:19)

Неактивен

 

#4 25.10.2011 22:02:46

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

Re: Процедуры не меняют данные в таблице

Вы используете пхпадмин?

Неактивен

 

#5 26.10.2011 07:53:45

toha82
Участник
Зарегистрирован: 25.10.2011
Сообщений: 4

Re: Процедуры не меняют данные в таблице

Нет, я использую HeidiSQL
Разработка базы данных ведется для приложения .Net

Неактивен

 

#6 26.10.2011 09:10:14

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

Re: Процедуры не меняют данные в таблице

Вероятно он для каждого запроса открывает новую сессиию. сделайте сначала
set @a=5;
затем
select @a;
Какой будет результат?

Неактивен

 

#7 26.10.2011 09:41:12

toha82
Участник
Зарегистрирован: 25.10.2011
Сообщений: 4

Re: Процедуры не меняют данные в таблице

set @a=5;
select @a;
/* 0 rows affected, 1 rows found. Duration for 2 queries: 0,000 sec. */

В окне результата вывел табличку @a  5

Не как бы с такими инструкциями select или Call нормально работает и результаты выводит. На варнинги ничего нет

Неактивен

 

Board footer

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