更新时间:2026-10-21 GMT+08:00
游标概述
为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。
- 当存储过程使用returns返回游标时,如果使用JDBC调用该存储过程,返回的游标将不可用,使用out出参不受影响。
- 在分布式下,当SQL语句中调用的存储过程参数为refcursor类型或返回值为refcursor类型时,不支持下推。
- 存储过程内commit/rollback时,显式游标为保证在commit/rollback后仍可用,会缓存游标所有数据,若游标数据量较大,此过程耗时可能较长。
- 存储过程内FETCH游标内的数据放入指定的输出变量中,当输出变量的个数大于实际游标查询结果集合的数据列时,会给多出的变量赋空值,不会产生报错;当输出变量的个数小于实际游标查询结果集合的数据列时,多余的列将被静默丢弃,不会产生报错。
- 开启GUC参数forbid_hold_cursor_with_forupdate时,若游标带有FOR UPDATE/FOR SHARE特性且在游标循环或for loop查询语句中使用,在执行事务提交/回滚操作后的下次循环访问游标时报错。
- 在开启GUC参数behavior_compat_options的plstmt_implicit_savepoint选项时,若游标执行下推到DN的SQL报错,会导致事务状态异常,无法被EXCEPTION捕获。
游标的使用分为显式游标和隐式游标。对于不同的SQL语句,游标的使用情况不同,详细信息请参见表1。
父主题: 游标