Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle - ORA-06502 :PL/SQL :erreur numérique ou de valeur (DBMS_OUTPUT)

Vous ne pourrez pas imprimer un clob en utilisant directement dbms_output.put_line s'il est supérieur à 32767 octets.

Si tel est le cas, vous pouvez créer une procédure pour parcourir le clob et imprimer un petit morceau à la fois. Une telle procédure et un tel script de test sont ci-dessous :

declare 

  c clob;

  procedure print_clob( p_clob in clob ) is
      v_offset number default 1;
      v_chunk_size number := 10000;
  begin
      loop
          exit when v_offset > dbms_lob.getlength(p_clob);
          dbms_output.put_line( dbms_lob.substr( p_clob, v_chunk_size, v_offset ) );
          v_offset := v_offset +  v_chunk_size;
      end loop;
  end print_clob;


begin
  for i in 1..10000 loop
     c := c || 'test';
  end loop;
  --This will result in ora-06502
  --dbms_output.put_line(c);

  print_clob(c);

end;

Notez que v_chunk_size doit résulter en moins de 32767 octets à la fois. Si votre encodage a 2 octets par caractère, vous devrez utiliser (32767/2).