有一些奇怪的事情我想了解
假设我们有这段代码:
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 可能有问题?什么问题?什么解决方案?
谢谢
结果TO_CHAR开头有一个空格,总长度为 7 个字符。如果数字为负数,则该空间保留用于减号。如果您尝试此查询,您将看到:
SELECT '[' || TO_CHAR(1, '000000') || ']' FROM DUAL;
结果是:
[ 000001]
^ space for a minus sign
要获得没有空格的结果,请使用FM修饰符:
a := TO_CHAR(1, 'FM000000');
或者,只需使用 `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>