Приведенный ниже код в процедуре PL/SQL проверяет размер байта, и если он превышает 30 000 байт, он перебирает данные и отправляет почтовые вложения (файл txt через несколько писем) для каждых 30 000 байтов (30 КБ). strong>
Мне нужно получить файл целиком в одном письме размером 4 МБ в оракуле PL/SQL.
Тип данных lv_message_tab — varchar2(32767) . Могу ли я использовать тип данных CLOB вместо *Varchar2(32767),*если да, предложите, как это сделать.
Заранее миллион спасибо!!!
FOR lv_idx in 1..pv_message.COUNT
LOOP
lv_message := lv_message||pv_message(lv_idx)|| lv_cr;
IF LENGTH(lv_message) >= 30000
THEN
lv_message_tab.EXTEND;
lv_message_tab(lv_message_tab.LAST) := lv_message;
lv_message := null;
END IF;
END LOOP;
--This send the attachment for 30000 characters and above
IF lv_message_tab.COUNT > 0
THEN
FOR lv_idx in 1..lv_message_tab.COUNT
LOOP
UTL_SMTP.HELO(lv_conn, lv_smtp_host);
UTL_SMTP.MAIL(lv_conn, gc_sender);
UTL_SMTP.RCPT(lv_conn, lv_to_email_ids);
UTL_SMTP.RCPT(lv_conn, lv_cc_email_ids);
UTL_SMTP.DATA(lv_conn,
'Date: ' || TO_CHAR(SYSDATE, gc_dd_month_yyyy_format) || lv_cr ||
'From: ' || gc_sender || lv_cr ||
'Subject: '|| lv_subject || lv_cr ||
'To: ' || lv_to_email_ids || lv_cr ||
'CC: ' || lv_cc_email_ids || lv_cr ||
'MIME-Version: 1.0'|| lv_cr || -- Use MIME mail standard
'Content-Type: multipart/mixed;'|| lv_cr ||
' boundary="-----SECBOUND"'|| lv_cr ||
lv_cr ||
'-------SECBOUND'|| lv_cr ||
'Content-Type: text/plain;'|| lv_cr ||
' name="excel.csv"'|| lv_cr ||
'Content-Transfer_Encoding: 8bit'|| lv_cr ||
'Content-Disposition: attachment;'|| lv_cr ||
' filename="'||pv_file_name||'"'|| lv_cr ||
lv_cr ||lv_message_tab(lv_idx)
|| lv_cr || -- Content of attachment
lv_cr ||
'-------SECBOUND--' );
END LOOP;
END IF;
--This send the attachment for the rest of the data...for the last few iterations
IF lv_message IS NOT NULL
THEN
UTL_SMTP.HELO(lv_conn, lv_smtp_host);
UTL_SMTP.MAIL(lv_conn, gc_sender);
UTL_SMTP.RCPT(lv_conn, lv_to_email_ids);
UTL_SMTP.RCPT(lv_conn, lv_cc_email_ids);
UTL_SMTP.DATA(lv_conn,
'Date: ' || TO_CHAR(SYSDATE, gc_dd_month_yyyy_format) || lv_cr ||
'From: ' || gc_sender || lv_cr ||
'Subject: '|| lv_subject || lv_cr ||
'To: ' || lv_to_email_ids || lv_cr ||
'CC: ' || lv_cc_email_ids || lv_cr ||
'MIME-Version: 1.0'|| lv_cr || -- Use MIME mail standard
'Content-Type: multipart/mixed;'|| lv_cr ||
' boundary="-----SECBOUND"'|| lv_cr ||
lv_cr ||
'-------SECBOUND'|| lv_cr ||
'Content-Type: text/plain;'|| lv_cr ||
' name="excel.csv"'|| lv_cr ||
'Content-Transfer_Encoding: 8bit'|| lv_cr ||
'Content-Disposition: attachment;'|| lv_cr ||
' filename="'||pv_file_name||'"'|| lv_cr ||
lv_cr ||lv_message
|| lv_cr || -- Content of attachment
lv_cr ||
'-------SECBOUND--' );
END IF;
UTL_SMTP.QUIT(lv_conn);
pv_rtn := TRUE;
ELSE
pv_rtn := FALSE;
END IF;
Я вызываю процедуру, вводя данные в виде таблицы сбора, например
ПРОЦЕДУРА
SP1_Send_letter_ATTACH_WAL(pv_job_id IN job.job_id%TYPE,
pv_status IN job_transaction_details.status_id%TYPE,
pv_subject IN VARCHAR2,
pv_message IN stringtable,
pv_file_name IN VARCHAR2,
pv_date_time IN DATE DEFAULT SYSDATE,
pv_rtn OUT BOOLEAN);
Я просто хочу сохранить данные переменной pv_message
в переменную lv_message
, которая является типом данных clob.
lv_message CLOB;
КАК ХРАНИТЬ lv_message := pv_message (т.е. тип данных коллекции в тип CLOB). Я уже пытался привести тип, используя функцию to_clob(), например lv_message = to_clob(pv_message)
, но это не сработало.