更新时间:2025-08-19 GMT+08:00
分享

CURSOR

在存储过程中,CURSOR是一种重要资源,不当使用可能引发以下问题:

  • 未关闭的CURSOR会占用系统资源,大量未及时关闭的CURSOR会严重影响数据库内存和性能,特别是在高并发或循环操作中。

因此,建议在存储过程中,使用CURSOR后立即关闭。

gaussdb=# create schema best_practices_for_procedure;
CREATE SCHEMA
gaussdb=# create table best_practices_for_procedure.tb1 (a int);
CREATE TABLE
gaussdb=# insert into best_practices_for_procedure.tb1 values (1),(2),(3);
INSERT 0 3
--创建使用cursor的存储过程。
gaussdb=# create or replace procedure best_practices_for_procedure.pro_cursor () as
my_cursor cursor for select *from best_practices_for_procedure.tb1;
a int;
begin
open my_cursor;
fetch my_cursor into a;
close my_cursor; -- 及时关闭cursor。
end;
/
CREATE PROCEDURE
gaussdb=# call best_practices_for_procedure.pro_cursor();
 pro_cursor
------------

(1 row)

gaussdb=# drop schema best_practices_for_procedure cascade;
NOTICE:  drop cascades to 2 other objects
DETAIL:  drop cascades to table best_practices_for_procedure.tb1
drop cascades to function best_practices_for_procedure.pro_cursor()
DROP SCHEMA

相关文档