zoukankan      html  css  js  c++  java
  • sql函数

    用户自己定义的函数可以分为如下三个类别:

    (1)       返回值为可更新表的函数,这样的函数称为内嵌表值函数;

    (2)       返回不可更新表的函数,这样的函数称为多语句表值函数;

    (3)       返回标量值的函数

    注意:用户自定义函数不支持输出函数。

    6.5.1 标量函数的定义

    Create function owname_name, function_name

    (@parameter_name as data_type,….)

    Returns data_type

    [with encryption | schemabinding.]

    [as]

    Begin

           …

    End

    例子:/*计算全体学生某们功课的平均成绩*/

    create function average

    (@cnum char(20))

    returns int

    as

    begin      

           declare @aver int

           select @aver=

           (select avg(score) from xs_kc where kc_id=@cnum group by kc_id)

           return @aver

    end

    6.5.2标量函数的调用

    (1)在select语句中调用

    例子:/*在select语句中调用*/

    declare @course1 char(20)

    declare @aver1 int

    select @course1='101'

    select @aver1=dbo.average(@course1)

    select @aver1 as '101课程的平均成绩'

    (2)利用EXEC语句执行

    例子:/*exec语句中调用*/

    declare @course1 char(20)

    declare @aver1 int

    select @course1='101'

    exec @aver1=dbo.average @course1

    select @aver1 as '101课程的平均成绩'

    例子:/*新建course表*/

    use xscj

    create table course

    (cno int

    ,cname nchar(20)

    ,credit int

    ,aver as (dbo.average(cno))

    )

    6.5.3 内嵌表值函数

    内嵌表值函数可用于实现参数化视图。

    /*内嵌表值函数的定义*/

    create function fn_view1

    (@para nvarchar(30))

    returns table

    as

    return

           (

           select stu_id,stu_name from xscj.dbo.xs where stu_major=@para

           )

    /*内嵌表值函数的调用*/

    select * from fn_view1(N'计算机')

    6.5.4 多语句表值函数

    内嵌表值函数和多语句表值函数都返回表,二者不同之处在于:内嵌表值函数没有函数主体,返回的表是单个select语句的结果集;而多语句表值函数在begin…end块中定义的函数主体包含T-SQL语句,这些语句可生成行并将行插入至表中,最后返回表。

    例子:/*创建返回table的函数,通过学号作为实参调用该函数,可显示该学生各门功课的成绩和学分*/

    Create function score_table

    (@student_id char(6))

    returns @score table

    (xs_id char(6)

    ,xs_name char(8)

    ,kc_name char(16)

    ,cj tinyint

    ,xf tinyint

    )

    as

    begin

           insert @score

           select s.stu_id,s.stu_name,p.kc_name,p.kc_credit,o.score

           from xs as s

           inner join xs_kc as o on (s.stu_id=o.stu_id)

           inner join kc as p on (o.kc_id=p.kc_id)

           where s.stu_id=@student_id

           return

    end

    /*多语句表值函数的调用*/

    select * from score_table('001103')

  • 相关阅读:
    java之类的封装
    java飞机大战之子弹的自动生成
    java之线程飞机大战制作
    java线程游戏之背景图片的移动
    mysql的安装以及简单的命令符
    java之控制多幅图片
    java之线程
    JAVA之数组队列
    java之链表
    python之数据库的操作(课前准备)
  • 原文地址:https://www.cnblogs.com/itecho/p/1306027.html
Copyright © 2011-2022 走看看