sybase基础知识
[ 作者:陈苏文 转贴自:http://www.chinaunix.net 点击数:9526 文章录入:sdccf ]
●定义游标
●打开游标
●从游标中操作数据
●关闭游标
下面讲述的是后端(服务器)游标。
(1)定义游标
在使用游标之前必须声明它。声明指定定义游标结果集的查询。通过使用for update或for read only关键词将游标显式定义成可更新的或只读的。
Declare cursor语法为:
For select_statement
[for{read only|update[of colum_name_list]}]
举例:
declare pubs_crsr cursor
for select pub_name,city,state
from publishers
for update of city,state
(2)打开游标
open的语法为:
open 游标名
在声明游标后,必须打开它以便用fetch,update,delete读取、修改、删除行。在打开一个游标后,它将被放在游标结果集的首行前,必须用fetch语句访问该首行。
(3)从游标中读取数据
在声明并打开一个游标后,可用fetch命令从游标结果集中获取数据行。
Fetch的语法为:
Fetch 游标名[into 变量列表]
举例:fetch pub_crsr into @name,@city,@state
SQL Server在每次读取后返回一个状态值。可用@@sqlstatus访问该值,下表给出了可能的@@sqlstatus值及其意义。
值意 义
0Fetch语句成功
1Fetch语句导致一错误
2结果集没有更多的数据,当前位置位于结果集最后一行,而客户对该游标仍发出Fetch语句时。
若游标是可更新的,可用update和delete语句来更新和删除行。
删除游标当前行的语法为:
delete[from]表名
where current of 游标名
举例:delete from authors where current of authors_crsr
当游标删除一行后,SQL Server将游标置于被删除行的前一行上。
更新游标当前行的语法为:
update 表名
set column_name1={expression1|NULL|(select_statement)}
[,column_name2={expression2|NULL|(select_statement)}
[……]
where current of 游标名
举例:
update publishers
set city=”Pasadena”,state=”CA”
where current of pubs_crsr
(4)关闭游标
当结束一个游标结果集时,可用close关闭。该语法为:
close 游标名
关闭游标并不改变其定义,可用open再次打开。若想放弃游标,必须使用deallocate释放它,deallocater的语法为:
deallocater cursor 游标名
deallocater语句通知SQL Server释放Declare语句使用的共享内存,不再允许另一进程在其上执行Open操作。
六、事务——维持数据一致性和恢复
1.事务的定义
事务提供了一种将T-SQL语句分组的方法,从而使它们能够被当成一个单元来处理:组中所有语句或都执行,或都不执行。
事务是确保一个或多个SQL语句的集合不被当成单一工作单元处理的机制,SQL Server自动将所有数据修改命令,包括单步改变请求,作为事务处理,缺省时,每个insert、update、delete语句被当成一个事务处理。
2.事务的作用
事务使SQL Server能保证:
·一致性——同时发生的查询或改变请求彼此不冲突,用户不能对正处于改变过程的数据进行查看或操作。
·恢复——在系统失效时,数据库的恢复是完全的和自动的。
3.使用事务
a. 开始和确认事务
begin transaction和commit transaction可将任意数目的SQL语句封装起来,这两名的简单语法为:
begin transaction
commit transaction
b. 回退事务
在commit transaction命令提交前任何时候可取消或回退事务,该命令的简单语法为:
rollback transaction
4.检查事务状态
全局变量@@transtate记录了事务当前的状态。在执行一个语句后SQL Server通过记录所有事务变化来确定返回何种状态。
@@transtate可包含下列值:
值意 义
0事务进行中:一个显式或隐式事务有效;上一语句执行成功
1事务完成:事务完成并提交其变化
2语句异常中止:上一语句异常终止;对事务无影响
3事务异常中止:事务异常中止并回退所有变化
举例:在事务中,可在一个语句(如insert)后使用@@transtate确定该语句成功或失败对事务的影响。commit transaction
Begin transaction
Insert into publishers(pub_id)values(‘9999’)
(1 row affected)
select @@transtate
…………………
0
commit transaction
select @@transtate
…………………
0
(1 row affected)
本文地址:http://com.8s8s.com/it/it23637.htm