Mysql запрос вставленной хранимой процедуры внутри al oop только вставка последнего значения - PullRequest
0 голосов
/ 04 марта 2020

Я написал хранимую процедуру для вставки нескольких значений в одну таблицу, используя массив и al oop. Но таблица имеет только последнее значение массива. а также выдает ошибку, говорящую

Столбец не может быть пустым.

Это моя хранимая процедура:

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_images`(
packageName VARCHAR(300), 
packageUniqueCode VARCHAR(100), 
packageAddedDate DATE, 
packagePrice DOUBLE, 
packageDescription VARCHAR(3000), 
packageOwnerID INT, 
images VARCHAR(500)
)
BEGIN
    declare i INT default 0;
START TRANSACTION;
   INSERT INTO packages(packageName, packageUniqueCode, packageAddedDate, packagePrice, packageDescription, packageOwnerID) 
     VALUES(packageName, packageUniqueCode, packageAddedDate, packagePrice, packageDescription, packageOwnerID);
  SET i = 1;
   WHILE i <= JSON_LENGTH(images) DO
    INSERT INTO packageImages(imageName, location, packageOwnerID, packageID) 
    VALUES(JSON_EXTRACT(images,CONCAT( '$[', `i`, '].imageName')), JSON_EXTRACT(images,CONCAT( '$[', `i`, '].location')), packageOwnerID,LAST_INSERT_ID());
    SET i = i + 1;
   END WHILE;
COMMIT;
END

И я звоню по этому коду:

CALL insert_images("PJKG", "codea", "2022-11-11", 12, "description", 22, '[{"imageName": "pasinduImage", "location": "uploads/image"},{"imageName": "pasinduImage2", "location": "uploads/image"}]');

Пожалуйста, помогите мне разобраться. Спасибо

1 Ответ

1 голос
/ 04 марта 2020

Индекс JSON начинается с 0. Итак, установите:

SET i = 0;
WHILE (i < JSON_LENGTH(images)) DO
...