近日在邮件系统进行迁移的过程中遇到一个问题,我用Oracle的外部表结合游标将其解决,特记于此文。

问题是这样的,通过开发商的程序,得到一个操作文件 delete_file ,该文件记录了一些操作不步骤,其中的内容如下:

....
.....
......
sm zh@______.com
df /Draft
df /Junkmail
sm dzt@_____.com
df /Draft
df /Junkmail
sm master@_______.com
mm 345 /Drafts
mm 344 /Drafts
mm 343 /Drafts
mm 342 /Drafts
df /Draft
df /Junkmail
sm jtj_yxxf@_________.cn
df /Draft
df /Junkmail
......
.....
....

其中 sm命令是指将当前上下文切换到哪个邮箱,mm 命令是移动邮件的命令,现在要统计一下,每个邮箱被移动的邮件各有多少封。譬如,master@_______.com 这个账号被移动的邮件就要4封。

我的思路是,将这个表导入数据库或者作为一个可读取的外部表,然后使用游标自上而下地读取,然后随着游标的移动做统计,算法很简单。

我将操作文件放在Linux上面处理:

[root@mailserver tmp]# pwd
/tmp
[root@mailserver tmp]# chmod 777 ./mail/
[root@mailserver tmp]# ll
总用量 12
drwxrwxrwx  2 root root 4096 10月 10 22:39 mail
srwxr-xr-x  1 root root    0  7月  1 14:43 mapping-root
drwxr-xr-x  3 root root 4096  9月 24 10:56 orion
drwx------  2 root root 4096 10月 10 22:24 ssh-coEvb25444
prw-------  1 root root    0  8月 19 17:49 vmware-root.0
[root@mailserver tmp]# cd mail/
[root@mailserver mail]# ls
delete_file
[root@mailserver mail]# chmod 666 delete_file
[root@mailserver mail]# ll
总用量 252
-rw-rw-rw-  1 root   root     244758 10月 10 22:58 delete_file

然后在Oracle中给我一个测试用户 dcb_user 给与一定的权限:

sys@mydb(10.168.0.202) SQL> grant create any directory to dcb_user2  /Grant succeeded.Elapsed: 00:00:00.07

然后创建一个目录及基于文件的外部表:

create or replace directory mail_dir as '/tmp/mail/';create table delete_file
(line varchar2(200)
)
organization external
(type oracle_loaderdefault directory mail_diraccess parameters( records delimited by newlinefieldsreject rows with all null fields)location('delete_file')
)
reject limit unlimited;

至此,就可以使用select 语句查询这个文件了。

我再建一个统计表,用于记录统计信息,很简单:

create table mail_stat
( account varchar2(50) , mail int
);

以下是我的统计代码:

CREATE OR REPLACE PROCEDURE delete_state
ISv_line varchar2(200);v_account varchar2(50);CURSOR cur is select line from delete_file;BEGIN open cur;loopfetch cur into v_line;EXIT when cur%NOTFOUND; if instr(v_line,'sm ')=1 thenv_account := REPLACE(v_line,'sm ','');insert into mail_stat (account,mail) values ( v_account , 0 );end if;if instr(v_line,'mm ')=1 thenupdate mail_stat set mail=mail+1 where account=v_account;end if;END LOOP;CLOSE cur;COMMIT;
END delete_state ;

经过以上的准备工作之后,我就可以轻松统计我所要的统计信息了。

转载于:https://www.cnblogs.com/killkill/archive/2009/10/11/1580820.html

[原]Oracle外部表结合游标完成统计一例相关推荐

  1. Oracle 外部表

    外部表是指不存在于数据库中的表.通过向Oracle 提供描述外部表的元数据,可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问.外部表是对数据库表的延伸. ...

  2. oracle外部表ora29913,从外部表中选择sqlplus错误:ORA-29913:执行ODCIEXTTABLEOPEN标注时出错...

    我已经建立了一个简单的Oracle外部表测试,我(与DBA和Unix管理员一起)无法工作. 以下内容基于Oracle的External Tables Concepts.我们使用的数据库是11g. 这是 ...

  3. oracle外部表导入,oracle 外部表导入时间日期类型数据

    oracle 外部表导入时间日期类型数据以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 建立外部表目录 create d ...

  4. 外部表如何导入mysql_如何利用Oracle外部表导入文本文件的数据

    Oracle外部表支持两种类型的驱动:一种是ORACLE_LOADER,外部表的数据必须来源于文件文件,另一种则是ORACLE_DATAPUMP,外部表的 同事最近在忙数据一致性比对工作,需要对不同文 ...

  5. oracle数据库dblink创建语句_3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  6. 3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  7. oracle外部表kup-04023,sqlldr如何添加忽律错误得参数

    Oracle外部表使用方法 1.        版本信息 SQL> conn / as sysdba; 已连接. SQL> select * from v$version; BANNER ...

  8. 使用Oracle外部表来查询分析警告日志

    使用 Oracle 外部表来查询分析警告日志 Oracle 中的警告日志按照时间发生顺序记录了 Oracle 数据库出现的内部错误,以便通过这个警告日志提醒用户,用户通过查询警告日志来分析 Oracl ...

  9. oracle 外部表装载,Oracle 原理:数据装载 ,SQLldr ,外部表

    一.导入 SQLldr SQL*LOADER可以把txt文件,Excel文件导入到数据库中.使用SQLloader导入导出需要一个数据文件和一个控制文件.数据文件中存了你需要导入的数据,控制文件中写你 ...

最新文章

  1. Creating a LINQ Enabled ASP.NET Web application template using C#.[转]
  2. 敲代码就是一把梭_2020必看!开发五年的大佬日常工作中所使用的java代码技巧...
  3. python购物车程序-Python编写购物车程序
  4. python3字符串转数字_Python 3.6.0 正式版发布附新特性说明
  5. IBM希望其“裁剪”过的Swift能够引诱你使用BlueMix云
  6. 十三种技术文档模板_在线文档,知多少?
  7. 信息学奥赛一本通(1092:求出e的值)
  8. devsecops_DevSecOps管道和工具:您需要了解的内容
  9. leetcode74:二维矩阵搜索问题
  10. Beego框架简介准备搭建分布式爬虫
  11. python启动文件_Python启动文件配置
  12. Cesium:搭建运行环境
  13. 【Windows】添加开机启动项
  14. 在php中cm和kg用什么表示,将g/cm³换算为kg/m³ (克每立方厘米换算为千克每立方米)...
  15. Mac python 安装信息安全,Pycrypto 出现,C compiler cannot create executablesC编辑器不能创建可执行文件
  16. c++ 函数后面加一个冒号的含义
  17. 奥运五环的含义及其颜色对应码
  18. 分享一个整理了很多Android开发工具类的链接AndroidUtilCode
  19. 小萝莉和他的数学迷老爸
  20. 关于身份认证中的Authenticator及AuthenticationStrategy

热门文章

  1. Yocto tips (17): Yocto License问题:restricted license not whitelisted in LICENSE_FLAGS_WHITELIST
  2. react-redux
  3. 单片机中去耦电容的使用
  4. iptable防火墙流程图
  5. 设计模式——工厂方法
  6. linux下DNS服务器的配置
  7. small - HTML元素
  8. 处女篇:ObjectDataSource+CodeSmith实现基础增删改查功能
  9. 让你人际关系更上一层楼的26条原则
  10. postman支持socket吗_你必须知道postman和Jmeter做接口测试区别