暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【oushudb】PL 过程语言-游标

原创 宗恩 2023-02-02
167

六、游标:
\1. 声明游标变量:

在PL/pgSQL中对游标的访问都是通过游标变量实现的,其数据类型为refcursor。 创建游标变量的方法 有以下两种:

1). 和声明其他类型的变量一样,直接声明一个游标类型的变量即可。 2). 使用游标专有的声明语法,如:

其中arguments为一组逗号分隔的name datatype列表,见如下示例:

name CURSOR [ ( arguments ) ] FOR query;

WHEN condition [ OR condition ... ] THEN
        handler_statements

END;

在上面三个例子中,只有第一个是未绑定游标,剩下两个游标均已被绑定。

\2. 打开游标: 游标在使用之前必须先被打开,在PL/pgSQL中有三种形式的OPEN语句,其中两种用于未绑定的游标变

量,另外一种用于绑定的游标变量。

1). OPEN FOR:

其声明形式为:

该形式只能用于未绑定的游标变量,其查询语句必须是SELECT,或其他返回记录行的语句,如 EXPLAIN。在PostgreSQL中,该查询和普通的SQL命令平等对待,即先替换变量名,同时也将该查询的 执行计划缓存起来,以供后用。见如下示例:

2). OPEN FOR EXECUTE

其声明形式为:

和上面的形式一样,该形式也仅适用于未绑定的游标变量。EXECUTE将动态执行其后以文本形式表示的 查询字符串。

3). 打开一个绑定的游标 其声明形式为:

该形式仅适用于绑定的游标变量,只有当该变量在声明时包含接收参数,才能以传递参数的形式打开该
游标,这些参数将被实际代入到游标声明的查询语句中,见如下示例:

OPEN unbound_cursor FOR query;

OPEN curs1 FOR SELECT * FROM foo WHERE key = mykey;

OPEN unbound_cursor FOR EXECUTE query-string;

OPEN curs1 FOR EXECUTE 'SELECT * FROM ' || quote_ident($1);

OPEN bound_cursor [ ( argument_values ) ];

OPEN curs2;
    OPEN curs3(42);

curs1 refcursor;
    curs2 CURSOR FOR SELECT * FROM tenk1;
    curs3 CURSOR (key integer) IS SELECT * FROM tenk1 WHERE unique1 = key;

\3. 使用游标: 游标一旦打开,就可以按照以下方式进行读取。然而需要说明的是,游标的打开和读取必须在同一个事

物内,因为在PostgreSQL中,如果事物结束,事物内打开的游标将会被隐含的关闭。 1). FETCH

其声明形式为:

FETCH命令从游标中读取下一行记录的数据到目标中,其中目标可以是行变量、记录变量,或者是一组 逗号分隔的普通变量的列表,读取成功与否,可通过PL/pgSQL内置变量FOUND来判断,其规则等同于 SELECT INTO。见如下示例:

2). CLOSE

其声明形式为:

关闭当前已经打开的游标,以释放其占有的系统资源,见如下示例:
CLOSE curs1;
最后修改时间:2023-02-02 11:05:01
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论