oci+pl/sql->oracle增量抽取的研究一周小结

qish 2002-11-04 01:59:29
1背景
在我们一些项目时(如经营分析等),我们只能在原有的数据库系统之上运行,原来的数据库还一直在运行,并且可以说有原来的系统是整个系统的基本系统,其安全性要求很高(如计费系统)。这样,我们就必须要实现增量抽取,而我们的经营分析系统也是一个很大的系统,所以在最低层要有一个稳定的接口,我们必须有一个和原来的数据库的接口表,我们的目的是要把原来的系统中的表增量转化为我们的接口表中的数据的文件。
步骤:
2方法
如果直接用oci函数来抽取,由于oci函数通常用来执行一条sql语句,而我们的转换工作是对于我们接口表中每一张表都可能有很多个步骤,这样的话如果我们对于每张接口表都用一个程序的话,那么维护量是很大的,
所以这样做的结果是复杂,维护困难。
而如果用pl/sql来做的话,pl/sql中可以和操作系统进行交互的方法可以是utl,或者是在sqlplus中用spool,如果用utl包的话,有很多限制,如它只能写文件到数据库服务器上,如果原来路径没有设置的话,那么要重新启动数据库
而用spool的话更有限制,因为dbms_output这个软件包只是开一定的缓存,是很小的,你不可能用dbms_output这个包和spool结合来实现大数据量的抽取。
所以最后的结果是要在oci中调用pl/sql,在oci/调用pl/sql时,要实现技术上的问题,有一点请大家记住,oci的功能是很强大的,在调用pl/sql时,能够实现任何绑定。
其中的一个example是象下面这样的代码
在pl/sql块中
declare
v_stmt varchar(1024);
....
begin
v_stmt := 'select * from emp where job = :j';//这是一个动态sql
open :cursor1 for v_stmt using :v2;
end;

在oci中,我们只要绑定:cursor1 和:v2这两个变量就可以了(当我得到这个结果时,我是太高兴了),而:j这个变量不要我们来绑定,注意在绑定:cursor1的时候用的是一个语句句柄,这样,我们就可以通过这个语句句柄来得到我们这次结果有多少列,每个字段的描述等,
最后就可以用fetch把得到的结果集给取出来。
最后,向给我很多帮助的朋友表示感谢!
...全文
109 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧