进展OpenEdge像SQL那里IN?

问题描述:

我可以用一个字符串做到这一点,它的效果很好。 例如:进展OpenEdge像SQL那里IN?

for each emp no-lock where 
    lookup(emp.name, "james,john,kerry,david") <> 0: 
    /* Do something */ 
end. 

现在我有emp.ID不是一个字符串(它是一个整数),我该怎么办在哪里?我尝试了与上面类似的方法。但它给了我一个错误,它说 “不兼容的数据类型”

for each emp no-lock where 
    lookup(emp.ID, "1,5,89") : 
    /* Do something */ 
end. 

我该怎么做呢? 感谢哟ü

在一个大的数据库表,利用好索引:

FOR EACH emp NO-LOCK WHERE emp.ID = 1 OR emp.ID = 5 OR emp.ID ? 89 

懒编码器在一张小桌子可以做:

FOR EACH emp NO-LOCK WHERE LOOKUP (STRING(emp.ID), "1,5,89") > 0 

OpenEdge有SQL- 92引擎,但你没有使用它。您正在使用4gl引擎。在4gl引擎中嵌入了一些有限的SQL-89语法,但尝试使用它却是一个糟糕的主意。它只会导致疼痛和痛苦

4gl没有IN功能。要使用一组变量来完成你想要做的事情,你可能需要首先创建一个临时表,然后将TT与你的真实表加入。这样的事情:

define temp-table tt_intList 
    field f1 as integer 
. 

create tt_intList. 
tt_intList.f1 = 1. 

create tt_intList. 
tt_intList.f1 = 5. 

create tt_intList. 
tt_intList.f1 = 89. 

for each tt_intList, each emp no-lock where emp.Id = tt_intList.f1: 
    display emp.Id emp.name. 
end. 
+0

我有版本11.3.3那有SQL-92引擎吗? – BobNoobGuy

+0

是的。但是您正在使用FOR EACH,因此您使用4GL引擎进行编码。应用程序代码几乎总是使用4GL。 SQL-92引擎主要用于第三方接口和报告目的。 –