更新时间: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);
NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default.
HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
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

相关文档