【发布时间】:2017-02-08 03:28:01
【问题描述】:
我得到了一个 bug report,其中 Oracle 10g 正在截断来自 to_char(datetime) 的返回值:
SQL> select to_char(systimestamp, '"day:"DD"hello"') from dual;
TO_CHAR(SYSTIMESTAMP,'"DAY:"DD"HE
---------------------------------
day:27hel
值得注意的是,Oracle 11g 似乎没有发生这种情况。我的问题是,为什么会发生这种情况?是否需要设置一些配置变量来告诉to_char(datetime) 为其返回值分配更大的缓冲区?
【问题讨论】:
-
我在 10.2.0.5 中没有看到。您在哪个补丁级别(可能是平台)上看到了这个?
-
OP 说:“Oracle 版本:Oracle 数据库 10g 企业版版本 10.2.0.1.0 - 64 位生产。”
-
下面Rusty的回答似乎是正确的。对于此类功能,Oracle 中没有任何与“缓冲区分配”相关的参数。只有当结果超出预期的结果类型(例如 varchar2 像这里的 4000 )时,你才会得到一个异常。我在您的“错误报告”中给出了红色示例,并且可以看到结果取决于表达式的长度。因此,对于未命名的列,它看起来像是 SQL Plus 的默认行为。显示时修剪结果。尝试为列指定别名并使用 COLUMN 命令设置适当的宽度。见docs.oracle.com/cd/B19306_01/server.102/b14357/ch6.htm
标签: oracle buffer truncate to-char