Oracle - Número de varchar
Pregunta
Tengo una tabla que contiene una columna de tipo Number
create table tmp (
/*other fields*/
some_field Number
)
y en una secuencia de comandos SQL PL, quiero convertir ese campo a un varchar. Sin embargo, no sé su longitud, por lo que obtener una excepción
Mensaje de excepción es ORA-06502: PL / SQL: error numérico o valor: búfer de cadena de caracteres demasiado pequeño
v_some_field varchar(21);
/*...*/
v_some_field := TO_CHAR(some_field,'999999999999999999999');
¿Cómo debo declarar la memoria intermedia v_some_field? Si lo establece a varchar (32767) parece bastante bruta, ¿hay alguna alternativa?
Solución
que está recibiendo un error no porque el número es demasiado grande, pero debido a que el resultado de su to_char
es de 22 caracteres de longitud (21x "9" + un carácter para el signo):
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
Otros consejos
podría determinar la longitud máxima de sus varchar2 convertida mediante la conversión de un valor negativo con dígitos integrales y fraccionarios:
set serveroutput on
declare
n number;
begin
n := -4/3;
dbms_output.put_line(length(to_char(n)));
end;
/
La salida es 41 para mí.