【问题标题】:how to insert multiple rows in table using store procedure parameter in mysql如何使用mysql中的存储过程参数在表中插入多行
【发布时间】:2018-06-23 08:08:18
【问题描述】:

我有三个表 product、sizes 和 product_size

product 
 > id 
 > name
product_size
 > product_id FK
 > size_id FK
size
 > id
 > name

知道使用存储过程我想插入具有多种尺寸的单个产品 例如。

product.id =1;
product.name = xyz;
{
product_size.product_id = 1
product_size.size_id = 1
product_size.product_id = 1
product_size.size_id = 2
product_size.product_id = 1
product_size.size_id = 3
}

那么如何将sizes参数传递给mysql中的存储过程

【问题讨论】:

    标签: mysql


    【解决方案1】:

    以下是一个存储过程,每次调用该过程时都会在 product_size 中插入一条记录。该过程采用 product.id 和 size.id 的输入参数。

    DELIMITER //
    CREATE PROCEDURE INSERT_product_size(
                                        IN productID int, 
                                        IN sizeID int
                                        )
        BEGIN
            INSERT INTO 
                product_size
                    (product_id, size_id)
                VALUES
                    (productID, sizeID);
    
        END //
    DELIMITER ;
    

    此过程采用单个产品 ID 和一个大小 ID 的“数组”(以逗号分隔字符串的形式),并在一次过程调用中插入产品的所有尺寸:

    DROP PROCEDURE IF EXISTS INSERT_product_sizes;
    DELIMITER //
    CREATE PROCEDURE IF NOT EXISTS INSERT_product_sizes(
                                        IN productID int, 
                                        IN sizeIDs varchar(100)
                                        )
        BEGIN
    
            DECLARE delimiterCount int;
            DECLARE sizeID int;
            DECLARE loopCount int;
    
            /* Remove spaces, if any, from input string */
            SET sizeIDs = REPLACE(sizeIDs, ' ', '');
    
            /* Determine how many commas are in input string */
            SET delimiterCount = LENGTH(sizeIDs) - LENGTH(REPLACE(sizeIDs, ',', ''));
    
            SET loopCount = 1;
    
            /* For each id in input string */
            WHILE loopCount <= delimiterCount + 1 DO
                SET sizeID = SUBSTRING_INDEX(sizeIDs, ',', 1);
                INSERT INTO 
                    product_size
                        (product_id, size_id)
                    VALUES
                        (productID, sizeID);
                /* Remove last used id from input string */
                SET sizeIDs = REPLACE(sizeIDs, CONCAT(sizeID, ','), ''); 
                SET loopCount = loopCount + 1;
    
            END WHILE;
    
    
    
        END //
    DELIMITER ;
    

    【讨论】:

    • 如何在参数中传递数组,以便一次插入多个尺寸
    • 见上面的修订答案。请记得标记为已回答。谢谢!
    【解决方案2】:

    如果您想将所有尺寸附加到插页上的产品上,那么一个简单的

    insert into product_size(product_id,size_id)
        select inprodid,name
        from size
        ;
    

    会的。 但是,如果您只想要一些大小,那么您可以将大小作为分隔字符串传递,在包含插入语句的循环中将它们拆分。如果您 google mysql 拆分字符串,您将找到如何拆分字符串的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-12
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多