sql编程&&存储过程(二)
un2$$
create function fun2() returns varchar(20)
begin
set @i = 1;
set @num = 0;
w:while @i<=10 do
if @i =5 then -- 如果循环到了5就退出整个循环
-- set @i = @i+1;
leave w;
end if;
set @i = @i+1;
set @num = @num + @i;
end while w;
return @num;
end
$$
delimiter ;
带参数的
delimiter $$
drop function if exists sayhello$$
create function sayhello(name varchar(10)) returns varchar(20)
begin
return concat( 'hello',name);
end
$$
delimiter ;
学号函数
delimiter $$
drop function if exists sayhello$$
create function sno(c_id int) returns char(20)
begin
declare s_no char(10);
declare class_name char(10);
select stu_no from join_student where chass_id = c_id into s_no
if isnull(s_no) then
-- 没有学生 返回001
select c_name from join_class where id = c_id into class_name ;
return concat(class_name,'001');
else
-- 有的话 最大值+1
return concat(class_name, lpad(right(s_no,3) +1 ,3,'0'));
end if;
end
$$
delimiter ;
控制流程
分支
if 条件1 then
条件1满足语句
else if 条件2 then
条件2满足的语句
else
都不满足的语句
End if;
循环
while 条件 do
循环体
循环的提前终止
break 相当于 mysql里面的 leave退出整个循环
continue 没有 但是有 iterate 退出当前循环
注意 不是根据 leave 和 iterate 的位置来跳出的 而是根据循环标签来跳出的
给循环起个名字 :
标签 : while
end while 标签
运算符
算数运算符 + - * /
逻辑运算符 and or not !
关系运算符 > < >= <= == != = ===
注释
行注释 # -- 块注释 /* xxx */
结束符
默认是; 也可以是 \g 也可以是 \G 当然 ;和\g是一样的 \G是分组显示 \g和\G是命令行独有的
除此之外 我们还可以用 delimiter 来修改语句结束符 delimiter $$
存储过程
存储过程 类似于一个函数 就是把一段sql 语句 封装成一个整体 当要使用的时候 可以调用这个存储过程来实现
在封装的语句体里面 可以用 if else case while 等控制结构
列也可以当成变量来看 所以 存储过程 可以当成一个程序来看 可以进行 sql编程
查看现有的存储过程
Show procedure status;
删除存储过程
Drop procedure 存储过程名称;
写一个存储过程
Create procedure p1()
Begin
Select * from g;
End$
调用存储过程
Call p1();
存储过程和函数的区别 一个名字不同 一个 没有return 其他都一样