2011-10-30 32 views
0

我使用Oracle數據庫10gSYS.DBMS_JOB導致錯誤「ORA-01461只能用於插入綁定一個LONG值到LONG列」

我用SYS.DBS_JOB設置工作到Oracle PL/SQL發送電子郵件。 [我不能直接發送電子郵件,因爲我發送了很多郵件,並且郵件服務器發送的郵件太快。因此,我運行一個循環發送每分鐘一個電子郵件]

DBMS_JOB.submit 
        (l_job, 
         'begin HTML_EMAIL (''[email protected]'',''' 
        || myrecord.email 
        || ''',''' 
        || mytitle 
        || ''',''' 
        || ' ' 
        || ''',''' 
        || mymessage 
        || ''');end;', 
        schedule_date 
        ); 

作業的文本很長(2886個字符)和作業失敗ORA-01461只能用於插入綁定一個LONG值的消息」到一個長列「

現在我很確定,作業失敗的原因是因爲文本太長。然而,我會認爲錯誤信息會是「字符串不能適合列」

假設我是正確的,我的字符串太長,最大長度是多少,以及我怎樣才能解決這個問題...

謝謝

回答

1

PL/SQL是什麼,你可以用長字段直接做限制,這聽起來像你mymessage場是一個漫長的。在10g中,您最好使用CLOB字段來實現這樣的功能,這可以更容易地直接操作。

首先,嘗試使用TO_LOB()函數在此調用中包裝任何LONG字段,然後查看是否有效。或者,它可能是您的消息溢出了DBMS_JOB.SUBMIT期望的varchar2; Oracle可能會將您的字符串視爲LONG。在這種情況下,您必須重寫HTML_EMAIL函數,以便從臨時表中而不是參數中檢索消息內容。

有與此LONG領域工作的一些好的信息:

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

+0

非常感謝。我正在處理第二個問題(從臨時表中檢索郵件內容) – gordon613

+0

+1幫助鏈接:) – Addicted

0

的VARCHAR2場只能接受最多4000個字符。但是,當您使用VARCHAR2字段創建表時,這變得很明顯。

我解決了它,當我發現我試圖在Varchar2字段中輸入4000多個字符的字符串時。

我減少了條目的長度,錯誤消失了。

表中還有其他的NUMBER字段,它最初使我從軌跡中退出。

0

有時我的工作內容格式化PLSQL有很大的空白。所以我在提交作業之前這樣做,以減少額外的空白和(希望)將長度減少到4000以下。

FOR i IN 1..9 LOOP 
     v_sql := replace(v_sql,' ',' '); 
    END LOOP; 
相關問題