0

有一些奇怪的事情我想了解

假设我们有这段代码:

DECLARE
a varchar2(6);

BEGIN
  a := '000001';
END;

这很好用。没问题

现在我们有了这个:

DECLARE
a varchar2(6);

BEGIN
  a := TO_CHAR(1, '000000');
END;

这没用:

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

为什么?

nls_language 可能有问题?什么问题?什么解决方案?

谢谢

4

3 回答 3

8

结果TO_CHAR开头有一个空格,总长度为 7 个字符。如果数字为负数,则该空间保留用于减号。如果您尝试此查询,您将看到:

SELECT '[' || TO_CHAR(1, '000000') || ']' FROM DUAL;

结果是:

[ 000001]
 ^ space for a minus sign

要获得没有空格的结果,请使用FM修饰符:

a := TO_CHAR(1, 'FM000000');
于 2013-07-16T13:11:17.020 回答
1

或者,只需使用 `LTRIM' :

SQL> set serveroutput on;
SQL> DECLARE
  2    a VARCHAR2(6);
  3  BEGIN
  4    A := LTRIM(TO_CHAR(1, '000000'));
  5    dbms_output.put_line(a);
  6  END;
  7  /
000001

PL/SQL procedure successfully completed.

SQL>
于 2014-09-25T08:48:25.270 回答
0
于 2014-09-25T05:46:13.937 回答