簡體   English   中英

在 SQL 列中插入值

[英]inserting values in SQL columns

我有一個表 t1 有兩列 (col_1,col_2)

我想通過存儲過程將字符串作為參數傳遞到這些列中來插入數據

但問題是當我調用程序時

call insert_csv('amjad,ali');

它顯示: MySQL 說:

#1136 - 列數與第 1 行的值數不匹配

     DELIMITER //

  CREATE PROCEDURE `insert_csv`(_list MEDIUMTEXT)

     BEGIN


    DECLARE _next TEXT DEFAULT NULL;

    DECLARE _nextlen INT DEFAULT NULL;

    DECLARE _value TEXT DEFAULT NULL;

    iterator:
    LOOP

      IF LENGTH(TRIM(_list)) = 0 OR _list IS NULL THEN
        LEAVE iterator;
      END IF;

      SET _next = SUBSTRING_INDEX(_list,',',1);


      SET _nextlen = LENGTH(_next);

      SET _value = TRIM(_next);

      INSERT INTO tblloaninfo (col_1,col_2) VALUES (_value);
      SET _list = INSERT(_list,1,_nextlen + 1,'');
    END LOOP;

    END //

    DELIMITER ;  

這里:

INSERT INTO tblloaninfo (col_1,col_2) VALUES (_value);

您要求它填充兩列,只有一個值。 不清楚這兩個值在這里應該是什么,但是:右邊值的數量(在本例中為 1)應該與左邊的列數(在本例中為 2)相匹配。

如果_value是一個恰好包含逗號的字符串:那不是它的工作方式。 它不會被分成兩個值——它仍然只是一個值:一個包含逗號的字符串

CREATE PROCEDURE `insert_csv`(_list MEDIUMTEXT)
BEGIN
iterator: 
LOOP
    IF LOCATE(',', _list) THEN
        SET @element := SUBSTRING_INDEX(_list, ',', 2);
        SET _list := TRIM(SUBSTRING(_list FROM 2 + LENGTH(@element)));
        INSERT INTO tblloaninfo (col_1, col_2) 
            SELECT TRIM(SUBSTRING_INDEX(@element, ',',  1)), 
                   TRIM(SUBSTRING_INDEX(@element, ',', -1));
    ELSE 
        LEAVE iterator;
    END IF;
END LOOP;
END 

小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM