mysql> CREATE PROCEDURE opstable(IN idtable varchar(100),IN tempt varchar(100))
    -> BEGIN
    ->  create table idtable as select uuid() id,a.* FROM tempt a;
    -> END
    -> $
Query OK, 0 rows affected (0.00 sec)mysql> call opstable('idtable','stuff_temp')$
ERROR 1146 (42S02): Table 'demo.tempt' doesn't exist
怎么不能使用参数啊。、

解决方案 »

  1.   

    set @asql=concat('create table ',idtable,' as select uuid() id,a.* FROM ',tempt,' a');
    prepare stml from @asql;
    execute stml;
      

  2.   

    ERROR 1146 (42S02): Table 'demo.tempt' doesn't exist
    ---------
    翻译:
    表 demo.tempt 不存在
      

  3.   

    MYSQL中,你无法这样调用参数。这样MYSQL根本不知道你是要从  tempt 表中,还是 tempt变量中取。只能用 prepare 语句来实现。
      

  4.   

    1  这种需要动态语句拼接
    2 create table idtable select * from tb这种只能执行一次  第二次createtable就会报错了
      

  5.   


    你好 ,你说我这样写 好嘛?可是逻辑就是这样的。
    DELIMITER $   /*定义结束符号*/
     /*删除已存在的对象名称*/
    DROP PROCEDURE  IF EXISTS operate$
     /*开始创建名为operate的过程*/
    CREATE  PROCEDURE operate(IN tempname varchar(100),IN idtable varchar(100))
    BEGIN
        /*定义第一个游标找出表中的列*/
        DECLARE vNum01 int default 0 ;   /*该变量用来用于条件结束游标*/
        DECLARE sValue01  varchar(100);   /*定义一个长度为100的字符变量*/
        DECLARE sId01 varchar(36);  
        DECLARE cur1 CURSOR FOR SELECT id,colval FROM  normalize WHERE tname=tempname;/*找出列*/
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET vNum01=1; /*定义结束条件*/
          OPEN cur1; /*打开游标*/
            cur1loop:LOOP /*开始循环游标*/
              FETCH cur1 INTO sId01,sValue01; /*将获取的值赋给两个变量*/
      BEGIN
    /*开始第二个游标找出对应列的值*/
          DECLARE vNum02 int default 0 ;
          DECLARE sValue02 varchar(100);
          DECLARE sId02 VARCHAR(36);
             DECLARE cur2 CURSOR FOR SELECT id,sValue01 FROM idtable;  /*找出列值*/
          DECLARE CONTINUE HANDLER FOR NOT FOUND SET vNum02=1;
                          OPEN cur2;
                           cur2loop:LOOP  /*开始第二个循环*/
                              FETCH cur2 INTO sId02,sValue02;
                              BEGIN
    /*定义第三个游标*/
                DECLARE vNum03 int default 0 ;
                DECLARE sValue03 varchar(100);
        DECLARE sId03 int(36);
                   DECLARE cur3 CURSOR FOR SELECT keynum,key_word FROM key_word; /*找出key_word表中的值*/
                DECLARE CONTINUE HANDLER FOR NOT FOUND SET vNum03=1;  
         OPEN cur3;
                                   cur3loop:LOOP /*开始第三个循环*/
                                      FETCH cur3 INTO sId03,sValue03;
                                        IF sValue02=sValue03 THEN /*如果在key_word中找到存在的值,将值出入对照表中,并将更新idtable中的对应单元*/
                                           INSERT INTO key_contrast(keynum,stuffno) VALUES(sId03,sId02);
                                           UPDATE idtable SET sValue01=sId03+0.1;
                                        ELSE    /*如果不在key_word中会去key_word_temp中查找*/
                                           BEGIN 
                                              /*定义第四个游标*/
                  DECLARE vNum04 int default 0 ;
                 DECLARE sValue04 varchar(100);
                                              DECLARE sValue04_1 varchar(100);
         DECLARE sId04 int(36);
                    DECLARE cur4 CURSOR FOR SELECT keynum,key_word FROM key_word_temp;
                 DECLARE CONTINUE HANDLER FOR NOT FOUND SET vNum04=1;  
                                              OPEN cur4;
        cur4loop:LOOP
                                                    FETCH cur4 INTO sId04,sValue04;
                                                       IF sValue02=sValue04 THEN  /*如果找到会进行同样的插入更新操作*/
                                                         INSERT INTO key_contrast(keynum,stuffno) VALUES(sId04+0.1,sId02); 
         UPDATE idtable SET sValue01=sId04;
                                                        ELSE    /*如果没有会先插入再查询出来,在进行插入更新*/
                                                          INSERT INTO key_word_temp(key_word) VALUES(sValue02);
                                                          SELECT keynum into sValue04_1  FROM key_word_temp WHERE key_word=sValue02;
                                                          INSERT INTO key_contrast(keynum,stuffno) VALUES(sValue04_1+0.1,sId02); 
          UPDATE idtable SET sValue01=sId04+0.1;
                                                        END IF;
                                                    IF vNum04=1 THEN
    LEAVE cur4loop;
                                                    END IF;
                                                END LOOP cur4loop;
                                              CLOSE cur4;  /*第四个游标结束*/
                                           END;
                                        END IF;
                                     IF vNum03=1 THEN
                                       LEAVE cur3loop;
                                     END IF;
                                   END LOOP cur3loop;
                                 CLOSE cur3;  /*第三个游标结束*/                         
                              END; 
                              IF vNum02=1 THEN
                                LEAVE cur2loop;
                               END IF;
                            END LOOP cur2loop;
                          CLOSE cur2;  /*第二个游标结束*/
         END;

                IF vNum01=1 THEN
              LEAVE cur1loop;
        END IF;
            END LOOP cur1loop; /*结束第一个游标*/
          CLOSE cur1; /*关闭游标*/END /*过程结束*/ 
    $