由于模糊的语法错误,无法填充 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 ;