You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle存储过程中传入游标作为输入参数

Oracle存储过程接收游标输入参数的正确实现

在Oracle中,要创建接收游标作为输入参数的存储过程,需使用**预定义的弱类型游标SYS_REFCURSOR**来定义参数类型,具体实现如下:

1. 带游标输入参数的存储过程写法

CREATE OR REPLACE PROCEDURE process_cursor(p_input_cursor IN SYS_REFCURSOR)
IS
    -- 定义与游标查询字段匹配的变量,示例以表t1的id、name字段为例
    v_id    t1.id%TYPE;
    v_name  t1.name%TYPE;
BEGIN
    -- 遍历输入游标中的数据
    LOOP
        FETCH p_input_cursor INTO v_id, v_name;
        EXIT WHEN p_input_cursor%NOTFOUND;
        
        -- 此处编写业务逻辑,示例为打印数据
        DBMS_OUTPUT.PUT_LINE('ID: ' || v_id || ', Name: ' || v_name);
    END LOOP;

    -- 关闭游标,避免资源泄漏
    CLOSE p_input_cursor;
EXCEPTION
    WHEN OTHERS THEN
        -- 异常处理:确保游标在异常时也能关闭
        IF p_input_cursor%ISOPEN THEN
            CLOSE p_input_cursor;
        END IF;
        RAISE;
END;
/

2. 调用该存储过程的示例

可在PL/SQL块中定义游标并传入存储过程:

DECLARE
    v_my_cursor SYS_REFCURSOR;
BEGIN
    -- 打开游标,指定查询语句
    OPEN v_my_cursor FOR SELECT id, name FROM t1;
    
    -- 传入游标调用存储过程
    process_cursor(v_my_cursor);
END;
/

关键注意事项

  • 必须使用SYS_REFCURSOR作为游标参数类型,这是Oracle官方支持的跨程序单元传递游标的标准类型。
  • FETCH语句的变量数量、类型必须与游标查询的字段完全匹配。
  • 务必处理游标关闭逻辑,包括正常流程和异常分支,防止数据库资源泄漏。

内容的提问来源于stack exchange,提问作者Bahy Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:52:07