我是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;
答案 0 :(得分:0)
问题是由于您在过程中传递的以下任何变量/游标值的大小不满足
在发送邮件(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,您可以在验证后根据需要更新大小限制