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

Oracle存储过程:插入查询结果并返回插入数据的实现方法

修改存储过程以返回插入的数据

可以通过Oracle的INSERT ... RETURNING ... BULK COLLECT INTO语法捕获所有插入的行数据,再通过输出游标返回这些数据,修改后的存储过程如下:

PROCEDURE InsertEmailList(app_cd                    IN  VARCHAR2,
                           app_auth_key_value        IN  VARCHAR2,
                           refcsr                    OUT cursor_type)
 AS    
    -- 声明与EmailListTable行结构匹配的集合类型
    TYPE email_list_tab IS TABLE OF EmailListTable%ROWTYPE;
    v_inserted_rows email_list_tab;
 BEGIN

    INSERT INTO EmailListTable
    SELECT ID, emailAddress, name From BuyerList
    -- 批量获取所有插入的行数据到集合
    RETURNING ID, emailAddress, name BULK COLLECT INTO v_inserted_rows;

    -- 打开输出游标,返回已插入的数据
    OPEN refcsr FOR
        SELECT * FROM TABLE(v_inserted_rows);

 END InsertEmailList;

关键说明:

  • 首先声明email_list_tab集合类型,它与EmailListTable的行结构完全一致,用来临时存储所有插入的行。
  • RETURNING ... BULK COLLECT INTO会把本次INSERT操作插入的所有行的指定字段批量收集到集合中,确保获取的是当前会话插入的精准数据,避免并发场景下的误取。
  • 最后通过TABLE()函数将集合转换为可查询的数据集,打开输出游标返回给VB.NET端,你可以在VB.NET中通过读取REF CURSOR来获取这些数据。

注意事项:

  • 确保cursor_type是已定义的REF CURSOR类型(例如在包声明中定义TYPE cursor_type IS REF CURSOR;),否则需要补充定义。
  • 如果BuyerList返回的行数极大,需评估集合的内存占用情况,必要时可分批次处理,但常规业务场景下该方案适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:20:04