mysql中如何使用storeprocedure参数在表中插入多行

ulydmbyx  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(284)

我有三个表产品,尺寸和产品尺寸

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
}

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

jjjwad0x

jjjwad0x1#

如果你想把所有的尺寸都附在产品的插页上,那么一个简单的

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

就行了。但是,如果您只需要一些大小,那么可以将这些大小作为分隔字符串传递,并在包含insert语句的循环过程中拆分它们。如果您使用googlemysql拆分字符串,您将发现如何拆分字符串的示例。

i34xakig

i34xakig2#

下面是一个存储过程,每次调用该过程时,都会将一条记录插入产品大小。该过程获取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 ;

相关问题