-- 创建一个查询图书的编号、书名、价格和库存的存储过程
delimiter //
create procedure selectPro1()
begin
select book_id, book_name, price, store from bookinfo;
end //
delimiter ;
用call
关键字调用存储过程:
-- 调用存储过程
call selectPro1();
-- 创建查询图书编号、书名、图书类别的存储过程
delimiter //
create procedure selectPro2()
begin
select book_id, book_name, category from bookinfo
join bookcategory on bookinfo.book_category_id = bookcategory.category_id;
end //
delimiter ;
-- 调用存储过程
call selectPro2();
-- 设计一个存储过程,删除一个读者,并输出剩余读者的个数
delimiter //
create procedure getReaderNum(in cid char(18), out num int)
begin
delete from readerinfo where card_id = cid;
select count(card_id) into num from readerinfo;
end //
delimiter ;
-- 调用存储过程
select * from readerinfo;
-- 定义一个变量@num接收剩余读者的个数
call getReaderNum('210210199901018888', @num);
-- 查询剩余读者的个数
select @num;
-- 设计一个存储过程,实现交换两个数的处理
delimiter //
create procedure switchTwoNum(inout num1 int, inout num2 int)
begin
declare temp int default 0;
set temp = num1;
set num1 = num2;
set num2 = temp;
end //
delimiter ;
-- 声明2个变量并赋值
set @num1 = 3, @num2 = 5;
-- 调用存储过程
call switchTwoNum(@num1, @num2);
-- 执行存储过程之后的2个变量的值
select @num1, @num2;
-- 删除存储过程:存在就删除,不存在就报错
drop procedure getReaderNum;
-- 使用If Exists 删除存储过程:存在就删除,不存在给与警告提示
drop procedure if exists switchTwoNum;
-- 设计比较两个数大小的存储过程
-- 方式1:使用if循环语句创建存储过程
delimiter //
create procedure compareNum(in num1 int, in num2 int, out result varchar(20))
begin
if num1 < num2 then
set result = 'num1 小于 num2';
elseif num1 = num2 then
set result = 'num1 等于 num2';
else
set result = 'num1 大于 num2';
end if;
end //
delimiter ;
-- 设计比较两个数大小的存储过程
-- 方式1:使用case循环语句创建存储过程
delimiter //
create procedure compareNum1(in num1 int, in num2 int, out result varchar(20))
begin
case
when num1 < num2 then
set result = 'num1 小于 num2';
when num1 = num2 then
set result = 'num1 等于 num2';
else
set result = 'num1 大于 num2';
end case;
end //
delimiter ;
-- 调用存储过程
call compareNum(5, 10, @result);
-- 查看结果
select @result;
-- 设计一个向图书类别表插入n条测试数据的存储过程
delimiter //
create procedure insertTestData(in count int)
begin
declare n int default 0;
select max(category_id) into n from bookcategory;
while count > 0 do
set n = n + 1;
insert into bookcategory values(n, concat('图书类别', n), floor(rand()*n));
set count = count - 1;
end while;
end //
delimiter ;
-- 调用存储过程,插入10条数据
call insertTestData(10);