赞
踩
函数能在查询语句中使用比如
select * from store where Get_CityAndProvince(area) like '杭州市'
Get_CityAndProvince()就是函数。
存储过程单独使用,是用来完成一些复杂逻辑的,可以进行增删改。
存储过程也相当与一个函数,之所以这么说,一来是它们很相似,二来是因为在有些数据库管理工具如Navicat中,是把存储过程和函数统一放在函数目录下的。
函数的必要性
遇到一个需求,根据地图页面输入的城市名字来显示出数据库中存在的当前城市中店铺。数据库中的店铺的地址字段保存的是”省份,城市,区县”或”省份,城市”或”省份”格式。需要取出城市来进行匹配,可是保存格式不一样根据逗号截取需要判断逗号数量。
如果在应用程序中的解决的话,就是每次取出数据库所有店铺到程序中,然后在应用程序中判断地址的格式,根据不同的格式取出城市。
更好的解决方法就是使用数据库函数,我们只需要创建一个数据库函数,将判断步骤放在数据库,这样应用程序取出的直接是符合查询的数据。
函数的创建
来创建一个判断整数是否大于0的函数。
-- mysql函数
create function ispositive( num int )
returns TINYINT
begin
declare result tinyint;
if num >0 then
set result=true;
else
set result=false;
end if;
return result;
end;
select ispositive(1)
-- sqlserver函数
create FUNCTION IsPositive( @num int )
returns bit
as
begin
declare @result bit
if @num>0
set @result= 1
else
set @result =0
return @result
end
go
select dbo.ispositive(1)

注意:声明函数返回数据类型的关键字是returns不是return!用户定义函数中,用RETURNS 子句指定该函数返回值的数据类型。
-- mysql存储过程
create procedure up_ispositive (num int)
begin
if num>0 then
select 1;
else
select 0;
end if;
end;
call up_ispositive(1)
-- sqlserver存储过程
create proc up_ispositive @num int
as
begin
if @num>0
select 1
else
select 0
end
go
exec up_ispositive -1

1.变量的声明和使用:sqlserver加@,mysql不加@。
2.分号问题:sqlserver加不加分号都可以,在mysql中是必加的。
3.as问题:声明函数(包括存储过程)时,sqlserver加as,mysql不加;在创建视图时都要加
4.括号问题:SQLserver函数必须有括号,存储过程可以加可以不加;mysql函数和存储过程都要加。 【加括号就对了】
5.begin-end问题:sqlserver和mysql都要加。
6.调用存储过程:SQLserver使用exec,mysql使用call。
7.if流程控制:
SQLserver普通的if-else就行了,mysql的语法是
if num >0 then
set result=true;
else
set result=false;
end if;
8.注意:声明函数返回数据类型的关键字是returns不是return!用户定义函数中,用RETURNS 子句指定该函数返回值的数据类型。
9.以上总结来自sqlserver2008和mysql6.10.6,不同版本可能有异。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。