sql编程&&存储过程(二)

2014-11-24 12:13:04 · 作者: · 浏览: 1
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 其他都一样