![openGauss数据库核心技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/206/44510206/b_44510206.jpg)
2.4 游标
不同于SQL查询单独执行时每次返回多个结果集,游标可以每次只返回一个结果,通过反复地对游标做FETCH操作,就可以获得多个查询结果。
游标的使用通常分为4个步骤:声明、打开、使用、关闭。
(1)声明:定义一个游标。
(2)打开:打开游标,实际上是开始为游标赋予初值。
(3)使用:通过MOVE等命令移动游标,并获得游标指向的内容。
(4)关闭:游标使用结束后,关闭游标。
2.4.1 声明游标
(1)声明没有绑定SQL语句的游标。具体语句如下:
![](https://epubservercos.yuewen.com/34EF7A/23721726509644006/epubprivate/OEBPS/Images/Figure-P67_27611.jpg?sign=1738948162-ru3FAqKaxxYr0auvWb3bAUEbdK51CH4Q-0-c48ce0a00b3f648bceabb1fe7e81f8c6)
(2)声明绑定具体执行的SQL语句的游标。具体语句如下:
![](https://epubservercos.yuewen.com/34EF7A/23721726509644006/epubprivate/OEBPS/Images/Figure-P67_27612.jpg?sign=1738948162-B0wmUgu6OHS7RskoJSa84OQPCwmp1pzk-0-ff88134840f908a67f7637bdb50e3d56)
(3)申明在指定SQL语句的同时指定需要绑定参数的游标。具体语句如下:
![](https://epubservercos.yuewen.com/34EF7A/23721726509644006/epubprivate/OEBPS/Images/Figure-P67_27613.jpg?sign=1738948162-6jIISKusNGnVS1OekDybHiU6QDpNLhU5-0-69374c72fc57c61d3d29dc1c3911c5f5)
2.4.2 打开游标
如果游标在声明时没有绑定SQL语句,那么在打开游标时必须指定SQL查询语句。
例2-66:打开一个未绑定SQL语句的游标,同时指定SQL语句。具体语句如下:
![](https://epubservercos.yuewen.com/34EF7A/23721726509644006/epubprivate/OEBPS/Images/Figure-P68_27618.jpg?sign=1738948162-sszNtZwwbCi2WMT0H2ttcamIQLxlmZUe-0-04e21aea46a6551f27cd2ff0004ea32c)
对于未绑定SQL语句的游标,还可以通过format和USING指定动态命令。
例2-67:打开一个游标,通过format和USING操作指定绑定的SQL语句。具体语句如下:
![](https://epubservercos.yuewen.com/34EF7A/23721726509644006/epubprivate/OEBPS/Images/Figure-P68_27619.jpg?sign=1738948162-gt6WNImxWAiSZWxCh22uqCE4hvnR14Zm-0-ebf66d7cf6055081f4d346c02e95c3e9)
如果已经绑定SQL语句,那么可以直接打开游标。
例2-68:对于已经绑定SQL的游标,可以直接打开,如果在绑定SQL语句时设置了参数,这里需要指定参数的值。具体语句如下:
![](https://epubservercos.yuewen.com/34EF7A/23721726509644006/epubprivate/OEBPS/Images/Figure-P68_27620.jpg?sign=1738948162-FObg9d5VUXkLDD6pUE8ryr7PbwJLlU06-0-9aa7edce9cc51316a41462d9f2097b13)
2.4.3 使用游标
打开游标之后,就可以通过FETCH或MOVE等命令来操作游标指向的元组:
(1)FETCH:检索并返回游标所指向的行。
(2)MOVE:重新定义游标的位置,不返回数据。
例2-69:使用FETCH或MOVE命令检索数据。具体语句如下:
![](https://epubservercos.yuewen.com/34EF7A/23721726509644006/epubprivate/OEBPS/Images/Figure-P68_27621.jpg?sign=1738948162-AWDS2EhzO1j9oAzub7Oq9DO8IGpQtRKS-0-fe44b26b1736b137e2d5f8ab91223daa)
游标的移动方向是可以指定的,具体介绍如下:
(1)NEXT:返回当前游标指向的下一条元组,而且游标递增指向下一条元组。
(2)LAST:返回游标指向的结果集合中的最后一条元组,并且将最后一条元组作为当前元组。
(3)PRIOR:返回当前游标指向的上一条元组,并且游标递减指向上一条元组。
(4)FIRST:返回游标指向的结果集合中的第一条元组,并且将第一条元组指定为当前元组。
(5)ABSOLUTE count:读取游标指向的结果集合中的第count条元组,如果count为负数,那么返回从结果集合末尾向前的第count条元组。
(6)RELATIVE count:获取从当前元组开始的第count条元组。
(7)FORWARD:和PRIOR相同,返回当前游标指向的上一条元组。
(8)BACKWARD:和NEXT相同,返回当前游标指向的下一条元组。
2.4.4 关闭游标
关闭游标可以用CLOSE命令来实现。
例2-70:关闭游标cursor_sql。具体语句如下:
![](https://epubservercos.yuewen.com/34EF7A/23721726509644006/epubprivate/OEBPS/Images/Figure-P69_27636.jpg?sign=1738948162-sEfNpTeoiaVI1QIakaV7lXGSCk9sUQwU-0-53959c9e749a9e3aef807e17ff0b538d)