利用oracle存储过程来发送邮件
2008-09-01 12:46:14 来源:WEB开发网最近将一些程序写成存储过程执行,一直都想通过Email方式通知我,每次执行的结果是否正确,在网上找了一下通过oracle发送Email,一找就找到了,调试一下便可以用了,现在记录一下,以便以后的学习使用!
目前我计划将一些统计的报表及数据库的信息等,每天能够定时的发到我的邮箱里,这样使每天的例行工作简单化,高效化,虽然是从网上"抄"来的,但会认真的研读一下代码,提高一下!
1.先创建demo_base64包,这里包括一个函数encode主要是用来解码
CREATEORREPLACEPACKAGEdemo_base64IS
--Base64-encodeapieceofbinarydata.
--
--Notethatthisencodefunctiondoesnotsplittheencodedtextinto
--multiplelineswithnomorethan76byteseachasrequiredby
--theMIMEstandard.
--
FUNCTIONencode(rINRAW)RETURNVARCHAR2;
END;
2.创建demo_base64包体
CREATEORREPLACEPACKAGEBODYdemo_base64IS
TYPEvc2_tableISTABLEOFVARCHAR2(1)INDEXBYBINARY_INTEGER;
mapvc2_table;
--InitializetheBase64mapping
PROCEDUREinit_mapIS
BEGIN
map(0):='A';map(1):='B';map(2):='C';map(3):='D';map(4):='E';
map(5):='F';map(6):='G';map(7):='H';map(8):='I';map(9):='J';
map(10):='K';map(11):='L';map(12):='M';map(13):='N';map(14):='O';
map(15):='P';map(16):='Q';map(17):='R';map(18):='S';map(19):='T';
map(20):='U';map(21):='V';map(22):='W';map(23):='X';map(24):='Y';
map(25):='Z';map(26):='a';map(27):='b';map(28):='c';map(29):='d';
map(30):='e';map(31):='f';map(32):='g';map(33):='h';map(34):='i';
map(35):='j';map(36):='k';map(37):='l';map(38):='m';map(39):='n';
map(40):='o';map(41):='p';map(42):='q';map(43):='r';map(44):='s';
map(45):='t';map(46):='u';map(47):='v';map(48):='w';map(49):='x';
map(50):='y';map(51):='z';map(52):='0';map(53):='1';map(54):='2';
map(55):='3';map(56):='4';map(57):='5';map(58):='6';map(59):='7';
map(60):='8';map(61):='9';map(62):='+';map(63):='/';
END;
FUNCTIONencode(rINRAW)RETURNVARCHAR2IS
ipls_integer;
xpls_integer;
ypls_integer;
vVARCHAR2(32767);
BEGIN
--Forevery3bytes,splittheminto46-bitunitsandmapthemto
--theBase64characters
i:=1;
WHILE(i+2<=utl_raw.length(r))LOOP
x:=to_number(utl_raw.substr(r,i,1),'0X')*65536+
to_number(utl_raw.substr(r,i+1,1),'0X')*256+
to_number(utl_raw.substr(r,i+2,1),'0X');
y:=floor(x/262144);v:=v||map(y);x:=x-y*262144;
y:=floor(x/4096);v:=v||map(y);x:=x-y*4096;
y:=floor(x/64);v:=v||map(y);x:=x-y*64;
v:=v||map(x);
i:=i+3;
ENDLOOP;
--Processtheremainingbytesthathasfewerthan3bytes.
IF(utl_raw.length(r)-i=0)THEN
x:=to_number(utl_raw.substr(r,i,1),'0X');
y:=floor(x/4);v:=v||map(y);x:=x-y*4;
x:=x*16;v:=v||map(x);
v:=v||'==';
ELSIF(utl_raw.length(r)-i=1)THEN
x:=to_number(utl_raw.substr(r,i,1),'0X')*256+
to_number(utl_raw.substr(r,i+1,1),'0X');
y:=floor(x/1024);v:=v||map(y);x:=x-y*1024;
y:=floor(x/16);v:=v||map(y);x:=x-y*16;
x:=x*4;v:=v||map(x);
v:=v||'=';
ENDIF;
RETURNv;
END;
BEGIN
init_map;
END;
更多精彩
赞助商链接