SELECT Ambiguous/Invalid 列运行时错误
SELECT Ambiguous/Invalid Column runtime error
当我 运行 我的 ABAP 程序时,我在 SELECT...
行收到一个 运行 时间错误 DBIF_DSQL2_SQL_ERROR
,错误文本为:
invalid column error and ambiguous column error for VBAK and VBAP tables and the VBELN column
ABAP 代码:
*&---------------------------------------------------------------------*
*& Report ZSAM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZSAM.
DATA: BEGIN OF wa,
vbeln TYPE VBAK-VBELN,
vtweg TYPE VBAK-VTWEG,
posnr TYPE VBAP-POSNR,
matnr TYPE VBAP-MATNR,
vrkme TYPE VBAP-VRKME,
END OF wa.
WRITE: 'vbeln', 'vtweg', 'posnr', 'matnrr','vrkme'.
EXEC SQL PERFORMING loop_output.
SELECT VBAK-VBELN, VBAK-VTWEG, VBAP-POSNR, VBAP-MATNR, VBAP-VRKME
INTO :wa
FROM VBAK INNER JOIN VBAP on VBAK-VBELN = VBAP-VBELN
ENDEXEC.
FORM loop_output.
WRITE: / wa-vbeln, wa-vtweg, wa-posnr, wa-matnr, wa-vrkme.
ENDFORM.
代码中可能存在什么问题以及如何解决?
您需要使用 .而不是 - 作为分隔符。您正在编写本机 SQL,因此您必须应用特定于数据库的规则。
EXEC SQL PERFORMING loop_output.
SELECT VBAK.VBELN, VBAK.VTWEG, VBAP.POSNR, VBAP.MATNR, VBAP.VRKME
INTO :wa
FROM VBAK INNER JOIN VBAP on VBAK.VBELN = VBAP.VBELN
ENDEXEC.
对于这样一个简单的查询,您不应该使用原生 SQL。正如你写的,你当时其实是在学习ABAP,然后马上切换到OpenSQL.
SELECT vbak~vbeln, vbak~vtweg, vbap~posnr, vbap~matnr, vbap~vrkme
INTO @DATA(l_work_area)
FROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbeln.
WRITE: / l_work_area-vbeln, l_work_area-vtweg, l_work_area-posnr, l_work_area-matnr, l_work_area-vrkme.
ENDSELECT.
当我 运行 我的 ABAP 程序时,我在 SELECT...
行收到一个 运行 时间错误 DBIF_DSQL2_SQL_ERROR
,错误文本为:
invalid column error and ambiguous column error for VBAK and VBAP tables and the VBELN column
ABAP 代码:
*&---------------------------------------------------------------------*
*& Report ZSAM
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZSAM.
DATA: BEGIN OF wa,
vbeln TYPE VBAK-VBELN,
vtweg TYPE VBAK-VTWEG,
posnr TYPE VBAP-POSNR,
matnr TYPE VBAP-MATNR,
vrkme TYPE VBAP-VRKME,
END OF wa.
WRITE: 'vbeln', 'vtweg', 'posnr', 'matnrr','vrkme'.
EXEC SQL PERFORMING loop_output.
SELECT VBAK-VBELN, VBAK-VTWEG, VBAP-POSNR, VBAP-MATNR, VBAP-VRKME
INTO :wa
FROM VBAK INNER JOIN VBAP on VBAK-VBELN = VBAP-VBELN
ENDEXEC.
FORM loop_output.
WRITE: / wa-vbeln, wa-vtweg, wa-posnr, wa-matnr, wa-vrkme.
ENDFORM.
代码中可能存在什么问题以及如何解决?
您需要使用 .而不是 - 作为分隔符。您正在编写本机 SQL,因此您必须应用特定于数据库的规则。
EXEC SQL PERFORMING loop_output.
SELECT VBAK.VBELN, VBAK.VTWEG, VBAP.POSNR, VBAP.MATNR, VBAP.VRKME
INTO :wa
FROM VBAK INNER JOIN VBAP on VBAK.VBELN = VBAP.VBELN
ENDEXEC.
对于这样一个简单的查询,您不应该使用原生 SQL。正如你写的,你当时其实是在学习ABAP,然后马上切换到OpenSQL.
SELECT vbak~vbeln, vbak~vtweg, vbap~posnr, vbap~matnr, vbap~vrkme
INTO @DATA(l_work_area)
FROM vbak INNER JOIN vbap ON vbak~vbeln = vbap~vbeln.
WRITE: / l_work_area-vbeln, l_work_area-vtweg, l_work_area-posnr, l_work_area-matnr, l_work_area-vrkme.
ENDSELECT.