ORACLE傳送帶附件郵件的二三事之一

2021-09-25 04:09:51 字數 2317 閱讀 3774

在oracle使用過程中,我們可以通過pl/sql生成資料檔案,也可以通過spool on spool off生成,但某些環境下,我們需要通過儲存過程處理資料,資料處理完,需要自動生成資料檔案,手工匯出生成方式便不適用。

下面我們嘗試這樣處理,能夠滿足我們的需求

第一步:傳送帶附件郵件必須需可以生成附件,檢查是系統是否有許可權

select * from all_directories

預設系統配置有「data_pump_dir」,如果沒有聯絡dba建立

第二步:定義處理過程,過程輸出是逗號分隔的文字,包括sql欄位名稱

輸入為:查詢的sql語句,存放路徑,檔名

處理過程:

create or replace procedure "exp_data"

(p_query in varchar2,              -- sql語句 例子: 'select * from test'

p_dir in varchar2,                -- 目錄  用這個命令檢視目錄show parameter utl_file_dir

p_filename in varchar2            --  要生成的檔名)is

l_output utl_file.file_type;

l_thecursor integer default dbms_sql.open_cursor;

l_columnvalue varchar2(4000);

l_status integer;

l_colcnt number := 0;

l_separator varchar2(1);

l_desctbl dbms_sql.desc_tab;

p_max_linesize number := 32000;

begin

--open file

l_output := utl_file.fopen(p_dir, p_filename, 'w', p_max_linesize);

--define date format

execute immediate 'alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''';

--open cursor

dbms_sql.parse( l_thecursor, p_query, dbms_sql.native );

dbms_sql.describe_columns( l_thecursor, l_colcnt, l_desctbl );

--dump table column name

for i in 1 .. l_colcnt loop

utl_file.put( l_output,l_desctbl(i).col_name);

if i 0 ) loop

l_separator := ',';

for i in 1 .. l_colcnt loop

if i< l_colcnt then

begin

dbms_sql.column_value( l_thecursor, i, l_columnvalue );

utl_file.put( l_output,

trim(both ' ' from replace(l_columnvalue,',',' ')));

utl_file.put(l_output,',');

end;

else

begin

dbms_sql.column_value( l_thecursor, i, l_columnvalue );

utl_file.put( l_output,

trim(both ' ' from replace(l_columnvalue,',',' ')));

end;

end if;

l_separator := ',';

end loop;

utl_file.new_line( l_output );

end loop;

--close cursor

dbms_sql.close_cursor(l_thecursor);

--close file

utl_file.fclose( l_output );

end;

第三步:測試輸出,特別注意如果是linux環境,檔名稱對大小寫敏感,即輸出檔名與使用引用的檔名必須一致。

exec exp_data('select xh 序號,hm號碼,flag 標誌 from test','data_pump_dir','test.csv');

傳送帶附件的郵件

import smtplib from email.mime.text import mimetext from email.mime.multipart import mimemultipart from email.utils import formataddr from config impo...

傳送帶附件的郵件

我們平時需要使用 python 傳送各類郵件,這個需求怎麼來實現?答案其實很簡單,smtplib 和 email庫可以幫忙實現這個需求。smtplib 和 email 的組合可以用來傳送各類郵件 普通文字,html 形式,帶附件,郵件,帶的郵件等等。我們這裡將會分幾節把傳送郵件功能解釋完成。smtp...

python傳送帶附件郵件

1.不包括附件的郵件 coding utf 8 import smtplib import string 傳送普通的文字郵件 郵件smtp的位址 host smtp.163.com 定義郵件的標題 subject 這是郵件標題 發件人 from 163.com 收件人 to qq.com 傳送的郵件...