DECLARE - 定义一个游标
SYNOPSIS
DECLARE name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]
CURSOR [ { WITH | WITHOUT } HOLD ] FOR query
[ FOR { READ ONLY | UPDATE [ OF column [, ...] ] } ]
DESCRIPTION 描述
DECLARE 允许用户创建游标, 用于在一个大的查询里面检索少数几行数据。 使用 FETCH [fetch(7)],游标可以既可以返回文本也可以返回二进制格式。
通常游标返回文本格式,和 SELECT 生成的是一样的。 因为数据在系统内部是用二进制格式存储的, 系统必须对数据做一定转换以生成文本格式。 一旦数据是以文本形式返回,那么客户端应用需要把它们转换成二进制进行操作。 另外,文本格式一般都比对应的二进制格式占的存储空间大。 二进制游标给你返回内部二进制形态的数据。当然,如果你想以文本方式显示数据,那么以文本方式检索会为你节约很多客户端的工作。
比如,如果查询从一个整数列返回一个一, 在缺省的游标里你将获得一个字符串 1,而如果是一个二进制游标, 你将得到一个 4-字节的包含该数值内部形式的数值(大端序)。
游标应该小心使用二进制游标。一些用户应用如 psql 是不识别二进制游标的, 而且期望返回的数据是文本格式。
- Note: 注意: 如果客户端应用使用"扩展查询"协议发出 FETCH 命令, 那么 Bind 协议声明数据是用文本还是用二进制格式检索。
这个选择覆盖游标的定义。因此,在使用扩展查询协议的时候,二进制游标的概念已经过时了 - 任何游标都可以当作文本或者二进制的格式发出。
PARAMETERS 参数
- name
- 将在随后FETCH操作中使用的游标名。
- BINARY
- 令游标以二进制而不是文本格式获取数据。
- INSENSITIVE
- 表明从游标检索出来的数据不应该被其他进程或游标的更新动作影响。 在 PostgreSQL 里,所有游标都是不敏感的,这个关键字没有什么作用,提供它只是为了和 SQL 标准兼容。
- SCROLL
- NO SCROLL
- SCROLL 声明该游标可以用于以非顺序的方式检索数据行(也就是向后检索)。 根据查询的执行计划的不同,声明 SCROLL
可能会对查询的执行时间附加一定的影响。 NO SCROLL 声明该游标不能用于以非顺序的方式检索数据行(也就是向后检索)。 - WITH HOLD
- WITHOUT HOLD
- WITH HOLD 声明该游标可以在创建它的事务成功提交后继续使用。 WITHOUT HOLD 声明该游标不能在创建它的的事务提交后使用。如果既没有声明
WITHOUT HOLD,也没有声明 WITH HOLD, 那么缺省是 WITH HOLD。 - query
- 一个SELECT查询,它提供由游标返回的行。 请参考 SELECT 语句获取有关有效查询的详细信息。
- FOR READ ONLY
- FOR UPDATE
- FOR READ ONLY 表明游标将用于只读模式。 FOR UPDATE 表明游标将被用于更新表。 因为目前 PostgreSQL 不支持游标更新,
所以声明 FOR UPDATE 将产生一个错误信息。而声明 FOR READ ONLY 没有作用。 - column
- 将被更新的列。因为游标更新目前不被 PostgreSQL 支持, 所以 FOR UPDATE 子句将产生一个错误信息。
BINARY,INSENSITIVE,SCROLL 关键字可以以任何顺序出现。
NOTES 注意
如果没有声明 WITH HOLD,那么这个命令创建的游标只能在当前事务中使用。 Thus, DECLARE without
WITH HOLD is useless outside a transaction block: the cursor would survive only
to the completion of the statement. Therefore PostgreSQL reports an error if
this command is used outside a transaction block. 使用 BEGIN
[begin(7)], COMMIT [commit(7)] 和 ROLLBACK
[rollback(7)] 定义一个事务块。
如果声明了 WITH HOLD,并且创建该游标的事务成功提交, 那么游标还可以在同一会话随后的事务里访问。(但如果创建它的事务回滚,那么游标被删除。) 带着 WITH HOLD 创建的游标是用一个明确的 CLOSE 命令,或者是会话终止来关闭的。 在目前的实现里,由一个游标代表的行是被拷贝到一个临时文件或者内存区里的,这样他们就仍然可以在随后的事务中被访问。
在定义一个要用来向后抓取的游标的时候,我们应该声明 SCROLL 选项。 这个是 SQL 标准要求的。不过,为了和早期的版本兼容, PostgreSQL 在没有 SCROLL 的时候也允许向后抓取, 只要游标的查询计划简单得不需要额外的开销就可以支持它。 不过,我们建议应用开发人员不要依赖于使用没有带着 SCROLL 定义的游标的后向查找功能。如果声明了 NO SCROLL,那么不管怎样都会禁止向后抓取的功能。
在 SQL 标准中游标只能在嵌入 SQL (ESQL) 的应用中使用。 PostgreSQL 服务器没有一个明确的 OPEN 语句;一个游标被认为在定义时就已经打开了。 不过,PostgreSQL嵌入的 SQL 预编译器, ecpg, 支持 SQL92 习惯,包括那些和DECLARE和OPEN相关的语句。
EXAMPLES 例子
定义一个游标:
DECLARE liahona CURSOR FOR SELECT * FROM films;
参阅 FETCH [fetch(7)] 获取有关 游标使用的更多例子。
DECLARE - 定义一个游标的更多相关文章
- c#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程
定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法.用SqlParameter[]代替存储过程需要的参数.这样就不用为每一个存储过程写一个方法了 1.首先定义一个ExcuteProc ...
- MOVE - 重定位一个游标
SYNOPSIS MOVE [ direction { FROM | IN } ] cursorname DESCRIPTION 描述 MOVE 在不检索数据的情况下重新定位一个游标. MOVE AL ...
- 使用DECLARE定义条件和处理程序
定义条件和处理程序是事先定义程序执行过程中可能遇到的问题,并且可以在处理程序中定义解决这些问题的办法,可以简单理解 为异常处理,这种方式可以提前预测可能出现的问题,并提出解决办法,从而增强程序健壮性. ...
- 用CIL写程序:定义一个叫“慕容小匹夫”的类
前文回顾: <用CIL写程序:你好,沃尔德> <用CIL写程序:写个函数做加法> 前言: 今天是乙未羊年的第一天,小匹夫先在这里给各位看官拜个年了.不知道各位看官是否和匹夫一样 ...
- java怎么定义一个二维数组?
java中使用 [][] 来定义二维数组 定义数组时也可同时初始化下面是一些例子float[][] numthree; //定义一个float类型的2维数组numthree=new float[5][ ...
- 将对象的所有属性名放到一个数组中 || 获得对象的所有属性名 || return;不具有原子性 || 怎样自己制作异常|| 判断对象有没有某个属性 || 当传递的参数比需要的参数少的时候,没有的值会被赋予undefined || 获得函数实际传递的参数 || 怎么用函数处理一个对象 || 用一个名字空间定义一个模块所有的函数 || 给一个对象添加方法
获得对象的所有属性名 || 将对象o的所有属性名放到数组中 var o = {x:1,y:2,z:3}; var arr = []; var i = 0; for(arr[i++] in o){};/ ...
- HTML5移动Web开发(六)——定义一个内容策略
通过分析工具搜集到的数据,你可以定义一个内容策略,这对已经有了一个桌面网站的人是非常有用的. 1.确认你已经把分析工具的Javascript代码嵌入到网站中.(http://www.cnblogs.c ...
- 如何去定义一个jquery插件
扩展jquery的时候.最核心的方法是以下两种: $.extend(object) 可以理解为jquery添加一个静态方法 $.fn.extend(object) 可以理解为jquery实例添加一个方 ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
随机推荐
- [laravel]请求处理
请求进入 public/index.php 文件. bootstrap/start.php 文件创建应用程序对象并检测环境. 内部的 framework/start.php 文件配置相关设置并加载服务 ...
- Bootstrap-CSS:排版
ylbtech-Bootstrap-CSS:排版 1.返回顶部 1. Bootstrap 排版 Bootstrap 使用 Helvetica Neue. Helvetica. Arial 和 sans ...
- apple-touch-startup-image 制作iphone web应用程序的启动画面
为ipad制作web应用程序的启动画面时发现个问题,只能显示竖屏图,横屏图出不来,如下: 首先页面头部里要加入(这个是APP启动画面图片,如果不设置,启动画面就是白屏,图片像素就是手机全屏的像素) & ...
- C. Vanya and Scales
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- A - Soldier and Bananas
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description A sold ...
- 51nod 1225:余数之和
传送门 题意 略 分析 \(\sum_i^n(n\%i)=\sum_i^n(n-i*n/i)=n^2-\sum_i^ni*n/i\) \(=\sum r\sum_i^ni[n/i==r]\) 可以证明 ...
- 位运算【C++学习(计蒜客)】
C++提供了位运算操作符,使程序可以直接对内存进行操作.C++的这个特色大大提高了C++程序的执行能力.例如使用位操作运算可以将一个存储单位中的各个二进制位左移或右移一位,也可以将一个存储单位中所有的 ...
- Unity里的人物驱动/换装备/换武器/换衣服/卡通重定位(转)
Unity里的人物驱动/换装备/换武器/换衣服/动画重定位 刚学的过程被这个问题困扰最多. 首先,基本的,大家都知道驱动人物需要骨架.绑骨的Mesh和动画(这三个要是不知道的话就得考虑看看计算机图形学 ...
- Calculation 2 HDU - 3501
https://vjudge.net/problem/HDU-3501 不会做啊...记一下做法 做法是计算小于n且与n互质的数的和:根据如果gcd(i,n)==1,那么gcd(n-i,n)==1,对 ...
- Beautiful People SGU - 199 ZOJ - 2319
最长上升子序列O(n log n):http://www.cnblogs.com/hehe54321/p/cf-340d.html 题目:https://cn.vjudge.net/problem/Z ...