Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Prosedur tersimpan MySQL memasukkan beberapa baris dari daftar

Ya, Anda memerlukan loop, di mana Anda dapat menggunakan substring_index() untuk mendapatkan nilai dalam daftar. Solusinya didasarkan pada jawaban dari topik JADI ini :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 15 Tips Penyesuaian dan Pengoptimalan Kinerja MySQL/MariaDB yang Berguna

  2. Menggunakan Mysqli bind_param dengan kolom tanggal dan waktu?

  3. Encoding Karakter Cina dari input JSF

  4. Implikasi kinerja mengizinkan alias untuk digunakan dalam klausa HAVING

  5. .NET Core 2.0 dengan MySQL:Kunci yang ditentukan terlalu panjang; panjang kunci maksimal adalah 3072 byte