sql >> Databasteknik >  >> RDS >> Oracle

Oracle - ORA-06502:PL/SQL:numeriskt eller värdefel (DBMS_OUTPUT)

Du kommer inte att kunna skriva ut en clob direkt med dbms_output.put_line om den är större än 32767 byte.

Om så är fallet kan du skapa en procedur för att iterera genom klumpen och skriva ut en mindre bit i taget. En sådan procedur och testskript finns nedan:

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;

Observera att v_chunk_size måste resultera i att mindre än 32767 byte delas ut åt gången. Om din kodning har 2 byte per tecken måste du använda (32767/2).



  1. Hur får man radräkning i sqlite med Android?

  2. Finns det ett enkelt sätt att konvertera MySQL-data till Title Case?

  3. Android :Fel vid kopiering av databas (Sqliite) från tillgångsmapp

  4. Genomför en begränsning med främmande nyckel för kolumner i samma tabell