[英]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.