The example below is raising a ORA-06502: PL/SQL: numeric or value error: Bulk Bind: Truncated Bind
DECLARE
TYPE rec1_typ IS RECORD (len_3 VARCHAR2(3) ,
len_5 VARCHAR2(5)) ;
TYPE rec1 IS TABLE OF rec1_typ INDEX BY BINARY_INTEGER ;
rec1_tab rec1 ;
CURSOR c1
IS
SELECT 'xxx' a ,
'xxxxxxxxxxx' b
FROM DUAL ;
BEGIN
OPEN c1 ;
FETCH c1 BULK COLLECT INTO rec1_tab ;
CLOSE c1 ;
END ;
/
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: Bulk Bind: Truncated Bind
ORA-06512: at line 18
The issue is being caused because rec1_type.len5 is defined as a VARCHAR2(5) but the cursor is trying to assign an 11 charater string of 'xxxxxxxxxxx'. In this case the fix is to resize the collection.
DECLARE
TYPE rec1_typ IS RECORD (len_3 VARCHAR2(3) ,
len_5 VARCHAR2(11)) ;
TYPE rec1 IS TABLE OF rec1_typ INDEX BY BINARY_INTEGER ;
rec1_tab rec1 ;
CURSOR c1
IS
SELECT 'xxx' a ,
'xxxxxxxxxxx' b
FROM DUAL ;
BEGIN
OPEN c1 ;
FETCH c1 BULK COLLECT INTO rec1_tab ;
CLOSE c1 ;
END ;
/