【发布时间】:2021-07-30 17:16:45
【问题描述】:
我想根据表格形成一个动态的where子句。如果同一列存在 'OR' 子句必须添加,否则它必须是 'AND'。我没有做到这一点,因为当存在相同的列时它不起作用
结果:
Where = ((COL1='8715') OR (COL1 ='4100)) and ((COL2 BETWEEN 10 AND 20 ) OR (COL2 >=5))
代码:
lv_set := 'OR'
FOR i in 1..:lv_count
DO
if (:OPERATOR[:i] = 'EQ')
then
lv_where = '(' || lv_where || :FIELD[:i] || ' = ' || :LOW[:i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'BT')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' BETWEEN ' || :LOW[:i] || ' AND ' || :HIGH[i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'LT')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' < ' || :LOW[:i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'GT')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' > ' || :LOW[:i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'LE')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' <= ' || :LOW[:i] || ')' || :lv_set;
elseif (:OPERATOR[:i] = 'GE')
then
lv_where = lv_where || '(' || :FIELD[:i] || ' >= ' || :LOW[:i] || ')' || :lv_set;
end if;
END FOR;
【问题讨论】:
-
这太疯狂了。我希望您不是在他们(或您)在生产中做此类事情的组织中工作。您(和您的团队)在所有情况下都能正确使用此数据模型的可能性为零。甚至不会尝试触摸它。