本帖最后由 zhoufoxcn 于 2010-08-04 09:19:46 编辑

解决方案 »

  1.   

    弄错了,创建语句是下面的:CREATE PROCEDURE p()
    BEGIN
    DECLARE i int DEFAULT 1;
    CREATE TEMPORARY TABLE if NOT EXISTS tmp_table( 
       id int UNSIGNED NOT NULL AUTO_INCREMENT,
       pid int not null,
    PRIMARY KEY(id)
      ) TYPE = HEAP;WHILE i<100 DO
    INSERT INTO tmp_table(pid)values(i); 
    SET i=i+1; 
    END WHILE;
    SELECT * FROM tmp_table AS t;
    END;对MySQL不是太熟悉。
      

  2.   

    delimiter $$create  PROCEDURE p()
    BEGIN
    DECLARE i int DEFAULT 1;
    CREATE TEMPORARY TABLE if NOT EXISTS tmp_table( 
       id int UNSIGNED NOT NULL AUTO_INCREMENT,
       pid int not null,
        PRIMARY KEY(id)
      ) TYPE = HEAP;WHILE i<=100 DO
    INSERT INTO tmp_table(pid)values(i); 
    SET i=i+1; 
    END WHILE;
    SELECT * FROM tmp_table AS t;
    END;
    $$delimiter ;call p();
      

  3.   

    你的代码测试如下,并无问题啊。mysql> delimiter //
    mysql>
    mysql> CREATE PROCEDURE p()
        -> BEGIN
        -> DECLARE i int DEFAULT 1;
        -> CREATE TEMPORARY TABLE if NOT EXISTS tmp_table(
        ->    id int UNSIGNED NOT NULL AUTO_INCREMENT,
        ->    pid int not null,
        ->     PRIMARY KEY(id)
        ->   ) TYPE = HEAP;
        ->
        -> WHILE i<100 DO
        -> INSERT INTO tmp_table(pid)values(i);
        -> SET i=i+1;
        -> END WHILE;
        -> SELECT * FROM tmp_table AS t;
        -> END;
        ->
        -> //
    Query OK, 0 rows affected, 1 warning (0.16 sec)mysql> delimiter ;
    mysql> call p();
    +----+-----+
    | id | pid |
    +----+-----+
    |  1 |   1 |
    |  2 |   2 |
    |  3 |   3 |
    |  4 |   4 |
    |  5 |   5 |
    |  6 |   6 |
    |  7 |   7 |
    |  8 |   8 |
    |  9 |   9 |
    | 10 |  10 |
    | 11 |  11 |
    | 12 |  12 |
    | 13 |  13 |
    | 14 |  14 |
    | 15 |  15 |
    | 16 |  16 |
    | 17 |  17 |
    | 18 |  18 |
    | 19 |  19 |
    | 20 |  20 |
    | 21 |  21 |
    | 22 |  22 |
    | 23 |  23 |
    | 24 |  24 |
    | 25 |  25 |
    | 26 |  26 |
    | 27 |  27 |
    | 28 |  28 |
    | 29 |  29 |
    | 30 |  30 |
    | 31 |  31 |
    | 32 |  32 |
    | 33 |  33 |
    | 34 |  34 |
    | 35 |  35 |
    | 36 |  36 |
    | 37 |  37 |
    | 38 |  38 |
    | 39 |  39 |
    | 40 |  40 |
    | 41 |  41 |
    | 42 |  42 |
    | 43 |  43 |
    | 44 |  44 |
    | 45 |  45 |
    | 46 |  46 |
    | 47 |  47 |
    | 48 |  48 |
    | 49 |  49 |
    | 50 |  50 |
    | 51 |  51 |
    | 52 |  52 |
    | 53 |  53 |
    | 54 |  54 |
    | 55 |  55 |
    | 56 |  56 |
    | 57 |  57 |
    | 58 |  58 |
    | 59 |  59 |
    | 60 |  60 |
    | 61 |  61 |
    | 62 |  62 |
    | 63 |  63 |
    | 64 |  64 |
    | 65 |  65 |
    | 66 |  66 |
    | 67 |  67 |
    | 68 |  68 |
    | 69 |  69 |
    | 70 |  70 |
    | 71 |  71 |
    | 72 |  72 |
    | 73 |  73 |
    | 74 |  74 |
    | 75 |  75 |
    | 76 |  76 |
    | 77 |  77 |
    | 78 |  78 |
    | 79 |  79 |
    | 80 |  80 |
    | 81 |  81 |
    | 82 |  82 |
    | 83 |  83 |
    | 84 |  84 |
    | 85 |  85 |
    | 86 |  86 |
    | 87 |  87 |
    | 88 |  88 |
    | 89 |  89 |
    | 90 |  90 |
    | 91 |  91 |
    | 92 |  92 |
    | 93 |  93 |
    | 94 |  94 |
    | 95 |  95 |
    | 96 |  96 |
    | 97 |  97 |
    | 98 |  98 |
    | 99 |  99 |
    +----+-----+
    99 rows in set (0.11 sec)Query OK, 0 rows affected (0.36 sec)mysql>
      

  4.   

    你可以参考一下官方文档中的教程部分。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  5.   

    1.delimiter $$ 转化下结束符 因为存储过程里面要用到;2.WHILE i<=100 DO
    输出1-100 要<=100
      

  6.   

    delimiter ||
    CREATE PROCEDURE p()
    BEGIN
    DECLARE i int DEFAULT 1;
    CREATE TEMPORARY TABLE if NOT EXISTS tmp_table( 
       id int UNSIGNED NOT NULL AUTO_INCREMENT,
       pid int not null,
        PRIMARY KEY(id)
      ) TYPE = HEAP;WHILE i<100 DO
    INSERT INTO tmp_table(pid)values(i); 
    SET i=i+1; 
    END WHILE;
    SELECT * FROM tmp_table AS t;
    END;||
      

  7.   

    如果在命令行下输入,要改变结束符
    delimiter $$
    CREATE PROCEDURE p()
    BEGIN
    DECLARE i int DEFAULT 1;
    CREATE TEMPORARY TABLE if NOT EXISTS tmp_table( 
       id int UNSIGNED NOT NULL AUTO_INCREMENT,
       pid int not null,
        PRIMARY KEY(id)
      ) TYPE = HEAP;WHILE i<100 DO
    INSERT INTO tmp_table(pid)values(i); 
    SET i=i+1; 
    END WHILE;
    SELECT * FROM tmp_table AS t;
    END;$$
      

  8.   

    没有发现问题。直接复制到TOAD里执行的。
      

  9.   

    好像是要delimiter一下,是的,代码本身没有什么问题。
    谢谢各位。