首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程在MySql中不能正常工作?

存储过程在MySql中不能正常工作?
EN

Stack Overflow用户
提问于 2013-06-03 17:08:09
回答 3查看 1.2K关注 0票数 0

我一直在调试一个SQL存储过程,它必须根据表C中存在值( ID )从表A中获取值(在我的代码ID和Numb中),然后将数字平方并将其存储在表B中,即所有的ID、Numb和Square。我不能解决下面代码中的问题

代码语言:javascript
复制
 DELIMITER $$
    CREATE PROCEDURE matlab.squaring
     BEGIN
       DECLARE finish BOOLEAN DEFAULT 0; # <- set up initial conditions
       DECLARE square BIGINT(10);
       DECLARE ID INT(10);
       DECLARE Numb INT (10);
       DECLARE id_cur CURSOR FOR
         SELECT ID, Numb FROM A WHERE EXISTS ( SELECT ID FROM c);
         SET @square= @Numb * @Numb

           INSERT INTO B
           (
             ID ,
             Numb ,
             square
           )     values ( ID , Numb, square);


       DECLARE CONTINUE HANDLER FOR NOT FOUND SET finish = TRUE;
       OPEN id_cur;

     the_loop : LOOP
        FETCH id_cur INTO ID;

        IF finish THEN
           CLOSE id_cur;
           LEAVE the_loop;
        END IF
    END LOOP the_loop;
    END$$

当我运行存储过程时,弹出的错误是“您的代码中似乎有一些语法错误,请参阅MYSql指南。”

编辑:还有一个帮助,请看如何执行这个存储过程。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-03 17:21:00

有各种各样的小错误;

你需要一个参数列表,即使这个过程是空的;

代码语言:javascript
复制
CREATE PROCEDURE matlab.squaring()

continue处理程序需要位于其他声明的正下方;

代码语言:javascript
复制
   DECLARE id_cur CURSOR FOR
     SELECT ID, Numb FROM A WHERE EXISTS ( SELECT ID FROM c);
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finish = TRUE;

你忘了一个分号;

代码语言:javascript
复制
SET @square= @Numb * @Numb;

你忘了@变量的用法;

代码语言:javascript
复制
   )     values ( @ID , @Numb, @square);

如果您忘记了末尾的分号

代码语言:javascript
复制
    END IF;

只是作为一个概述,这里是完整的更新;

代码语言:javascript
复制
CREATE PROCEDURE matlab.squaring()
 BEGIN
   DECLARE finish BOOLEAN DEFAULT 0; # <- set up initial conditions
   DECLARE square BIGINT(10);
   DECLARE ID INT(10);
   DECLARE Numb INT (10);
   DECLARE id_cur CURSOR FOR
     SELECT ID, Numb FROM A WHERE EXISTS ( SELECT ID FROM c);
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finish = TRUE;
   SET @square= @Numb * @Numb;

   INSERT INTO B
   (
     ID ,
     Numb ,
     square
   )     values ( @ID , @Numb, @square);

 OPEN id_cur;

 the_loop : LOOP
    FETCH id_cur INTO ID;

    IF finish THEN
       CLOSE id_cur;
       LEAVE the_loop;
    END IF;
END LOOP the_loop;
END//
票数 0
EN

Stack Overflow用户

发布于 2013-06-03 17:19:07

在过程matlab之后您已经错过了() ...

  • 和;after END IF

  • Also,处理程序声明应该在任何可执行代码之前和游标declaration

  • Semicolon之后设置@square= @Numb * @Numb is

因此,查询应该是这样:

代码语言:javascript
复制
    DELIMITER $$
CREATE PROCEDURE matlab.squaring ()
 BEGIN
   DECLARE finish BOOLEAN DEFAULT 0; # <- set up initial conditions
   DECLARE square BIGINT(10);
   DECLARE ID INT(10);
   DECLARE Numb INT (10);
   DECLARE id_cur CURSOR FOR
     SELECT ID, Numb FROM A WHERE EXISTS ( SELECT ID FROM c);
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET finish = TRUE;
     SET @square= @Numb * @Numb;

       INSERT INTO B
       (
         ID ,
         Numb ,
         square
       )     values ( ID , Numb, square);

   OPEN id_cur;

 the_loop : LOOP
    FETCH id_cur INTO ID;

    IF finish THEN
       CLOSE id_cur;
       LEAVE the_loop;
    END IF;
END LOOP the_loop;
END$$
票数 0
EN

Stack Overflow用户

发布于 2013-06-03 17:19:35

endif处缺少参数括号和分号。

代码语言:javascript
复制
DELIMITER $$
    CREATE PROCEDURE squaring()
     BEGIN
       DECLARE finish BOOLEAN DEFAULT 0; # <- set up initial conditions
       DECLARE square BIGINT(10);
       DECLARE ID INT(10);
       DECLARE Numb INT (10);
       DECLARE id_cur CURSOR FOR
       SELECT ID, Numb FROM A WHERE EXISTS ( SELECT ID FROM c);
       DECLARE CONTINUE HANDLER FOR NOT FOUND SET finish = TRUE;
       SET @square= @Numb * @Numb;

           INSERT INTO B
           (
             ID ,
             Numb ,
             square
           )     values ( ID , Numb, square);


       OPEN id_cur;

     the_loop : LOOP
        FETCH id_cur INTO ID;

        IF finish THEN
           CLOSE id_cur;
           LEAVE the_loop;
        END IF;
    END LOOP the_loop;
    END$$
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16893328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档