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

PL/SQL出现ORA-01001无效游标错误,请求排查代码问题

问题分析与修复

你的代码触发ORA-01001: invalid cursor错误的核心原因是游标关闭语句的位置错误:

  • 你把CLOSE asset_cursor;写在了外层LOOP循环内部,第一次循环执行时就会关闭游标。当循环进入第二次迭代时,FETCH asset_Cursor BULK COLLECT INTO cost_data_tbl LIMIT ln_limit;尝试从已经关闭的游标中取数据,自然会触发无效游标的错误。

修复后的代码

CURSOR asset_cursor IS 
    select File_DATA from RSI_ASSET_DETAILS 
    where ACCOUNT_TYPE= 'COST' Order By SEQ ASC; 
TYPE Cost_data IS TABLE OF asset_cursor%rowtype;
cost_data_tbl cost_data;

OPEN asset_cursor;
LOOP
    FETCH asset_Cursor BULK COLLECT INTO cost_data_tbl LIMIT ln_limit;
    EXIT WHEN cost_data_tbl.COUNT = 0;
    
    FOR IDX IN 1 .. cost_data_tbl.COUNT                                         
    LOOP
        UTL_FILE.PUT_LINE(lv_COST_File,cost_data_tbl(IDX).File_DATA);
    END LOOP;                           
END LOOP;
CLOSE asset_cursor; -- 将关闭语句移到外层循环结束之后

关键修改点

  • 将CLOSE asset_cursor;从外层循环内部移到循环结束之后,确保游标在所有数据读取完成后才关闭。
  • 保留原有的FETCH和EXIT逻辑,确保当没有更多数据时退出循环,再执行游标关闭操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:55:13