四章SQL.ppt

上传人:本田雅阁 文档编号:3205357 上传时间:2019-07-30 格式:PPT 页数:85 大小:570.05KB
返回 下载 相关 举报
四章SQL.ppt_第1页
第1页 / 共85页
四章SQL.ppt_第2页
第2页 / 共85页
四章SQL.ppt_第3页
第3页 / 共85页
四章SQL.ppt_第4页
第4页 / 共85页
四章SQL.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《四章SQL.ppt》由会员分享,可在线阅读,更多相关《四章SQL.ppt(85页珍藏版)》请在三一文库上搜索。

1、第四章 SQL,SQL概述 SQL数据定义功能 SQL数据查询功能 SQL数据修改功能 SQL数据控制功能 嵌入式SQL,SQL概述(),历史 1974年,由Boyce和Chamber提出。 1975-1979年,在System R上实现,由IBM的San Jose研究室研制,称为Sequel,现在称为SQL (Struceured Query Languang)。 标准化 有关组织 ANSI(American Natural Standard Institute) ISO(International Organization for Standardization) 有关标准 SQL-86:

2、“数据库语言SQL”,SQL概述(),SQL-89:“具有完整性增强的数据库语言SQL”,增加了对完整性约束的支持。 SQL-92:“数据库语言SQL”,是SQL-89的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。 SQL-3:正在讨论中的新的标准,将增加对面向对象模型的支持。 特点 一体化 集DDL,DML,DCL于一体。 单一的结构-关系,带来了数据操作符的统一。 面向集合的操作方式 一次一集合。,SQL概述(),高度非过程化 用户只需提出“做什么”,无须告诉“怎么做”,不必了解存取路径。 两种使用方式,统一的语法结构 SQL既是自含式语言(用户使

3、用),又是嵌入式语言(程序员使用)。 语言简洁,易学易用,示例关系,DEPT(D# , DNAME , DEAN) S(S# , SNAME , SEX , AGE , D#) COURSE(C# , CN , PC# , CREDIT) SC(S# , C# , SCORE) PROF(P# , PNAME, AGE, D# , SAL) PC(P# , C#),SQL数据定义功能,域定义 基本表的定义 索引的定义 数据库的建立与撤消 SQL数据定义特点,域定义(),域类型(SQL-92) char(n):固定长度的字符串。 varchar(n):可变长字符串。 int:整数。 smalli

4、nt:小整数类型。 numeric(p,d):定点数,小数点左边p位,右边q位。 real:浮点数。 double precision:双精度浮点数。 date:日期(年、月、日)。 time:时间(小时、分、秒)。 interval:两个date或time类型数据之间的差。,域定义(),域定义 格式 create domain 域名 数据类型 示例 create domain person-name char(20) 类似C语言中: typedef ADDRESS_LIST char name10; char telephone20; char location20 char email20

5、; ADDRESS_LIST tom;,基本表的定义(),基本表的定义(CREATE) 格式 create table 表名( 列名 数据类型 default 缺省值 not null ,列名 数据类型 default 缺省值 not null ,primary key(列名 ,列名 ) ,foreign key (列名 ,列名 ) references 表名 (列名 ,列名 ) ,check(条件),基本表的定义(),示例 create domain person_name char(20) create table PROF ( PNO char10, person_name PNAME

6、not null, SAL int, AGE int, DNO char10, primary key (PNO), foreign key (DNO) references DEPT(DNO), check (SAL 0),基本表的定义(),修改基本表定义(ALTER) 格式: alter table 表名 add 子句 增加新列 drop 子句 删除列 modify 子句 修改列定义 示例 alter table PROF add LOCATION char30,基本表的定义(),撤消基本表定义(drop) 格式 drop table 表名 示例 drop table DEPT 危险 撤消

7、基本表后,基本表的定义、表中数据、索引、以及由此表导出的视图的定义都被删除。,索引的定义(),索引的定义 格式 create unique/distinct cluster index 索引名 on 表名 (列名 asc/desc , 列名asc/desc) unique(distinct):唯一性索引,不允许表中不同的行在索引列上取相同值。若已有相同值存在,则系统给出相关信息,不建此索引。系统并拒绝违背唯一性的插入、更新。 cluster:聚集索引,表中元组按索引项的值排序并物理地聚集在一起。一个基本表上只能建一个聚集索引。 asc/desc:索引表中索引值的排序次序,缺省为asc。 示例:

8、 create cluster index s-index on S(S#),索引的定义(),索引的删除 格式: drop index 索引名 索引的有关说明 可以动态地定义索引,即可以随时建立和删除索引。 不允许用户在数据操作中引用索引。索引如何使用完全由系统决定,这支持了数据的物理独立性。 应该在使用频率高的、经常用于连接的列上建索引。 一个表上可建多个索引。索引可以提高查询效率,但索引过多耗费空间,且降低了插入、删除、更新的效率。,数据库的建立与撤消,有的数据库系统支持多库。 建立一个新数据库 create database 数据库名 撤消一个数据库 drop database 数据库名

9、 指定当前数据库 database 数据库名 指定当前数据库 close database 数据库名,SQL数据定义特点,SQL中,任何时候都可以执行一个数据定义语句,随时修改数据库结构。而在非关系型的数据库系统中,必须在数据库的装入和使用前全部完成数据库的定义。若要修改已投入运行的数据库,则需停下一切数据库活动,把数据库卸出,修改数据库定义并重新编译,再按修改过的数据库结构重新装入数据。 数据库定义不断增长(不必一开始就定义完整)。 数据库定义随时修改(不必一开始就完全合理)。 可进行增加索引、撤消索引的实验,检验其对效率的影响。,SQL数据查询功能,SQL数据查询基本结构 select子句

10、 重复元组的处理 from子句 where子句 更名运算 字符串操作 元组显示顺序 集合操作,SQL数据查询功能,分组和聚集函数 空值 嵌套子查询 派生关系 视图 关系的连接,SQL数据查询基本结构,基本结构 select A1 , A2 , , An from r1 , r2 , , rm where P A1 , A2 , , An(p(r1 r2 rm) 示例 给出所有老师的姓名。 select PNAME from PROF,select子句,目标列形式 可以为列名,* ,算术表达式,聚集函数。 “*”:表示“所有的属性”。 给出所有老师的信息。 select * from PROF

11、带, , 的算术表达式 给出所有老师的姓名及税后工资额。 select PNAME,SAL 0.95 from PROF,重复元组的处理,语法约束 缺省为保留重复元组,也可用关键字all显式指明。若要去掉重复元组,可用关键字distinct或unique指明。 示例 找出所有选修课程的学生。 select distinct SNO from SC,from子句(),说明 from子句列出查询的对象表。当目标列取自多个表时,在不混淆的情况下可以不用显式指明来自哪个关系。 示例 例:找出工资低于500的职工的姓名、工资、系别。 select PNAME , SAL , DNAME from PRO

12、F , DEPT where SAL 500 and PROF.DNO = DEPT.DNO,from子句(),例:列出教授“哲学”课程的老师的教工号及姓名。 select PROF. PNO , PNAME from PROF , PC , COURSE where PROF.PNO = PC.PNO and PC.CNO = COURSE.CNO and COURSE.CNAME = “哲学”,where子句,语法成分 比较运算符:、 、=、 。 逻辑运算符:and,or,not。 between条件:判断表达式的值是否在某范围内。 示例 列出工资在500800之间的老师姓名。 selec

13、t PNAME from PROF where SAL between 500 and 800,更名运算(),格式 old_name as new_name 为关系和属性重新命名,可出现在select和from子句中。 示例 属性更名 例:给出所有老师的姓名、所纳税额及税后工资额。 select PNAME,SAL0.05 as taxi, SAL*0.95 as incoming from PROF,更名运算(),关系更名 找出工资比所在系主任工资高的老师姓名及工资。 select P1.PNAME,P1.SAL from PROF as P1,PROF as P2,DEPT where P

14、1.DNO = DEPT.DNO and DEPT.DEAN = P2.PNO and P1.SAL P2.SAL 注:as可选。,字符串操作(),命令格式 like:找出满足给定匹配条件的字符串。 格式:列名 not like “字符串” 匹配规则: “%” :匹配零个或多个字符。 “”:匹配任意单个字符。 escape :定义转义字符,以去掉特殊字符的特定含义,使其被作为普通字符看待。如escape “”,是定义了 作为转义字符,则可用%去匹配%,用去匹配,用 去匹配 。,字符串操作(),示例 列出姓名以“张”打头的教师的所有信息。 select * from PROF where PNA

15、ME like “张%” 列出名称中含有4个字符以上,且倒数第3个字符是d,倒数第2个字符是_的系的所有信息。 select * from PROF where PNAME like “% d ”,元组显示顺序,命令 order by 列名 asc | desc 示例 按系名升序列出老师姓名,所在系名,同一系中老师按姓名降序排列。 select DNAME,PNAME from PROF,DEPT where PROF.DNO = DEPT.DNO order by DNAME asc,PNAME desc,集合操作(),命令 集合并:union 集合交:intersect 集合差: exce

16、pt 示例 求选修了001或002号课程的学生号。 (select SNO from SC where CNO = 001) union all (select SNO from SC where CNO = 002),集合操作(),求选修了001和002号而没有选003号课程的学生号。 (select SNO from SC where CNO = 001 or CNO = 002 ) except (select SNO from SC where CNO = 003) 提示 集合操作自动去除重复元组,如果要保留重复元组的话,必须用all关键词指明。,分组和聚集函数(),分组命令 grou

17、p by 列名 having 条件表达式 group by将表中的元组按指定列上的值相等的原则分组,然后在每一分组上使用聚集函数,得到单一值。having则对分组进行选择,只将聚集函数作用到满足条件的分组上。 聚集函数 平均值:avg 最小值:min 最大值:max 总和:sum 记数:count,分组和聚集函数(),示例 列出各系的老师的最高、最低、平均工资。 select DNO,max(SAL),min(SAL),avg(SAL) from PROF group by DNO 列出及格的学生的平均成绩。 select SNO,avg(SCORE) from SC group by SNO

18、 having min(SCORE) = 60,分组和聚集函数(),? 求选修了课程的学生人数。 select count (SNO ) from SC select PNAME,max(SAL) from PROF select DNO,avg(SAL) from PROF group by DNO where AGE 60,空值(),空值测试 is not null 测试指定列的值是否为空值。 示例 找出年龄值为空的老师姓名。 select PNAME from PROF where AGE is null 不可写为where AGE = null,空值(),注意事项 除is not nu

19、ll之外,空值不满足任何查找条件。 如果null参与算术运算,则该算术表达式的值为null。 如果null参与比较运算,则结果可视为false。在SQL-92中可看成unknown。 如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null。 例:select sum(SAL) from PROF 例:select count(*) from PROF,嵌套子查询,集合成员资格 集合之间的比较 集合基数的测试 测试集合是否为空 测试集合是否存在重复元组,集合成员资格(),in 子查询 表达式 not in (子查询) 判断表达式的值是否在子查询的结果中。 示例 选修了001

20、号课程的学生的学号及姓名。 select SNO,SNAME from S where SNO in (select SNO from SC where CNO = 001),集合成员资格(),列出选修了001号和002号课程的学生的学号。 select SNO from SC where SC.CNO = 001 and SNO in (select SNO from SC where CNO = 002) 列出张军和王红同学的所有信息。 select * from S where SNAME in (“张军”,“王红”),集合之间的比较(),some/all子查询 表达式 比较运算符 so

21、me (子查询) 表达式的值至少与子查询结果中的一个值相比满足比较运算符 。 表达式 比较运算符 all (子查询) 表达式的值与子查询结果中的所有的值相比都满足比较运算符。,集合之间的比较(),示例 找出平均成绩最高的学生号。 select SNO from SC group by SNO having avg(SCORE) = all (select avg(SCORE) from SC group by SNO),集合基数的测试(),测试集合是否为空 not exists (子查询) 判断子查询的结果集合中是否有任何元组存在。 列出选修了01号课程的学生的学号及姓名。 select SN

22、O,SNAME from S where exists (select * from SC where CNO = 01 and SNO = S.SNO),集合基数的测试(),列出选修了001号和002号课程的学生的学号。 select SNO from SC SC1 where SC1.CNO = 001 and exists (select SNO from SC SC2 where SC2. CNO = 002 and SC2.SNO = SC1.SNO) 注:in后的子查询与外层查询无关,每个子查询执行一次,而exists后的子查询与外层查询有关,需要执行多次,称之为相关子查询。,列出

23、至少选修了001号学生选修的所有课程的学生名。 select SNAME from S where not exists (select CNO from COURSE where exists (select * from SC where SC.CNO = COURSE.CNO and SC.SNO = 001) and not exists (select * from SC where SC.CNO = COURSE.CNO and SC.SNO = S.SNO),任意课程,001号学生选之,所求学生选之。 不存在任何一门课程,001号学生选之,所求学生没有选之。,集合基数的测试(),

24、测试集合是否存在重复元组 unique (子查询) 如果子查询结果中没有重复元组,则返回true。 示例 找出所有只教授一门课程的老师姓名。 select PNAME from PROF where unique (select PNO from PC where PC.PNO = PROF.PNO),集合基数的测试(),找出至少选修了两门课程的学生姓名。 select SNAME from S where not unique (select SNO from SC where SC.SNO = S.SNO) 思考 to TRUE or not to TRUE , that is the q

25、uestion. unique (a , b , null) , (a , b , null) ?,派生关系(),命令 (子查询) as 关系名(列名,列名,) SQL-92中,允许在from子句中使用子查询表达式,这时可将该子查询的结果命名为一个临时关系加以引用。 示例 找出平均成绩及格的学生。 先求出每个学生的平均成绩,再从中找出及格的学生 select SNAME , avg(SCORE) from S,SC where SC.SNO = S.SNO group by SC .SNO,派生关系(),select SNAME , AVG_SCORE from (select SNAME ,

26、 avg(SCORE) from S,SC where SC.SNO = S.SNO group by SC .SNO) as result(SNAME , AVG_SCORE ) where AVG_SCORE = 60 派生关系 Vs 视图?,视图(),定义视图 create view view_name(列名,列名 ) as (查询表达式) with check option 视图的属性名缺省为子查询结果中的属性名,也可以显式指明。 with check option指明当对视图进行insert,update时,要检查是否满足视图定义中的条件。 撤消视图 drop view view_n

27、ame,视图(),示例 create view COMPUTER_PROF as (select PNO , PNAME , SAL from PROF,DEPT where PROF.PNO = DEPT.PNO and DEPT.DNAME = “计算机系”) create view DEPTSAL( DNO, LOW, HIGH, AVERAGE, TOTAL ) as ( select DNO, min(SAL), max(SAL), avg(SAL), sum(SAL) from PROF group by DNO ),视图(),给出计算机系工资超过800的老师姓名。 select

28、PNAME from COMPUTER_PROF where SAL 800 给出计算机系老师的最低、最高、平均工资以及工资总额。 select LOW , HIGH , AVERAGE , TOTAL from DEPTSAL , DEPT where DEPTSAL.DNO = DEPT.DNO and DEPT.DNAME =“计算机系”,关系的连接(),基本分类 连接成分包括两个输入关系、连接条件、连接类型。 连接条件:决定两个关系中哪些元组相互匹配,以及连接结果中出现哪些属性。 连接类型:决定如何处理与连接条件不匹配的元组。,关系的连接(),自然连接:出现在结果关系中的两个连接关系的

29、元组在公共属性上取值相等,且公共属性只出现一次。 on :出现在结果关系中的两个连接关系的元组在公共属性上取值满足谓词条件P,且公共属性出现两次。 using (A1, A2 , An): (A1, A2 , An)是两个连接关系的公共属性的子集,元组在(A1, A2 , An)上取值相等,且(A1, A2 , An)只出现一次。 内连接:舍弃不匹配的元组。 左外连接:内连接 + 左边关系中失配的元组(缺少的右边关系属性值用null表示)。,关系的连接(),右外连接:内连接 + 右边关系中失配的元组(缺少的左边关系属性值用null表示)。 全外连接:内连接 + 左边关系中失配的元组(缺少的右边

30、关系属性值用null表示)+ 右边关系中失配的元组(缺少的左边关系属性值用null表示)。 cross join:两个关系的笛卡儿积。 union join:左边关系中失配的元组+ 右边关系中失配的元组。 对于外连接,连接条件是必须的; 对于内连接,连接条件是可选的,没有连接条件等价于两个关系的笛卡儿积。,关系的连接(),列出老师的教工号、姓名、工资、所教课程号。 select PNO,PNAME,SAL,CNO from (PROF nature left outer join PC),R inner join S on R.C = S.C,R,S,关系的连接(),R left outer

31、join S on R.C = S.C,R nature right outer join S,关系的连接(),R full outer join S on R.C = S.C,SQL的数据修改功能,插入 删除 修改 视图更新,插入操作(),命令 insert into 表名 (列名,列名 values (值 ,值) 插入一条指定好值的元组 insert into 表名 (列名,列名 (子查询) 插入子查询结果中的若干条元组 示例 insert into PROF values ( P123, “王明”, 35, D08, 498 ) insert into PROF (PNO, PNAME,

32、 DNO) values ( P123, “王明”, D08 ) 思考:SAL取何值?如何防止插入带有空值的元组?,插入操作(),将平均成绩大于90的学生加入到EXCELLENT中。 insert into EXCELLENT ( SNO, GRADE) select SNO , avg(SCORE) from SC group by (SNO) having avg(SCORE) 90 FORBIDDEN( INFORMIX) insert into PROF select * from PROF,若支持,则完成查询后,再执行修改操作,不支持修改在子查询中出现的表,删除操作(),命令 del

33、ete from 表名 where 条件表达式 从表中删除符合条件的元组,如果没有where语句,则删除所有元组。 示例 清除所有选课记录 delete from SC 删除王明老师所有的任课记录。 delete from PC where PNO in (select PNO from PROF where PNAME = “王明”),删除操作(),删除低于平均工资的老师记录。 delete from PROF where SAL (select avg(SAL) from PROF) 思考:是先找到所有符合条件的元组,一并删除,还是找到一个删除一个?,更新操作(),命令 update 表名

34、 set 列名 = 表达式 | 子查询 列名 = ,表达式 | 子查询 where 条件表达式 指定对哪些列进行更新,以及更新后的值是什么。 示例 老师工资上调5%。 update PROF set SAL = SAL * 1.05,更新操作(),将D01系系主任的工资改为该系的平均工资 update PROF set SAL = (select avg(SAL) from PROF where DNO = D01) where PNO = (select DEAN from DEPT where DNO = D01),更新操作(),工资超过2000的缴纳10%所得税,其余的缴纳5%所得税。

35、update PROF set SAL = SAL * 0.9 where SAL 2000 update PROF set SAL = SAL * 0.95 where SAL = 2000 执行顺序是,还是,?,视图更新(),示例 create view P_SAL as (select PNO , PNAME , SAL from PROF ) insert into P_SAL values ( P08 , “张立” , 750 ) 转换为: insert into PROF values ( P08 , “张立” , null , null , 750 ),视图更新(),视图更新约束

36、 以Informix系统为例,规定: 允许更新的视图只能定义在单表上。 select子句中的目标列不能包含聚集函数。 select子句中不能使用unique或distinct关键字。 不能包括group by子句。 不能包括经算术表达式计算出来的列。,SQL数据控制功能(),安全性控制 安全性控制保护数据库以防止不合法的使用所造成的数据泄露和破坏。其基本措施是存取控制。 授权命令 grant 表级权限 on 表名 | 视图名 to 用户 ,用户 | public with grant option 表级权限包括:select, update, insert, delete, index, al

37、ter以及它们的总和all,其中对select , update可指定列名。 with grant option表示获得权限的用户可以把权限再授予其它用户。,SQL数据控制功能(),示例 grant select , insert on S to Liming with grant option grant all on S to public 回收权限 revoke 表级权限 on 表名 | 视图名 from 用户 ,用户 | public 收回权限时,若该用户已将权限授予其它用户,则也一并收回。授权路径的起点一定是DBA。,SQL数据控制功能(),示例 revoke insert on S

38、 from Liming 思考一:grant可以基于列授权,当revoke这样的权限时,结果是什么? 思考二:执行完下列语句的结果是什么? revoke all on S from public grant select on S to public 有些支持多库的数据库系统中授权对象还可以是数据库: grant 数据库级权限 to 用户 ,用户 | public,SQL数据控制功能(),数据库级权限包括: connect:允许用户在database语句中指定数据库。 resource:connect权限 + 建表、删除表及索引权利。 dba:resource权限 + 授予或撤消其他用户的co

39、nnect、resource、dba权限。不允许dba撤消自己的dba权限。 思考: 如何使dba撤消自己的dba权限?,嵌入式SQL,为什么使用嵌入式SQL? 有些操作对于交互式SQL是不可能的任务。 SQL的表达能力相比高级语言有一定的限制,有些数据访问要求单纯使用SQL无法完成。一方面,SQL在逐渐增强自己的表达能力(参见习题4.10),另一方面,太多的扩展会导致优化能力及执行效率的降低。 非声明性动作 实际的应用系统是非常复杂的,数据库访问只是其中一个部件。有些动作如与用户交互、图形化显示数据等只能用高级语言实现。,嵌入式SQL执行过程,主语言 + 嵌入SQL,预处理,主语言 + 函数

40、调用,主语言编译器,主语言执行程序,需要解决的几个问题(),区分SQL语句与C语言语句 嵌入的SQL语句以EXEC SQL开始,以分号(;) 或END_EXEX结束。 EXEC SQL delete from PROF where DNO = 10; 嵌入SQL语句与C语言之间的数据传递 宿主变量 C变量,既可以用在C语句中,也可用在SQL语句中,用来在两者之间传递数据。,需要解决的几个问题(),宿主变量的声明:声明为通常的C变量,并将其放在下列标识语句之间, EXEC SQL BEGIN DECLARE SECTION EXEC SQL END DECLARE SECTION EXEC SQ

41、L BEGIN DECLARE SECTION int prof_no; char prof_name30; int salary; EXEC SQL END DECLARE SECTION,需要解决的几个问题(),注:宿主变量出现于SQL语句中时,前面加(:)以区别列名。 宿主变量可出现的地方:SQL的数据操纵语句中可出现常数的任何地方,select,fetch等语句的into字句中。 示例: EXEC SQL select PNAME , SAL into :prof_name , :salary from PROF where PNO = prof_no ;,需要解决的几个问题(),指示

42、变量 C变量,用来指示返回给宿主变量的值是否为null值,以及返回给宿主变量的字符串是否发生了截断。 应用场合:如果一个宿主变量所对应的数据库字段允许空值,或字符串类型的宿主变量的长度可能小于所对应的数据库字段的长度,则需要一个指示变量来指明数据库访问的返回状态。 指示变量的返回值: = 0:取到主变量的值不空,没有发生截断。 = 1:取到主变量的值为空值。 0:取到主变量的值发生了截断,指示变 量的值是截断前的字符串的实际长度。,需要解决的几个问题(),指示变量的用法:声明与宿主变量的声明方式一样,在数据操纵语句中,在宿主变量和指示变量之间加( : )或关键字indicator。 EXEC

43、SQL BEGIN DECLARE SECTION int prof_no; char prof_name30; int salary; short name_id; short sal_id; EXEC SQL END DECLARE SECTION EXEC SQL select PNAME , SAL into :prof_name : name_id , :salary: sal_id from PROF where PNO = prof_no ;,需要解决的几个问题(),SQL与主语言之间操作方式的协调 SQL:一次一集合。 C语言:一次一记录。 游标:在查询结果的记录集合中移动的指

44、针。 若一个SQL语句返回单个元组,则不用游标。 若一个SQL语句返回多个元组,则使用游标。 不需要游标的数据操作 结果是一个元组的select语句 EXEC SQL select PNAME , SAL into :prof_name : name_id , :salary: sal_id from PROF where PNO = prof_no ;,需要解决的几个问题(),insert语句 EXEC SQL insert into PROF values (:prof_no, :prof_name , :salary , :dept_no , : salary) ; delete语句 E

45、XEC SQL delete from PROF values PNO :prof_no ; update语句 EXEC SQL update PROF set SAL = :salary where PNO = : prof_no ;,需要解决的几个问题(),需要游标的数据操作 当select语句的结果中包含多个元组时,使用游标可以逐个存取这些元组。 活动集:selecT语句返回的元组的集合。 当前行:活动集中当前处理的那一行。游标即是指向当前行的指针。 游标分类: 滚动游标:游标的位置可以来回移动,可在活动集中取任意元组。 非滚动游标:只能在活动集中顺序地取下一个元组。 更新游标:数据库对

46、游标指向的当前行加锁,当程序读下一行数据时,本行数据解锁,下一行数据加锁。,需要解决的几个问题(),定义与使用游标的语句 declare:定义一个游标,使之对应一个select语句。 declare 游标名 scroll cursor for select语句 for update of列表名 for update任选项,表示该游标可用于对当前行的修改与删除。 open:打开一个游标,执行游标对应的查询,结果集合为该游标的活动集。 open 游标名,需要解决的几个问题(),fetch :在活动集中将游标移到特定的行,并取出该行数据放到相应的宿主变量中。 fetch next | prior |

47、 first | last | current | relative n | absolute m 游标名 into 宿主变量表 close :关闭游标,释放活动集及其所占资源。需要再使用该游标时,执行open语句。 close 游标名 free:删除游标,以后便不能再对该游标执行open语句了 free 游标名,需要解决的几个问题(),SQL语句执行信息反馈 良好的应用程序必须提供对错误的处理,应用程序需要知道SQL语句是否正确执行了,发生错误时的错误代码,执行时遇到特殊情况时的警告信息。 SQL通讯域SQLCA是一结构,每一嵌入SQL语句的执行情况在其执行完成后写入USERCA结构中的各变量中, 根据SQLCA中的内容可以获得每一嵌入SQL语句执行后的信息,应用程序就可以做相应的处理。 为了说明 (USERCA),必须在应用程序中包括: EXEC SQL INCLUDE SQLCA;,作业,4.2 c,g, h,j,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1