From 1811b24fb8308286f1f46a5c6b2715645489e844 Mon Sep 17 00:00:00 2001 From: WuRangyu Date: Tue, 1 Sep 2026 15:53:07 +0800 Subject: [PATCH] =?UTF-8?q?docs(log):=20@=E8=BD=AC=E4=B9=89=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E6=96=B0OpenSQL=E8=AF=AD=E6=B3=95=E6=96=B0=E5=9D=91(?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E9=80=97=E5=8F=B7+INTO=E5=89=8D=E7=BD=AE,=20?= =?UTF-8?q?2026-08-07=E5=AE=9E=E6=B5=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- log/adt-nw740-open-sql-consistency.md | 29 ++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/log/adt-nw740-open-sql-consistency.md b/log/adt-nw740-open-sql-consistency.md index 3696975..c7d713b 100644 --- a/log/adt-nw740-open-sql-consistency.md +++ b/log/adt-nw740-open-sql-consistency.md @@ -1,7 +1,7 @@ --- title: "NW 7.40 Open SQL @ 转义一致性错误" created: 2026-08-05 -updated: 2026-08-05 +updated: 2026-08-07 type: error tags: [adt, sap, error, nw740, open-sql, syntax] adt_endpoint: syntax-check @@ -87,3 +87,30 @@ SELECT * FROM ztable WHERE field = @lv_var INTO TABLE @lt_data. " 全部用@ ## 相关错误 - [[adt-set-source-500]] — 传输请求无对象导致写入失败 + +## 2026-08-07 实测补充:全 @ 场景强制 new OpenSQL 语法(新坑) + +**症状**:已修复 @ 一致性(INTO 目标补 @)后,又报新错误: +``` +If host variables are escaped using @, new OpenSQL must used +``` + +**根因**:@ 转义属于"新 OpenSQL"语法体系。一旦语句用了 @,整条语句必须完全遵循新 OpenSQL 语法规则: +- **字段列表必须逗号分隔**(旧式空格分隔报错):`SELECT carrid, connid, fldate FROM sflight` +- **INTO 子句前置**(在 FROM/WHERE 之前):`SELECT f1, f2 FROM tab INTO TABLE @lt_data WHERE ...` +- 旧式写法 `SELECT carrid connid fldate FROM sflight INTO TABLE lt_data`(无逗号)在全 @ 场景下报错 + +**验证示例(ZBC400_REVIEW_DEMO 2026-08-07 实测,syntax-check 全绿)**: +```abap +" ✅ 正确 — 新 OpenSQL 全 @:字段逗号分隔 + INTO 前置 + 全部 @ +SELECT carrid, connid, fldate, seatsmax, seatsocc + FROM sflight + INTO TABLE @gt_result + WHERE carrid IN @s_carrid + AND fldate IN @s_date. + +" ❌ 同语句 INTO 不带 @:When escaped, all host variables must be escaped using @ +" ❌ 字段无逗号(旧式空格分隔):If host variables are escaped using @, new OpenSQL must used +``` + +**经验**:评审/优化代码时,只要目标系统是 7.40 SP05+ 且采用 @ 风格,直接按新 OpenSQL 规范写(字段逗号分隔 + INTO 前置 + 全 @),一次通过。质检判断"INTO TABLE 目标是豁免位置"**不成立**(2026-08-07 实测推翻),@ 必须全局一致。