23 个解决方案
#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
可以删除,你的代码
#3
drop table pmc_worknolist;
错误为:
error 1051(42s02):unknow table "pmc_worknolist"
错误为:
error 1051(42s02):unknow table "pmc_worknolist"
#4
你有这个表吗?!
临时表的生存期只是在session内,当你的connection断开后,这个临时表就会被MySQL自动删除。
#5
建表代码是什么?
#6
我在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;
这个存储过程是有人在用的,是不是我上午我修改存储过程时候有人用了这个,然后出现错误了
这是建表代码,放在存储过程中
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;
这个存储过程是有人在用的,是不是我上午我修改存储过程时候有人用了这个,然后出现错误了
#7
楼主啊,你这可不叫"临时表"啊。 这不过是个普通表。
show tables 看一下有没有这个表 PMC_WorkNoList;?
然后检查一下数据库文件夹中有没有这个 PMC_WorkNoList.FRM
建议贴一下你的储存过程的代码。 仅从这个create table语句看不出什么。
#8
是一般的表嘛,直接DROP TABLE就可以了,估计这个表是被破坏了,你在目录中查找PMC_WorkNoList*。*
#9
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'后就无问题。
在过程中已经删除掉该表了,为什么在库中还有该表呢?弄不明白
数据库文件夹下也有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'后就无问题。
在过程中已经删除掉该表了,为什么在库中还有该表呢?弄不明白
#10
估计你的存储过程执行中异常中断了,没有执行drop table,
show table 有,.FRM文件也在,那试一下check table PMC_WorkNoList;;然后看一下系统的信息是什么?
如果可以就用repair tabel PMC_WorkNoList; 修复一下。然后再drop
#11
Table Op Msg_type Msg_text
wincodb.pmc_worknolist check error Table 'wincodb.pmc_worknolist' doesn't exist
wincodb.pmc_worknolist check error Table 'wincodb.pmc_worknolist' doesn't exist
#12
但执行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
错误码: 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
#13
不好意思,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
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
#14
table
不好意思,拼写错了。
repair table xxx
#15
知道你的问题所在了,你的表是innodb存储引擎的,估计是你执行过程中出了什么异常。导致虽然在数据文件中的数据删除后,表的结构文件没有来得及或其它原因未能同时从操作系统中删除。
解决方法也很简单。直接到文件夹中把这个 PMC_WorkNoList.frm 删除即可。
#16
把my.ini中的
Inndb_force_recovery=1
强制不进行检查,但仍旧不行,真不知道该怎么做了?
Inndb_force_recovery=1
强制不进行检查,但仍旧不行,真不知道该怎么做了?
#17
没人知道吗?
#18
搜索PMC_WorkNoList*.*
删除试试
删除试试
#19
试一下看看结果。
#20
删除那个文件mysql会不会出问题呢,先测试一下
#21
测试是可以的,搞定啦,谢谢!
#22
问题解决,结贴吧,你的结贴已经只有 90% 了
#23
这个 我也碰到了。自己测试删除也搞定了。但是根本原因还是没找到!!!!
#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
可以删除,你的代码
#3
drop table pmc_worknolist;
错误为:
error 1051(42s02):unknow table "pmc_worknolist"
错误为:
error 1051(42s02):unknow table "pmc_worknolist"
#4
你有这个表吗?!
临时表的生存期只是在session内,当你的connection断开后,这个临时表就会被MySQL自动删除。
#5
建表代码是什么?
#6
我在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;
这个存储过程是有人在用的,是不是我上午我修改存储过程时候有人用了这个,然后出现错误了
这是建表代码,放在存储过程中
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;
这个存储过程是有人在用的,是不是我上午我修改存储过程时候有人用了这个,然后出现错误了
#7
楼主啊,你这可不叫"临时表"啊。 这不过是个普通表。
show tables 看一下有没有这个表 PMC_WorkNoList;?
然后检查一下数据库文件夹中有没有这个 PMC_WorkNoList.FRM
建议贴一下你的储存过程的代码。 仅从这个create table语句看不出什么。
#8
是一般的表嘛,直接DROP TABLE就可以了,估计这个表是被破坏了,你在目录中查找PMC_WorkNoList*。*
#9
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'后就无问题。
在过程中已经删除掉该表了,为什么在库中还有该表呢?弄不明白
数据库文件夹下也有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'后就无问题。
在过程中已经删除掉该表了,为什么在库中还有该表呢?弄不明白
#10
估计你的存储过程执行中异常中断了,没有执行drop table,
show table 有,.FRM文件也在,那试一下check table PMC_WorkNoList;;然后看一下系统的信息是什么?
如果可以就用repair tabel PMC_WorkNoList; 修复一下。然后再drop
#11
Table Op Msg_type Msg_text
wincodb.pmc_worknolist check error Table 'wincodb.pmc_worknolist' doesn't exist
wincodb.pmc_worknolist check error Table 'wincodb.pmc_worknolist' doesn't exist
#12
但执行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
错误码: 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
#13
不好意思,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
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
#14
table
不好意思,拼写错了。
repair table xxx
#15
知道你的问题所在了,你的表是innodb存储引擎的,估计是你执行过程中出了什么异常。导致虽然在数据文件中的数据删除后,表的结构文件没有来得及或其它原因未能同时从操作系统中删除。
解决方法也很简单。直接到文件夹中把这个 PMC_WorkNoList.frm 删除即可。
#16
把my.ini中的
Inndb_force_recovery=1
强制不进行检查,但仍旧不行,真不知道该怎么做了?
Inndb_force_recovery=1
强制不进行检查,但仍旧不行,真不知道该怎么做了?
#17
没人知道吗?
#18
搜索PMC_WorkNoList*.*
删除试试
删除试试
#19
试一下看看结果。
#20
删除那个文件mysql会不会出问题呢,先测试一下
#21
测试是可以的,搞定啦,谢谢!
#22
问题解决,结贴吧,你的结贴已经只有 90% 了
#23
这个 我也碰到了。自己测试删除也搞定了。但是根本原因还是没找到!!!!