SYS.DBMS_JOB вызывает ошибку «ORA-01461 может связать значение LONG только для вставки в столбец LONG» - PullRequest
0 голосов
/ 30 октября 2011

Я использую Oracle PL / SQL в базе данных Oracle 10g

Я использую SYS.DBS_JOB, чтобы задать задание для отправки электронного письма.[Я не могу просто отправить письмо напрямую, потому что я отправляю довольно много писем и отправляю их слишком быстро, перегружает почтовый сервер.Поэтому я запускаю цикл для отправки одного электронного письма каждую минуту]

DBMS_JOB.submit
                    (l_job,
                        'begin HTML_EMAIL (''noreply@mywebsite.com'','''
                     || myrecord.email
                     || ''','''
                     || mytitle
                     || ''','''
                     || ' '
                     || ''','''
                     || mymessage
                     || ''');end;',
                     schedule_date
                    );

Текст задания довольно длинный (2886 символов), и задание не выполняется с сообщением "ORA-01461 может связывать только значение LONGдля вставки в столбец LONG "

Теперь я почти уверен, что причиной сбоя задания является слишком длинный текст.Однако я бы подумал, что сообщение об ошибке было бы «Строка не может поместиться в столбце»

Предполагая, что я прав, что моя строка слишком длинная, какова максимальная длина, а также как я могу обойтиэта проблема ...

Спасибо

Ответы [ 3 ]

1 голос
/ 30 октября 2011

PL / SQL ограничен в том, что вы можете делать напрямую с полями LONG, и кажется, что ваше поле mymessage длинное.В 10g вам лучше использовать поля CLOB для чего-то подобного, с которым гораздо проще напрямую манипулировать.

Для начала попробуйте обернуть любые поля LONG в этом вызове функцией TO_LOB () ипосмотрим, работает ли это.С другой стороны, может случиться так, что ваше сообщение переполняет varchar2, что ожидает DBMS_JOB.SUBMIT;Тогда Oracle может рассматривать вашу строку как LONG.В этом случае вам придется переписать вашу функцию HTML_EMAIL, чтобы она извлекала содержимое сообщения из временной таблицы, а не из параметра.

Здесь есть некоторая приятная информация о работе с полями LONG:

http://www.oracle -developer.net / display.php? ID = 430

0 голосов
/ 05 мая 2014

Иногда содержимое моей работы отформатировано в PLSQL с большим количеством пробелов.Поэтому я делаю это перед отправкой задания, чтобы уменьшить лишние пробелы и (надеюсь) уменьшить длину до 4000.

   FOR i IN 1..9 LOOP
      v_sql := replace(v_sql,'  ',' ');
   END LOOP;
0 голосов
/ 16 ноября 2011

Поле VARCHAR2 может принимать не более 4000 символов.Но это становится очевидным, когда вы создаете таблицу с полем VARCHAR2.

Я решил это, когда обнаружил, что пытаюсь ввести строку из 4000+ символов в поле Varchar2.

Я уменьшил длину записи, и ошибка исчезла.

В таблице были другие поля NUMBER, которые поначалу отбросили меня с пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...