关于dw的buffer问题

LH_hang 2008-11-11 10:33:06
一般而言,dw是根据original缓冲区内生成where条件.从以往的资料上来看,有个假定的前提,就是primary区的主键值不修改,而只是修改其他的值,这样,根据original区,会生成update table set .... where 主键=旧值;
现提问题如下: primary区有两条记录 a b
c d (两个字段,其中第一字段,a,c为主键值)
如果在primary区,把数据修改成: e b
f d (就是说可能修改了primary的主健值)
那么按常理逻辑是,根据original区生成语句如下:
update table set 主键=e where 主键=a;
update table set 主键=f where 主键=c;
在下的问题是: 为什么不会生成 update table set 主键=f where 主键=a;
update table set 主键=e where 主键=c;
换句话说,original区的数据是如何与primary区的数据一一对应生成where条件的,因为已经修改了primary区的多条数据的主键值。是不是dw中还
隐藏着其他的技术细节,比如时间戳,或是dw各个缓冲区中的记录有着内部的某种编号?
请各位大侠解释。
(呵呵,这好象是有些深度的问题,百度上都是假定一个条件,主键值不变的情况下。)
...全文
286 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AFIC 2008-11-13
  • 打赏
  • 举报
回复
说实话这是pb的内部实现,我们说的都是自认为合理的解释
到底是不是那样的,只有sybase的人才知道的。
你挪区也没有关系,他可以重新编号,只要两边对上不就可以了吗。
LH_hang 2008-11-13
  • 打赏
  • 举报
回复
liubocy :
我是说primary区和original区,而不是同指primary区.
LH_hang 2008-11-12
  • 打赏
  • 举报
回复
liubocy :
愿闻其详,如果删掉某些行,又修改某些行,行号不会产生变化吗?
liubocy 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 LH_hang 的回复:]
liubocy :
愿闻其详,如果删掉某些行,又修改某些行,行号不会产生变化吗?
[/Quote]

行号会改变,但也不会对应出问题。
比如:
String LName,LName1

LName = dw_employee.GetItemString(3, "emp_name", Primary!, FALSE)
LName1 = dw_employee.GetItemString(3, "emp_name", Primary!, True)
-----------------------------------------------------------------
删除掉了第1行,上面的数据会到第二行去。改前和改后的值也不会对应错误呀
LH_hang 2008-11-11
  • 打赏
  • 举报
回复
afic你确定吗?是根据行号吗?如果我在primary里删掉几行,然后我又在primary里修改几行的主键,那么这个行号会变化吧.....
I_am_Z 2008-11-11
  • 打赏
  • 举报
回复
up
jlwei888 2008-11-11
  • 打赏
  • 举报
回复
where 条件产生是和DW的update属性有关,三种选项,但每项都有主健!
original区和primary区感觉还是通过主健联系的!
primary区可能再带个隐匿主健!但那样和original区又没什么区别了!
也有可能有个内部行号
你可以问问sybase,只有他们能说得清了!

AFIC 2008-11-11
  • 打赏
  • 举报
回复
pb仅仅是根据他的行的顺序,从original取得where 部分,从primary取得set部分
liubocy 2008-11-11
  • 打赏
  • 举报
回复
根据行循环生成update语句肯定不会乱掉。
liubocy 2008-11-11
  • 打赏
  • 举报
回复
大家有没有发现这类的函数:

String LName,LName1

LName = dw_employee.GetItemString(3, "emp_name", Primary!, FALSE)
LName1 = dw_employee.GetItemString(3, "emp_name", Primary!, True)

它们能获取数据窗口某项改变前和改变后的值。

这说明数据窗口某处有保存它们的初始值

662

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder Web 应用
社区管理员
  • Web 应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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