PostgreSQL学习手册(PL/pgSQL过程语言)(8)
来源:未知 责任编辑:责任编辑 发表时间:2014-05-20 18:35 点击:次
1). 和声明其他类型的变量一样,直接声明一个游标类型的变量即可。
2). 使用游标专有的声明语法,如:
name CURSOR [ ( arguments ) ] FOR query;
其中arguments为一组逗号分隔的name datatype列表,见如下示例:
curs1 refcursor; www.2cto.com
curs2 CURSOR FOR SELECT * FROM tenk1;
curs3 CURSOR (key integer) IS SELECT * FROM tenk1 WHERE unique1 = key;
在上面三个例子中,只有第一个是未绑定游标,剩下两个游标均已被绑定。
2. 打开游标:
游标在使用之前必须先被打开,在PL/pgSQL中有三种形式的OPEN语句,其中两种用于未绑定的游标变量,另外一种用于绑定的游标变量。
1). OPEN FOR:
其声明形式为:
OPEN unbound_cursor FOR query;
该形式只能用于未绑定的游标变量,其查询语句必须是SELECT,或其他返回记录行的语句,如EXPLAIN。在PostgreSQL中,该查询和普通的SQL命令平等对待,即先替换变量名,同时也将该查询的执行计划缓存起来,以供后用。见如下示例:
OPEN curs1 FOR SELECT * FROM foo WHERE key = mykey;
2). OPEN FOR EXECUTE
其声明形式为:
OPEN unbound_cursor FOR EXECUTE query-string;
和上面的形式一样,该形式也仅适用于未绑定的游标变量。EXECUTE将动态执行其后以文本形式表示的查询字符串。
OPEN curs1 FOR EXECUTE 'SELECT * FROM ' || quote_ident($1);
3). 打开一个绑定的游标
其声明形式为:
OPEN bound_cursor [ ( argument_values ) ];
该形式仅适用于绑定的游标变量,只有当该变量在声明时包含接收参数,才能以传递参数的形式打开该游标,这些参数将被实际代入到游标声明的查询语句中,见如下示例:
OPEN curs2;
OPEN curs3(42);
3. 使用游标:
游标一旦打开,就可以按照以下方式进行读取。然而需要说明的是,游标的打开和读取必须在同一个事物内,因为在PostgreSQL中,如果事物结束,事物内打开的游标将会被隐含的关闭。
1). FETCH
其声明形式为:
FETCH cursor INTO target;
FETCH命令从游标中读取下一行记录的数据到目标中,其中目标可以是行变量、记录变量,或者是一组逗号分隔的普通变量的列表,读取成功与否,可通过PL/pgSQL内置变量FOUND来判断,其规则等同于SELECT INTO。见如下示例:
FETCH curs1 INTO rowvar; --rowvar为行变量
FETCH curs2 INTO foo, bar, baz;
2). CLOSE
其声明形式为:
CLOSE cursor;
关闭当前已经打开的游标,以释放其占有的系统资源,见如下示例:
CLOSE curs1; www.2cto.com
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>