Progress OpenEdge like SQL 在哪里?
Progress OpenEdge like SQL where IN?
我可以用字符串来做到这一点,效果很好。
示例:
for each emp no-lock where
lookup(emp.name, "james,john,kerry,david") <> 0:
/* Do something */
end.
现在我有 emp.ID 不是字符串(它是一个整数),我该怎么做 where IN ?我尝试了与上述类似的方法。但它给了我一个错误,它说
"incompatible data types"
for each emp no-lock where
lookup(emp.ID, "1,5,89") :
/* Do something */
end.
我该怎么做?
谢谢你
在大DB中table,要善用索引:
FOR EACH emp NO-LOCK WHERE emp.ID = 1 OR emp.ID = 5 OR emp.ID ? 89
小型 table 中的懒惰编码员可能会这样做:
FOR EACH emp NO-LOCK WHERE LOOKUP (STRING(emp.ID), "1,5,89") > 0
OpenEdge 有一个 SQL-92 引擎,但您没有使用它。您正在使用 4gl 引擎。 4gl 引擎中嵌入了一些有限的 SQL-89 语法,但尝试使用它是个坏主意。它只会导致痛苦和折磨
4gl没有IN功能。要使用一组可变的整数来执行您尝试执行的操作,您可能希望首先创建一个临时 table,然后使用您的真实 table 加入 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.
我可以用字符串来做到这一点,效果很好。 示例:
for each emp no-lock where
lookup(emp.name, "james,john,kerry,david") <> 0:
/* Do something */
end.
现在我有 emp.ID 不是字符串(它是一个整数),我该怎么做 where IN ?我尝试了与上述类似的方法。但它给了我一个错误,它说 "incompatible data types"
for each emp no-lock where
lookup(emp.ID, "1,5,89") :
/* Do something */
end.
我该怎么做? 谢谢你
在大DB中table,要善用索引:
FOR EACH emp NO-LOCK WHERE emp.ID = 1 OR emp.ID = 5 OR emp.ID ? 89
小型 table 中的懒惰编码员可能会这样做:
FOR EACH emp NO-LOCK WHERE LOOKUP (STRING(emp.ID), "1,5,89") > 0
OpenEdge 有一个 SQL-92 引擎,但您没有使用它。您正在使用 4gl 引擎。 4gl 引擎中嵌入了一些有限的 SQL-89 语法,但尝试使用它是个坏主意。它只会导致痛苦和折磨
4gl没有IN功能。要使用一组可变的整数来执行您尝试执行的操作,您可能希望首先创建一个临时 table,然后使用您的真实 table 加入 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.