call 存储名称(参数)
举例:
delimiter //
create procedure hz1( )
BEGIN
select * from emp ;
select * from dept;
END
//
call hz1()
in 输入参数
创建一个in有输入参数的存储过程
#in 表示输入参数
delimiter //
create procedure hz2( in x int )
BEGIN
select * from emp where dept2=x;
select * from dept where dept1=x;
END
//
call hz2(101)
in 输入参数
in n int 输入参数n,n的数据类型是int
out 输出参数
创建一个out ,有输入参数的存储过程
delimiter //
create procedure pro_5( out n int)
select sid into n from emp where name=“张三”;
end
//
call pro_5( @n)
select @n
注意:调用时没有任何输出,只能把调用的结果赋值给传参的参数,调用显示存储过程的值。
in 和out 结合使用
案例1:
delimiter //
drop procedure if exists pro1;
create procedure pro1(in n int,out age int)
BEGIN
select emp_age into age from emp where emp_id=n;
end
//
call pro1(2,@age)
select @age
案例2:
delimiter //
create procedure hz5( in x int ,out y int )
BEGIN
select class into y from student2 where english=x;
END
//
call hz5(56,@y)
select @y
inout 参数
delimiter //
create procedure pro_6( inout n int)
begin
set n:=n+1;
end
//
set @n=2
call pro_6(@n)
select @n
如果输出的是字符:(out,name char(20))
注意点:必须要加字符长度,不加字符长度就只会显示name的第一个字符
四、用户变量:定义语法
set @变量名 ; 赋值语法:面试题:
1、你会存储吗?存储的结构?怎么实现?
2、存储在工作中用来干嘛? 造数据
注意点:
增强
drop procedure if exists 存储名; #增强语句的健壮性,判断并删除存在的存储
drop table if exists 表名; #增强语句的健壮性,判断并删除存在的表
declare i int default 0; declare 声明变量 变量名称i int 数据类型 默认为0
注意:declare 声明变量后面可以接sql语句,也可以默认值,也可以设置值
方式1:declare i int default (select count (id) from emp )
方式2:declare i int default 0;
两张表的字段一致,插入数据:
方法一:insert into 目标表 select * from 来源表;#插入全部数据
方法二:insert into 目标表(字段 )select 字段1,字段2 from 来源表。
循环语句
三种格式:
WHILE……DO……END WHILE
REPEAT……UNTIL END REPEAT
LOOP……END LOOP
while 循环语句的结构:
格式
while 条件DO
执行语句
end while;
案例:
while(i<10)DO
insert into money(money) values(100);
set i=i+1;
end while;
if判断语句
if 条件 THEN
执行sql1
else
执行sql2
end if;
if单分支案例:
场景一:
delimiter //
drop table if exists money;
drop procedure if exists pro5;
create procedure pro5(in a int)
begin
if a >10 THEN
select * from dept ;
else
select * from emp ;
END if;
end
//
call pro5(12)
delimiter //
create procedure ff(in x int)
– declare i int 0;
BEGIN
if x>3 THEN
select * from emp ;
else
select * from dept;
end if;
end
//
call ff(4)
if 多分支
在if判断语句中,有几个判断分支 if ,就有几个结束语 end if
if 条件1 THEN
执行select * from student limit 0,2;
else if 条件2 THEN
执行select * from student limit 0,4;
else if 条件3 THEN
执行select * from student limit 0,6;
else
select * from student;
end if;
end if;
end if;
案例:场景一
create procedure pr_add ( in a int)
begin
if a >10 THEN
select * from dept ;
else if a>0 and a<10 then
select * from emp ;
else if a=10 then
select * from dept,emp where dept1=dept2 ;
else
select count(name) from emp ;
end if;
end if;
end if;
end
//
call pr_add(-1)
注意事项:
1.分隔符//必须接在 delimiter 后面,不能换行.
2.存储过程名称后面必须接() 例子:pro_1()
3.sql end if 语句必须用;结尾.
4.未调用前 sql 语句未使用.调用后才生效.
5.加强存储过程的功能(表或存储功能都要加分号)
6.判断存储过程是否存在,存在就删除,不存在就不操作. if exists