You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PL/SQL中将两个CSV文件合并打包为单个ZIP文件?

解决思路与代码修改方案

嘿,我仔细看了你的PL/SQL代码,问题很清楚:你现在是处理完单个CSV就立刻调用finish_zip生成独立ZIP,还发了两封单独的邮件。要把两个CSV打包到同一个ZIP里,其实只要调整一下操作顺序就行,核心逻辑是先把所有需要压缩的文件都添加到同一个ZIP对象中,最后只执行一次打包和邮件发送。

具体修改步骤

  • 先初始化ziplob,全程复用这个实例,不要中途置空
  • 依次处理两个CSV文件,分别调用as_zip.add1file把它们加入同一个ZIP对象
  • 等两个文件都添加完成后,再调用as_zip.finish_zip完成ZIP的打包
  • 最后只发送一次邮件,附件就是包含两个CSV的ZIP文件

修改后的完整代码

create or replace PACKAGE BODY BE2010_SCHEDULE IS
 PROCEDURE job_morning IS
 BEGIN
 PROCEDURE job_msat IS
 rmt_dir VARCHAR2(200) ;
 filename VARCHAR2(200) ;
 country VARCHAR2(20) ;
 stamp_fmt VARCHAR2(30) := 'YYYYMMDDHH24MISS';
 sep char := ';';
 sw_header char := 'N';
 tmp_nclob nclob;
 ziplob blob;
 v_destin varchar2(100) ;
 BEGIN
 XLOG.LOG_info('BE2010_SCHEDULE.JOB_MSAT_IN','BE2010: Starting the MSAT exports');
 rmt_dir:= '/ForMarsh/Drive_T';
 country := 'BE';
 Select mprop_value into v_destin from marsh_env_properties where mprop_name = 'mailto.whole_team';
 
 -- 初始化ZIP对象,全程复用这个实例
 ziplob := null;
 
 -- 处理第一个CSV并加入ZIP
 filename := 'OSBELER_POL.CSV';
 tmp_nclob := be2010_msat_leasing.xtr_policies (sep, sw_header);
 marshsat_ftp.send_NCLOB(tmp_nclob,'', rmt_dir ,filename,'UTF8');
 as_zip.add1file( ziplob, filename, smtp.translate_nclob ( tmp_nclob,'UTF8' ) );
 dbms_lob.freetemporary (tmp_nclob);
 
 -- 处理第二个CSV并加入同一个ZIP
 filename := 'OSBERCI_POL.CSV';
 tmp_nclob := be2010_msat_rci.xtr_policies (sep, sw_header);
 marshsat_ftp.send_NCLOB(tmp_nclob,'', rmt_dir ,filename,'UTF8');
 as_zip.add1file( ziplob, filename, smtp.translate_nclob ( tmp_nclob,'UTF8' ) );
 dbms_lob.freetemporary (tmp_nclob);
 
 -- 完成ZIP打包(只执行一次)
 as_zip.finish_zip( ziplob );
 
 -- 发送包含两个文件的ZIP邮件,标题和附件名调整得更清晰
 smtp.send_mail ( 
     v_destin, 
     '[Cleva->MSAT] BE2010 - Leasing & RCI Combined', 
     'BE2010_Combined_Policies.zip', 
     'BE2010_Combined_Policies.zip', 
     ziplob
 ) ;
 
 -- 清理资源
 ziplob := null;
 END job_msat;
 END job_morning;
END BE2010_SCHEDULE;

关键注意点

  • 移除了原来两次finish_zip和两次邮件发送的逻辑,避免生成多个独立ZIP
  • 全程保持ziplob是同一个实例,不要在添加完第一个文件后就置空它
  • 我把邮件标题和附件名改成了更明确的名称,方便接收方一眼知道这是合并后的打包文件
  • 确认as_zip.add1file支持多次添加文件到同一个BLOB对象——从你的代码用法来看,这个API设计就是用来累积添加文件到ZIP流的,所以完全没问题

内容的提问来源于stack exchange,提问作者Sam Parker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:13:13