【问题标题】:Mysql stored procedure insert query inside a loop only inserting last valueMysql存储过程在循环内插入查询仅插入最后一个值
【发布时间】:2020-06-16 18:32:20
【问题描述】:

我编写了一个存储过程,使用数组和循环将多个值插入到同一个表中。但该表只有数组的最后一个值。而且它还抛出一个错误说

列不能为空。

这是我的存储过程:

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"}]');

请帮我解决问题。谢谢

【问题讨论】:

    标签: mysql database loops stored-procedures sql-insert


    【解决方案1】:

    JSON 索引从 0 开始。所以设置:

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

    【讨论】:

    • 谢谢伙计。效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2018-04-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多