常常处理的是记录(元组)的集合,这个矛盾必须解决。
6. 试述预编译的作用。
宿主语言的编译系统不能识别SQL语句。解决这个问题的一般方法是,为SQL语句加 一个特殊的前缀,在用宿主语言的编译系统编译源程序之前,首先由预编译系统将SQL语句
转换为宿主语言的合法函数调用。
7. 试述游标(Cursor)的作用,并解释实现此功能的诸条语句的用途。
宿主语言一般只能在单记录方式下工作,即一次处理一个记录。而SQL语句的查询结果 常常是一张表,它包含多个记录,为此需要用游标(CURSOR)作为桥梁做一些特殊处理, 即利用游标来临时存放SQL语句的查询结果,并利用游标与宿主语言的主变量进行数据交 互。与游标有关的命令共有四条:DECLARE CURSOR、OPEN、FETCH和CLOSE。其中 DECLARE CURSOR用SQL SELECT语句说明一个游标;OPEN打开游标,即执行说明游标
的SQL SELECT语句;FETCH从游表中读一条记录到主变量;CLOSE关闭游标。
8. 试述为什么需要动态SQL语句,分析游标和动态游标的区别。
有时候在编程序时SQL语句或语句的参数和格式不能确定,应用程序只能在执行时才知 道需要什么样的SQL语句,即必须在应用程序执行时动态建立SQL语句。
定义游标的SQL语句是静态的;而定义动态游标的SQL语句是动态生成的。
习题六
1. 什么是存储过程?为什么要使用存储过程?
存储过程是经过预编译的T-SQL语句的集合,它存放在数据库中,当用户执行存储过程 时,存储过程在数据库服务器上运行。
利用存储过程可以避免在网络上传输大量无用的信息或原始数据,只需要传输调用存储 过程的指令和数据库服务器返回的处理结果,这样可以大大提高网络数据库应用系统的性能。
2. 试为如下问题编写、建立存储过程,并定义合适的过程返回状态码和信息(均以图 5-1的数据库为例):
1) 插入一个新的供应商元组。 CREATE PROCEDURE ins_sup
(@sno CHAR(3),@sname CHAR (16),@addr CHAR (10)) AS
INSERT INTO 供应商 VALUES(@sno,@sname,@addr)
IF @@ERROR = 0
RETURN 0
ELSE
RETURN -1
2) 给指定城市的所有仓库增加x m2的面积。 CREATE PROCEDURE upd_wh_area
(@city char(10),@area numeric) AS
UPDATE 仓库 SET 面积=面积 + @area WHERE 城市=@city
IF @@ERROR = 0
RETURN 0
ELSE
RETURN -1
3) 检索某职工发给某供应商的订购单信息。 CREATE PROCEDURE get_ord
(@eno CHAR(4),@sno CHAR(3)) AS
SELECT * FROM 订购单 WHERE 职工号=@eno AND 供应商号=@sno
IF @@ERROR = 0
RETURN 0
ELSE
RETURN -1
4) 检索在某城市工作并且向某供应商发了订购单的职工号。 CREATE PROCEDURE get_eno
(@city CHAR(10),@sno CHAR(3)) AS
SELECT 职工号 FROM 职工 WHERE 仓库号 IN
(SELECT 仓库号 FROM 仓库 WHERE 城市=@city) AND 职工号 IN
(SELECT 职工号 FROM 订购单 WHERE 供应商号=@sno)
IF @@ERROR = 0
RETURN 0
ELSE
RETURN –1
3. 试述触发器的概念和作用。
触发器可以看作是一类特殊的存储过程,它在满足某个特定条件时自动触发执行。触发 器是为表上的更新、插入、删除操作定义的,也就是说当表上发生更新、插入或删除操作时 触发器将执行。
触发器可以用于数据参照完整性和以下一些场合:
.. 触发器可以通过级联的方式对相关的表进行修改。比如,对父表的修改,可以引起 对子孙表的一系列修改,从而保证数据的一致性和完整性。 .. 触发器可以禁止或撤消违反参照完整性的修改。
.. 触发器可以强制比用CHECK约束定义更加复杂的限制。
4. 利用触发器为图5-1数据库的订购单关系建立参照完整性。。
建立插入触发器
CREATE TRIGGER ord_ins_trigger
ON 订购单 FOR INSERT AS
IF ((SELECT COUNT(*) FROM 职工 e,INSERTED i
WHERE e.职工号=i.职工号)=0 OR
(SELECT COUNT(*) FROM 供应商 s,INSERTED i
WHERE s.供应商号=i. 供应商号)=0)
BEGIN
RAISERROR ('非法职工号或非法供应商号', 1, 1)
ROLLBACK TRANSACTION
END
建立更新触发器 略
习题七
1. 讨论数据库安全都与哪些安全问题有关?
数据库安全实际涉及到很多方面,除了数据库管理系统应该具有安全保护功能之外,还 需要从管理机制、人员行为、操作系统安全和网络安全等多个方面采取措施。
2. 试述数据库的自主存取控制和强制存取控制的区别和各自的特点。
自主存取控制的特点是由用户“自主”地控制数据库对象的访问权限;而强制存取控制 的特点是严格的分层次管理,有严格的等级制度。
3. 试述角色管理在数据库安全控制中的作用。
角色管理类似于用户组的管理,可以将数据库的所有用户划分成不同的角色,这样可以 简化用户管理,使用户管理和权限管理更加简洁、清楚。
4. 试述SQL Server的系统预定义角色为安全管理提供了哪些便利。
SQL Server的系统管理是由系统管理员(默认是sa用户)负责的,而系统预定义角色正 是系统管理员职责的分解,通过一些系统预定义角色的用户来协助系统管理员进行管理,可 以减轻系统管理员(sa用户)的工作负担,对系统管理来说又有更明确的职责划分。