簡體   English   中英

OpenSQL與列之間的比較

[英]OpenSQL with comparison between columns

我可以在OpenSQL中比較表的列嗎?

當前代碼如下:

  SELECT SINGLE menge wemng ebeln ebelp
    INTO (eket-menge,
          eket-wemng,
          eket-ebeln,
          eket-ebelp)
    FROM eket
    WHERE ebeln = ekpo-ebeln
      AND ebelp = ekpo-ebelp.

  IF eket-menge NE eket-wemng.

我想避免撤回menge = wemng ,但這行不通:

  SELECT menge wemng ebeln ebelp
    INTO (eket-menge,
          eket-wemng,
          eket-ebeln,
          eket-ebelp)
    FROM eket
    WHERE ebeln = ekpo-ebeln
      AND ebelp = ekpo-ebelp
      AND menge <> wemng.

ABAP認為wemng應該是一個變量。

我該怎么做?

在WHERE條件下比較兩列時,應使用列選擇器(〜)。 這是設計使然。

ABAPDOCU說:

列選擇器

字〜。 數據庫表(dbtab)的列(col)可以通過dbtab〜col在SELECT語句中進行尋址。 如果在多個不同的數據庫表中出現了列名,或者 WHERE條件下 進行比較時將兩列相互比較,則在訪問多個數據庫表時,必須使用這種類型的尋址。

因此,在您的情況下:

SELECT menge wemng ebeln ebelp
    INTO (eket-menge,
          eket-wemng,
          eket-ebeln,
          eket-ebelp)
    FROM eket
    WHERE ebeln = ekpo-ebeln
      AND ebelp = ekpo-ebelp
      AND menge <> eket~wemng.
...

請檢查以下查詢:

  SELECT menge wemng ebeln ebelp
  INTO (eket-menge,
        eket-wemng,
        eket-ebeln,
        eket-ebelp)
  FROM eket
  WHERE ebeln = ekpo-ebeln
    AND ebelp = ekpo-ebelp
    AND menge <> eket~wemng.

但是這時您得到錯誤:

錯誤的嵌套:在語句“ ENDIF”之前,“ SELECT”引入的控制結構必須以“ ENDSELECT”結束。

因此,您應該創建一些內部表來處理此問題

  SELECT menge wemng ebeln ebelp
  INTO TABLE lt_eket
  FROM eket
  WHERE ebeln = ekpo-ebeln
    AND ebelp = ekpo-ebelp
    AND menge <> eket~wemng.

或使用SELECT SINGLE

  SELECT SINGLE menge wemng ebeln ebelp
  INTO (eket-menge,
        eket-wemng,
        eket-ebeln,
        eket-ebelp)
  FROM eket
  WHERE ebeln = ekpo-ebeln
    AND ebelp = ekpo-ebelp
    AND menge <> eket~wemng.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM