如何在MySQL中使用存储过程参数在表中插入多行

时间:2018-06-23 08:08:19

标签: mysql

我有三个表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
}

那么如何传递大小参数以在mysql中存储过程

2 个答案:

答案 0 :(得分:0)

以下是一个存储过程,每次调用该过程时,都会在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 ;

答案 1 :(得分:0)

如果您希望将所有尺寸的商品都附在插入物上,那么简单的

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

可以。 但是,如果您只需要一些大小,则可以将大小作为定界字符串传递,在过程中将它们拆分为一个循环,该循环将包含一个插入语句。如果您使用google mysql拆分字符串,则将找到有关拆分字符串的示例。