Oracle - Number to varchar

Tom*_*Tom 2 oracle plsql to-char

我有一个包含Number类型列的表

create table tmp (
    /*other fields*/
    some_field Number
)
Run Code Online (Sandbox Code Playgroud)

在PL SQL脚本中,我想将该字段转换为varchar.但是,我不知道它的长度,所以我得到一个例外

异常消息是ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小

v_some_field varchar(21);
/*...*/
v_some_field := TO_CHAR(some_field,'999999999999999999999');
Run Code Online (Sandbox Code Playgroud)

我该如何声明v_some_field缓冲区?将它设置为varchar(32767)似乎相当粗野,有没有其他选择?

Vin*_*rat 9

你得到的错误不是因为数字太大而是因为你的结果to_char是22个字符长(21x"9"+符号的一个字符):

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
Run Code Online (Sandbox Code Playgroud)