progress的数据库访问2
关键字: progress 4GL 数据库
1.数据库的连接
首先我们假设有这样两张表:
表 order:
field-name field-type
oid char
custid char
ref-oid char
quantity decimal
unit char
表 customer:
field-name field-type
custid char
custname char
custaddr char
这里custid在两张表里起一个联结作用。
假如有一个给定的订单号码mo1,想找出和它对应的客户信息:
for each(first) order where order.oid = mo1 no-lock,
first(each) customer where customer.sutid = order.custid no-lock:
display order.
display customer.
end.
因为通常订单号是唯一的,所以for each和for first是一样的效果。同样一个订单只会对应一个客户。
如果反过来,已知客户号码名字cname,现在要找到该客户所有的订单:
for first(each) customer where customer.custname = cname no-lock,
each order where order.custid = customer.custid no-lock:
display customer.
display order.
end.
这仍然是一个for语句,要注意,第二个字句直接使用each/first/last即可,不再需要多余的for. 并且如果你想的话,你可以连接两张以上的表。
这样的连接是一个自然连接。如果你要使用不等连接,只要改变一下操作符即可。
很显然,一个迪卡尔连接是这样的:
for each order no-lock,
each customer no-lock:
disp order.
disp customer.
end.
当然对于这样的连接还有另外一种方法,就是使用嵌套的for语句:
for each order no-lock:
for each customer no-lock:
关键字: progress 4GL 数据库
1.数据库的连接
首先我们假设有这样两张表:
表 order:
field-name field-type
oid char
custid char
ref-oid char
quantity decimal
unit char
表 customer:
field-name field-type
custid char
custname char
custaddr char
这里custid在两张表里起一个联结作用。
假如有一个给定的订单号码mo1,想找出和它对应的客户信息:
for each(first) order where order.oid = mo1 no-lock,
first(each) customer where customer.sutid = order.custid no-lock:
display order.
display customer.
end.
因为通常订单号是唯一的,所以for each和for first是一样的效果。同样一个订单只会对应一个客户。
如果反过来,已知客户号码名字cname,现在要找到该客户所有的订单:
for first(each) customer where customer.custname = cname no-lock,
each order where order.custid = customer.custid no-lock:
display customer.
display order.
end.
这仍然是一个for语句,要注意,第二个字句直接使用each/first/last即可,不再需要多余的for. 并且如果你想的话,你可以连接两张以上的表。
这样的连接是一个自然连接。如果你要使用不等连接,只要改变一下操作符即可。
很显然,一个迪卡尔连接是这样的:
for each order no-lock,
each customer no-lock:
disp order.
disp customer.
end.
当然对于这样的连接还有另外一种方法,就是使用嵌套的for语句:
for each order no-lock:
for each customer no-lock: