Какие причуды есть в создании больших струн с || оператор? - PullRequest
2 голосов
/ 19 октября 2011

В частности, я создаю тело сообщения электронной почты и получаю странное поведение со вставкой 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 Ответ

4 голосов
/ 19 октября 2011

Я полагаю, что причиной может быть проблема чтения электронной почты / почты, а не Oracle. Почтовые клиенты делают все виды забавного форматирования получаемых писем. В частности, Outlook добавляет / удаляет разрывы строк по своему усмотрению.

Я предлагаю записать тело письма в таблицу temp / logging, чтобы вы могли сравнить это с письмом?

...