DROP PROCEDURE IF EXISTS proc_add_personnel;
DELIMITER $$
CREATE PROCEDURE proc_add_personnel(ctt INT)
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE j INT;
DECLARE pos VARCHAR(10);
SET j = FLOOR(1+(RAND()*6);

CASE j WHEN 1 THEN  pos = '美工';
       WHEN 2 THEN  pos = '网页设计';
       WHEN 3 THEN  pos = '软件工程师';
       WHEN 4 THEN  pos = '架构师';
       WHEN 5 THEN  pos = '行政人员';
       ELSE pos = '其他';
END CASE

WHILE i<ctt DO
 INSERT INTO personnel(`of_year`,`of_position`,`of_wages`) VALUES (FLOOR(1+(RAND()*10)),'',FLOOR(1000+(RAND()*10000)));
 SET i= i+1;
END WHILE;
END$$
错误信息:Query : create procedure proc_add_personnel(ctt int) begin  declare i int default 0;  declare j int;  DECLARE pos VARCHAR(10);  set j = ...Error Code : 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 ';

case j when 1 then  pos = '美工';
       WHEN 2 THEN  pos = '网页设�' at line 6

解决方案 »

  1.   

    DROP PROCEDURE IF EXISTS proc_add_personnel;
    DELIMITER $$
    CREATE PROCEDURE proc_add_personnel(ctt INT)
    BEGIN
        DECLARE i INT DEFAULT 0;
        DECLARE j INT;
        DECLARE pos VARCHAR(10);
        SET j = FLOOR(1+(RAND()*6);

        CASE j WHEN 1 THEN  set pos = '美工' ;
               WHEN 2 THEN  set pos = '网页设计';
               WHEN 3 THEN  set pos = '软件工程师';
               WHEN 4 THEN  set pos = '架构师';
               WHEN 5 THEN  set pos = '行政人员';
               ELSE set pos = '其他';
        END CASE;
        
        WHILE i<ctt DO
         INSERT INTO personnel(`of_year`,`of_position`,`of_wages`) VALUES (FLOOR(1+(RAND()*10)),'',FLOOR(1000+(RAND()*10000)));
         SET i= i+1;
        END WHILE;
    END$$
    DELIMITER ;
      

  2.   

    DROP PROCEDURE IF EXISTS proc_add_personnel;
    DELIMITER $$
    CREATE PROCEDURE proc_add_personnel(ctt INT)
    BEGIN
      DECLARE i INT DEFAULT 0;
      DECLARE j INT;
      DECLARE pos VARCHAR(10);
      SET j = FLOOR(1+(RAND()*6));  CASE j WHEN 1 THEN set pos = '美工' ;
      WHEN 2 THEN set pos = '网页设计';
      WHEN 3 THEN set pos = '软件工程师';
      WHEN 4 THEN set pos = '架构师';
      WHEN 5 THEN set pos = '行政人员';
      ELSE set pos = '其他';
      END CASE;
       
      WHILE i<ctt DO
      INSERT INTO personnel(`of_year`,`of_position`,`of_wages`) VALUES (FLOOR(1+(RAND()*10)),'',FLOOR(1000+(RAND()*10000)));
      SET i= i+1;
      END WHILE;
    END$$
    DELIMITER ;
      

  3.   

    ELIMITER $$
    DROP PROCEDURE IF EXISTS proc_add_personnel$$
    CREATE PROCEDURE proc_add_personnel(ctt INT)
    BEGIN
    DECLARE i INT DEFAULT 0;
     DECLARE j INT;
     DECLARE pos VARCHAR(10);
     SET j = FLOOR(1+(RAND()*6));
       CASE j WHEN 1 THEN SET pos='美工';
        WHEN 2 THEN  SET pos = '网页设计';
               WHEN 3 THEN SET pos = '软件工程师';
               WHEN 4 THEN  SET pos = '架构师';
               WHEN 5 THEN SET pos = '行政人员';
               ELSE  SET pos = '其他';
        WHILE i<ctt DO
       INSERT INTO personnel(`of_year`,`of_position`,`of_wages`) VALUES (FLOOR(1+(RAND()*10)),'',FLOOR(1000+(RAND()*10000)));
       SET i= i+1;
       END WHILE;
               
        END CASE; 
            
        
    END$$
    DELIMITER ;
      

  4.   

    感谢各位的回答;
    两个错误:
    首先FLOOR(1+(RAND()*6)这里少些)括弧;
    其次变量赋值,必须有关键字set .