Мы переходим на HANA, и сторонняя компания занимается исправлением нашего кода. Часть из них автоматизирована. Я вижу, где было сделано это изменение кода:
*{ REPLACE DEVK9A1ZZH
* SELECT SINGLE maktx
* INTO tab-maktx
* FROM makt
* WHERE matnr EQ strmatnr
* AND spras EQ sy-langu.
SELECT maktx
UP TO 1 ROWS
INTO tab-maktx
FROM makt
WHERE matnr = strmatnr
AND spras = sy-langu ORDER BY maktx.
ENDSELECT.
Я думал, что SELECT SINGLE
всегда предпочтительнее SELECT...UP TO 1 ROWS...ENDSELECT.
и что ORDER BY
ничего не делает, когда получается только одна запись. Кажется, они заменяют все SELECT SINGLE
в нашем коде. Что в исходном коде моего коллеги несовместимо с HANA?
SINGLE
иUP TO
, ноORDER BY
говорит, что если у вас есть более одной записи, возвращаемой этим предложением WHERE, то упорядочите по этому одному полю и возьмите 1 верхнюю запись, я бы сказал, что это ОЧЕНЬ важно дляSINGLE
илиUP TO
, если только вы не уверены, что возвращается только одна запись, прежде чемUP TO
/SINGLE
будет применена к набору записей. В противном случае вы просто возьмете случайноеmaktx
из промежуточного результата (до примененияUP TO
). - person JNevill   schedule 23.05.2018UP TO...ORDER BY
гарантирует получение первойmaktx
записи. Я согласен с @András, что это действительно не должно иметь значения, в данном конкретном случае, поскольку выбор уже выполнен с использованием всех ключевых полей. - person gkubed   schedule 23.05.2018SINGLE
/UP TO
, но, вероятно, он необходим компилятору, чтобы гарантировать, что возвращается только скалярный результат. Я не пишу достаточно abap, чтобы знать, что это было бы невозможно, если бы это было опущено. Я просто говорю из контекста РСУБД, гдеSINGLE
/UP TO
иORDER BY
присутствуют, потому что: лучше перестраховаться, чем потом сожалеть и проверить будущее для следующего динь-донга, который появляется и изменяет условие WHERE, чтобы не выбирать ключи. - person JNevill   schedule 23.05.2018