情景7Transact–SQL程序设计.ppt

上传人:tian****1990 文档编号:11533886 上传时间:2020-04-27 格式:PPT 页数:74 大小:412KB
返回 下载 相关 举报
情景7Transact–SQL程序设计.ppt_第1页
第1页 / 共74页
情景7Transact–SQL程序设计.ppt_第2页
第2页 / 共74页
情景7Transact–SQL程序设计.ppt_第3页
第3页 / 共74页
点击查看更多>>
资源描述
情景7TransactSQL程序设计,SQLServer数据库技术及应用,目录,任务1掌握Transact-SQL程序设计基础知识任务2掌握流程控制语句任务3掌握游标的使用,任务1Transact-SQL程序设计基础知识,在SQLServer数据库应用中,经常会出现一些比较复杂的业务数据处理,比如进行复杂的数据查询和统计工作等,需要编写一些SQL程序来完成这些复杂的工作。SQL程序是面向过程的语言与SQL的结合,可以进行复杂的数据处理。此外,为了减少数据库服务器与数据库应用程序之间传输的数据量,也需要设计开发一些SQL程序。,7.1批处理、块定义语句及注释、输出语句,7.1.1批处理定义批处理是同时从应用程序发送到SQLServer并得以执行的一组单条或多条SQL语句。SQLServer将批处理的语句编译为单个可执行单元,称为执行计划。执行计划中的语句每次执行一条。批处理的种类较多,例如存储过程、触发器、函数内的所有语句都可构成批处理,7.1.1批处理定义,1使用批处理的优点减少数据库服务器有客户端之间的数据传输次数,消除过多的网络流量。减少数据库服务器有客户端之间传输的数据量。缩短完成逻辑任务所需的时间,提高代码的可复用度。,7.1.1批处理定义,2批处理的执行批处理以GO命令作为结束信号,当前批处理语句由上一GO命令后输入的所有语句组成,如果是第一条GO命令,则由即席会话或脚本开始后输入的所有语句组成。注意:GO命令和SQL语句不能在同一行中,但在GO命令行中可包含注释。,7.1.1批处理定义,批处理在执行过程中发生运行错误:(1)大多数运行时错误将停止执行批处理中当前语句和它之后的语句。(2)某些运行时错误(如违反约束)仅停止执行当前语句。而继续执行批处理中其他所有语句。,在遇到运行时错误的语句之前执行的语句不受影响。唯一例外的情况是批处理位于事务中并且错误导致事务回滚。在这种情况下,所有在运行时错误之前执行的未提交数据修改都将回滚。,7.1.1批处理定义,【例7-1】不能建立执行计划的批处理。批处理中存在语法错误,不能建立执行计划,其中master是SQLServer自带的数据库。usemasterCREATETABLETestBatch(aint);INSERTINTOTestBatchVALUES(1);INSERTINTOTestBatchVALUES(2);INSERTINTOTestBatchVALUUS(3);/*语法错误,VALUES拼写错误*/SELECT*FROMTestBatch;GO,7.1.1批处理定义,【例7-2】批处理执行过程中发生的运行时错误。下面的示例没有语法错误,可以建立执行计划。在执行过程中,由于第3个INSERT语句产生主键重复的错误,因此该语句停止执行,继续执行第4个INSERT语句。SELECT语句返回三个行,如图7-1所示。,图7-1,7.1.1批处理定义,3编写批处理的规则不能在同一个批处理中更改表,然后引用新列。不能在定义一个CHECK约束后,立即在同一个批处理中使用该约束。CREATEDEFAULT、CREATEFUNCTION、CREATEPROCEDURE、CREATERULE、CREATETRIGGER和CREATEVIEW语句,在一个批处理中只能提交一个。批处理必须以CREATE语句开始。所有跟在该批处理后的其他语句将被解释为第一个CREATE语句定义的一部分。如果EXECUTE语句(执行存储过程的语句)是批处理中的第一句,则不需要EXECUTE关键字。如果EXECUTE语句不是批处理中的第一条语句,则需要EXECUTE关键字。,7.1.2块定义,在BEGINEND关键字之间封装一系列的SQL语句,就形成了一个语句块,从而可以执行一组SQL语句。BEGINEND语句块允许嵌套。BEGINEND的语法结构如下:BEGINSQL语句1SQL语句2END,7.1.2块定义,【例7-3】块语句定义。下面的示例中如果没有包括BEGINEND块,IF语句在条件为“真”时仅执行ROLLBACKTRANSACTION语句,而PRINT语句不会被执行,不会返回打印信息。运行结果如图7-2所示。,图7-2,7.1.3注释、输出语句,1注释注释是程序代码中不执行的文本字符串。注释可用于对代码进行解释说明或暂时禁用正在进行诊断的部分SQL语句。SQLServer支持两种类型的注释字符:(1)-(双连字符)。这些注释字符可与要执行的代码处在同一行,也可另起一行。(2)/*.*/(正斜杠-星号字符对)。这些注释字符可与要执行的代码处在同一行,也可另起一行,甚至可以在可执行代码内部。,【例7-4】注释字符的使用。-ChoosetheAdventureWorksdatabase.USEAdventureWorks;GO-ChooseallcolumnsandallrowsfromtheAddresstable.SELECT*FROMPerson.AddressORDERBYPostalCodeASC;/*WedonothavetospecifyASCbecausethatisthedefault.*/GO,7.1.3注释、输出语句,2输出语句PRINT语句用于将消息返回到应用程序,采用字符或Unicode字符串表达式作为参数,并将字符串作为消息返回到应用程序。PRINT语句接受任何字符串表达式,包括字符或Unicode类型的常量和局部变量名,或返回字符或Unicode字符串的函数,或由两个或多个常量、局部变量或函数串联生成的复杂字符串。【例7-3】中使用了PRINT语句实现打印文本字符串信息。,7.1.3注释、输出语句,7.2Transact-SQL语言的变量,变量是指在程序运行过程中,其值可以发生变化的量,通常用来保存程序运行过程中的输入数据、计算获得的中间结果和最终结果。变量有名字和数据类型两个属性。变量名用于标识该变量,以便被引用,变量的数据类型(请参考情景4)确定了该变量存放数据的格式以及允许的运算。,7.2Transact-SQL语言的变量,1变量变量名必须是一个合法的标识符(有效的字符序列)。(1)标识符。在SQLServer中标识符分为以下两类。常规标识符。以ASCII字母、Unicode字母、下划线(_)、at符号()或数字符号(#)开头,后续可跟一个或若干个ASCII字符、Unicode字符、at符号、美元符号($)、数字符号或下划线。分隔标识符。包含在双引号()或者方括号()内的常规标识符或不符合常规标识符规则的标识符。,(2)变量的分类。SQLServer中变量可以分为以下两类。全局变量。全局变量由系统提供且预先声明,通过在名称前加两个at符号()区别于局部变量。局部变量。局部变量用于保存单个特定类型的数据值。当首字母为“”时,表示该标识符为局部变量名;当首字母为“#”时,表示该为一个临时数据库对象名,若开头含一个“#”,表示局部临时数据库对象名,若开头含两个“#”,表示全局临时数据库对象名。,7.2Transact-SQL语言的变量,2局部变量的使用(1)局部变量的定义。在批处理或程序中用DECLARE语句声明局部变量,声明后其值设置为NULL。语法格式:DECLARElocal_variableASdata_type,.n,7.2Transact-SQL语言的变量,参数说明:local_variable:局部变量名,应为合法常规标识符。前面的“”表示局部变量。data_type:数据类型,用于定义局部变量的类型,可为系统类型或自定义类型。n:表示可以定义多个变量,各变量之间用“,”号分开。,7.2Transact-SQL语言的变量,(2)局部变量的赋值。用SET语句赋值。将先前使用DECLARElocal_variable语句创建的指定局部变量设置为指定值。在初始化多个变量时,为每个局部变量使用单独的SET语句。语法格式:SETlocal_variable=expression参数说明:local_variable:除cursor、text、ntext、image或table以外的任何类型变量的名称。变量名称必须以at符号()开头。变量名称必须符合标识符规则。expression:任何有效的SQLServer表达式。,7.2Transact-SQL语言的变量,【例7-5】创建myvar变量,将字符串值放入变量,然后输出myvar变量的值。DECLAREmyvarchar(20);SETmyvar=中华人民共和国;SELECTmyvar;GO,7.2Transact-SQL语言的变量,【例7-6】创建一个名为SEX的局部变量,并在SELECT语句中使用该局部变量查找表Student_info中所有男同学的学号和姓名。,用SELECT语句赋值。语法格式:SELECTlocal_variable=expression,,.n参数说明:local_variable:除cursor、text、ntext、image或table以外的任何类型变量的名称。变量名称必须以at符号()开头。expression:任何有效的SQLServer表达式,包括标量子查询。n:表示可以给多个变量赋值,各变量之间用“,”号分开。,7.2Transact-SQL语言的变量,注意:local_variable通常用于将单个值返回到变量中。如果expression为列名,则返回多个值,此时将返回的最后一个赋值给变量;如果SELECT语句没有返回行,变量将保留当前值;如果expression是不返回值的标量子查询,则将变量设为NULL;包含变量赋值的SELECT语句不能也用于执行通常的结果集检索操作。,【例7-7】在以下示例中,为变量var1赋值刘翔。由于Student_info表中不存在为SID指定的值,因此对该表的查询不返回任何行。变量的值仍为刘翔。USEstudent;GODECLAREvar1nvarchar(30);SELECTvar1=刘翔;SELECTvar1=SNameFROMStudent_infoWHERESid=08060111;SELECTvar1AS姓名;,7.2Transact-SQL语言的变量,【例7-8】在以下示例中,使用了一个子查询为var1赋值。由于为SID请求的值不存在,因此子查询不返回值,并将变量设为NULL。USEstudent;GODECLAREvar1nvarchar(30)SELECTvar1=GenericNameSELECTvar1=(SELECTSnameFROMStudent_infoWHERESid=08060111)SELECTvar1AS姓名;,7.2Transact-SQL语言的变量,任务2掌握流程控制语句,开发设计SQL程序时,常常要使用流程控制语句来改变计算机的执行流程以满足程序设计的需要,实现较复杂的功能。SQLServer提供的流程控制语句如表所示。,7.3条件语句和循环语句,7.3.1条件语句在程序中如果要对给定的条件进行判定时,当条件为TRUE(真)或FALSE(假)时分别执行不同的T-SQL语句。1IFELSE语句IFELSE语句为Transact-SQL语句的执行强加条件。只有条件满足,才能执行条件之后的语句或语句块,否则执行ELSE关键字之后的语句或语句块。其中ELSE关键字与其后面的语句块是可选的。,语法格式:IFBoolean_expressionsql_statement|statement_blockELSEsql_statement|statement_block参数说明:Boolean_expression:返回TRUE或FALSE的表达式。如果布尔表达式中含有SELECT语句,则必须用括号将SELECT语句括起来。sql_statement|statement_block:任何T-SQL语句或用语句块定义的语句分组。除非使用语句块,否则IF或ELSE条件只能执行一条T-SQL语句。若要定义语句块,请使用块定义关键字BEGIN和END。,7.3.1条件语句,从上述语法格式,可看出IF语句分带ELSE部分和不带ELSE部分两种使用形式:,(1)带ELSE部分的IF语句:IFA/*T-SQL语句或语句块*/ELSEB/*T-SQL语句或语句块*/当条件表达式的值为真时执行A,然后执行IF语句的下一语句;当条件表达式的值为假时执行B,然后执行IF语句的下一语句。,(2)不带ELSE部分的IF语句:IFA/*T-SQL语句或语句块*/当条件表达式的值为真时执行A,然后执行IF语句的下一语句;当条件表达式的值为假时直接执行IF语句的下一语句。,7.3.1条件语句,【例7-9】如果“计算机基础”的平均成绩高于80分,则显示“计算机基础课程平均成绩高于80分”,否则显示“计算机基础课程平均成绩低于80分”。usestudentdeclarevalchar(30)setval=计算机基础课程平均成绩高于80分.if(selectAVG(Grade)fromStudent_info,Course_info,SCwhereStudent_info.Sid=SC.SidandCourse_info.Cid=SC.CidandCourse_info.Cname=计算机基础)80select计算机基础课程平均成绩高于分.elseifval80select计算机基础课程平均成绩低于分.elseselect计算机基础课程平均成绩等于分.;,2多分支CASE表达式CASE表达式用于多条件分支选择。CASE具有两种格式:(1)简单CASE函数将某个表达式与一组简单表达式进行比较以确定结果。(2)CASE搜索函数计算一组布尔表达式以确定结果。两种格式都支持可选的ELSE参数。,7.3.1条件语句,语法格式:SimpleCASEfunction:CASEinput_expressionWHENwhen_expressionTHENresult_expression.nELSEelse_result_expressionSearchedCASEfunction:CASEWHENBoolean_expressionTHENresult_expression.nELSEelse_result_expressionEND,7.3.1条件语句,参数说明:input_expression:使用简单CASE格式时所计算的表达式,可以是任意有效的表达式。WHENBoolean_expression:使用CASE搜索格式时所计算的布尔表达式,可以是任意有效的布尔表达式。,7.3.1条件语句,【例7-11】使用简单CASE函数更改课程编号的显示。USEstudent;GOSELECTSid,cid=CASECidWHEN101THEN计算机基础WHEN102THEN数据库技术WHEN103THEN网页设计与制作END,Gradeas成绩FROMsc,7.3.1条件语句,【例7-12】使用带有CASE搜索函数的查询语句,搜索函数允许根据比较值在结果集内对值进行替换。USEstudent;GOSELECTsid,cid,Grade=CASEWHENGrade60THEN不及格WHENGrade70THEN及格WHENGrade80THEN中等WHENGrade=100THEN优秀ENDFROMsc,7.3.1条件语句,7.3.2循环语句,如果需要重复执行程序中的一部分语句,可以使用WHILE循环语句实现,只要条件成立,语句或者语句块就会一直重复执行下去。可以使用BREAK和CONTINUE关键字在循环内部控制WHILE循环中语句的执行。语法格式:WHILEBoolean_expressionsql_statement|statement_blockBREAKsql_statement|statement_blockCONTINUEsql_statement|statement_block,参数说明:Boolean_expression:返回TRUE或FALSE的条件表达式。如果布尔表达式中含有SELECT语句,则必须用括号将SELECT语句括起来。sql_statement|statement_block:T-SQL语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字BEGIN和END。BREAK:使程序从最内层的WHILE循环中退出。将执行出现在END关键字(循环结束的标记)后面的任何语句。CONTINUE:使WHILE循环重新开始执行,忽略CONTINUE关键字后面的任何语句。,7.3.2循环语句,WHILE循环语句的执行流程图如图7-6所示。从WHILE循环执行流程图可以看出其使用形式如下:WHILE条件表达式循环体语句/*T-SQL语句或者语句块*/当条件表达式值为真时,执行循环体语句,然后,在进行条件的判断,重复上述操作,直到条件表达式的值为假,退出循环体的执行,继续执行WHILE语句的下一语句,图7-6WHILE循环语句的执行流程,7.3.2循环语句,【例7-13】编写代码计算并显示n=1+2+3+.+100。DECLAREcounterint,nintSETcounter=1setn=0WHILEcounter100)GOTOLABEL2ELSEGOTOLABEL1ENDLABEL2:SELECTn=1+2+3+.+20=+CONVERT(char(4),n),7.4转移、等待、返回语句,2等待(WAITFOR)语句WAITFOR语句指定触发器语句块、存储过程或事务执行的时间、时间间隔或事件。即在达到指定时间或时间间隔之前,或者指定语句至少修改或返回一行之前,阻止执行批处理、存储过程或事务。语法格式:WAITFORDELAYtime_to_pass|TIMEtime_to_execute参数说明:DELAYtime_to_pass:用于指定SQLServer必须等待的时间,最长可为24小时。可以使用datetime数据可接受的格式之一指定time_to_pass,也可以将其指定为局部变量,不能指定日期。因此,不允许指定datetime值的日期部分。TIMEtime_to_execute:指定SQLServer等待到某一时刻。,7.4转移、等待、返回语句,【例7-16】WAITFOR语句使用。以下示例在晚上10:20(22:20)执行存储过程sp_add_job。USEmsdb;BEGINWAITFORTIME22:20;EXECUTEsp_add_jobjob_name=TestJob;END;GO以下示例在两小时的延迟后执行存储过程。BEGINWAITFORDELAY02:00;EXECUTEsp_helpdb;END;GO,7.4转移、等待、返回语句,3返回(RETURN)语句用于从过程、批处理或语句块中无条件退出,不执行位于RETURN之后的语句。语法格式:RETURNinteger_expression参数说明:integer_expression:将要返回的整型表达式的值。存储过程可以给调用过程或应用程序返回整型值。,7.4转移、等待、返回语句,【例7-17】以下示例显示如果在执行findstudent时没有指定用户名作为参数,则RETURN将使过程向用户屏幕发送一条消息后退出。如果指定了用户名,则将从相应的系统表中检索此用户在当前数据库创建的所有对象名。CREATEPROCEDUREfindstudentnamechar(30)ASIFnameisNULLBEGINPRINTYoumustgiveastudentnameRETURN/*无条件返回*/ENDELSEBEGINSELECTsid,sname,sbirth,saddrFROMstudent.dbo.Student_infoWHEREsname=nameEND;,7.4转移、等待、返回语句,任务3掌握游标的使用,关系数据库中的操作会对整个行集起作用。由SELECT语句返回的行集包括满足该语句的WHERE子句中条件的所有行。这种由语句返回的完整行集称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的对结果集的一种扩展。,7.5游标的概念和应用,1游标的概念游标(CURSOR)是结果集的逻辑扩展,可以看作是指向结果集的一个指针,通过使用游标,应用程序可以逐行访问并处理结果集。使用游标时,应先声明,然后打开,接着使用。使用完后关闭、释放资源。,2声明游标声明游标可以通过DECLARECURSOR语句完成,该语句包括两种格式:(1)ISO标准的语法(SQL-92)。语法格式:DECLAREcursor_nameINSENSITIVESCROLLCURSORFORselect_statementFORREADONLY|UPDATEOFcolumn_name,.n,7.5游标的概念和应用,参数说明:cursor_name:是所定义的Transact-SQL服务器游标的名称。cursor_name必须符合标识符规则。INSENSITIVE:系统将创建供所定义的游标使用的数据的临时复本,对游标的所有请求都从tempdb中的该临时表中得到应答。因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。如果省略INSENSITIVE,则已提交的(任何用户)对基础表的删除和更新则会反映在后面的提取操作中。SCROLL:说明所声明的游标可以前滚、后滚。可使用所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)。如果省略SCROLL,则只能使用NEXT提取选项。,7.5游标的概念和应用,select_statement:定义游标结果集的标准SELECT语句。在游标声明的select_statement中不允许使用关键字COMPUTE、COMPUTEBY、FORBROWSE和INTO。READONLY:说明该游标为只读游标,禁止进行更新。UPDATEOFcolumn_name,.n:定义游标中可更新的列。如果指定了OFcolumn_name,.n,则只允许修改所列出的列。如果指定了UPDATE,但未指定列的列表,则可以更新所有列。,7.5游标的概念和应用,以下一个符合SQL-92标准的游标声明如下:DECLARESTU_CURCURSORFORSELECT*FROMStudent_infoWHERESdepart=计算机系FORREADONLY注意:该语句定义的游标与单个表的查询结果集相关联,是只读的,游标只能从头到尾顺序提取数据。,7.5游标的概念和应用,(2)Transact-SQL扩展语法。语法格式:DECLAREcursor_nameCURSORLOCAL|GLOBALFORWARD_ONLY|SCROLLSTATIC|KEYSET|DYNAMIC|FAST_FORWARDREAD_ONLY|SCROLL_LOCKS|OPTIMISTICTYPE_WARNINGFORselect_statementFORUPDATEOFcolumn_name,.n,7.5游标的概念和应用,参数说明:cursor_name:是所定义游标的名称。LOCAL:指定游标的作用域。GLOBAL:指定该游标的作用域对连接是全局的。FORWARD_ONLY|SCROLL:指定游标的移动方向。FORWARD_ONLY:游标只能从第一行滚动到最后一行;SCROLL同SQL-92语法。STATIC|KEYSET|DYNAMIC|FAST_FORWARD:定义游标类型。静态游标。关键字STATIC指定游标为静态游标。,7.5游标的概念和应用,键集驱动游标。关键字KEYSET定义一个键集驱动游标。动态游标。关键字DYNAMIC指定游标为动态游标。与静态游标不同,动态游标能够反映对结果集中所做的更改。只进游标。关键字FAST_FORWARD定义一个快速只进游标,它是优化的只进游标,只支持游标从头到尾顺序提取数据。,7.5游标的概念和应用,READ_ONLY|SCROLL_LOCKS|OPTIMISTIC:说明游标或基表的访问属性。READONLY是只读游标;SCROLL_LOCKS指定通过游标进行的定位更新或删除一定会成功,当将行读入游标时SQLServer将锁定这些行,以确保随后可对它们进行修改。如果还指定了FAST_FORWARD或STATIC,则不能指定SCROLL_LOCKS;OPTIMISTIC指明如果行自读入游标以来已得到更新,则通过游标进行的定位更新或定位删除不成功,该选项不能与FAST_FORWARD同时使用。TYPE_WARNING:指定将游标从所请求的类型隐式转换为另一种类型时向客户端发送警告消息。,7.5游标的概念和应用,以下是Transact-SQL扩展游标声明:DECLARESTU_CUR2CURSORDYNAMICFORSELECTSid,Sname,Sgender,Sbirth,SdepartFROMStudent_infoWHERESdepart=计算机系FORUPDATEOFSbirth,7.5游标的概念和应用,3打开游标声明游标后,就可以打开游标。打开游标的语法如下:OPENGLOBALcursor_name|cursor_variable_name其中,GLOBAL指定cursor_name是全局游标,否则打开局部游标。cursor_variable_name是游标变量名。,7.5游标的概念和应用,【例7-18】定义游标STU_CUR,然后打开该游标,输出其行数。declarestu_curcursorlocalscrollscroll_locksforselectSid,Sname,Sgender,Sbirth,SdepartfromStudent_infoforupdateofSbirthopenstu_curselect游标stu_cur数据行数=CURSOR_ROWS结果为游标stu_cur数据的行数。,7.5游标的概念和应用,4读取游标游标打开后,可以使用FETCH语句来读取数据。读取游标的语法如下:FETCHNEXT|PRIOR|FIRST|LAST|ABSOLUTEn|nvar|RELATIVEn|nvarFROMGLOBALcursor_name|cursor_variable_nameINTOvariable_name,.n,7.5游标的概念和应用,参数说明:NEXT|PRIOR|FIRST|LAST:用于说明读取数据的位置。分别为读取当前行的下一行;当前行的前一行;结果集的第一行;结果集的最后一行。并且使其置为当前行。ABSOLUTEn|nvar:如果n或nvar为正,则返回从游标头开始向后的第n行,并将返回行变成新的当前行。如果n或nvar为负,则返回从游标末尾开始向前的第n行,并将返回行变成新的当前行。如果n或nvar为0,则不返回行。n必须是整数常量,并且nvar的数据类型必须为smallint、tinyint或int。RELATIVEn|nvar如果n或nvar为正,则返回从当前行开始向后的第n行,并将返回行变成新的当前行。如果n或nvar为负,则返回从当前前行开始向前的第n行,并将返回行变成新的当前行。如果n或nvar为0,则返回当前行。在对游标进行第一次提取时,如果在将n或nvar,7.5游标的概念和应用,设置为负数或0的情况下指定FETCHRELATIVE,则不返回行。n必须是整数常量,nvar的数据类型必须为smallint、tinyint或int。GLOBAL指定cursor_name是指全局游标。INTOvariable_name,.n:说明将读取的游标数据存放到指定的局部变量中。列表中的各个变量从左到右与游标结果集中的相应列相关联。各变量的数据类型必须与相应的结果集列的数据类型匹配,或是结果集列数据类型所支持的隐式转换。变量的数目必须与游标选择列表中的列数一致。,7.5游标的概念和应用,【例7-19】从游标STU_CUR中读取数据。设该游标已经打开。FETCHNEXTFROMSTU_CUR5关闭游标游标使用完后,要及时关闭。关闭游标使用CLOSE语句。语法如下:CLOSEGLOBALcursor_name|cursor_variable_name参数同OPEN参数说明。例如:CLOSESTU_CUR将关闭游标STU_CUR。,7.5游标的概念和应用,6释放游标游标关闭后,其定义仍在,若确认游标不再需要使用了,就要释放其定义所占用的系统空间,即删除游标。DEALLOCATE语句用于删除游标与游标名称或游标变量之间的关联,游标使用的任何资源也随之释放。语法如下:DEALLOCATEGLOBALcursor_name|cursor_variable_name参数同OPEN参数说明。,7.5游标的概念和应用,7游标的应用【例7-20】使用游标汇总每位学生的平均成绩和应得学分。usestudentdeclarenamechar(10)declareavg_gradefloat-定义平均成绩变量declaretotalfloat-定义应得学分变量declaremycursorcursorfor-声明游标selectSname,avg(grade),sum(Ccedit)fromStudent_info,sc,Course_infowhereStudent_info.sid=sc.sidandCourse_info.cid=sc.cidGROUPBYSname,7.5游标的概念和应用,openmycursor-打开游标fetchnextfrommycursorintoname,avg_grade,total-读取游标数据print每个学生的平均成绩和应得学分如下:while(fetch_status=0)-检测游标数据是否读取完,如果还有数据,继续循环beginprintname+str(avg_grade,5,2)+str(total,3,1)fetchnextfrommycursorintoname,avg_grade,totalendclosemycursor-关闭游标deallocatemycursor-释放游标GO,7.5游标的概念和应用,总结与反思,本情境中,要认真学习以上3个工作任务,最终完成“实训项目”的上机实践,达到以下要求:1掌握Transact-SQL的数据类型、常量变量、表达式等概念。2掌握程序中注释的基本概念和使用方法。3掌握程序中的流程控制语句。4掌握游标的概念和声明方法,以及使用游标进行数据的查询、修改、删除操作等。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!