以前学了存储过程,太长时间没用忘光了先写个简单的
DELIMITER //
drop PROCEDURE if exists book_select;
create procedure book_select()
BEGIN
select * from book;
end
//
mysql默认以;为结束,存储过程是一个sql集合,所以我们要改变; 用DELIMITER // 把 ;改成// 结束,在//内的内容是存储过程,在写的时候发现存储过程中,该有的冒号不能少,不该加的冒号不能加,否则报1064错误,例如select * from book;这语句的冒号绝对不能少 否则报1064,创建存储过程的小括号必须带否则报错,调用时没参数可不带小括号有参数必须带
添加的存储过程
DELIMITER //
drop PROCEDURE if exists book_add;
create procedure book_add(num int)
BEGIN
DECLARE i int;
set i=0;
while i<num do
insert into book(bookname,price) values(CONCAT("飞天",i+1),i+1);
SET i=i+1;
end while;
end
//
修改和删除的存储过程就是把查询的存储过程的sql语句改下,没变化.
检测该表是否存在,如果不存在则调用存储过程createSpringboottest_book_procedure(参数)创建表
DELIMITER //
drop PROCEDURE if exists check_table_book;
create procedure check_table_book(id VARCHAR(20))
BEGIN
DECLARE tableName VARCHAR(50);
SET @tableName = concat('book',id);
START TRANSACTION;
SELECT COUNT(*) INTO @tableCount FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='springboottest' AND TABLE_NAME=@tableName;
IF @tableCount<=0 THEN
CALL createSpringboottest_book_procedure(id);
END IF;
COMMIT;
END
//
创建表
DELIMITER //
drop PROCEDURE if exists createSpringboottest_book_procedure;
create procedure createSpringboottest_book_procedure(id VARCHAR(20))
begin
declare sm_results_name varchar(50);
set @sm_results_name = concat('book',id);
set @csql = concat("create table if not exists ",@sm_results_name , " (`id` int(20) NOT NULL AUTO_INCREMENT,`bookname` varchar(100) DEFAULT
NULL,`price` double DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;");
PREPARE create_stmt from @csql;
EXECUTE create_stmt;
end//
注意创建表的时候的引号一定要是反引号否则报错