由于模糊的语法错误,无法填充 table
can't populate table because of vague syntax error
我正在尝试从我的 phpmyadmin 数据库中填充一个 table,所以我有这个脚本:
USE avi; //database
SET @listOfStates = 'AK, AL, AR, AS, AZ, CA, CO, CT, DC, DE, FL, GA, GU, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MP, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, PR, RI, SC, SD, TN, TX, UM, UT, VA, VI, VT, WA, WI, WV, WY';
SET @item = SUBSTRING_INDEX(@listOfStates, ',', 1);
SET @itemValue = 0;
CREATE PROCEDURE populate()
BEGIN
SET @strLen = LENGTH(@listOfStates);
label1: LOOP
SET @strLen = LENGTH(@listOfStates);
SET @item = SUBSTRING_INDEX(@listOfStates, ',', 1);
SELECT COUNT(*) INTO @itemValue FROM us_accidents u WHERE u.state LIKE item;
INSERT INTO state_cases (name, cases) VALUES (@item, @itemValue);
SET @SubStrLen = LENGHT(SUBSTRING_INDEX(listOfStates, ',', 1));
SET @listOfStates = MID(listOfStates, SubStrLen, strLen);
IF listOfStates = NULL
LEAVE label1;
ITERATE label1;
END LOOP label1;
END;
当我尝试导入时,我得到了这个
我是不是用错了SET @?还是我的程序或 varchar 有问题?
我提到 table 已经创建。
您的主要问题是在存储过程开始之前缺少 DELIMITER
命令。
此外,过程末尾的 IF
语句格式错误:语法为 IF ... THEN ... END IF;
。最后,要检查是否为空,您需要 IS NULL
而不是 = NULL
.
编译成功:
SET @listOfStates = 'AK, AL, AR, AS, AZ, CA, CO, CT, DC, DE, FL, GA, GU, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MP, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, PR, RI, SC, SD, TN, TX, UM, UT, VA, VI, VT, WA, WI, WV, WY';
SET @item = SUBSTRING_INDEX(@listOfStates, ',', 1);
SET @itemValue = 0;
DELIMITER //
CREATE PROCEDURE populate()
BEGIN
SET @strLen = LENGTH(@listOfStates);
label1: LOOP
SET @strLen = LENGTH(@listOfStates);
SET @item = SUBSTRING_INDEX(@listOfStates, ',', 1);
SELECT COUNT(*) INTO @itemValue FROM us_accidents u WHERE u.state LIKE item;
INSERT INTO state_cases (name, cases) VALUES (@item, @itemValue);
SET @SubStrLen = LENGHT(SUBSTRING_INDEX(listOfStates, ',', 1));
SET @listOfStates = MID(listOfStates, SubStrLen, strLen);
IF listOfStates IS NULL THEN
LEAVE label1;
END IF;
ITERATE label1;
END LOOP label1;
END;
//
DELIMITER ;
我正在尝试从我的 phpmyadmin 数据库中填充一个 table,所以我有这个脚本:
USE avi; //database
SET @listOfStates = 'AK, AL, AR, AS, AZ, CA, CO, CT, DC, DE, FL, GA, GU, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MP, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, PR, RI, SC, SD, TN, TX, UM, UT, VA, VI, VT, WA, WI, WV, WY';
SET @item = SUBSTRING_INDEX(@listOfStates, ',', 1);
SET @itemValue = 0;
CREATE PROCEDURE populate()
BEGIN
SET @strLen = LENGTH(@listOfStates);
label1: LOOP
SET @strLen = LENGTH(@listOfStates);
SET @item = SUBSTRING_INDEX(@listOfStates, ',', 1);
SELECT COUNT(*) INTO @itemValue FROM us_accidents u WHERE u.state LIKE item;
INSERT INTO state_cases (name, cases) VALUES (@item, @itemValue);
SET @SubStrLen = LENGHT(SUBSTRING_INDEX(listOfStates, ',', 1));
SET @listOfStates = MID(listOfStates, SubStrLen, strLen);
IF listOfStates = NULL
LEAVE label1;
ITERATE label1;
END LOOP label1;
END;
当我尝试导入时,我得到了这个
我是不是用错了SET @?还是我的程序或 varchar 有问题?
我提到 table 已经创建。
您的主要问题是在存储过程开始之前缺少 DELIMITER
命令。
此外,过程末尾的 IF
语句格式错误:语法为 IF ... THEN ... END IF;
。最后,要检查是否为空,您需要 IS NULL
而不是 = NULL
.
编译成功:
SET @listOfStates = 'AK, AL, AR, AS, AZ, CA, CO, CT, DC, DE, FL, GA, GU, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MP, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, PR, RI, SC, SD, TN, TX, UM, UT, VA, VI, VT, WA, WI, WV, WY';
SET @item = SUBSTRING_INDEX(@listOfStates, ',', 1);
SET @itemValue = 0;
DELIMITER //
CREATE PROCEDURE populate()
BEGIN
SET @strLen = LENGTH(@listOfStates);
label1: LOOP
SET @strLen = LENGTH(@listOfStates);
SET @item = SUBSTRING_INDEX(@listOfStates, ',', 1);
SELECT COUNT(*) INTO @itemValue FROM us_accidents u WHERE u.state LIKE item;
INSERT INTO state_cases (name, cases) VALUES (@item, @itemValue);
SET @SubStrLen = LENGHT(SUBSTRING_INDEX(listOfStates, ',', 1));
SET @listOfStates = MID(listOfStates, SubStrLen, strLen);
IF listOfStates IS NULL THEN
LEAVE label1;
END IF;
ITERATE label1;
END LOOP label1;
END;
//
DELIMITER ;