create procedure - wwq0912/mysql GitHub Wiki
1:
DROP PROCEDURE IF EXISTS test_procedure;
DELIMITER $$
CREATE PROCEDURE test_procedure(
IN classId INT,
IN studentAge INT,
IN studentName varchar(45)
)
BEGIN
CREATE TABLE IF NOT EXISTS `student` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CLASS_ID` int(11) NOT NULL,
`STUDENT_AGE` int(11) NOT NULL,
`STUDENT_NAME` varchar(45) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `FK_CLASS_ID` (`CLASS_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
insert into student set CLASS_ID=classId, STUDENT_AGE=studentAge, STUDENT_NAME = studentName;
END
$$
DELIMITER ;
调用
call test_procedure(1, 18, 'name1');
call test_procedure(1, 18, 'name2');
2: 不支持动态表名
DROP PROCEDURE IF EXISTS test_create_table_procedure;
DELIMITER $$
CREATE PROCEDURE test_create_table_procedure(
IN tableName varchar(45)
)
BEGIN
CREATE TABLE IF NOT EXISTS tableName (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CLASS_ID` int(11) NOT NULL,
`STUDENT_AGE` int(11) NOT NULL,
`STUDENT_NAME` varchar(45) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `FK_CLASS_ID` (`CLASS_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
END
$$
DELIMITER ;
调用
call test_create_table_procedure('testProcedure');
3:怎么实现动态表名
DROP PROCEDURE IF EXISTS test_create_table_procedure;
DELIMITER $$
CREATE PROCEDURE test_create_table_procedure(IN TEMP_TABLE_NAME varchar(100))
BEGIN
SET @sql = concat('CREATE TABLE ', TEMP_TABLE_NAME, ' (`id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=UTF8');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
deallocate prepare stmt1; ###释放执行过程中的资源
END
$$
DELIMITER ;
调用
call test_create_table_procedure('testProcedure');