sql >> データベース >  >> RDS >> Mysql

MySQLストアドプロシージャはリストから複数の行を挿入します

    はい、ループが必要です。このループでは、substring_index()を使用してリスト内の値を取得できます。このソリューションは、このSOトピック

    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. MYSQLデータベースのすべての外部キーを削除します

    2. mysql_real_escape_stringを使用すべきでない場合

    3. ユーザー別コンテンツ:同じ名前または結合の列を持つ2つのテーブル?

    4. codeigniterアクティブレコードにクエリを挿入した後に最後の挿入IDを取得する方法