存储过程初步学习

以前学了存储过程,太长时间没用忘光了先写个简单的

 

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//

注意创建表的时候的引号一定要是反引号否则报错

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值