ORA 6502 символьный буфер строки слишком мал - PullRequest
0 голосов
/ 21 марта 2019

Я новичок в PL / SQL

У меня есть PL SQL. И я получаю ошибку, показанную в заголовке. Слишком маленький буфер строки символов ORA 6502.

create or replace 
PROCEDURE MailSender IS
tmpVar VARCHAR2(2048);
BEGIN
FOR cur_rec IN 
   (SELECT * FROM dom_email1 where rownum <= 50 and eto is not null ORDER BY eid asc)
   LOOP
   tmpVar := ltrim(cur_rec.ETO, ' ; ');
   tmpVar := rtrim(tmpVar, '; ');
   tmpVar := rtrim(tmpVar, ' ');

   DOMSYS_EMAIL.SEND_EMAIL(msg_from => 'noreply@gmail.com'
                                       , msg_tos => tmpVar
                                       , msg_subject => cur_rec.SUBJ
                                       , msg_text => cur_rec.MSG
                                       , mailhost => '10.63.17.38'); 

   UPDATE DOM_EMAIL1 SET eid='1' WHERE eid= cur_rec.EID;
END LOOP;


DELETE FROM DOM_EMAIL1 WHERE eid='1';

EXCEPTION
 WHEN NO_DATA_FOUND THEN
   NULL;
 WHEN OTHERS THEN
   -- Consider logging the error and then re-raise
   RAISE;
END MailSender;

1 Ответ

0 голосов
/ 21 марта 2019

Проблема связана с тем, что размер не удовлетворен ни для одной из перечисленных ниже переменных / значения курсора, которые вы передаете в своей процедуре

  • tmpVar
  • cur_rec.SUBJ
  • cur_rec.MSG

Добавьте строку ниже в вашей процедуре перед отправкой почты (DOMSYS_EMAIL.SEND_EMAIL), чтобы проверить размер каждого переданного вами значения и проверить, соответствует ли оно пределу размера параметра процедуры DOMSYS_EMAIL.SEND_EMAIL

dbms_output.put_line ('tmpVar:' || length (tmpVar) || '-' || 'cur_rec.SUBJ:' || length (cur_rec.SUBJ) || '-' || 'cur_rec.MSG: '|| длина (cur_rec.MSG));

Для varchar2 вы можете обновить ограничение размера при необходимости после проверки

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