无法在 AS400 中运行 SQL 查询,遇到 Invalid Token 错误
Posted
技术标签:
【中文标题】无法在 AS400 中运行 SQL 查询,遇到 Invalid Token 错误【英文标题】:Not able to run SQL queries in AS400, run into Invalid Token errors 【发布时间】:2013-05-16 12:46:09 【问题描述】:在 AS400 中,我如何对字段执行算术运算(如 +、-)。
对于查询Select id, sum(field1+field2) as Total from table
group by id
,得到以下德语错误消息“[IBM][System
i Access ODBC-Treiber][DB2 für i5/OS]SQL0104 - Token & ungültig。
Gültige 令牌:+ - AS <IDENTIFIER>
。” 英文翻译是什么
像“[IBM] [System i Access ODBC 驱动程序] [DB2 for i5/OS] SQL0104 -
令牌<END Instruction>
无效。有效令牌:CL AS IN LOG OUT DATA
<identifier>
。”
对于查询 Select count(*) from (select distinct field1 from table where field2="abc"
,收到以下错误消息“[IBM][System i Access ODBC-Treiber][DB2 für i5/OS]SQL0104 - Token <ENDE DER ANWEISUNG>
ungültig.Gültige Token: AS CL IN LOG OUT数据<IDENTIFIER>
。”
对于带有子查询的查询得到以下错误消息
"[IBM][System i Access ODBC-Treiber][DB2 für i5/OS]SQL0104 - 令牌和 ungültig。Gültige 令牌:<
>
= <>
<=
!<
!>
!=
>=
¬<
¬>
¬=
没有。”
谁能告诉我我的 sql 查询出了什么问题。
【问题讨论】:
看起来你正在向我们展示伪代码,而查询可能有其他列名和表名。通过创建伪代码,您似乎引入了新的语法错误。请向我们展示您的实际代码,以便我们准确诊断您的实际问题。 我真的很抱歉那个伪代码。此客户端数据库几乎没有敏感数据。我的查询(使用虚拟名称)如下所示“从 tbl1 中选择 EDS,sum(val(SDS)) as totalh where EDS & '' like '201305[0-9][0-9]' and siteds in(select distinct来自 tbl2 的站点,其中 ('1234') 和 PERIOD = 201305) 中的 H_04 按 EDS 顺序按 EDS 分组”。问题不在于保留关键字 Table。必须使用 & 和两个单引号 (''),因为字段 EDS 是数字类型。 【参考方案1】:TABLE
是保留字。 SQL Reference: Reserved schema names and reserved words.
SQL Reference: Identifiers
查询可以重写为:
SELECT ID, SUM(FIELD1 + FIELD2) AS TOTAL FROM "TABLE" GROUP BY ID
SELECT COUNT(*) FROM (SELECT DISTINCT FIELD1 FROM "TABLE" WHERE FIELD2 = 'ABC')
更新
DB/2 for i 不支持您的数字到字符转换方法或 LIKE 查询中使用的字符比较类型。
查询可以重写为:
SELECT eds, SUM(INT(sds)) AS totalh
FROM tbl1
WHERE eds BETWEEN 20130500 AND 20130599
AND siteds IN (
SELECT DISTINCT site
FROM tbl2
WHERE H_04 IN ('1234') AND PERIOD = 201305
)
GROUP BY eds
ORDER BY eds
您可能需要使用DEC
而不是INT
,具体取决于字段sds
的定义。
SQL 参考:
- INT
- DEC
- BETWEEN
【讨论】:
这是发布内容的一个很好的答案。但是根据给出的通用名称和他显示的错误问题,在我看来,SQL 代码在复制错误后变成了伪代码。所以我们可能一直在关注红鲱鱼。 @James,非常感谢您的回答。我将进行修改并让客户对此进行测试。我会尽快给你更新。 @James,非常感谢您的回答。你是一个绝对的天才。它运作良好。谢谢你-Sri。【参考方案2】:表名真的是“表”吗?
看起来很奇怪,如果我按原样使用您指定的 SQL 语句,我会得到同样的错误...但是如果我将“table”更改为“table1”,它只会抱怨它找不到“table1” '。
【讨论】:
我会说你走在正确的道路上。看来他在发布之前更改了表名。在第二个查询中,看起来他最初有类似sum(field1 & field2)
的东西,但当他重新输入时,&
变成了 +
。以上是关于无法在 AS400 中运行 SQL 查询,遇到 Invalid Token 错误的主要内容,如果未能解决你的问题,请参考以下文章