我有以下光标定义
cMultiplier NUMBER := 100000000000000000 ;
CURSOR CR_TABLE1 IS
SELECT to_char((COL_ID * cMultiplier) + SEQ,'0999999999999999999') "NEW_COL"
FROM TABLE1;
然后该游标将被获取为
FETCH CR_TABLE1
BULK COLLECT INTO AR_TABLE1 LIMIT I_BULK_LIMIT;
EXIT WHEN AR_TABLE1.COUNT = 0;
其中 AR_TABLE1
的类型为
TYPE T_TABLE1 IS TABLE OF CR_TABLE1%ROWTYPE;
AR_TABLE1 T_TABLE1;
对于所有情况,COL_ID
的测试值为 1
,SEQ
的测试值为 1234567654322
( 13 位数字)。该值从长度为 19 开始插入到另一个 VARCHAR
类型的表中。
问题是光标一到达FETCH
,就会抛出异常,指出ORA-06500: PL/SQL: storage error
我知道它必须使用 select 语句执行某些操作,但我将其转换为字符串(varchar)。为什么我会遇到这个问题?
最佳答案
您要为 I_BULK_LIMIT
分配什么值?
PLS-06500 错误通常意味着应用程序内存不足。因此,您需要查看在程序中分配的变量。但数组使用的内存是最有可能的罪魁祸首。如果当前限制设置为超过几千,您应该考虑设置一个下限。
关于oracle - 选择查询中的 PL/SQL 存储错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8139061/