在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 傳送的郵件...