有表mp,内有字段en_name,保存的是地区的名称:
比如:
xj
js
等。
有表data_cycle,内有字段dcycle:
数据如下:
5m
2d
等。
想循环创建表
xj_status_5m
xj_status_2d
js_status_5m
js_status_2d创建了存储过程如下,但是在执行过程中老是报语法错误。
十分不解。
求教。
Mysql 版本 2.1.46CREATE PROCEDURE `Create_Table`(
)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE name varchar(200) ;
DECLARE id varchar(200) ;
DECLARE b varchar(200) ;
DECLARE cur1 CURSOR FOR
select a.en_name, b.dcycle from mp a, data_cycle b;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO name,id;
IF NOT done THEN
set b=concat('create table ',concat(concat(name,'_','status'), '_', id),
'(`host` varchar(16) NOT NULL,
`port` int(11) NOT NULL default 21108,
`runtime` bigint(10) default NULL,
`querytime` datetime default NULL,
`SysStatus` int(11) default 0,
`SysDiskRemain` double(10,3),
`SysDiskTotal` double(10,3),
`SysCpuNum` int(11),
`SysCpuIdle` double(5,2),
`SysLoadAverage` double(8,5),
`SysMemFree` double(10,3),
`SysMemTotal` double(10,3),
`SysSwapFree` double(10,3),
`SysSwapTotal` double(10,3) ) ENGINE=MyISAM DEFAULT CHARSET=utf8'
);
SET @E=b;
PREPARE stmt1 FROM @E;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END;
比如:
xj
js
等。
有表data_cycle,内有字段dcycle:
数据如下:
5m
2d
等。
想循环创建表
xj_status_5m
xj_status_2d
js_status_5m
js_status_2d创建了存储过程如下,但是在执行过程中老是报语法错误。
十分不解。
求教。
Mysql 版本 2.1.46CREATE PROCEDURE `Create_Table`(
)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE name varchar(200) ;
DECLARE id varchar(200) ;
DECLARE b varchar(200) ;
DECLARE cur1 CURSOR FOR
select a.en_name, b.dcycle from mp a, data_cycle b;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO name,id;
IF NOT done THEN
set b=concat('create table ',concat(concat(name,'_','status'), '_', id),
'(`host` varchar(16) NOT NULL,
`port` int(11) NOT NULL default 21108,
`runtime` bigint(10) default NULL,
`querytime` datetime default NULL,
`SysStatus` int(11) default 0,
`SysDiskRemain` double(10,3),
`SysDiskTotal` double(10,3),
`SysCpuNum` int(11),
`SysCpuIdle` double(5,2),
`SysLoadAverage` double(8,5),
`SysMemFree` double(10,3),
`SysMemTotal` double(10,3),
`SysSwapFree` double(10,3),
`SysSwapTotal` double(10,3) ) ENGINE=MyISAM DEFAULT CHARSET=utf8'
);
SET @E=b;
PREPARE stmt1 FROM @E;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END;
解决方案 »
- 花钱买你帮我把linux下的mysql服务 启动起来~~~
- 求一个Sql啊~如何删除~除了pk外,其他字段都相同的行呢?
- 100万的并发数,mysql数据库,并且是一台服务器,面试时候遇到的问题
- 请教一个问题。
- 我的存储过程循环不了
- 做ASP.NET程序存取SQL数据库的时候,总是提示“SQL Server不存在或访问被拒绝”
- mysqldump的恢复问题
- 求助mysql的错误处理!!!急!
- 不能连接mysql server (Win2000 iis中),着急呀!谢谢各位了
- 一个MySql多表联合查询问题,小白在线求指导!~~大神们给指点迷经啊!~~~
- mysql安装后无法启动
- 在mysql数据库中 怎样存取ip比较合理
)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE name varchar(200) ;
DECLARE id varchar(200) ;
DECLARE b varchar(200) ;
DECLARE cur1 CURSOR FOR
select a.en_name, b.dcycle from mp a, data_cycle b;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO name,id;
IF NOT done THEN
set b=concat('create table `',name,'_','status', '_', id,
'` (`host` varchar(16) NOT NULL,
`port` int(11) NOT NULL default 21108,
`runtime` bigint(10) default NULL,
`querytime` datetime default NULL,
`SysStatus` int(11) default 0,
`SysDiskRemain` double(10,3),
`SysDiskTotal` double(10,3),
`SysCpuNum` int(11),
`SysCpuIdle` double(5,2),
`SysLoadAverage` double(8,5),
`SysMemFree` double(10,3),
`SysMemTotal` double(10,3),
`SysSwapFree` double(10,3),
`SysSwapTotal` double(10,3) ) ENGINE=MyISAM DEFAULT CHARSET=utf8'
);
SET @E=b;
PREPARE stmt1 FROM @E;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END;
很惭愧。
sql确实没怎么用过。
这个存储过程,我从表面上看一点也看不出错误。
但是运行的时候总是报set b=concat('create table ',concat(concat(name,'_','status'), '_', id),
'(`host` varchar(16) NOT NULL,
`port` int(11) NOT NULL default 21108,
`runtime` bigint(10) default NULL,
`querytime` datetime default NULL,
`SysStatus` int(11) default 0,
`SysDiskRemain` double(10,3),
`SysDiskTotal` double(10,3),
`SysCpuNum` int(11),
`SysCpuIdle` double(5,2),
`SysLoadAverage` double(8,5),
`SysMemFree` double(10,3),
`SysMemTotal` double(10,3),
`SysSwapFree` double(10,3),
`SysSwapTotal` double(10,3) ) ENGINE=MyISAM DEFAULT CHARSET=utf8'
);附近有错b表很简单:就一个字段dcycle.
-------|
dcycle |
-------|
5m |
-------|
2h |
-------|
+--------+
| dcycle |
+--------+
| 5m |
| 30m |
| 2h |
| 1d |
+--------+
版主要你贴的是
SET @E=b;
select b;
PREPARE stmt1 FROM @E;
EXECUTE stmt1在存储过程里加上红色部分的,然后执行存储过程,贴出打印出来的B的内容。
无法执行的。
我是用过Mysql-Front第三方数据库软件执行的。
`port` int(11) NOT NULL default 21108,
`runtime` bigint(10) default NULL,
`querytime` datetime default NULL,打印了一下,只有上面的内容。
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE n1 VARCHAR(10);
DECLARE n2 VARCHAR(10);
DECLARE cur1 CURSOR FOR SELECT * FROM en_name,data_cycle;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
FETCH cur1 INTO n1,n2;
WHILE done=0 DO
SET @sqlstmt=CONCAT('create table ',n1,'_',n2,'(id int)');
SET @b=CONCAT('create table ',CONCAT(CONCAT(n1,'_','status'), '_', n2),
'(`host` varchar(16) NOT NULL,
`port` int(11) NOT NULL default 21108,
`runtime` bigint(10) default NULL,
`querytime` datetime default NULL,
`SysStatus` int(11) default 0,
`SysDiskRemain` double(10,3),
`SysDiskTotal` double(10,3),
`SysCpuNum` int(11),
`SysCpuIdle` double(5,2),
`SysLoadAverage` double(8,5),
`SysMemFree` double(10,3),
`SysMemTotal` double(10,3),
`SysSwapFree` double(10,3),
`SysSwapTotal` double(10,3) ) ENGINE=MyISAM DEFAULT CHARSET=utf8'
);
PREPARE stmt1 FROM @b;
EXECUTE stmt1 ;
DEALLOCATE PREPARE stmt1;
FETCH cur1 INTO n1,n2;
END WHILE;
END$$DELIMITER ;
不过还是没有明白,为什么我贴的代码会有语法错误.