使用||制作大字符串有什么怪癖运营商?

时间:2011-10-18 20:03:18

标签: oracle string-concatenation number-formatting

具体来说,我正在构建一个电子邮件消息体,并通过插入CRLF(定义为CRLF CONSTANT VARCHAR2(2) := CHR(13) || CHR(10);)和格式化美元值获得一些奇怪的行为(在两个地方使用此构造具有相同的数据库字段值并获取输出TRIM(TO_CHAR(foo.mydollars, '$99,999,999,990.00')))中的结果不同。

在CRLF案例中,我有时会得到换行符,有时候不会。

在我看到的数字格式中:

1. $1,66942. 
2. $1,669.42

我正在运行Oracle 10g。

所以我将消息体输出到假脱机日志文件,并且美元值格式在所有情况下看起来都很完美。换行不是问题,因为客户搞砸了我。仍然存在在邮件进入我的收件箱时丢弃小数的问题。

程序通过一个包装器将消息体传递给Oracle邮件包,该包装器将字符集设置为iso-8859-1,并按如下方式处理消息体:


     UTL_SMTP.write_raw_data
      (c,
      UTL_ENCODE.quoted_printable_encode
        (UTL_RAW.cast_to_raw (   p_msgBody
          || UTL_TCP.crlf
          )
        )
     );

1 个答案:

答案 0 :(得分:4)

我的猜测可能是电子邮件/邮件阅读器导致问题而不是Oracle。电子邮件客户端会对收到的电子邮件执行各种有趣的格式设置。 Outlook特别添加/删除了它认为合适的换行符。

我建议将电子邮件正文写入临时/日志记录表,以便您可以将其与电子邮件进行比较?