第11章 函数和游标

合集下载

游标及函数的使用及举例

游标及函数的使用及举例

游标的使用及举例一、声明游标在使用一个游标之前,要先声明游标。

可以采用DECLARE语句声明一个游标,语法见表8-22所示。

二、打开游标用DECLARE语句声明游标时并不执行SELECT查询语句,只有当用OPEN语句打开游标时才能执行查询语句,OPEN语句的语法见表8-23所示。

三、从游标中提取数据在游标打开后,可以使用FETCH语句从游标中提取数据并进行操作,FETCH语句的语法见表8-24所示。

表8-24 FETCH语句的语法FETCH语句每次只能提取一行数据,其执行的状态值保存在全局变量@@FETCH_STATUS中,当@@FETCH_STATUS为0时,表示FETCH语句执行成功;当@@FETCH_STATUS为-1时,表示FETCH 语句失败或此行不在结果集中;当@@FETCH_STATUS为-2时,表示被提取的行不存在。

四、利用游标修改和删除数据在SQL Server中,利用游标可以修改或删除当前记录,其语句的语法见表8-25所示。

五、关闭游标游标使用完毕后,应及时关闭游标,以释放当前的结果集并解除定位在游标记录行上的游标锁定,使用CLOSE语句可以关闭游标。

在关闭游标后,当需要时仍然可以通过OPEN 语句打开并使用该游标。

关闭游标的CLOSE语句的语法见表8-26所示。

六、释放游标关闭游标并没有删除游标,因此游标仍然占用着系统的资源,对于一个不再使用的游标,可以使用DEALLOCA TE语句删除,其语句的语法见表8-27所示。

应用举例例8-15:使用游标将学生表中编号、姓名、性别和家庭住址逐行显示出来,语句及结果见图8-14。

use studentgodeclare @xs_xh char(12),@xs_xm varchar(12),@xs_xb char(2),@xs_jtzz varchar(40)--声明游标图8-14 游标使用示例declare xs_cursor cursor scroll READ_ONL Yfor select xh,xm,xb,jtzz from student--打开游标open xs_cursor--提取结果集中的第一行记录fetch next from xs_cursor into @xs_xh,@xs_xm,@xs_xb,@xs_jtzzprint ' 学号'+ ' 姓名'+ ' 性别'+' 家庭住址'print '------------------------------------------'while @@fetch_status=0begin-- 显示学号、姓名、性别、家庭住址print @xs_xh+' '+ @xs_xm+' '+@xs_xb+' '+@xs_jtzzprint '-----------------------------------------'-- 从打开的游标中提取下一条fetch next from xs_cursor into @xs_xh,@xs_xm,@xs_xb,@xs_jtzzend--关闭与释放游标close xs_cursordeallocate xs_cursor返回函数(1)创建标量值函数创建标量值函数的语法见表8-29。

[Python程序设计基础(第2版)][李东方 (11)[19页]

[Python程序设计基础(第2版)][李东方 (11)[19页]

11.1 访问SQLite数据库
SQLite是一个开源的关系型数据库,具有零配置 (Zero Configuration)、自我包含(Selfcontained)和便于传输(Easy Transfer)等 优点,由于其高度便携、使用方便、结构紧凑、 高效和可靠,因此被广泛用于移动设备嵌入式数 据库作为前端数据存储。SQLite支持规范的SQL (Structured Query Language,结构化查询 语言),可方便地支持数据库系统原型研发和移 植。
【例11-2】编写Python程序为例11-1中创建的student库的base表添加 新生学号、姓名和性别三项非空数据
import sqlite3 # 连接数据库 conn =sqlite3.connect('d:/test.db') while True:
id=input('请输入新生学号:(输入0退出程序)\n') if id=='0':
NOT NULL,
与数据库连接对象conn.execute()方法相关的常用SQL语句通式如下: ➢ 添加: INSERT INTO <表>(<字段元组>) VALUES (<数据元组>) ➢ 修改: UPDATE <表> SET <字段>=<值> ➢ 删除: DELETE FROM <表> WHERE <条件表达式>
【例11-1】在D:盘根目录下建立一个空数据库test.db,并按如图11-3所 示的表结构创建学生基本情况表base。
import sqlite3
conn = sqlite3.connect('d:/test.db')

2023人教版带答案高中物理必修三第十一章电路及其应用微公式版必考知识点归纳

2023人教版带答案高中物理必修三第十一章电路及其应用微公式版必考知识点归纳

2023人教版带答案高中物理必修三第十一章电路及其应用微公式版必考知识点归纳单选题1、电阻R1阻值为6Ω,与电阻R2并联后接入电路中,通过它们的电流之比I1:I2=2:3,则电阻R2的阻值和总电阻的阻值分别为()A.4Ω2.4ΩB.4Ω3.6ΩC.9Ω3.6ΩD.9Ω4.5Ω答案:A设并联电路电压为U,由并联电路规律可得I1:I2=UR1:UR2=R2:6Ω=2:3 R2=4Ω由1R =1R1+1R2得R=2.4Ω故选A。

2、如图所示为用电压表(内阻R V)、电流表(内阻R A)测量电阻Rx的两种电路图。

用电路甲测得阻值为R1,用电路乙测得阻值为R2。

下列说法正确的是()A.R1>Rx> R2B.R2>Rx> R1C.若R x≫R A,则用电路乙测量更精确D.若R V≫R x,则用电路甲测量更精确答案:AAB.由图甲所示电路可知,该实验采用电流表内接法,由于电流表分压作用,所测电压偏大,由欧姆定律可知,电阻测量值大于真实值;图乙采用电流表外接法,由于电压表的分流,所测电流偏大,由欧姆定律可知,电阻测量值小于真实值,故R1>R x>R2B错误A正确;C.若R x≫R A,电阻可以看作大电阻,电流表分压作用较小,故此时应采用电路甲测量更精确,C错误;D.若R V≫R x,电阻应看作小电阻,电压表的分流作用较小,应用电路乙测量更精确,D错误。

故选A。

3、一种心脏除颤器通过电容器放电完成治疗。

在一次模拟治疗中,电容器充电后电压为4.0kV,在2.0ms内完成放电,这次放电通过人体组织的平均电流强度大小为30A,该心脏除颤器中电容器的电容为()A.15μFB.10μFC.20μFD.30μF答案:A根据电容定义式C=Q U放电的平均电流为I=Q t联立可得该心脏除颤器中电容器的电容为C=ItU=30×2.0×10−34.0×103F=15×10−6F=15μFA正确,BCD错误;故选A。

第11章 MySQL存储过程与函数 第1节存储过程与函数简介 (1)

第11章 MySQL存储过程与函数 第1节存储过程与函数简介 (1)

(2)创建函数
创建存储函数语法格式: create function sp_name ([func_parameter[,..]]) returns type [characteristic ..] routine_body
说明:在MySQL中,存储函数的使用方法与MySQL内部函数的 使用方法是一样的。换言之,用户自己定义的存储函数与MySQL 内部函数condition then statement_list [elseif search_condition then statement_list] … [else search_condition then statement_list] end if
数据库原理及MySQL应用 ——第十一章(第1节)
存储过程与函数简介
1.概念 2.存储过程和函数区别
1. 概念
一个存储过程是可编程的,它在数据库中创建并保存。它可以有SQL语句 和一些特殊的控制结构组成。
存储过程的优点: 存储过程增强了SQL语言的功能和灵活性; 存储过程允许标准组件是编程。 存储过程能实现较快的执行速度。 存储过程能过减少网络流量。 存储过程可被作为一种安全机制来充分利用。
【例19】删除存储过程studentcount
系统函数
1. 数学函数 2. 字符串函数 3. 日期和时间函数 4. 系统信息函数 5. 加密函数
具体使用 请参考教
材讲义
(6)repeat语句
repate语句是有条件控制的循环语句。 语法形式: [begin_label:] repeat statement_list until search_confition end repeat [end_label]
(7)while语句也是有条件控制的循环语句。

第11章 第3节 实验2 金属丝电阻率的测量 新教材高中物理必修第三册(人教版)(解析版)

第11章 第3节 实验2 金属丝电阻率的测量  新教材高中物理必修第三册(人教版)(解析版)

实验2 金属丝电阻率的测量一、实验目的1.进一步掌握螺旋测微器的原理及读数方法. 2.练习使用电流表、电压表及伏安法测电阻. 3.测定金属的电阻率. 二、实验思路 1.实验电路:用甲、乙两图都可,图甲中的滑动变阻器为分压式接法,图乙中的滑动变阻器为限流式接法.2.用毫米刻度尺测出金属丝的长度l ,用螺旋测微器测出金属丝的直径d ,算出横截面积S ⎝⎛⎭⎫S =πd24. 3.由电阻定律R =ρl S ,得ρ=SR l =πd 2R 4l =πd 2U 4lI ,求出电阻率.三、实验器材螺旋测微器、毫米刻度尺、电压表、电流表、定值电阻、开关及导线、被测金属丝、电池、滑动变阻器.四、实验步骤1.测直径:用螺旋测微器在被测金属丝上三个不同位置各测一次直径,并记录. 2.量长度:用毫米刻度尺测量接入电路中的被测金属丝的有效长度,反复测量三次,并记录.3.连电路:按如上所示的电路图连接实验电路.4.求电阻:电路经检查确认无误后,闭合开关S ,改变滑动变阻器滑片的位置,读出几组相应的电流表、电压表的示数I 和U 的值,记入表格内,断开开关S .5.拆除实验电路,整理好实验器材.五、数据处理电阻R 的数值可用以下两种方法确定:1.计算法:利用每次测量的U 、I 值分别由公式R =UI 计算出电阻,再求出电阻的平均值作为测量结果.2.图像法:可建立I -U 坐标系,将测量的U 、I 值描点作出图像,利用图像的斜率求出电阻R .六、注意事项1.因一般金属丝电阻较小,为了减少实验的系统误差,必须选择电流表外接法. 2.本实验若用限流式接法,在接通电源之前应将滑动变阻器调到阻值最大状态. 3.测量l 时应测接入电路中的金属丝的有效长度(即两接线柱之间的长度);在金属丝的三个不同位置上用螺旋测微器测量直径d .4.电流不宜过大(电流表用0~0.6 A 量程),通电时间不宜太长,以免电阻率因温度升高而变化.要点一 仪器读数和实验原理有一合金制成的圆柱体.为测量该合金的电阻率,现用伏安法测量圆柱体两端之间的电阻,用螺旋测微器测量该圆柱体的直径,用游标卡尺测量该圆柱体的长度.螺旋测微器和游标卡尺的示数如图甲和乙所示.(1)由图读得圆柱体的直径为________mm ,长度为________ cm .(2)若流经圆柱体的电流为I ,圆柱体两端之间的电压为U ,圆柱体的直径和长度分别用D 、L 表示,则用D 、L 、I 、U 表示的电阻率的关系式为ρ=________.解析 (1)圆柱体的直径为1.5 mm +34.5×0.01 mm =1.845 mm ;长度为42 mm +8×0.05 mm =42.40 mm =4.240 cm .(2)由欧姆定律R =U I 和电阻定律R =ρL S联立得ρ=RS L =US IL =πD 2U4IL.答案 (1)1.845(1.842~1.846均正确) 4.240(2)πD 2U 4IL要点二 电路连接和数据处理在“测定金属的电阻率”实验中,所用测量仪器均已校准,待测金属丝接入电路部分的长度约为50 cm .(1)用螺旋测微器测量金属丝的直径,其中某一次测量结果如图1所示,其读数应为________mm(该值接近多次测量的平均值).图1(2)用伏安法测金属丝的电阻R x ,实验所用器材为电池组(电动势为3 V ,内阻约为1 Ω)、电流表(内阻约为0.1 Ω)、电压表(内阻约为3 kΩ)、滑动变阻器R (0~20 Ω,额定电流为2 A)、开关、导线若干,某小组同学利用以上器材正确连接好电路,进行实验测量,记录数据见下表.次数 1 2 3 4 5 6 7 U /V 0.10 0.30 0.70 1.00 1.50 1.70 2.30 I /A0.0200.0600.1600.2200.3400.4600.520由实验数据可知,他们测量R x 是采用图2中的________(选填“甲”或“乙”)图.图2(3)图3是测量R x 的实验器材实物图,图中已连接了部分导线,滑动变阻器的滑片P 置于变阻器的一端.请根据(2)所选的电路图,补充完成图3中实物间的连线,并使闭合开关的瞬间,电压表或电流表不至于被烧坏.图3图4(4)这个小组的同学在坐标纸上建立U、I坐标系,如图4所示,图中已标出了与测量数据对应的4个坐标点.请在图中标出第2、4、6次测量数据的坐标点,并描绘出U-I图线.由图线得到金属丝的阻值R x=________Ω(保留两位有效数字).(5)根据以上数据可以估算出金属丝电阻率约为________(填选项前的符号).A.1×10-2Ω·m B.1×10-4Ω·mC.1×10-6Ω·m D.1×10-8Ω·m解析(1)螺旋测微器的读数为0+39.8×0.01 mm=0.398 mm.(2)由实验记录的数据可知R x的阻值大约为5 Ω.由题知R x≪R V,故电流表OA外接,若滑动变阻器接为限流的形式,则R x两端的电压最小值U min=520+5+1+0.1E≈0.6 V,而从实验数据可知,R x两端电压可为0.10 V,因此滑动变阻器应采用分压的形式.(3)如图甲所示.甲(4)选尽可能多的点连成一条直线,使不在直线上的点均匀分布在直线两侧,如图乙所示.乙图线的斜率反映了金属丝的电阻,因此金属丝的电阻值R x=4.4 Ω.(5)根据R=ρlS得金属丝的电阻率ρ=RSl=πRd24l=3.14×4.4×(0.398×10-3)24×0.5Ω·m≈1.09×10-6Ω·m.故选项C正确.答案(1)0.398(0.395~0.399均正确)(2)甲(3)见解析图甲(4)见解析图乙4.4(4.3~4.7均正确)(5)C[训练](1)在测定一根粗细均匀合金丝电阻率的实验中,利用螺旋测微器测定合金丝直径的过程如图所示,校零时的读数为________mm,合金丝的直径为________mm.(2)为了精确测量合金丝的电阻R x,设计出如图甲所示的实验电路图,按照该电路图完成图乙中的实物电路连接.甲乙解析(1)按照螺旋测微器的读数原则得,校零时的读数为0.007 mm,合金丝的直径为0.645 mm-0.007 mm=0.638 mm.(2)连线如图所示.答案(1)0.0070.638(0.636~0.640均正确)(2)见解析图要点三实验创新设计国标(GB/T)规定自来水在15 ℃时电阻率应大于13 Ω·m.某同学利用图甲电路测量15 ℃的自来水的电阻率,其中内径均匀的圆柱形玻璃管侧壁连接一细管,细管上加有阀门K以控制管内自来水的水量,玻璃管两端接有导电活塞(活塞电阻可忽略),右活塞固定,左活塞可自由移动.实验器材还有:甲乙电源(电动势约3 V,内阻可忽略);电压表V1(量程0~3 V,内阻很大);电压表V2(量程0~3 V,内阻很大);定值电阻R1(阻值4 kΩ);定值电阻R2(阻值2 kΩ);电阻箱R(最大阻值9 999 Ω);单刀双掷开关S,导线若干;游标卡尺,刻度尺.实验步骤如下:A.用游标卡尺测量玻璃管的内径d;B.向玻璃管内注满自来水,并用刻度尺测量水柱长度L;C.把S拨到1位置,记录电压表V1的示数;D.把S拨到2位置,调整电阻箱阻值,使电压表V2的示数与电压表V1示数相同,记录电阻箱的阻值R;E.改变玻璃管内水柱长度,重复实验步骤C、D,记录每一次水柱长度L和电阻箱阻值R;F.____________________.(1)补充完整实验步骤.(2)测玻璃管内径d时游标卡尺示数d=30.00 mm,玻璃管内水柱的电阻值R x的表达式为R x=________(用R1、R2、R表示).(3)利用记录的多组水柱长度L和对应的电阻箱阻值R的数据,绘制出如图乙所示的R-1L关系图像.则自来水的电阻率ρ=________Ω·m(保留两位有效数字).(4)实验中若电压表V1内阻不是很大,则自来水电阻率测量结果将________(选填“偏大”“不变”或“偏小”).解析(1)实验做完后,要断开S,整理好器材.(2)设把S拨到1位置时,电压表V1的示数为U,则此时电路电流I=UR1,电源的电动势E =UR 1R x +U ,当把S 拨到2位置,调整电阻箱的阻值,使电压表V 2的示数与电压表V 1的示数相同,也为U ,则此时电路中的电流I ′=U R ,电源的电动势E =U R R 2+U ,可得R x R 1=R 2R ,解得R x =R 1R 2R.(3)从图乙中可知,R =2.0×103 Ω时,1L =5.0 m -1,此时玻璃管内水柱的电阻R x =R 1R 2R =4 000 Ω,水柱横截面积S =πd 22=7.065×10-4m 2,根据电阻定律有R x =ρL S ,代入数据可得ρ=14 Ω·m .(4)若电压表V 1内阻不是很大,则把S 拨到1位置,此时电路电流大于UR 1,电源的电动势将大于U R xR 1+U ,所以测得的R x 将偏大,因此自来水电阻率测量结果将偏大.答案 (1)断开S ,整理好器材 (2)R 1R 2R (3)14(4)偏大。

新教材高中物理第11章电路及其应用3实验:导体电阻率的测量课件新人教版必修第三册

新教材高中物理第11章电路及其应用3实验:导体电阻率的测量课件新人教版必修第三册

(2)实验时电压表应选用__B__,电流表应选用__D__,滑动变阻器应选 用__F__。(只填代号)
(3)为提高实验的精确度,请你为该实验小组设计电路图,并画在下 面的方框中。
答案:见解析图 (4)某次测量时,电压表示数为U,电流表示数为I,则该铜芯电线的
对点训练
1.某同学用游标卡尺分别测量金属圆管的内、外壁直径,游标卡 尺的示数分别如图(a)和(b)所示。由图可读出,圆管内壁的直径为 __2_._2_3__ cm,圆管外壁的直径为__2_.9_9___ cm;由此可计算出金属圆管横 截面的面积。
解析:题图(a)中游标卡尺的主尺读数为22 mm,游标尺读数为 3×0.1 mm=0.3 mm,所以最终读数为22 mm+0.3 mm=22.3 mm=2.23 cm。题图(b)中游标卡尺的主尺读数为29 mm,游标尺读数为9×0.1 mm =0.9 mm,所以最终读数为29 mm+0.9 mm=29.9 mm=2.99 cm。
方法二,图像法:可建立U-I坐标系,将测量的对应U、I值描点
作出图像,利用图像斜率来求出电阻值R。
2.将测得的R、l、d的值,代入电阻率计算公式ρ=
RS l

πd2R 4l
中,
计算出金属导线的电阻率。
五、误差分析 1.长度测量、直径测量造成的偶然误差。 2.电压表、电流表读数造成的偶然误差。 3.电流表外接法,R测<R真,导致ρ测<ρ真(系统误差)。
(2)特别注意:主尺半刻度线是否露出。 解析:读数前应先旋紧B,使读数固定不变,螺旋测微器的固定刻 度为0 mm,可动刻度为41.0×0.01 mm=0.410 mm,所以最终读数为0 mm+0.410 mm=0.410 mm。
对点训练
2.在测量一根粗细均匀的合金丝电阻率的实验中,利用螺旋测微 器测定合金丝直径的过程如图所示,校零时的读数为__0_._0_0_9__ mm,合 金丝的直径为__0_._6_4_8__ mm。

新教材-人教版高中物理必修第三册-第11章-电路及其应用-知识点考点重点难点提炼汇总

新教材-人教版高中物理必修第三册-第11章-电路及其应用-知识点考点重点难点提炼汇总

第11章电路及其应用1.电源和电流 (1)2.导体的电阻 (5)3.实验: 导体电阻率的测量 (9)4.串联电路和并联电路 (15)5.实验: 练习使用多用电表191.电源和电流一、电源1. 定义: 能够把电子从正极搬运到负极的装置。

2. 作用:(1)维持电源正、负极间始终存在电势差。

(2)使电路中的电流能够持续存在。

二、恒定电流1. 恒定电场: 由稳定分布的电荷所产生的稳定的电场。

2.自由电荷定向移动的平均速率: 在恒定电场的作用下, 自由电荷定向加速运动, 但在运动过程中与导体内不动的粒子不断碰撞, 碰撞的结果是大量自由电荷定向移动的平移速率不随时间变化。

3. 恒定电流:大小、方向都不随时间变化的电流。

4. 电流(1)物理意义: 表示电流强弱程度的物理量。

(2)公式: I=。

(3)单位:在国际单位制中, 电流的单位是安培, 简称安, 符号是A。

常用的电流单位还有毫安(mA)和微安(μA)。

1 mA=10-3A,1 μA=10-6 A。

(4)方向: 正电荷定向移动的方向规定为电流的方向。

考点1: 对电源的理解1. 电源的作用(1)从电荷转移的角度看, 电源的作用是使电路中的自由电荷持续地定向移动。

(2)从能量转化的角度看, 搬运电荷的过程是非静电力做功的过程, 从而将其他形式的能转化为电能。

2. 形成电流的三种电荷形成电流的三种电荷为自由电子、正离子和负离子, 其中金属导体导电时定向移动的电荷是自由电子, 液体导电时定向移动的电荷有正离子和负离子, 气体导电时定向移动的电荷有自由电子、正离子和负离子。

【例1】下列关于电源的说法正确的是( )A. 电源的作用是在电源内部把电子由负极搬运到正极, 保持两极之间有电压B. 电源把正、负电荷分开的过程是把其他形式的能转化为电势能的过程C. 电荷的移动形成电流D. 只要电路中有电源, 电路中就会形成持续的电流B [在电源内部, 电源把电子由正极搬运到负极, 这一过程要克服静电力做功, 把其他形式的能转化为电势能, 故选项A错误, 选项B正确。

游标与函数的使用

游标与函数的使用

实验二游标与函数的使用 4实验目的1、了解PL/SQL基本概念。

2、掌握PL/SQL编程环境。

3、理解游标概念及其使用。

4、掌握函数概念及其编写。

实验内容1、定义一个游标完成显示所有供应商名。

DECLAREv_sname s.sname%TYPE;CURSOR cu_sname IS SELECT sname FROM s;BEGINFOR cur IN cu_sname LOOPdbms_output.put_line(cur.sname);END LOOP;END;2、定义、调用一个简单函数:查询返回指定供应商编号的供应商名及其供应零件总数量。

CREATE OR REPLACE FUNCTION cx(cx_sno IN s.sno%TYPE ,cx_sname OUT s.sname%TYPE )RETURN NUMBERISV_sqty NUMBER;BEGINSELECT sname ,SUM(qty) INTO cx_sname,V_sqty FROM s,spj WHERE s.sno=spj.sno GROUP BY spj.sno,s.sname HA VING spj.sno=cx_sno;RETURN V_sqty;END cx;DECLAREV_sno s.sno%TYPE:='&sno';V_sqty s.sqty%TYPE;V_sname s.sname%TYPE;BEGINV_sqty:=cx(V_sno,V_sname);dbms_output.put_line(V_sname||'供应商'||V_sno||'所供应的零件总数为:'||V_sqty);END;3、定义一个函数:对于给定的供应商号,判断是否存在,若存在返回0,否则返回-1。

写一段程序调用此函数,若供应商号存在则在spj插入一元组。

CREATE OR REPLACE FUNCTION CZ(cx_sno IN s.sno%TYPE)RETURN NUMBERISjg_sno NUMBER ;BEGINSELECT COUNT(*) INTO jg_sno FROM s WHERE s.sno=cx_sno ;IF jg_sno=0THENRETURN (-1);ELSERETURN 0;end IF;END;DECLAREC_sno s.sno%TYPE :='&sno';hf NUMBER ;BEGINhf := CZ(C_sno);IF hf=0THENdbms_output.put_line(C_sno||'存在');--INSERT INTO spj V ALUES (C_sno,'');ELSEdbms_output.put_line(C_sno||'不存在');END IF;END;4、定义、调用一个类似于SUM功能的函数:计算指定供应商编号的供应零件总数量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

29/50
声明游标参数说明
FORWARD_ONLY:指定游标只能从第一行滚 动到最后一行。这种方式的游标只支持FETCH NEXT 提取选项。 STATIC:静态游标。游标的结果集在打开时建 立在tempdb数据库中。 KEYSET:键集游标。指定当游标打开时,游标 中行的成员和顺序已经固定。 DYNAMIC:动态游标。该类游标反映在结果集 中做的所有更改。 FAST_FORWARD:只向前的游标。 UPDATE [OF column_name [,...n]]:定义游标 内可更新的列。
25/50
11.2.1 游标概念 游标(cursor)包括如下两部分内容:
游标结果集:由SELECT语句返回的查询结果。 游标当前行指针:指向结果集中某一行的指针
游标当前 行指针

游标结 果集
26/50
游标特点
允许定位结果集中的特定行。 允许从结果集当前位置检索一行或多行。 支持对结果集中当前行的数据进行修改。 为由其他用户对显示在结果集中的数据所做的更 改提供不同级别的可见性支持。 提供脚本、存储过程和触发器中用于访问结果集 中的数据的 T-SQL 语句。
11.2.1 游标概念 11.2.2 使用游标 11.2.3 游标示例
24/50
概述
由SELECT语句返回的行集被称为结果集。 在执行SELECT语句进行查询时,就可以得到这 个结果集。 关系数据库中的操作会对整个行集起作用。 但有时用户需要对结果集中的每一行或部分行进 行单独的处理,这在SELECT的结果集中是无法 实现的。 游标就是提供这种机制的结果集扩展,它使我们 可以逐行处理结果集。 作为面向集合的DBMS和面向行的程序设计间的 桥梁,使这两种处理方式得以有效沟通。
3/50
1. 基本概念
可以扩展数据操作的功能, 在概念上类似于一般的程序设计语言中定 义的函数。 SQL Server 支持三种用户自定义函数:
标量函数 内联表值函数 多语句表值函数
4/50
11.2 创建和调用标量函数
标量函数是返回单个数据值的函数。
定义标量函数的语法:
CREATE FUNCTION [ 拥有者名.] 函数名 ( [ { @参数名 [AS] 标量数据类型 [ = default ] } [ ,...n ] ] ) RETURNS 返回值类型 [ AS ] BEGIN 函数体 RETURN 标量表达式 END
10/50
11.1.3 创建和调用内联表值函数
内联表值函数的返回值是一个表,该表的内 容是一个查询语句的结果。 定义内联表值函数的语法:
CREATE FUNCTION [ 拥有者名.] 函数名 ( [ { @参数名 [AS] 标量数据类型 [ = default ] } [ ,...n ]]) RETURNS TABLE [ AS ] RETURN [ ( ] select语句 [ ) ]
CREATE FUNCTION [ 拥有者名.] 函数名 ( [ { @参数名 [AS] 标量数据类型 [ = default ] } [ ,...n ]]) RETURNS 返回变量 TABLE < 表定义 > [ AS ] BEGIN 函数体 RETURN END <表定义> ::= ({ 列定义|表约束 }[,...n ] )
14/50
11.1.4 创建和调用多语句表值函数
多语句表值函数的功能是视图和存储过程的 组合。 可利用多语句表值函数返回一个表,表中的 内容可由复杂的逻辑和多条SQL语句构建( 类似于存储过程)。 可以在SELECT语句的FROM子句中使用多 语句表值函数(同视图)。
15/50
创建多语句表值函数
5/50
示例
例1.创建计算立方体的体积的标量函数,此函数有三 个输入参数,分别为立方体的长、宽和高,类型均 为整型,函数的返回值的类型也为整型。 CREATE FUNCTION dbo.CubicVolume (@CubeLength int, @CubeWidth int, @CubeHeight int) RETURNS int AS BEGIN RETURN ( @CubeLength * @CubeWidth * @CubeHeight ) END
8/50
示例
例4.调用例2定义的函数,查询“计算机系”的 学生姓名和该系学生的选课门数。 SELECT Sname AS 姓名, dbo.f_Count(Sno) AS 选课门数
FROM Student
WHERE Dept = '计算机系'
9/50
示例
例5.调用例3定义的函数,查询第2-4学期开设的每 门课程的课程名、开课学期和考试平均成绩,将查 询结果按学期升序排序。 SELECT Cname AS 课程名, Semester AS 开课学期, dbo.f_AvgGrade(Cno) AS 平均成绩 FROM Course WHERE Semester BETWEEN 2 AND 4 ORDER BY Semester ASC
16/50
示例
例10.定义查询指定系的学生姓名、性别和年龄 类型的多语句表值函数,其中年龄类型列的值为 :如果该学生的年龄超过该系学生平均年龄2岁, 则为“偏大年龄”;如果在-1和+2范围内,则为 “正常年龄”;如果小于平均年龄-1,则为“偏 小年龄”。
17/50
例10
CREATE FUNCTION f_SType(@dept varchar(20)) RETURNS @retSType table(Sname char(10),Sex char(2),SType char(8)) AS BEGIN DECLARE @AvgAge int SET @AvgAge = (SELECT AVG(Sage) FROM Student WHERE Dept = @dept) INSERT INTO @retSType SELECT Sname, Sex, CASE WHEN Sage > @AvgAge+2 THEN '偏大年龄' WHEN Sage BETWEEN @AvgAge-1 AND @AvgAge+2 THEN '正 常年龄' ELSE '偏小年龄' END FROM Student WHERE Dept = @dept RETURN END
11/50
示例
例6.创建查询指定系的学生学号、姓名和考试平均 成绩的内联表值函数。 CREATE FUNCTION dbo.f_SnoAvg(@dept char(20)) RETURNS TABLE AS RETURN ( SELECT S.Sno, Sname, Avg(Grade) AS AvgGrade FROM Student S JOIN SC ON S.Sno = SC.Sno WHERE Dept = @dept GROUP BY S.Sno, Sname )
12/50
示例
例7.创建查询选课门数高于指定门数的学生的姓名 、所在系以及所选的课程名和开课学期。 CREATE FUNCTION dbo.f_MoreCount(@c int) RETURNS TABLE AS RETURN (SELECT Sname, Dept, Cname, Semester FROM Student S JOIN SC ON S.Sno = SC.Sno JOIN Course C ON o = o WHERE S.Sno IN (SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > @c ))
27/50
11.2.2 使用游标
声明游标 打开游标
提取数据 否
处理完成?

关闭游标
释放游标
28/50
1.声明游标 DECLARE cursor_namSTATIC | KEYSET | DYNAMIC | FAST_FORWARD ] FOR select_statement [FOR UPDATE [ OF column_name [,...n ]]]
调用多语句表值函数
对多语句表值函数的使用是放在SELECT语句的 FROM子句部分。
例11.调用例10定义的函数,查询信息系学生的姓 名和年龄类型。 SELECT Sname, SType FROM f_SType('信息系')
19/50
查看用户定义函数
展开数据库 “可编程性 ”“函数” ,在“函数” 下分为:表值 函数、标量值 函数、聚合函 数和系统函数 四类。
13/50
调用内联表值函数
对内联表值函数的使用与视图非常类似,需要放置 在查询语句的FROM子句部分,很象是带参数的视 图。 例8.调用例6定义的内联表值函数,查询计算机系 学生的学号、姓名和考试平均成绩。 SELECT * FROM dbo.f_SnoAvg('计算机系')
例9.调用例7定义的内联表值函数,查询选课门数 超过2门的学生姓名、所在系、选的课程名和课程 开课学期。 SELECT * FROM dbo.f_MoreCount(2)
20/50
修改用户定义函数
修改函数的定义使用ALTER FUNCTION语句 来实现。
语法格式:
ALTER FUNCTION 函数名 <新函数定义语句>
21/50
示例
例12.修改f_SnoAvg函数为:查询指定系的学生学号 、姓名、选课门数和考试平均成绩的内联表值函数。 ALTER FUNCTION dbo.f_SnoAvg(@dept char(20)) RETURNS TABLE AS RETURN ( SELECT S.Sno, Sname, COUNT(*) AS TotalCno, Avg(Grade) AS AvgGrade FROM Student S JOIN SC ON S.Sno = SC.Sno WHERE Dept = @dept GROUP BY S.Sno, Sname )
相关文档
最新文档