Chinaunix首页 | 论坛 | 博客
  • 博客访问: 410840
  • 博文数量: 66
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 922
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-16 10:37
个人简介

高級Oracle DBA,善長Linux系統維運以及Oracle數據庫管理,開發,調優. 具有多年PL/SQL開發經驗.

文章分类

全部博文(66)

文章存档

2015年(9)

2014年(4)

2013年(5)

2010年(1)

2009年(3)

2008年(6)

2007年(30)

2006年(8)

我的朋友

分类: Oracle

2007-10-29 10:43:10


公司使用Oracle 8i數據庫, 有使用一個外部過程, 用來發送Email, 是我以前用C語言實現的.
只能發送簡單文本信息
現在要求能發送html格式,或者附件.

SMTP本身是簡單的.最為繁雜的是Email的MIME編碼.
查了一下現成Mime庫, 有gnu的libgmime可用.

但使用最方便的該是perl的 MIME::Entity包了, 以前就用過它.
甘脆就使用它吧,輕車熟路的.


Oracle外部過程只能使用C和Java, 我的想法是在C中調用perl.
perldoc perlembed

遇到三個問題.
1. C嵌入的perl中找不到package,  @INC變量中的確有.
    解決方法: perl_parse第2個參數指明xs_init ,
     perl_parse(my_perl, xs_init, 3, embedding, NULL);
  xs_init函數code可以這樣由perl生成
  perl   -MExtUtils::Embed   -e   xsinit   --   -o   perlxsi.c


2. 執行時出現ORA-28576錯誤
    解決方法: 在listener.ora中加入以下行
     (ENVS="EXTPROC_DLLS=ANY")
   這時問題並沒有解決,但是錯誤信息較為詳細.


3. Oracle 中調用外部函數時說某些符號未找到.
   內容內似如下.
extprocPLSExtProc: symbol lookup error: /usr/lib/perl5/5.8.5/i386-linux-thread-multi/auto/Socket/Socket.so: undefined symbol: Perl_Tstack_sp_ptr
BEGIN
*
ERROR at line 1:
ORA-28576: lost RPC connection to external procedure agent
ORA-06512: at "YY3MAT.SENDMAILC", line 0
ORA-06512: at line 2
解決方法:  gcc 編譯時將/usr/lib/perl5/5.8.5/i386-linux-thread-multi/auto/Socket/Socket.so連進去
再跟據錯誤提示再加.

           Date: 2007/10/29                
                 Writer:    阿飛                    
阅读(2846) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~