10 MySQL存储过程使用表名做参数

MySQL存储过程使用表名做参数动态创建表的例子。


DROP PROCEDURE IF EXISTS `testtable`;
CREATE PROCEDURE `testtable`(IN tname varchar(64))
BEGIN
SET @sqlcmd = CONCAT('CREATE TABLE ', tname, ' (id int NOT NULL AUTO_INCREMENT, name varchar(64) DEFAULT NULL, PRIMARY KEY (`id`))');
PREPARE stmt FROM @sqlcmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
call testtable('888');

直接复制新表

1,先建立pf_company_000_account表


DROP TABLE IF EXISTS `pf_company_000_account`;
CREATE TABLE `pf_company_000_account` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `agentid` bigint(20) NOT NULL,
  `account` varchar(255) NOT NULL,
 `name` varchar(255) NOT NULL,
  `state` int(3) NOT NULL COMMENT '状态',
  `password` varchar(255) NOT NULL,
  `lastpasswordtime` datetime DEFAULT NULL COMMENT '最后修改登录密码时间',
  `accounttype` int(255) NOT NULL COMMENT '1:主账号 2:子账号',
 `bankpassword` varchar(255) DEFAULT NULL,
  `time` datetime NOT NULL,
  `pwdtime` datetime DEFAULT NULL,
  `pwdcount` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



2,建立存储,传入参数就就建立新表

DROP PROCEDURE IF EXISTS `testtable`;
CREATE PROCEDURE `testtable`(IN companycode varchar(64))
BEGIN
    DECLARE t_error INTEGER DEFAULT 0;  
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 
    START TRANSACTION;

    set @sqlstr = CONCAT("create table pf_company_", companycode, "_account", " like pf_company_000_account");
    PREPARE execsql FROM @sqlstr;
    EXECUTE execsql;
    IF t_error = 1 THEN  
        ROLLBACK;  
    ELSE  
            COMMIT;  
    END IF;
END

调用存储:

call testtable('888');

你可能感兴趣的:(10 MySQL存储过程使用表名做参数)