数据库系统简介chp08.ppt
文本预览下载声明
;第八章 数据库编程;8.1 嵌入式SQL;8.1 嵌入式SQL;8.1.1 嵌入式SQL的处理过程;嵌入式SQL的处理过程(续) ;嵌入式SQL的处理过程(续) ;8.1 嵌入式SQL;8.1.2 嵌入式SQL语句与主语言之间的通信;嵌入式SQL语句与主语言之间的通信(续) ;一、SQL通信区;SQL通信区;二、主变量 ;主变量(续) ;主变量(续) ;主变量(续) ;主变量(续) ;主变量(续) ;三、游标(cursor);四、建立和关闭数据库连接;;五、程序实例;程序实例(续);程序实例(续);程序实例(续);8.1 嵌入式SQL;游 标; 游标(续);;SQL Server游标具有下面的处理过程:
(1)声明游标,定义其特性,如游标中的行是否可以被更新。
(2) 执行Transact-SQL语句生成游标即打开游标。
(3)在游标中检索要查看的行。从游标中检索一行称为读取游标。向前或向后执行取数据操作来检索行的行为称为滚动。
(4)关闭游标。
(5)删除游标;1. SQL-92游标定义格式;;参数说明:
SCROLL:表示可以使用相应的关键字指定游标的移动位置,否则游标的移动只能是NEXT
READ ONLY:禁止通过该游标进行更新
UPDATE:定义游标中可更新的列
;SCROLL的取值;例 声明一个游标,用于访问Sales数据库中的goods表的信息。;语法格式如下:
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ];例为customer表定义一个全局滚动动态游标,用于访问顾客的编号、姓名、地址、电话信息。;使用游标;2. 读取游标;表9-14 @@fetch_status变量;OPEN cur_customer
FETCH NEXT FROM cur_customer
WHILE @@fetch_status = 0
BEGIN
FETCH NEXT FROM cur_customer
END;CLOSE的语法格式为:
CLOSE 游标名
例如,关闭游标cur_customer的命令:
CLOSE cur_customer
游标cur_customer在关闭后,就不再和原来的查询结果集相联系,仍可用OPEN语句打开继续读取数据行。;DEALLOCATE命令删除游标与游标名或游标变量之间的联系,并且释放游标占用的所有系统资源。其语法格式为:
DEALLOCATE 游标名
一旦某个游标被删除,在重新打开之前,必需再次对其进行声明。;游标的应用;删除游标数据的语法格式为:
DELETE FROM table_name
WHERE CURRENT OF 游标名
;例 定义游标cur_customer,通过cur_customer更新customer表 中的customer_name和linkman_name列。;若要删除customer表的一行数据,则使用以下命令替换例9-37中的UPDATE语句,就可以删除通过游标读入的一行数据。
DELETE FROM customer
WHERE CURRENT OF cur_customer; DECLARE xs CURSOR
FOR
SELECT * from 学生表
for update of 年龄
open xs
fetch absulute 4 from xs
update 学生表 set 年龄=年龄-1 where current of xs
close xs
Deallocate xs;2. 使用游标变量;;;CREATE PROCEDURE PK_SalaryAdd
AS
declare @O_ID nvarchar(20),@A_Salary float
declare mycursor cursor
for
select O_ID,A_Salary from AddSalary
open mycursor
fetch next from mycursor into @O_ID,@A_Salary
while(@@fetch_status = 0)
begin
Update OriginSalary set O
显示全部