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
相关产品推荐
相关产品推荐

