显式游标是静态游标(也就是说,游标与一条SQL语句关联,在编译块时此语句是已知的)。
在运行时游标变量也可以与不同的语句关联。游标变量类似于PL/SQL变量,可以在运行时接纳不同的值。静态游标类似于PL/SQL常量,因为它们只能与一个运行时查询关联。
游标是一种引用类型,引用类型与指针相同,它可以在程序运行时指定不同的存储位置。为了使用引用类型,必须声明变量,然后必须分配存储空间。
引用类型声明语法如下:
REF_var type
其中type是事先定好的类型,ref关键字指示新类型是指:指向已定义类型的指针,因此,游标的类型是REF游标。定义游标变量类型的完整语法如下:
Type type_name is ref cursor return return_type;
其中type_name是新引用类型的名称,返回类型是指示将由游标变量返回的select列表的类型的记录类型。游标变量的返回类型必须是记录类型。可以将它显式声明为用户定义的记录,也可以使用%ROWTYPE隐式声明它。在定义引用类型之后,可以声明变量。
具有约束的游标变量和无约束的游标变量
当游标变量具有返回类型时,它称为具有约束的游标变量或强游标。但是,游标变量不一定需要具有返回类型,这样的游标变量称为无约束的游标变量或弱游标。强游标和弱游标的声明的示例如下:
--强游标类型
Type t_add_ref is ref cursor returnvendor_master%rowtype;
--弱游标类型
Type t_adds_ref is ref cursor;
--声明游标变量
V_add_ref t_add_ref; --强游标变量 或具有约束变量
V_adds_ref t_adds_ref; --弱游标变量或无约束变量
打开游标变量进行查询:
游标变量必须与特定的select语句关联。这是由open语句实现的,该语句已扩展为允许指定查询。使用open语句的语法如下。
Open cursor_variable for select_statement;
其中cursor_variable是以前声明的游标变量,select_statement是所需的查询。如果游标变量是具有约束的,则select列表必须与游标的返回类型匹配。
关闭游标变量
与静态游标一样,游标变量是使用close语句关闭的。这将释放用于查询的资源。但是,它不一定释放游标变量本身的存储空间。在变量超出其作用域时,将释放变量的存储空间。关闭已经关闭的游标或游标变量是非法的。
--此实例根据用户选择的动态游标打开两个不同的sql其中一个