sql >> Databáze >  >> RDS >> Oracle

Oracle – ORA-06502:PL/SQL:numerická nebo hodnotová chyba (DBMS_OUTPUT)

Nebudete moci vytisknout clob pomocí dbms_output.put_line přímo, pokud je větší než 32767 bajtů.

Pokud je to váš případ, můžete vytvořit proceduru pro iteraci clob a vytisknout jeden menší blok po druhém. Takový postup a testovací skript je níže:

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;

Všimněte si, že v_chunk_size musí mít za následek méně než 32767 bajtů, které budou najednou rozděleny. Pokud má kódování 2 bajty na znak, budete muset použít (32767/2).



  1. Jak formátovat datum a čas na serveru SQL Server

  2. PostgreSQL nepřijímá alias sloupce v klauzuli WHERE

  3. Vytváří cizí klíč automaticky index?

  4. Použití jako v MySQL pro vyhledávací operace pomocí vzoru