Frage

Ich habe eine Tabelle, die eine Spalte vom Typ Nummer mit

create table tmp (
    /*other fields*/
    some_field Number
)

und in einem PL SQL-Skript, ich möchte ein varchar das Feld konvertieren. Aber ich weiß nicht, seine Länge, so dass ich eine Ausnahme

  

Ausnahmemeldung ist ORA-06502:   PL / SQL: numerische oder Wertfehler:   Zeichenfolge Puffer zu klein

v_some_field varchar(21);
/*...*/
v_some_field := TO_CHAR(some_field,'999999999999999999999');

Wie soll ich erklären, die v_some_field Puffer? Setzen auf varchar (32767) ziemlich brutaler scheint, gibt es eine Alternative?

War es hilfreich?

Lösung

Sie bekommen einen Fehler nicht, weil die Zahl zu groß ist, sondern weil das Ergebnis Ihrer to_char ist 22 Zeichen lang sein (21x „9“ + ein Zeichen für das Vorzeichen):

SQL> DECLARE
  2     some_field   NUMBER := 123;
  3     v_some_field VARCHAR(21);
  4  BEGIN
  5     v_some_field := TO_CHAR(some_field, '999999999999999999999');
  6  END;
  7  /

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 6

SQL> DECLARE
  2     some_field   NUMBER := 123;
  3     v_some_field VARCHAR(22);
  4  BEGIN
  5     v_some_field := TO_CHAR(some_field, '999999999999999999999');
  6  END;
  7  /

PL/SQL procedure successfully completed

Andere Tipps

Sie können die maximale Länge der konvertierten varchar2 bestimmen durch einen negativen Wert mit integrierten und Nachkommastellen Umwandlung:

set serveroutput on
declare
   n number;
begin
   n := -4/3;
   dbms_output.put_line(length(to_char(n)));
end;
/

Ausgabe 41 für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top