Buenos días,
Tengo un problema con un código para el que necesito usar Bulk Collet Es el siguiente:
VARIABLE Retorno NUMBER
set serveroutput on;
alter session set skip_unusable_indexes=true;
DECLARE
-- ------------------------
-- DECLARACIÓN DE VARIABLES
-- ------------------------
    TYPE TTB_ID IS TABLE OF sgc_hoc_msisdn.ID%TYPE INDEX BY BINARY_INTEGER;
    TYPE TTB_MAX IS TABLE OF sgc_hoc_msisdn.contactdate%TYPE INDEX BY BINARY_INTEGER;    
    VTB_ID TTB_ID;
    VTB_MAX TTB_MAX; 
  CURSOR CUR_RECREA_ID IS
    SELECT
       max(contactdate)  MAX_CONTACTDATE,
       ID
    FROM sgc_hoc_msisdn
    GROUP BY id
    HAVING count(id)>1;    
    v_num_reg NUMBER(10);
    v_contador NUMBER(20);
BEGIN
  :Retorno := 0;   
   v_num_reg := 0;
   v_contador := 0;
    OPEN CUR_RECREA_ID;
    LOOP
       FETCH CUR_RECREA_ID BULK COLLECT INTO VTB_MAX, VTB_ID LIMIT 100;                
            FORALL i IN 1 .. VTB_ID.COUNT
      UPDATE SGCADMIP.SGC_HOC_MSISDN 
      SET OLD_ID =  VTB_ID(i),  ID = SGCADMIP.SEQ_HOC_MSISDN.NEXTVAL
      WHERE ID = VTB_ID(i)
        AND CONTACTDATE = VTB_MAX(i);
       v_contador := v_contador + 1;
      IF v_contador = 1000 THEN
         COMMIT;
         v_num_reg := v_num_reg + v_contador;
         v_contador := 0;         
      END IF;               
            EXIT WHEN CUR_RECREA_ID%NOTFOUND ;        
     END LOOP ;
     COMMIT ;
     CLOSE CUR_RECREA_ID;
     v_num_reg := v_num_reg + v_contador;         
   DBMS_OUTPUT.PUT_LINE ('--');
   DBMS_OUTPUT.PUT_LINE ('Numero de registros actualizados: '||v_num_reg);
EXCEPTION
   WHEN OTHERS THEN
     DBMS_OUTPUT.PUT_LINE('Error Oracle: ');
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
    :Retorno := 2;
END;
/
EXIT :Retorno
Intento actualizar el campo old_id con el id antiguo e id con un nuevo secuencial. El problema es que VTB_ID.COUNT me aparece como no definido (undeclare identifier VTB_ID) Por lo que no realiza el UPDATE, pero si las lineas posteriores. Es únicamente el update lo que se salta sin mostrar ningún tipo de error.
Ya no sé que más comprobar, por favor alguien sabe por que puede pasar esto??  
