DEF VAR str_eia AS CHAR. DEF VAR str_sql AS
CHAR.
DEF VAR
n_par AS INT. DEF VAR par_1 AS CHAR.
DEF VAR
i AS INT. DEF VAR j AS INT. DEF VAR tblfld AS CHAR.
DEF VAR
ind AS LOG. DEF VAR simv AS CHAR.
DEF VAR
eia_gen AS CHAR. DEF VAR sql_gen AS CHAR.
DEF VAR
eia_tek AS CHAR. DEF VAR sql_new AS CHAR.
DEF VAR
sql_set AS CHAR. DEF VAR par_2 AS CHAR.
str_eia = "Перечислить
молочные продукты".
str_sql =
"select katalog.NAME
from katalog WHERE katalog.cod_good IN " + CHR(10) +
"(select
katalog.cod_good from katalog, depart
" + CHR(10) +
"where katalog.cod_dep = depart.cod_dep " + CHR(10) +
"and depart.name_dep = 'молочные продукты').".
n_par
= NUM-ENTRIES(str_sql, "~'").
MESSAGE
n_par {vab.i}. IF n_par < 2 THEN RETURN.
par_1
= ENTRY(2, str_sql, "~'"). MESSAGE
"par_1 =" par_1 {vab.i}.
j =
INDEX(str_sql,par_1) - 2.
ind =
YES. i = 0. tblfld = "".
DO
WHILE j > 0 AND ind :
simv
= SUBSTR(str_sql,j,1).
IF
simv = "=" THEN DO: i = 1. j = j - 1. NEXT. END.
tblfld
= simv + tblfld.
/*
MESSAGE "simv =" simv "i
=" i {vab.i}. */
IF
simv = " " THEN
IF i
< 2 THEN DO: j = j - 1. NEXT. END.
ELSE
DO: ind = NO. NEXT. END.
j = j
- 1. i = 2.
END.
MESSAGE "tblfld =" tblfld {vab.i}.
eia_gen
= REPLACE(str_eia, par_1, "@p_1").
MESSAGE
"eia_gen =" eia_gen {vab.i}.
sql_gen
= REPLACE(str_sql, par_1, "@p_1").
MESSAGE
"sql_gen =" SKIP sql_gen {vab.i}.
str_eia = "Перечислить
замороженные продукты".
str_eia = "Перечислить Корма для
животных,предметы ухода".
par_1 =
"?".
FOR
EACH depart:
eia_tek
= REPLACE(eia_gen, "@p_1", depart.name_dep).
ind =
str_eia MATCHES "*" + eia_tek + "*".
IF
NOT ind THEN NEXT.
par_1
= depart.name_dep.
LEAVE.
END.
MESSAGE "par_1 =" par_1 {vab.i}.
sql_new
= REPLACE(sql_gen, "@p_1", par_1).
MESSAGE
"sql_new =" SKIP sql_new {vab.i}.
/* Перечислить молочные
продукты, гастрономия, Бакалея,
Кондитерские изделия, Соки и т.д.,
Табачные изделия
а как такое обощение ?
*/
sql_set = REPLACE(sql_gen, "= ~'@p_1~'", "IN
(@p_2)").
MESSAGE
"sql_set =" SKIP sql_set {vab.i}.
str_eia = "Перечислить
молочные продукты, гастрономия, Бакалея,
Кондитерские изделия, Соки и т.д.,
Табачные изделия, Консервация ".
/* str_eia = "Табачные изделия ". */
FOR
EACH depart:
IF
NOT str_eia MATCHES "*" + depart.name_dep + "*" THEN NEXT.
IF
par_2 = "" THEN par_2 = "~'" + depart.name_dep +
"~'".
ELSE
par_2 = par_2 + "," + "~'" + depart.name_dep +
"~'".
END.
sql_new = REPLACE(sql_set, "@p_2", par_2).
MESSAGE
"sql_new =" SKIP sql_new {vab.i}.
OUTPUT
TO eval_sql.p.
PUT
UNFORMATTED sql_new SKIP.
OUTPUT
CLOSE.
/*
COMPILE eval_sql.p NO-ERROR.
IF
ERROR-STATUS:ERROR THEN
DO :
MESSAGE "Ошибка N" ERROR-STATUS:GET-MESSAGE (
ERROR-STATUS:NUM-MESSAGES ) {vab.i}.
END.
ELSE MESSAGE "Успешная компиляция" {vab.i}.
*/
Комментарии: в str_eia задан ея-запрос , а в str_sql его трансляция на SQL (пример).
Автоматические формируемое обобщение этого
примера заносится в sql_new .