【问题标题】:IF THEN causing syntax [OPENEDGE]Syntax error (10713)IF THEN 导致语法 [OPENEDGE] 语法错误 (10713)
【发布时间】:2018-06-05 00:14:07
【问题描述】:

我正在尝试针对 Progress OpenEdge 编写一个 IF/THEN/ELSE,并且在我尝试过的每次迭代中都会出现语法错误。我正在尝试选择一组列并进行一些计算。一个计算正在划分两列,所以我试图检查除数列以防它为零。

根据我使用的 IF/THEN 的变化,我收到以下错误,声明中不喜欢的内容略有不同。

ERROR [HY000] [DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE] 
Syntax error in SQL statement at or about "= 0 THEN ColumnA ELSE (ColumnA " (10713)

这是我当前的迭代(列重命名以保护无辜者。;)

, IF ColumnA = 0 THEN ColumnA 
    ELSE (ColumnA - ColumnB) / ColumnB
    END as ProfitMargin

我从别名列(POS.ColumnA 和 POS.ColumnB)开始,并在某处读到完全限定的列可能会导致问题,因此我删除了别名。

我试过IF POS.ColumnA = 0 THEN 0。我还尝试输入ELSE DO: 我在THEN ColumnA 之后添加了END。我已将完整的计算放在另一组括号中。

我将自己置于 S.O. 的怜悯之下。我错过了什么?

【问题讨论】:

    标签: openedge progress-db


    【解决方案1】:

    我在 OpenEdge SQL 文档的任何地方都没有看到 IF/THEN/ELSE:

    https://documentation.progress.com/output/OpenEdge117/openedge117/#page/dmsrf/preface.html#

    或:

    https://documentation.progress.com/output/OpenEdge117/openedge117/#page/dmsrf%2Fsearch-condition.html%23

    DO:...结束。某种语法是 4gl 语法——你不能在 SQL 引擎中使用它。

    【讨论】:

    • 我忘了提到我确实参考了这个帮助文档:documentation.progress.com/output/ua/OpenEdge_latest/…
    • 来自“ABL 参考”。 ABL 是“4gl”的花哨的新名称,它与 SQL 无关。您上面的错误显然来自 SQL 驱动程序。因此,基本上,您正在尝试在 SQL 请求中使用 4gl 语法。那是行不通的。这就像在 COBOL 语句的中间插入 FORTRAN。
    • 为了让事情变得混乱,4gl (ABL) 中嵌入了一些有限的 SQL。因此,有时会部分支持相反的情况。但请记住,我说过 4gl 中的有限 SQL 支持。甚至不支持任何花哨的东西。而且您使用的是外部 SQL-92,而不是 4gl。所以还是不行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2015-08-20
    • 2019-12-19
    • 2017-07-15
    • 2016-02-27
    • 2022-11-11
    相关资源
    最近更新 更多