daidai8910 发表于 2011-02-10 13:43

sybase 多行游标更新问题

本人使用sybase ase一年有余,近日有个问题,咨询下坛子里的高人,麻烦不吝赐教:
系统中有只程序专门负责处理每天的交易数据,查询并不快,想通过使用宽游标,也就是多行游标来减少io操作,但是本人以前没有写过宽游标的程序,对于宽游标下如何更新数据莫不着头绪,有哪位写过这方面的程序,希望能贴出段代码来给小弟学习学习,若没有代码,麻烦告知从哪里可以下到资料自己学习也行,先谢过了

Eisen 发表于 2011-02-10 16:51

本帖最后由 Eisen 于 2011-02-10 17:07 编辑

提醒一点: Sybase上不推荐使用cursor,因为效率很低,所以推荐你使用临时表的方式来解决,这样效率高。

另外,如果你实在要用,可以用 set cursor rows number for cursor_name 这样子的语句来让fetch每次返回多行。

daidai8910 发表于 2011-02-11 10:29

谢谢eisen的回复,我现在的问题是,取出来可以是多行,但是我想把取到数组内的数据批量存回数据库(如果没有批量存回的话,使用游标定位回到多行的起点也行),因为业务逻辑较多,较复杂,使用临时表来存取数组实现难度太大,再次感谢

daidai8910 发表于 2011-02-11 10:30

谢谢eisen的回复,我现在的问题是,取出来可以是多行,但是我想把取到数组内的数据批量存回数据库(如果没有批量存回的话,使用游标定位回到多行的起点也行),因为业务逻辑较多,较复杂,使用临时表来存取数组实现难度太大,再次感谢

eisen 发表于 2011-02-11 12:59

感觉不现实……
fetch可以一次取多行,但指针只能指向最后一行,你怎么update回去啊?

daidai8910 发表于 2011-02-12 14:58

我主要就是不晓得如何更新回去,因为处理的这张表是交易流水表,在得到的多行数据中没有办法定位一条记录,但是这些流水又必须加上是否处理的标志位(业务要求),麻烦再帮忙看看是否有这方面的资料??

daidai8910 发表于 2011-03-06 17:41

自己顶起来,期望高人指条明路

zcjzcx 发表于 2011-03-08 21:14

是否可以取出要更新行的key值, 存到一个字串变量keylist, 然后 更新key值 in keylist,fecth 一次 1个update 。仅供参考, 说错莫怪。:emn10:

chenfeng825 发表于 2011-03-09 08:51

cursor就是慢,还有锁定,甚至完整性问题。总之就是能不用就不用。。。。
什么逻辑?除了cursor无解?看到都提到多行更新了。。。

daidai8910 发表于 2011-03-19 09:12

前几日工作任务比较重,没有时间上来回复了。
其实逻辑是这样的:
   有一只批量程序会读取当天的交易流水信息,并且将交易流水信息加工用于更新另外两张业务表,在处理完一条流水信息后,会将本条流水的是否处理标志更新(主要是为了支持重提批量,下次提起批量的时候,可以只取那些没有做过更新的流水),因为是流水表,所以并没有主键。
此程序现阶段处理时间较慢,想优化之,初步想法是使用多行游标提取数据,但是因为游标指针只能指到最后一行,因此无法进行批量更新标志位(宽游标内的)的操作。
ps:谢谢楼上两位的回复。
页: [1] 2
查看完整版本: sybase 多行游标更新问题