New SQL Syntax

SAP ABAP New Syntax

С выпуском SAP NetWeaver 7.4 компания SAP представила новый синтаксис SQL, который был дополнительно обновлен в SAP NetWeaver 7.5.  Open SQL является подмножеством стандартного SQL и содержит ограниченные функции по сравнению с функциями стандартного SQL. В SAP NetWeaver 7.4 и 7.5 компания SAP расширила возможности Open SQL.

Ниже приведены некоторые из важных дополнений, представленных в Open SQL:

Inline declarations - Встроенные объявления
В SAP NetWeaver 7.4 компания SAP представила встроенные объявления, которые позволяют вам объявлять объекты данных при необходимости, а не объявлять объект данных заранее. До SAP NetWeaver 7.4 объект данных необходимо было объявить следующим образом, прежде чем к нему можно будет получить доступ с помощью операторов ABAP:
DATA lv_date TYPE sy-datum.
lv_date = sy-datum.
Начиная с SAP NetWeaver 7.4, вы можете выполнять декларацию данных во встроенном режиме и избегать лишних строк кода следующим образом:
DATA(lv_date) = sy-datum.
Поддержка встроенных объявлений распространяется на операторы SQL, поэтому вместо предварительного определения структур и внутренних таблиц вы можете объявить целевое поле при чтении данных из базы данных. Например, в примере ниже показан традиционный способ написания кода.
REPORT ZDEMO_EXAMPLE.
TYPES :	BEGIN OF gty_s_makt,
          matnr TYPE matnr,
          spras TYPE spras,
          maktx TYPE maktx,
        END OF gty_s_makt.
        
DATA gt_makt TYPE STANDARD TABLE OF gty_s.

PARAMETERS p_matnr TYPE matnr.

SELECT matnr spras maktx 
	FROM makt 
    INTO TABLE gt_makt 
    WHERE matnr EQ p_matnr.
Начиная с SAP NetWeaver 7.4, вы можете сэкономить значительные усилия, не определяя заранее тип структуры и внутреннюю таблицу. Код  можно записать, как показано ниже.

PARAMETERS p_matnr TYPE matnr.
SELECT matnr, spras, maktx 
	FROM makt 
	WHERE matnr EQ @p_matnr
	INTO TABLE @DATA(it_makt).
В предыдущем примере мы используем новый синтаксис SQL, в котором поля таблицы разделяются запятыми, а все переменные хоста экранируются с помощью escape-символа @. Переменные хоста — это объекты данных программы, которые следует экранировать, чтобы сообщить компилятору, что мы не говорим о полях в базе данных.

Strict mode - Строгий режим
При использовании нового синтаксиса SQL средство проверки синтаксиса запускается в строгом режиме, чтобы гарантировать соблюдение всех новых правил синтаксиса. Строгий режим помогает поддерживать обратную совместимость, заставляя вас писать инструкцию либо полностью с использованием нового синтаксиса, либо полностью с использованием старого синтаксиса, но не смешивая оба варианта.

INTO clause
Предложение INTO перемещено в конец инструкции. Переместив предложение INTO в конец оператора, SAP может еще больше улучшить оператор Open SQL, добавив поддержку новых функций.

CASE statement
Вы можете встроить оператор CASE в оператор SQL, а не извлекать данные в программу, а затем сравнивать данные с помощью оператора CASE.

Ниже показан пример оператора, в котором пол сотрудника проверяется с помощью оператора CASE.
SELECT 	name, age,
	CASE  WHEN sex = 1 THEN @male
          WHEN sex = 2 THEN @female
          ELSE @others
	END AS group
  FROM zemployee
  ORDER BY group
  INTO TABLE @DATA(lt_employee).
Арифметические операции
Новый синтаксис SQL позволяет выполнять арифметические операции внутри инструкции SQL. В версиях до SAP NetWeaver 7.4 вам нужно будет загрузить данные в программу, а затем выполнить арифметические операции с данными. Однако с новым синтаксисом SQL вы можете выполнять арифметические операции внутри операторов SQL.

В следующем операторе мы выполняем арифметическую операцию внутри оператора SQL — в данном случае считываем результат умножения fkimg (количества) и netwr (чистой стоимости) позиции в документе фактуры:
SELECT SINGLE fkimg * netwr
	FROM vbrp
	WHERE 	vbeln EQ @p_vbeln
		AND posnr EQ @p_posnr
        INTO @DATA(total).

Комментарии