【问题标题】:What quirks are there in making large strings with the || operator?用 || 制作大字符串有什么怪癖?操作员?
【发布时间】:2011-12-10 09:49:40
【问题描述】:

具体来说,我正在构建一个电子邮件正文,并通过插入 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。

所以我将消息正文输出到假脱机日志文件,美元值格式在所有情况下看起来都很完美。换行符不是问题,因为它是客户在惹我。仍然存在在邮件到达我的收件箱时在邮件中删除小数点的问题。

程序通过将字符集设置为 iso-8859-1 的包装器将邮件正文传递给 Oracle 邮件包,邮件正文的处理方式如下:

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

【问题讨论】:

    标签: oracle string-concatenation number-formatting


    【解决方案1】:

    我的猜测可能是导致问题的电子邮件/邮件阅读器而不是 Oracle。电子邮件客户端对他们收到的电子邮件进行各种有趣的格式化。 Outlook 尤其会根据需要添加/删除换行符。

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

    【讨论】:

    • 现在测试这种方法,会让你知道。谢谢。
    • 因此,问题似乎与 76 个字符的 smtp 行长度限制有关,如果限制发生在美元值字符串部分中,仅适用于六位数字(即,在这种情况下,小数点落在第 76 列)。当我登录到文本文件时,格式都很好。是时候下注并在换行符处换行,这样问题就消失了,但任何额外的见解都会受到赞赏,因为它总是更好地理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2020-07-04
    • 2014-01-28
    • 2012-03-17
    • 1970-01-01
    相关资源
    最近更新 更多