sql的存储过程实例--循环动态创建表

 

创建一个存储过程,动态添加100张track表
表名track_0 ~~ track_99
注:sql的拼接只能用 CONCAT()函数
-- 创建一个存储过程
CREATE PROCEDURE create_track_table()

begin

    declare num int;              -- 定义一个循环变量
    set num=0;

-- 循环 100 遍
while num <= 99 do
    SET @table_name=CONCAT('track_',num);  -- 定义表名(变量定义表名)    
                                           -- 拼接字符串需要用 concat()函数

    -- 定义创建 table的 sql语句
  SET @sql_begin='CREATE TABLE ';
    SET @sql_end="(
            `mac_id` varchar(16) NOT NULL COMMENT '设备IMEI',
            `mac_type` varchar(12) DEFAULT NULL,
            `channel` varchar(3) DEFAULT 'UDP',
            `type` smallint(2) NOT NULL,
            `x` int(4) NOT NULL,
            `y` int(4) NOT NULL,
            `gpstime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
            `bvalid` varchar(10) DEFAULT '0' COMMENT '0:无效  1:有效  2:基站定位 ',
            `speed` int(2) DEFAULT NULL,
            `dir` int(2) DEFAULT NULL,
            `s1` varchar(32) DEFAULT NULL,
            `s2` varchar(48) DEFAULT NULL,
            `s3` varchar(48) DEFAULT NULL,
            `s4` varchar(128) DEFAULT NULL,
            `ins_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
            `imagefile` char(1) DEFAULT '0',
            `battery` tinyint(4) DEFAULT NULL COMMENT '电量',
            KEY `mac_id` (`mac_id`,`mac_type`,`gpstime`) USING BTREE
            ) ENGINE=MyISAM DEFAULT CHARSET=utf8";

    set @create_sql=CONCAT(@sql_begin,@table_name,@sql_end);   -- 拼接一个完整的sql语句

    PREPARE create_table from @create_sql;              -- 预处理sql语句 (还可以加参数)
    EXECUTE create_table;                               -- 执行

    set num=num+1;

-- 结束循环
end while;
    commit;
end



-- 执行存储过程 CALL create_track_table();

 

posted @ 2017-10-11 10:55  低调人生  阅读(1952)  评论(1编辑  收藏  举报