2014-12-24 2 views
1

У меня проблема с Прогрессом, наш обычный программист - это выход для праздников, и у меня нет реального знания системы. Мне нужно получить список филиалов, которые не являются одним из этих кодов [«AXD», «BOD», «CLA», «CNA», «CTS», «NOB», «OFF», «ONA», «PRJ », "WVL"].Progress 4gl Matches Queries

Я попытался for each removals where r-brchdisplay not(matches ["AXD","BOD","CLA","CNA","CTS","NOB","OFF","ONA","PRJ","WVL"]). display rpid.

но синтаксис, очевидно, неправильно. Спасибо

ответ

0

Квадратные скобки не являются правильной частью синтаксиса.

Совпадения одной строки с другой - не набор параметров. То есть

not (r-brchdisplay matches "axd" or r-brchdisplay matches "bod" or ...) 

Использование MATCHES также является глупым, поскольку это сравнение равенства без диких карт. MATCHES обычно используется, когда задействованы wild-cards.

MATCHES также, как правило, очень и очень плохая идея в предложении WHERE, как и все, но гарантирует сканирование таблицы.

Альтернативные способы, чтобы написать ИНЕКЕ:

not (r-brchdisplay = "axd" or r-brchdisplay = "bod" or ...) 

или

r-brchdisplay <> "axd" and r-brchdisplay <> "bod" and ... 

LOOKUP() гораздо ближе к тому, что вы, вероятно, потребуется:

for each removals no-lock where 
    lookup(r-brchdisplay, "axd,bod,cla,cna,cts,nob,off,ona,prj,wvl") = 0: 
    /* do something... */ 
end. 

(символ «= 0 "означает, что LOOKUP НЕ нашел целевую строку ...)

+0

Поиск также вызовет сканирование таблицы - «<>» будет наиболее эффективной структурой, которую вы будете использовать. –

Смежные вопросы