第1关:创建存储过程1
任务描述
本关任务:
1.新建一个没有参数的存储过程p1,显示product表中所有数据。
2.调用p1。
USE petstore;
create procedure p1() #新建一个没有参数的存储过程
select * from product;
call p1(); #调用p1
########Begin#######
#######End######
####相关知识
为了完成本关任务,你需要掌握:
语法
语法:CREATE PROCEDURE语句
CREATE PROCEDURE 存储过程名 ([参数[,...]]) 存储过程体
存储过程可以有0到多个参数,参数格式如下:
[ IN | OUT | INOUT ] 参数名 类型
IN - 输入参数,输入参数使数据可以传递给一个存储过程。
OUT - 输出参数,返回一个结果作为存储过程的输出
INOUT - 输入/输出参数,既可以充当输入参数也可以充当输出参数。
存储过程也可以不加参数,但是名称后面的括号是不可省略的。
存储过程体:这是存储过程的主体部分,包含了在过程调用的时候必须执行的语句。
这个部分总是以BEGIN开始,以END结束。
但是,当存储过程体中只有一个SQL语句时可以省略BEGIN-END标志。
第2关:触发器
任务描述
本关任务:
1.创建一个表table1,其中只有一列a。在表上创建一个触发器,每次插入操作时,将用户变量str的值设为“TRIGGER IS WORKING”。
2.向table1中插入一行数据(如:让列a的值为10)。
3.查看str的值。
USE petstore;
create table table1(a integer); #创建一个触发器,每次插入操作时
create trigger table1_insert after insert
on table1 fro each row
set @str='TRIGGER IS WORKING';
insert into table1 values(10); #插入一行数据
select @str; #查看@str的值
########Begin#######
#######End######
第3关:存储过程
任务描述
本关任务:
1.新建一个带输入/输出参数的存储过程p3,输入商品名称,输出product表中这个商品名称对应的进价(unitcost)。
2.用“金鱼”为输入参数,定义用户变量@price作为p3的输出参数调用p3。
3.用select显示调用结果。
USE petstore;
delimiter $$ #结束符修改为其他字符
create procedure p3(in sp_name char(20),out price float) #新建一个带输入/输出参数的存储过程
Begin
select unitcost into price from product where name=sp_name;
end $$
delimiter ;
call p3('金鱼',@price); #调用p3
select @price; #查看调用结果
########Begin#######
#######End######
相关知识
为了完成本关任务,你需要掌握:
语法
语法:CREATE PROCEDURE语句
CREATE PROCEDURE 存储过程名 ([参数[,...]]) 存储过程体
存储过程可以有0到多个参数,参数格式如下:
[ IN | OUT | INOUT ] 参数名 类型
IN - 输入参数,输入参数使数据可以传递给一个存储过程。
OUT - 输出参数,返回一个结果作为存储过程的输出
INOUT - 输入/输出参数,既可以充当输入参数也可以充当输出参数。
存储过程也可以不加参数,但是名称后面的括号是不可省略的。
存储过程体:这是存储过程的主体部分,包含了在过程调用的时候必须执行的语句。
这个部分总是以BEGIN开始,以END结束。
但是,当存储过程体中只有一个SQL语句时可以省略BEGIN-END标志。
第4关:存储函数1
任务描述
本关任务:
1.新建一个没有参数的函数f1(),返回注册用户总数。
2.调用这个函数。
USE petstore;
delimiter $$ #结束符修改为其他字符
create function f1() #新建一个没有参数的函数
returns int
Begin
return (select count(*) from account);
end $$
delimiter ;
select f1(); #调用函数
########Begin#######
#######End######
相关知识
为了完成本关任务,你需要掌握:
语法
第5关:存储函数2
任务描述
本关任务:
1.编写带参数的函数f2(),返回account表中指定用户id的用户名。
2.调用这个函数,返回u0001号用户的用户名。
USE petstore;
delimiter $$ #结束符修改为其他字符
create function f2(id char(20)) #新建带参数的函数
returns char(20)
Begin
return (select fullname from account where userid=id);
end $$
delimiter ;
select f2('u0001'); #调用函数
########Begin#######
#######End######
####相关知识
语法
第6关:流程控制与循环:求a的i次方
任务描述
本关任务:
1.编写一个带参数的存储过程p1,求a的i次方
2.调用p1,求8的5次方(用@ret存储运行结果)。
USE petstore;
delimiter $$ #结束符修改为其他字符
create procedure p1(in a int ,int i int,out ret int) #新建一个带参数的存储过程
Begin
set ret=1;
while i>0 do
set ret=ret*a;
set i=i-1;
end while;
end $$
delimiter ;
call p3(8,5,@ret); #调用p1
select @ret; #查看调用结果
########Begin#######
#######End######
或者
USE petstore;
delimiter $$ #结束符修改为其他字符
create procedure p1(in a int ,out ret int) #新建一个带参数的存储过程
Begin
declare i int default 5;
set ret=1;
while i>0 do
set ret=ret*a;
set i=i-1;
end while;
end $$
delimiter ;
call p3(8,@ret); #调用p1
select @ret; #查看调用结果
########Begin#######
#######End######