您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 11 SQL中数据交换之自含方式
第十一章SQL中数据交换之自含方式11.1自含式SQL概述11.2SQL/PSM介绍11.3T-SQL介绍11.4存储过程11.5T-SQL编程本章小结11.1自含式SQL概述将传统的程序设计语言与SQL相结合主要用于服务器中的应用程序编制以及后台脚本的编制以过程或模块形式长久存储于服务器内供应用程序调用11.1自含式SQL概述自含式SQL的内容:SQL的基本内容:数据定义、数据操纵、数据控制传统程设计语言的主要成分控制类语句、输出语句SQL中数据交换部分游标、诊断、动态SQL服务性内容函数库、类库11.1自含式SQL概述自含式SQL分类标准SQL中,自含式SQL称为SQL/PSM,即SQL持久存储模块SQLServer2000中称为T-SQL11.2SQL/PSM介绍1SQL/PSM语句声明语句SQL的变量声明条件声明声明一个状态以及一个与状态名对应的SQLSTATE值句柄声明将一个过程、模块或compound语句需要处理的状态与一个句柄关联起来11.2SQL/PSM介绍传统算法语言中的控制语句CompoundCaseIfIterateLeaveLoopWhileRepeatForAssignmentCallReturn11.2SQL/PSM介绍SQL中基本部分语句数据定义数据操作数据控制SQL中数据交换语句游标诊断动态SQL11.2SQL/PSM介绍2SQL/PSM中模块的建立定义模块语句Createmodule撤销模块语句Dropmodule创建过程语句Createprocedure撤销过程语句Dropprocedure11.3T-SQL介绍1数据类型、变量与表达式2基本SQL操作3部分数据交换操作4程序流程控制与输出语句5函数6文本、图像操作11.3T-SQL介绍1数据类型、变量与表达式数据类型SQLServer2000中的数据类型变量局部变量用户自定义,在程序内部使用需用declare声明,并以@开头Declare@变量名变量类型11.3T-SQL介绍全局变量系统预先定义和维护用@@作为前缀主要用来记录SQLServer2000的运行状态和有关信息变量的赋值Select@变量名=表达式[from表名|视图]Set@变量名=变量值11.3T-SQL介绍运算符算术运算符+-*/%比较运算符逻辑运算符Andornot字符运算符用+表示字符串的连接11.3T-SQL介绍表达式数值型表达式X+2*y+5字符型表达式“中国首都-”+”北京”日期型表达式#2002-07-01#-#1997-07-01#逻辑型表达式工资=1200and工资=180011.3T-SQL介绍注释符单行注释--多行注释/*…..*/11.3T-SQL介绍2基本SQL操作数据定义语句数据操纵语句数据控制语句11.3T-SQL介绍3数据交换操作游标DeclarecursorDeclare游标名[csroll]cursorforselect语句[for{readonly|updateof列名}]Csroll表示可使用包括查询、增、删、改在内的所有操作Forreadonly或forupdate说明游标为只读或可修改的11.3T-SQL介绍Open语句Open游标名Fecth语句Fetch定位取向from游标名[into@变量名…]Close语句Close游标名DeallocateDeallocate游标名11.3T-SQL介绍游标中的诊断诊断值放在全局变量fetch_status中游标应用的实例--打开northwind数据库usenorthwindgodeclareabccursorforselect*fromshippers/*定义一个游标*/11.3T-SQL介绍openabc/*打开游标*/fecthnextfromabcwhile(@@fetch_status=0)fetchnextfromabc/*游标的使用*/closeabcdeallocateabc/*关闭游标*/go11.3T-SQL介绍4算法程序设计语言中的程序流控制及输出语句Begin…andIf….elseCaseWhile…break…continueGoto11.3T-SQL介绍WaitforReturnPrintraiserror11.3T-SQL介绍5函数查询汇总函数类型转换函数日期函数数学函数字符串函数系统函数图像函数11.3T-SQL介绍6文本、图像操作ReadtextWritetextUpdatetext11.4存储过程存储过程的构作过程名参数过程体Createprocedure存储过程名(参数表)as过程体Dropprocedure存储过程名11.4存储过程存储过程的使用Execute存储过程名(参数表)存储过程的优点减少网络负担提高系统执行效率扩大共享资源11.4存储过程例1:创建一个名为Insert_Record的存储过程,其功能是向表s中插入一条记录,其记录值由参数提供。createprocedureInsert-Record(@snochar(5)@snvarchar(20)@sdvarchar(2)@sasmallint)asinsertintosvalues(@sno,@sn,@sd,@sa)return)11.4存储过程例2:调用存储过程Insert-Record,其参数为:sno=‘1357’,sn=‘王平’,sd=‘cs’,sa=18.executeInsert-Record@sno=‘1357’,@sn=‘王平’,@sd=‘cs’,@sa=1811.4存储过程例3:编制一个存储过程,该存储过程根据输入的学生年龄,输出该年龄的学生姓名。createproceduresearchname@agesmallintasdeclare@namevarchar(10)declareabccursorforselectsnamefromswheresage=@ageopenabcfetchnextfromabcinto@name11.4存储过程While(@@fetch_status=0)Beginprint@namefetchnextfromabcinto@nameEndCloseabcDeallocateabcreturn11.4存储过程调用此存储过程executeprint_score@age=1811.5T–SQL编程例4:编制一个存储过程,该存储过程根据输入的系别,输出该系所有学生的平均分createprocedureprint_score@deptvarchar(10)/*print_score为存储过程名,@dept为输入参数,表示所要查询的系名*/as/*表示存储过程体开始*/11.5T–SQL编程declare@snamevarchar(20),declare@snovarchar(10),declare@gradeint/*声明存储过程中将要用到的局部变量*/print‘----studentgradereport----’/*打印提示内容*/declaremy_cursorcursor/*声明游标*/11.5T–SQL编程ForSelects.sno,sn,isnull(avg(grade),-1)Froms,sc/*isnull(avg(grade),-1)表示若平均成绩为空,则取-1*/Wheresd=@deptands.sno=sc.snoGroupbys.sno,snForreadonly--此游标为只读游标Openmy_cursor11.5T–SQL编程Fetchnextfrommy_cursorinto@sno,@sname,@gradeWhile(@@fetch_status=0)/*(@@fetch_status=0表示取值成功*/Begin--打印学生的学号、姓名和平均成绩Print‘学号:’+@snoPrint‘姓名:’+@snamePrint‘成绩等级:’11.5T–SQL编程If@grade0--成绩中有空值print‘尚有未考科目’If@grade60and@grade0print‘不及格’If@grade90print‘优秀!’If@grade=90and@grade=60print‘通过’11.5T–SQL编程fetchnextfrommy_cursorinto@sno,@sname,@gradeEndclosemy_cursor--关闭游标deallocatemy_cursor--释放游标return11.5T–SQL编程例5:编制一个计算教师工资的存储过程,计算需求如下:教师工资清单:姓名、职称、基本工资、职称补贴、扣税费其中职称补贴:教授1000元、副教授800元、讲师及以下500元;税费:2000元以下0%、2000-4000元5%、4000-8000元8%、8000元以上10%;11.5T–SQL编程创建存储过程GetSalary,实现从teacher表中读取相应数据,按照要求进行计算处理,并将结果写入数据库。CREATEPROCEDUREGetSalaryAS11.5T–SQL编程/*声明变量*/DECLARE@nameVARCHAR(50);DECLARE@titleVARCHAR(50);DECLARE@basic_salaryFLOAT;DECLARE@allowanceFLOAT;DECLARE@taxFLOAT;11.5T–SQL编程/*声明游标myCursor*/DECLAREmyCursorCURSORFORSELECTname,title,basic_salaryFROMteacher/*打开游标*/OPENmyCursor;11.5T–SQL编程/*通过游标从表中读取一条数据并将值赋给相应变量*/FETCHNEXTFROMmyCursorINTO@name,@title,@basic_salary;/*进行数据处理*/WHILE@@FETCH_STATUS=0BEGIN11.5T–SQL编程/*计算职称补贴*/IF@title='教授'BEGINSET@allowance=1000;END;ELSEIF@title='副教授'BEGINSET@allowance=800;END;ELSEBEGINSET@allowance=500;END;11.5T–SQL编程/*计算税金*/IF@basic_salary+@allowance8000BEGINSET@tax=(@basic_salary+@allowance-8000)*0.1;END;ELSEIF@basic_salary+@allowance4000BEGINSET@tax=(@basic_salary+@allowance-4000)*0.08;END;ELSEIF@basic_salary+@allowance2000BEGINSET@tax=(@basic_salary+@allowance-2000)*0.05;END;ELSEBEGINSET@tax=0;END;11.5T–SQL编程/*更新teacher表中相关数据*/UPDATEteacherSETtax=@tax,allowance=@allowanceWHEREname=@name/*取下一条数据*/FETCHNEXTFROMmyCursorINTO@name,@title,@basic_salary;End11.5T–SQL编程/*关闭游标*/CLOSEmyCursor;DEALLOCATEmyCursor;Return本章小结自含
本文标题:11 SQL中数据交换之自含方式
链接地址:https://www.777doc.com/doc-3644891 .html