Как читать данные из CURSOR - MySQL хранимая процедура - PullRequest
0 голосов
/ 12 мая 2018

Я реализовал CURSOR в хранимой процедуре mysql ... Я получаю вызов при чтении курсора ... В основном я хочу прочитать значение столбца из курсора и сохранить его в переменной ... но я получаю переменнуюзначение как NULL ... Каково было бы решение ... Пожалуйста, помогите мне .. Заранее спасибо ...

Мой код похож на ниже,

delimiter //

CREATE PROCEDURE placeOrder(IN cartId INT)
BEGIN

   DECLARE countitem INT DEFAULT 0;
   DECLARE productId INT;
   DECLARE quantity INT;
   DECLARE itemDicountAmt DOUBLE DEFAULT 0;
  DECLARE v_finished INT DEFAULT 0;


 DEClARE cart_cursor CURSOR FOR 
 SELECT ProductId, Quantity FROM TBL_SHOPPING_CART_ITEM;

 -- declare NOT FOUND handler
 DECLARE CONTINUE HANDLER 
        FOR NOT FOUND SET v_finished = 1;

 OPEN cart_cursor;

 get_cart: LOOP

 FETCH cart_cursor into productId, quantity;

 IF v_finished = 1 THEN 
 LEAVE get_cart;
 END IF;

 -- build email list
 insert into debugtable select concat('PRODUCT :', productId);
  insert into debugtable select concat('QUANTITY :', quantity);
 END LOOP get_cart;

 CLOSE cart_cursor;

END//

delimiter ;

ВЫХОД:

tmptable NULL NULL

Поскольку в моей корзине покупок есть одна запись ...

1 Ответ

0 голосов
/ 12 мая 2018

См. C.1 Ограничения для хранимых программ :: Конфликты имен в хранимых программах .

Вариант 1:

...
/*DEClARE cart_cursor CURSOR FOR 
 SELECT ProductId, Quantity FROM TBL_SHOPPING_CART_ITEM;*/
DEClARE cart_cursor CURSOR FOR 
 SELECT
   TBL_SHOPPING_CART_ITEM.ProductId,
   TBL_SHOPPING_CART_ITEM.Quantity
 FROM TBL_SHOPPING_CART_ITEM;
...

Вариант 2:

...
/*DECLARE productId INT;
DECLARE quantity INT;*/
DECLARE _productId INT;
DECLARE _quantity INT;
...
/*FETCH cart_cursor into productId, quantity;*/
FETCH cart_cursor into _productId, _quantity;
...
/*insert into debugtable select concat('PRODUCT :', productId);
insert into debugtable select concat('QUANTITY :', quantity);*/
insert into debugtable select concat('PRODUCT :', _productId);
insert into debugtable select concat('QUANTITY :', _quantity);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...