Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Procedura składowana MySQL wstawia wiele wierszy z listy

Tak, potrzebujesz pętli, w której możesz użyć funkcji substring_index(), aby uzyskać wartości z listy. Rozwiązanie opiera się na odpowiedziach z ten temat 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tomcat6 nie może połączyć się z MySql (sterownik nie otrzymał żadnych pakietów z serwera)

  2. Entity Framework — MySQL — problem z formatem daty i godziny

  3. Jquery datepicker z Ajaxem nie działa

  4. Poprawne zaimplementowanie podtypu super-type w MySQL

  5. Schemat tworzenia stron internetowych dla serwerów pomostowych i produkcyjnych za pomocą Git Push