【问题标题】:Loop in trigger with comma separated values mysql使用逗号分隔值mysql循环触发
【发布时间】:2020-09-10 04:10:42
【问题描述】:

我需要在mysql中创建一个插入后触发器。

我有 3 张这样的桌子。

表1

项目ID(TestP),站点(st1,st2,st3)

表2

项目名称、项目ID、项目详细信息

表3

项目名称、项目详细信息、站点

现在我必须编写一个触发器,当我在 Table2 中插入 1 行(TestProject、TestP、Details1)时,它将在 Table3 中插入​​ 3 行

Table3中的值应该是这样的

Row1 : TestProject,Details1,st1 第2行:TestProject,Details1,st2 第 3 行:TestProject,Details1,st3

请有人帮助我。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    首先将此过程添加到您的数据库中

    http://forge.mysql.com/tools/tool.php?id=4 (编辑 2020-09-09,链接现已失效,但 Wayback 机器找到了源)

    DELIMITER //
     
    DROP PROCEDURE IF EXISTS split_string //
    CREATE PROCEDURE split_string (
        IN input TEXT
        , IN `delimiter` VARCHAR(10) 
    ) 
    SQL SECURITY INVOKER
    COMMENT 
    'Splits a supplied string using using the given delimiter, 
    placing values in a temporary table'
    BEGIN
        DECLARE cur_position INT DEFAULT 1 ;
        DECLARE remainder TEXT;
        DECLARE cur_string VARCHAR(1000);
        DECLARE delimiter_length TINYINT UNSIGNED;
     
        DROP TEMPORARY TABLE IF EXISTS SplitValues;
        CREATE TEMPORARY TABLE SplitValues (
            value VARCHAR(1000) NOT NULL PRIMARY KEY
        ) ENGINE=MyISAM;
     
        SET remainder = input;
        SET delimiter_length = CHAR_LENGTH(delimiter);
     
        WHILE CHAR_LENGTH(remainder) > 0 AND cur_position > 0 DO
            SET cur_position = INSTR(remainder, `delimiter`);
            IF cur_position = 0 THEN
                SET cur_string = remainder;
            ELSE
                SET cur_string = LEFT(remainder, cur_position - 1);
            END IF;
            IF TRIM(cur_string) != '' THEN
                INSERT INTO SplitValues VALUES (cur_string);
            END IF;
            SET remainder = SUBSTRING(remainder, cur_position + delimiter_length);
        END WHILE;
     
    END //
    

    它将任何字符串拆分为临时表中的行。

    将 Table1 中的列发送到该过程,并使用生成的临时表将值插入 Table3

    【讨论】:

    • Andreas,这是一个经典的例子,说明为什么应该将其他地方的代码直接添加到问题中。现在(2020 年),此问题包含的链接已失效!
    • 8 年前的我不如今天聪明。
    • 哇。非常值得称赞的是,您能够挖掘代码并更新答案(经过这么长时间)。赞一个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2018-12-08
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多