当前位置:   article > 正文

SQL中的自定义函数总结_sql自定义函数

sql自定义函数

自定义函数:根据返回值的类型可以分为标量函数(返回单个值)和表值函数(返回一个表) 

Page  174;

SQL中的自定义函数总共有三种


(1)标量函数——标量值函数

语法结构:

CREATE  FUNCTION  function_name(@parameter_name   parameter_data_type) --(@参数名 参数的数据类型)

RETURN date_type   --返回返回值的数据类型

[WITH ENCRYPTION]  --如果指定了 encryption 则函数被加密

[AS]

BEGIN

  function_body --函数体

  RETURN  表达式;

END


--标量函数实例
  1. 1)创建标量函数,计算指定课程号的课程的平均成绩,然后调用该函数查询某门课的平均成绩。*/
  2. create function getavgdegreeofonecourse(@课程号 char(5))
  3. returns float
  4. begin
  5. declare @result float
  6. select @result=avg(degree)
  7. from score
  8. where score.cno=@课程号
  9. return @result
  10. end
(2)表值函数——内联表值函数
语法结构:

CREATE  FUNCTION  function_name(@parameter_name   parameter_data_type) --(@参数名 参数的数据类型)

RETURN table  --返回一张表

[AS]

RETURN(       --返回下面空白部分所写语句中查询的表

)

特点:内敛表值函数支持在WHERE子句中使用参数


  1. /*2)创建内联表值函数,查询指定学号的学生的选课情况(包括学号、姓名、课程号和成绩),然后调用该函数查询某位学生的选课情况,
  2. 再调用该函数将该生某门课的成绩改为100,重新查询该生成绩检查一下改过来了吗。 */
  3. --创建内联表值函数
  4. drop function getxuankeqingkuang
  5. create function getxuankeqingkuang(@学号 char(5))
  6. returns table
  7. return(
  8. select student.sno,student.sname,course.cno,score.degree
  9. from student,course,score
  10. where student.sno=score.sno and score.cno=course.cno
  11. and student.sno=@学号
  12. )
  13. --查询该生选课情况
  14. select *
  15. from dbo.getxuankeqingkuang('101')
  16. --修改该生某门课程的成绩
  17. update dbo.getxuankeqingkuang('101') set degree=100 where cno='3-105'
  18. --重新查询该生成绩
  19. select *
  20. from dbo.getxuankeqingkuang('101')
  21. go

(3)表值函数——多语句表值函数

语法结构:

create function 名称

([{@参数名称 参数类型[=默认值]}[,n]])

returns @局部变量 table(参数名 参数类型)

[with encryption]

[as]

begin

函数体

return 函数返回值

end

相比于内联表值函数的优点:对数据进行多次筛选与合并,弥补了内联表值自定义函数的不足。

  1. 3)创建多语句表值函数,查询指定课程号的学生的选课情况(包括学号、姓名和成绩),
  2. 并将选了该课的学生成绩提高5分,然后调用该函数查询某门课的学生的选课及成绩修改情况。
  1. create function duoyujuhanshu(@cno char(6))
  2. returns @ss  table(sn int,sname char(6),degree int)
  3. begin
  4. insert @ss select student.sno,sname,degree = degree + 5
  5. from student,score
  6. where student.sno = score.sno and score.cno = @cno
  7. return
  8. end
  9. select * from duoyujuhanshu('3-105')


--drop function 自定义函数名  --删除标量函数 


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/737987
推荐阅读
相关标签
  

闽ICP备14008679号