使用 FOR READ ONLY 关键字可将游标定义为只读游标。声明为只读的游标不可以用于更新(或删除)任何它得到的行。
对 FOR READ ONLY 关键字的需要取决于数据库是符合 ANSI 的还是不符合 ANSI 。
因为在不兼容 ANSI 的数据库中,DECLARE 语句定义的游标在缺省情况下是只读游标,所以如果想将游标成为一个只读游标,您不需要指定 FOR READ ONLY 关键字。显式地指定 FOR READ ONLY 关键字的唯一好处是为了更好地编制程序文档。
在兼容 ANSI 的数据库中,如果 SELECT 语句符合与游标相关联的 SELECT 语句的子集 中列出的对更新游标的所有限制,那么通过 DECLARE 语句与 SELECT 语句相关联的游标在缺省情况下是一个更新游标。如果想让一个 Select 游标成为只读,则必须在声明该游标时使用 FOR READ ONLY 关键字。
数据库服务器可以针对只读游标使用比针对更新游标更为宽松的锁定。
EXEC SQL declare z_curs cursor for select * from customer_ansi for read only;