ORA 6502字符串缓冲区太小

时间:2019-03-21 02:34:39

标签: oracle plsql

我是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 :(得分:0)

问题是由于您在过程中传递的以下任何变量/游标值的大小不满足

  • 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: '|| length(cur_rec.MSG));

对于varchar2,您可以在验证后根据需要更新大小限制