我在Oracle数据库10g上使用Oracle PL / SQL
我使用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列”
现在我很确定作业失败的原因是文本太长了。但是我会认为错误消息是“字符串不能适合列”
假设我说得对,我的字符串太长,最大长度是多少,以及如何解决这个问题......
谢谢
答案 0 :(得分:1)
PL / SQL受限于您可以直接使用LONG字段执行的操作,听起来您的mymessage字段很长。在10g中,你最好使用CLOB字段来做这样的事情,可以更容易地直接操作。
首先,尝试使用TO_LOB()函数包装此调用中的任何LONG字段,看看是否有效。或者,可能是您的消息溢出了DBMS_JOB.SUBMIT期望的varchar2;然后,Oracle可能会将您的字符串视为LONG。在这种情况下,您必须重写HTML_EMAIL函数,以便从临时表而不是参数中检索消息内容。
在这里使用LONG字段有一些很好的信息:
答案 1 :(得分:0)
VARCHAR2字段最多只能接受4000个字符。但是,当您使用VARCHAR2字段创建表时,这一点就变得很明显了。
当我发现我试图在Varchar2字段中输入4000+字符串时,我解决了这个问题。
我减少了条目的长度,错误就消失了。
表格中还有其他NUMBER字段,最初让我离开了路径。
答案 2 :(得分:0)
有时我的工作内容是格式化的PLSQL,有很多空格。所以我在提交作业之前这样做是为了减少额外的空白区域,并且(希望)将长度减少到4000以下。
FOR i IN 1..9 LOOP
v_sql := replace(v_sql,' ',' ');
END LOOP;