sql >> Databasteknik >  >> RDS >> Mysql

MySQL lagrad procedur infoga flera rader från listan

Ja, du behöver en loop, där du kan använda substring_index() för att få värdena i listan. Lösningen är baserad på svaren från det här SO-ämnet :

DELIMITER ;;
CREATE PROCEDURE insert_group_alert(
  IN _some_data_a         VARCHAR(255),
  IN _data_list_b         TEXT,
)
  BEGIN
    DECLARE strLen    INT DEFAULT 0;
    DECLARE SubStrLen INT DEFAULT 0;
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
      ROLLBACK;
    END;
    START TRANSACTION;

    INSERT INTO TableA (
      some_data,
      counter
    )
    VALUES (
      _some_data_a,
      1
    ) -- you do not really need this, since you do not provide an id
    ON DUPLICATE KEY UPDATE
      counter          = counter + 1;

    SELECT last_insert_id()
      INTO @newId;

    do_this:
      LOOP
        SET strLen = CHAR_LENGTH(_data_list_b);

        INSERT INTO TableB (table_a_id, some_data) VALUES(@newId,SUBSTRING_INDEX(_data_list_b, ',', 1));

        SET SubStrLen = CHAR_LENGTH(SUBSTRING_INDEX(_data_list_b, ',', 1))+2;
        SET _data_list_b = MID(_data_list_b, SubStrLen, strLen); --cut the 1st list item out

        IF _data_list_b = '' THEN
          LEAVE do_this;
        END IF;
      END LOOP do_this;

    COMMIT;
  END ;;
DELIMITER ;



  1. Använda SQL Server Profiler | SQL Server Performance Felsökning -5

  2. Köra ett MariaDB Galera-kluster utan verktyg för containerorkestrering:Del ett

  3. MySQL-fråga med CASE för att VÄLJA flera kolumner

  4. kopiera databasfil från /tillgångar till /data/datamappen i filutforskaren - Android