吱吱z 2015-08-31 02:30 采纳率: 100%
浏览 1854
已采纳

sql语句出错,求大神帮忙解答

CREATE PROCEDURE test()
BEGIN

DECLARE fid int;

DECLARE days int DEFAULT 1;

DECLARE s int default 0;

DECLARE company_code VARCHAR;

DECLARE cursor_company CURSOR FOR SELECT company FROM test WHERE status = 3;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET a=1;

OPEN cursor_company;

FETCH cursor_company INTO company_code;
WHILE a<>1 DO

        IF company_code = 'DD' THEN
  SET days = 2;
  END IF;
  ELSEIF company_code ='ZD' THEN 
  SET days = 5;
  END ELSEIF;
  ELSEIF company_code ='GG' THEN
  SET days = '8';
  END ELSEIF;
  FETCH  cursor_company INTO company_code;

                DECLARE cursor_name CURSOR FOR SELECT id FROM test WHERE UNIX_TIMESTAMP(check_time) < UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL -days DAY));
                #设置一个终止标记
                DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
                #打开游标
                OPEN cursor_name;
                #获取游标当前指针的记录,读取一行数据并传给变量stu
                FETCH cursor_name INTO fid;
                #开始循环,判断是否游标已经到达了最后作为循环条件
                WHILE s <> 1 do  
                    UPDATE test SET status = 8 where id=fid; 
                 #读取下一行的数据  
                    FETCH  cursor_name INTO fid; 
                END WHILE;  
                 #关闭游标  
                CLOSE cursor_name ; 
                #语句执行结束  

END WHILE;
CLOSE cursor_company;

END

表结构

id int

check_time datetime

status int

company varchar

错误信息:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';

DECLARE cursor_company CURSOR FOR SELECT company FROM test WHERE status =' at line 10

看了好久,可是感觉没有错误,不知道毛病出在哪里,求大神解答
  • 写回答

3条回答 默认 最新

  • 微甜灬呼吸 2015-08-31 03:05
    关注

    CREATE PROCEDURE test ()
    BEGIN
    DECLARE
    fid INT;

    DECLARE
    days INT DEFAULT 1;

    DECLARE
    s INT DEFAULT 0;

    DECLARE
    a INT DEFAULT 0;

    DECLARE
    company_code VARCHAR (50);

    DECLARE
    cursor_company CURSOR FOR SELECT
    company
    FROM
    test
    WHERE
    STATUS = 3;

    DECLARE
    cursor_name CURSOR FOR SELECT
    id
    FROM
    test
    WHERE
    UNIX_TIMESTAMP(check_time) < UNIX_TIMESTAMP(
    DATE_ADD(NOW(), INTERVAL - days DAY)
    );

    #设置一个终止标记
    DECLARE
    CONTINUE HANDLER FOR SQLSTATE '02000'
    SET s = 1;

    OPEN cursor_company;

    FETCH cursor_company INTO company_code;

    WHILE s <> 1 DO

    IF company_code = 'DD' THEN

    SET days = 2;

    ELSEIF company_code = 'ZD' THEN

    SET days = 5;

    ELSEIF company_code = 'GG' THEN

    SET days = '8';

    END IF;

    FETCH cursor_company INTO company_code;

    #打开游标
    OPEN cursor_name;

    #获取游标当前指针的记录,读取一行数据并传给变量stu
    FETCH cursor_name INTO fid;

    #开始循环,判断是否游标已经到达了最后作为循环条件
    WHILE s <> 1 DO
    UPDATE test
    SET STATUS = 8
    WHERE
    id = fid;
    set s = 0;
    #读取下一行的数据

    FETCH cursor_name INTO fid;

    END
    WHILE;

    #关闭游标

    CLOSE cursor_name;

    #语句执行结束

    END
    WHILE;

    CLOSE cursor_company;

    END

    给你格式化了一下
    不然有点乱乱
    DECLARE
    CONTINUE HANDLER FOR SQLSTATE '02000'
    这个只定义一个

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵