Oracle - Anzahl an varchar
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?
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.