sql >> Database >  >> RDS >> Oracle

Oracle - ORA-06502:PL/SQL:numerieke of waardefout (DBMS_OUTPUT)

U kunt geen clob rechtstreeks afdrukken met dbms_output.put_line als deze groter is dan 32767 bytes.

Als dit het geval is, kunt u een procedure maken om door de klomp te itereren en een kleinere brok tegelijk af te drukken. Een dergelijke procedure en testscript staat hieronder:

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;

Merk op dat v_chunk_size ertoe moet leiden dat er minder dan 32767 bytes tegelijk worden gechunkt. Als uw codering 2 bytes per teken heeft, moet u (32767/2) gebruiken.



  1. SQL uitvoeren vanuit batchbestand

  2. Sommige ELKE geaggregeerde transformaties zijn verbroken

  3. Is er een functie in oracle die lijkt op group_concat in mysql?

  4. Een gids voor Pgpool voor PostgreSQL:deel één