首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以在a中使用IF语句对每个正在进行中的-4GL?

是否有一种方法可以在a中使用IF语句对每个正在进行中的-4GL?
EN

Stack Overflow用户
提问于 2020-12-15 19:41:01
回答 2查看 519关注 0票数 0

我正在将一些SQL代码转换为Advancement4GL。我现在正在编写的特定代码有很多可能的变量插入,例如,有3个复选框可以被选中,并且每个选择都添加了一个“和ind_sit_doc IN",等等。

我想做的是这样的事情:

代码语言:javascript
复制
FOR EACH doc-fiscal USE-INDEX dctfsc-09
        WHERE doc-fiscal.dt-docto >= pd-data-1
        AND doc-fiscal.dt-docto <= pd-data-2
        AND doc-fiscal.cod-observa <> 4
        AND doc-fiscal.tipo-nat <> 3
        AND doc-fiscal.cd-situacao <> 06
        AND doc-fiscal.cd-situacao <> 22
        AND (IF pc-ind-sit-doc-1 = 'on' THEN: doc-fiscal.ind-sit-doc=1) NO-LOCK,
            EACH natur-oper USE-INDEX natureza
            WHERE doc-fiscal.nat-operacao = natur-oper.nat-operacao NO-LOCK:

只有当变量以某种方式读取时,才会读取if部分。有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-15 21:00:31

是的,您可以使用(大致如nwahmaet所示)。

但在一个非平凡的查询中,这是一个非常非常糟糕的想法。您很可能会强制进行表扫描,并且很可能会将所有数据发送到客户端进行选择。那会很痛苦的。最好将IF然后EACH移到WHERE子句之外,并为每个语句实现两个不同的语句。

如果您对此的关注是,您将重复每个查询的主体,那么您可以使用查询。就像这样:

代码语言:javascript
复制
define query q for customer.

if someCondition = true then
  open query q for each customer no-lock where state = "ma".
 else
  open query q for each customer no-lock where state = "nh".

get first q.

do while available customer:

  display custNum state.
  get next q.

end.

这将是,比一个小桌子更有效的

您也可以完全动态地构建所需的WHERE子句作为字符串,但这涉及到使用句柄,而且更复杂。但是,如果这听起来很有吸引力,请在文档中准备查询。

票数 2
EN

Stack Overflow用户

发布于 2020-12-15 20:17:11

您可以将IF语句添加到“为每个语句”中。你必须有完整的如果..。然后..。不过还有别的事。

例如:

代码语言:javascript
复制
FOR EACH customer WHERE (IF discount > 50 THEN state = 'ma' ELSE state = ''):
  DISPL name state discount.
END.

尽管如此,该条件将不会用于索引选择,而只应用于客户端(如果您使用的是网络数据库连接,这是不好的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65312615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档