我需要每天通过电子邮件发送查询结果,但我有错误。请问你能帮忙吗?
create or replace PROCEDURE PROC_SEND_EMAIL AS
BEGIN
DECLARE
l_id NUMBER;
l_clob CLOB;
CURSOR emp_cursor IS
SELECT
COLUMN1,COLUMN2
FROM
TABLE;
TYPE emp_data_array IS TABLE OF emp_cursor%ROWTYPE INDEX BY PLS_INTEGER;
l_emp_data_array emp_data_array;
BEGIN
-- Fetch data into the array
OPEN emp_cursor;
FETCH emp_cursor BULK COLLECT INTO l_emp_data_array;
CLOSE emp_cursor;
-- Loop through the array and concatenate data
FOR i IN 1..l_emp_data_array.COUNT LOOP
l_clob := l_clob || l_emp_data_array(i).emp_data || CHR(13) || CHR(10);
END LOOP;
-- Send email and attach the CLOB data
l_id := APEX_MAIL.SEND(
p_to => '[email protected]',
p_from => '[email protected]',
p_subj => 'Report daily',
p_body => 'Please review the attachment.',
p_body_html => '<b>Please</b> review the attachment'
);
APEX_MAIL.ADD_ATTACHMENT(
p_mail_id => l_id,
p_attachment => l_clob,
p_filename => 'mydata.csv',
p_mime_type => 'text/csv'
);
COMMIT;
END;
END;
您可以使用隐式游标循环,然后不需要将值收集到关联数组中。
CREATE OR REPLACE PROCEDURE PROC_SEND_EMAIL
AS
l_id NUMBER;
l_clob CLOB;
BEGIN
FOR r IN (
SELECT COLUMN1, COLUMN2
FROM TABLE
)
LOOP
l_clob := l_clob || r.column1 || ',' || r.column2 || CHR(13) || CHR(10);
END LOOP;
-- Send email and attach the CLOB data
l_id := APEX_MAIL.SEND(
p_to => '[email protected]',
p_from => '[email protected]',
p_subj => 'Report daily',
p_body => 'Please review the attachment.',
p_body_html => '<b>Please</b> review the attachment'
);
APEX_MAIL.ADD_ATTACHMENT(
p_mail_id => l_id,
p_attachment => l_clob,
p_filename => 'mydata.csv',
p_mime_type => 'text/csv'
);
END;
/
注意:如果
column1
或 column2
包含逗号,那么您在生成 CSV 时可能需要转义这些值。