如何在数据提供者中使用MAX()和WHERE?查询peduf='SP'的最大pedcod
修正代码与报错解决
首先,咱们来分析你遇到的报错:error src0110: Missing group start brace '{' 和 error src0115: Invalid expression after group definition,这说明你写的代码语法结构完全不符合要求——你把聚合查询逻辑和赋值操作直接混在一起,语法规则不允许这么写。
需求对应的正确代码写法
根据你的需求(获取peduf等于"SP"的最大pedcod数值,若需要还可将其加1),分两种场景给你修正:
场景1:仅查询最大pedcod值(匹配你的报错对应的Progress 4GL环境)
DEFINE VARIABLE max_pedcod AS INTEGER NO-UNDO. -- 从Tpedpro表中筛选peduf为SP的记录,取最大的pedcod存入变量 SELECT MAX(pedcod) INTO max_pedcod FROM Tpedpro WHERE peduf = "SP". -- 输出结果 DISPLAY max_pedcod.
场景2:获取最大值后加1(生成新的pedcod候选值)
DEFINE VARIABLE max_pedcod AS INTEGER NO-UNDO. DEFINE VARIABLE new_pedcod AS INTEGER NO-UNDO. SELECT MAX(pedcod) INTO max_pedcod FROM Tpedpro WHERE peduf = "SP". -- 对最大值执行加1操作 new_pedcod = max_pedcod + 1. DISPLAY new_pedcod.
如果你用的是标准SQL(比如MySQL、Oracle等)
如果你的代码是标准SQL环境下的写法,直接用聚合函数运算即可:
-- 查询最大pedcod SELECT MAX(pedcod) AS max_pedcod FROM Tpedpro WHERE peduf = 'SP'; -- 查询加1后的新值 SELECT MAX(pedcod) + 1 AS new_pedcod FROM Tpedpro WHERE peduf = 'SP';
原代码的问题根源
你原来的写法把聚合函数max(pedcod)直接放在WHERE条件后,还紧跟赋值逻辑的大括号,这完全不符合数据库查询语言的语法规范——聚合查询需要通过SELECT语句明确指定,结果要么直接返回,要么存入变量后再进行后续运算,不能把不同逻辑环节混写在一起。
内容的提问来源于stack exchange,提问作者Meliodas
相关产品推荐
相关产品推荐

