半动态查询和数据库安全

Semi-dynamic queries and database security

我知道带有静态缓冲区的纯 Progress 4GL 代码,find,for each 等在编译时(或另外在 运行 时使用 "Use Runtime Permissions Checking" 选项受制于数据库安全).

动态查询仅在 运行 时受数据库安全保护。

有谁知道下面示例中的代码会如何运行?

define query q for OrderLine.

DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.

hQuery = QUERY q:HANDLE.

hQuery:QUERY-PREPARE("FOR EACH OrderLine NO-LOCK WHERE OrderLine.Itemnum = 100":U).
hQuery:QUERY-OPEN().

get first q.
do while available OrderLine:

  display OrderLine.Qty.

  get next q.

end.

close query q.

QUERY-PREPARE() 和 QUERY-OPEN() 在 运行 时执行,编译器无法在编译时评估参数是什么,因此 运行 时间是安全性应用。

(即使您使用静态字符串作为参数,编译器也不够智能,无法对其执行任何操作。)