123
返回列表 发新帖
楼主: qingyun

[精华] 【困惑】一个我理解不了的游标问题

[复制链接]
论坛徽章:
38
授权会员
日期:2005-10-30 17:05:332012新春纪念徽章
日期:2012-02-13 15:12:09现任管理团队成员
日期:2011-11-07 09:46:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41ITPUB9周年纪念徽章
日期:2010-10-08 09:31:21版主3段
日期:2012-05-15 15:24:112009新春纪念徽章
日期:2009-01-04 14:52:282010新春纪念徽章
日期:2010-03-01 11:06:202009日食纪念
日期:2009-07-22 09:30:00祖国60周年纪念徽章
日期:2009-10-09 08:28:00
21#
发表于 2010-8-20 00:53 | 只看该作者
为什么不用
fetch bulk collect into

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
22#
发表于 2010-8-20 00:56 | 只看该作者
你其实没有FOR  UPDATE的需求,只是被SQL SERVER自动加锁而已,所以改用数组的思路是正确的。
为什么采取网关的形式?如果数据量大,不如批量抽取过来再处理。

使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
23#
 楼主| 发表于 2010-8-20 01:10 | 只看该作者
原帖由 guostong 于 2010-8-20 00:53 发表
为什么不用
fetch bulk collect into


呵呵,多谢提醒,这个技巧当初是从newkid兄那里学到的,怎么又忘记了;

现在导入数组的代码修改为:

   SELECT  * bulk collect into Arr_ERP_KHZL
                  FROM ERP_KHZL A --业务单位表
                 where A.XGSJ > p_xgsj;

使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
24#
 楼主| 发表于 2010-8-20 01:17 | 只看该作者
原帖由 newkid 于 2010-8-20 00:56 发表
你其实没有FOR  UPDATE的需求,只是被SQL SERVER自动加锁而已,所以改用数组的思路是正确的。
为什么采取网关的形式?如果数据量大,不如批量抽取过来再处理。


开发方便啊,呵呵,我们以前传统的方法是:

搞一个EXE程序,放两个会话组件,一个连接oracle,一个连接sqlserver;
然后通过程序控制,比如在sqlserver里读取数据,放到一个数据集里;
然后再insert 到oracle数据库上;
这个方法写程序麻烦,修改也麻烦;不如pl/sql脚本直接方便;

我们的数据量并不大,但是sqlserver数据库的数据时时都在下传,不是一次性导完就结束的;每分钟都有新数据下传和回传;

里面又涉及一些不是很复杂的转换;所以从开发实施的方便性来说,用网关最方便,就是采用逻辑上是一个数据库的方式;

使用道具 举报

回复
论坛徽章:
26
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24夏利
日期:2013-08-13 23:25:29优秀写手
日期:2013-12-18 09:29:092014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11蓝色妖姬
日期:2015-03-19 09:37:00ITPUB年度最佳技术原创精华奖
日期:2015-03-19 09:43:24
25#
 楼主| 发表于 2010-8-20 08:24 | 只看该作者
呵呵,刚才又测试过了,
我在sqlserver端建立了一个试图 ,比如
create view v_test as select * from test with (nolock);

然后在oracle端写:

for  rec in (select * from v_test@dblink名字)
loop
   commit;
end loop;

还是有同样的问题,总之,异构数据库的处理上,不像我们相信的那么无缝融合;
所以还是少用“危险”的写法;

使用道具 举报

回复
论坛徽章:
5
2011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:362012新春纪念徽章
日期:2012-02-07 09:59:35秀才
日期:2016-06-23 14:15:06
26#
发表于 2011-9-27 20:41 | 只看该作者
我也遇到过类似问题,我就建立临时表作为游标

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表