SYS.DBMS_JOB导致错误“ORA-01461只能插入LONG值才能插入LONG列”

时间:2011-10-30 13:08:11

标签: oracle plsql

我在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列”

现在我很确定作业失败的原因是文本太长了。但是我会认为错误消息是“字符串不能适合列”

假设我说得对,我的字符串太长,最大长度是多少,以及如何解决这个问题......

谢谢

3 个答案:

答案 0 :(得分:1)

PL / SQL受限于您可以直接使用LONG字段执行的操作,听起来您的mymessage字段很长。在10g中,你最好使用CLOB字段来做这样的事情,可以更容易地直接操作。

首先,尝试使用TO_LOB()函数包装此调用中的任何LONG字段,看看是否有效。或者,可能是您的消息溢出了DBMS_JOB.SUBMIT期望的varchar2;然后,Oracle可能会将您的字符串视为LONG。在这种情况下,您必须重写HTML_EMAIL函数,以便从临时表而不是参数中检索消息内容。

在这里使用LONG字段有一些很好的信息:

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

答案 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;