我用存储过程建的一个临时表,执行后删除不掉了,INNODB表。

解决方案 »

  1.   

    你的代码是什么?错误信息是什么,建议尽可能的提供信息,否则别人很难猜测你的问题是什么?mysql> create temporary table t_temp(id int) engine=innodb;
    Query OK, 0 rows affected (0.05 sec)mysql> insert into t_temp values (1);
    Query OK, 1 row affected (0.05 sec)mysql> select * from t_temp;
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)mysql> drop table t_temp;
    Query OK, 0 rows affected (0.05 sec)mysql>
      

  2.   

    drop table pmc_worknolist;
    错误为:
    error 1051(42s02):unknow table "pmc_worknolist"
      

  3.   

    你有这个表吗?!临时表的生存期只是在session内,当你的connection断开后,这个临时表就会被MySQL自动删除。
      

  4.   

    我在SQLyogEnt中能看到这个表,但是删除不掉,提示说没有这个表。
    这是建表代码,放在存储过程中
    DROP TABLE IF EXISTS PMC_WorkNoList;
    CREATE TABLE PMC_WorkNoList(
      FInterID INT DEFAULT 1, #内码,排序用的
      FID INT NULL,
      FEntryID INT NULL,  #序列号
      FMethodID INT NULL,  #方法标号
      FWorkNo VARCHAR(45) NULL,    #工程单号
      FCustomerName VARCHAR(45) NULL,#客户
      FName VARCHAR(128)  NULL,   #物料名称
      FYSSL DECIMAL(28,10) NULL,        #订单实数
      FZDSS DECIMAL(28,10) NULL, #最低实数
      FBPSL DECIMAL(28,10) NULL, #本批数量
      FJGSL DECIMAL(28,10) NULL, #加工数量
      FDeliveryDate VARCHAR(128) NULL,    #交期
      FMadeWidth DECIMAL(28,10) NULL,  #开纸长
      FMadeLong DECIMAL(28,10) NULL,  #开纸宽
      FLevel VARCHAR(128) NULL,  #纸材
      FBang INT,  #磅数
      FSize VARCHAR(50) NULL,  #纸度
      FNote VARCHAR(256) NULL,
      FPlanHour DECIMAL(10,2),
      FColor VARCHAR(128) NULL
    ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
    这个存储过程是有人在用的,是不是我上午我修改存储过程时候有人用了这个,然后出现错误了
      

  5.   


    楼主啊,你这可不叫"临时表"啊。 这不过是个普通表。show tables 看一下有没有这个表 PMC_WorkNoList;?
    然后检查一下数据库文件夹中有没有这个 PMC_WorkNoList.FRM建议贴一下你的储存过程的代码。 仅从这个create table语句看不出什么。
      

  6.   

    是一般的表嘛,直接DROP TABLE就可以了,估计这个表是被破坏了,你在目录中查找PMC_WorkNoList*。*
      

  7.   

    show tables 有这个表
    数据库文件夹下也有PMC_WorkNoList.FRM
    代码如下:
    DELIMITER $$DROP PROCEDURE IF EXISTS `wincodb`.`P_GetBosCombinedBZ`$$CREATE DEFINER=`root`@`%` PROCEDURE `P_GetBosCombinedBZ`($M_FOrder INT,$M_FDate VARCHAR(45),$M_FClassID INT)
    BEGIN
    DECLARE $T_FWorkNo VARCHAR(50) CHARACTER SET utf8;
    DECLARE $T_FInterID,$maxCount,$j,$T_FMethodID,$T_FID INT;
    #创建光标
    DECLARE $done INT DEFAULT 0;
    DECLARE PMC_CH CURSOR FOR
    SELECT FWorkNo,FMethodID,FID
    FROM PMC_WorkNoList
    ORDER BY FEntryID;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET $done=1;
    DROP TABLE IF EXISTS PMC_WorkNoList;
    CREATE TABLE PMC_WorkNoList(
      FInterID INT DEFAULT 1, #内码,排序用的
      FID INT NULL,
      FEntryID INT NULL,  #序列号
      FMethodID INT NULL,  #方法标号
      FWorkNo VARCHAR(45) NULL,    #工程单号
      FCustomerName VARCHAR(45) NULL,#客户
      FName VARCHAR(128)  NULL,   #物料名称
      FYSSL DECIMAL(28,10) NULL,        #订单实数
      FZDSS DECIMAL(28,10) NULL, #最低实数
      FBPSL DECIMAL(28,10) NULL, #本批数量
      FJGSL DECIMAL(28,10) NULL, #加工数量
      FDeliveryDate VARCHAR(128) NULL,    #交期
      FMadeWidth DECIMAL(28,10) NULL,  #开纸长
      FMadeLong DECIMAL(28,10) NULL,  #开纸宽
      FClassName VARCHAR(128) NULL,  #纸料
      FPlanHour DECIMAL(10,2),
      FNote VARCHAR(256) NULL
    ) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
    IF($M_FDate='')THEN
      INSERT INTO PMC_WorkNoList(FWorkNo,FCustomerName,FName,FYSSL,FZDSS,FBPSL,FJGSL,FDeliveryDate,FMadeWidth,
      FMadeLong,FID,FEntryID,FMethodID,FNote,FClassName,FPlanHour)
      SELECT A.FBillNO,A.FCustomerName,A.FName,A.FYSSL,A.FZDSS,B.FBPSL,B.FJGSL,B.FDeliveryDate,A.FMadeWidth0,A.FMadeLong0
            ,B.FID,B.FEntryID,B.FMethodID,B.FNote,A.FlevelName,B.FPlanHour
      FROM WincoBosCombinedPmc A,WincoBosCombinedPmcEntry B
      WHERE(A.FBillNo=B.FWorkNo)AND(B.FOrder=$M_FOrder)AND(B.FMethodID!=2)
      ORDER BY B.FMethodID,B.FEntryID;
    ELSE
      INSERT INTO PMC_WorkNoList(FWorkNo,FCustomerName,FName,FYSSL,FZDSS,FBPSL,FJGSL,FDeliveryDate,FMadeWidth,
      FMadeLong,FID,FEntryID,FMethodID,FNote,FClassName,FPlanHour)
      SELECT A.FBillNO,A.FCustomerName,A.FName,A.FYSSL,A.FZDSS,B.FBPSL,B.FJGSL,B.FDeliveryDate,A.FMadeWidth0,A.FMadeLong0
            ,B.FID,B.FEntryID,B.FMethodID,B.FNote,A.FlevelName,B.FPlanHour
      FROM WincoBosCombinedPmc A,WincoBosCombinedPmcEntry B
      WHERE(A.FBillNo=B.FWorkNo)AND(B.FOrder=$M_FOrder)AND(B.FDate=$M_FDate)AND(B.FMethodID!=2)
      ORDER BY B.FMethodID,B.FEntryID;
    END IF;
    SET $maxCount=0;
    SET $j=0;
    SELECT SUM(FInterID) INTO $maxCount FROM PMC_WorkNoList
    WHERE(FMethodID!=2)
    GROUP BY FInterID;
    OPEN PMC_CH;
    REPEAT
      FETCH PMC_CH INTO $T_FWorkNo,$T_FMethodID,$T_FID;
      IF NOT $done THEN
      IF($T_FMethodID=3)OR($T_FMethodID=4)THEN
        UPDATE PMC_WorkNoList
        SET FEntryID=$maxCount+1
        WHERE(FWorkNo=$T_FWorkNo)AND(FID=$T_FID);
        UPDATE WincoBosCombinedPmcEntry
        SET FEntryID=$maxCount+1
        WHERE(FWorkNo=$T_FWorkNo)AND(FID=$T_FID);
        SET $maxCount=$maxCount+1;
      ELSE
        UPDATE PMC_WorkNoList
        SET FEntryID=$j+1
        WHERE(FWorkNo=$T_FWorkNo)AND(FID=$T_FID);
        UPDATE WincoBosCombinedPmcEntry
        SET FEntryID=$j+1
        WHERE(FWorkNo=$T_FWorkNo)AND(FID=$T_FID);
        SET $j=$j+1;
      END IF;
      END IF;
    UNTIL $done END REPEAT;
    CLOSE PMC_CH;
    IF( $M_FDate='')THEN
      SELECT A.FID,A.FEntryID,A.FMethodID,A.FWorkNo,A.FCustomerName,A.FName,A.FYSSL,A.FZDSS,
      A.FDeliveryDate,A.FMadeWidth,A.FMadeLong,A.FBPSL,A.FJGSL,A.FNote,A.FClassName,A.FPlanHour
      FROM  PMC_WorkNoList A,WincoBosCombinedPmcEntry B
      WHERE(A.FID=B.FID)AND(B.FClassID=$M_FClassID)  
      ORDER BY A.FEntryID,A.FDeliveryDate;
    ELSE
      SELECT *  FROM  PMC_WorkNoList ORDER BY FEntryID,FDeliveryDate;
    END IF;
    DROP TABLE PMC_WorkNoList;
    END$$DELIMITER ;
    执行的时候错误:Unknown table 'pmc_worknolist' 
    将'pmc_worknolist'换成'pmc_worknolist1'后就无问题。
    在过程中已经删除掉该表了,为什么在库中还有该表呢?弄不明白
      

  8.   

    估计你的存储过程执行中异常中断了,没有执行drop table,show table 有,.FRM文件也在,那试一下check table PMC_WorkNoList;;然后看一下系统的信息是什么?
    如果可以就用repair tabel PMC_WorkNoList; 修复一下。然后再drop
      

  9.   

    Table                 Op Msg_type    Msg_text
    wincodb.pmc_worknolist check error     Table 'wincodb.pmc_worknolist' doesn't exist
      

  10.   

    但执行repair tabel PMC_WorkNoList; 报错
    错误码: 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 'tabel PMC_WorkNoList' at line 1
      

  11.   

    不好意思,table 字符输错了。
    repair table PMC_WorkNoList;
    drop table PMC_WorkNoList;
    结果:
    (1 row(s) returned)
    Execution Time : 00:00:00:016
    Transfer Time  : 00:00:00:000
    Total Time     : 00:00:00:016错误码: 1051
    Unknown table 'pmc_worknolist'Execution Time : 00:00:00:000
    Transfer Time  : 00:00:00:000
    Total Time     : 00:00:00:000
      

  12.   

    table
    不好意思,拼写错了。
    repair table xxx
      

  13.   

    知道你的问题所在了,你的表是innodb存储引擎的,估计是你执行过程中出了什么异常。导致虽然在数据文件中的数据删除后,表的结构文件没有来得及或其它原因未能同时从操作系统中删除。解决方法也很简单。直接到文件夹中把这个  PMC_WorkNoList.frm 删除即可。
      

  14.   

    把my.ini中的
    Inndb_force_recovery=1
    强制不进行检查,但仍旧不行,真不知道该怎么做了?
      

  15.   

    搜索PMC_WorkNoList*.*
    删除试试
      

  16.   

    删除那个文件mysql会不会出问题呢,先测试一下