2011-03-30 65 views
5

我在许多地方过这个代码运行:创建一个缓冲区与同名的数据库表

DEFINE BUFFER Customer FOR Customer. 

我有两个问题:

  1. 的目的是什么这个的?为什么创建一个与表格名称相同的缓冲区是有好处的?

  2. 当编写代码访问此表/缓冲区时,Progress如何知道是直接访问数据库还是通过缓冲区访问数据库?

+0

@汤姆巴斯康姆可能知道,他的进步'乔恩Skeet,对不起,如果我说他的名字徒劳 – Kyle 2016-02-02 17:26:16

回答

8

1:这通常是为了管理缓冲区的范围。

例如,如果您有一个包含许多内部过程的过程,它们都访问同一个表,那么该表的默认缓冲区将被限制为顶层过程块。例如 -

procedure p1: 
    find first customer no-lock. 
end. 

procedure p2: 
    find last customer no-lock. 
end. 

将最终将客户缓冲区范围设定为包含过程。如果你试图保持你的内部程序松散耦合和自包含,那么你可能不需要这种行为。所以你应该在每个内部程序中定义一个缓冲区。

Obv还有其他的原因来定义缓冲区,但是当你看到代码定义了一个与表名相同的缓冲区时,它通常是关于作用域的。

2:它总是通过缓冲区访问数据库。每个表中有相同的名称表默认缓冲区,所以

find first <buffername>. 

将寻找一个缓冲名为BufferName中这可能是一个明确定义的缓冲或隐含的默认缓冲。如果存在,优先级将转到明确定义的缓冲区。

+1

这种技术有一个最大的好处是它可以防止意外的副作用,特别是记录锁,从影响主要程序或其他内部程序。 – 2011-03-31 10:15:05

+1

感谢Gordon的评论 - 这是一个很好的解释。我理解这背后的逻辑,但我不同意命名约定。对我来说,一个缓冲区仍然应该以“b-”或其他地方作为前缀来定义你正在引用缓冲区。使用数据库表格名称作为缓冲区名称似乎只会使代码比需要的更容易混淆。 – pmartin 2011-04-01 16:09:43

相关问题