oracle 存储过程或游标中报错 PLS-00642: SQL语句中不允许使用本地集合类型

文章讲述了在PL/SQL代码中遇到PLS-00642错误,即在SQL语句中不允许使用局部集合类型。解决方案是先在数据库中创建全局类型,然后在存储过程中引用这个类型来处理数据。示例中展示了如何创建一个名为tp_table_stock的全局表类型,并用其来处理游标中的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 declare  cursor order_cursor
is (select sheetnumber from scott.t where ID='111');--查询需要修改的sheetNUMBER
TYPE tp_table_stock AS TABLE OF NUMBER;
v_sheet_num  tp_table_stock;
begin 
--打开游标--
open order_cursor;
--开始循环游标变量--
fetch  order_cursor bulk collect into V_sheet_num limit 20000;
 for i in 1..v_sheet_num.count loop    --返回被 FETCH语句执行的最后游标的状态-- 
     begin
		dbms_output.put_line(1111)
     end;
 end;

PLS-00642: local collection types not allowed in SQL statements (SQL语句中不允许使用本地集合类型)存储过程中报此错误。

解决方案:

不允许使用局部集合类型。
先在数据库中创建一个类型

CREATE OR REPLACE TYPE tp_table_stock AS TABLE OF NUMBER; 

然后再使用该类型。

 SQL> CREATE OR REPLACE TYPE id AS TABLE OF NUMBER;
      2  /
    Type created.
    
declare
		  v_sheet_num  scott.accnt_number_type;
		cursor order_cursor
        is (select NAME from scott.t where ID='111');--查询需要修改的sheetNUMBER
        begin 
        --打开游标--
        open order_cursor;
        --开始循环游标变量--
        fetch  order_cursor bulk collect into V_sheet_num limit 10;
         for i in 1..v_sheet_num.count loop    --返回被 FETCH语句执行的最后游标的状态-- 

      			dbms_output.put_line('1111');
      
				 end loop;
				 close order_cursor;
			end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Have hot pot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值