私は私がで区切られた各データを(表言う)テーブルを照会する必要がある文字列にデリミタで区切られたデータに基づいてテーブルをクエリする方法は? 「;」
a = "test1;test2;test3;test4;test5;".
を持っています
私のクエリは次のとおりです。
For each table where table.field1 matches "*test1*" no-lock:
disp table.field1 table.field2
end.
私は私がで区切られた各データを(表言う)テーブルを照会する必要がある文字列にデリミタで区切られたデータに基づいてテーブルをクエリする方法は? 「;」
a = "test1;test2;test3;test4;test5;".
を持っています
私のクエリは次のとおりです。
For each table where table.field1 matches "*test1*" no-lock:
disp table.field1 table.field2
end.
DEFINE VARIABLE v-cnt AS INTEGER NO-UNDO.
DEFINE VARIABLE segment AS longchar NO-UNDO.
DEFINE VARIABLE eachelement AS CHARACTER NO-UNDO.
assign segment = "abc;bcd;efg;".
DO v-cnt = 1 TO num-entries(segment, ";") - 1 :
ASSIGN eachelement = string(entry(v-cnt, segment, ";")).
FOR each table1 where table1.field1 matches "*" + eachelement + "*" no-lock:
MESSAGE table1.field1
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
END.
あなたのソリューションは、[OK]を動作する一方で、オーバーヘッドの多くは、「それぞれの」スロークエリである場合は特に、そこにあります。必要な値のテンポラリテーブルを作成し、それをクエリに追加する方がよいでしょう。そして、あなたが 'マッチ'を使用しているとき、field1がまともなインデックスに入っていることを確認してください。そうしないと、パフォーマンスは恐ろしいものになります。
DEFINE VARIABLE v-cnt AS INTEGER NO-UNDO.
DEFINE VARIABLE segment AS longchar NO-UNDO.
define temp-table tt-element no-undo
field element as character
index elidx is primary element.
assign segment = "abc;bcd;efg;".
do v-cnt = 1 to num-entries(segment,';'):
create tt-element.
tt-element.element = entry(v-cnt,segment,';').
end.
for each tt-element,
each table1 no-lock
where table1.field1 matches '*' + tt-element.element + '*':
message table1.field1
view-as alert-box info buttons ok.
end.