Удав написал(а):
Просто обучение программиста азам работы с выборками из БД займет намного меньше времени, чем изобретение такого велосипеда.
Основы работы с выборками всё равно нужно. Как можно работать с выборками, не зная, как они работают? А время на изобретение не нужно - всё уже сделано и работает

Кодер написал(а):
А ведь, старшно подумать, есть еще люди которым удобно использовать Select + проверки синтаксиса самого абапа!
А мне и не страшно так думать. Сам люблю тёплый ламповый SELECT

Удав написал(а):
UKY написал(а):
Да, это велосипед, но он чертовски удобен.
Хм.. а выше Вы написали "не удобно". Вот ведь нестыковочка.
Не удобно лишь в плане проверки синтаксиса.
Но "чертовски удобно", что не нужно постоянно делать туеву хучу всевозможных проверок, удалений дубликатов, проверку на пустые ключи для выборки и были ли данные по выборке по пустым ключам, не нужно каждый раз заново изобретать буферные внутренние таблицы...
Ещё на основе этого метода сделана удобная обвёртка, которая при первом запуске делает выборку по множеству ключей и отдаёт только нужные данные, а при повторных запусках просто отдаёт нужные данные. Очень удобно использовать прямо внутри тела LOOP'а, чтобы выбрать все данные по всем строчках лупаемой таблицы и отдавать данные только по рабочей области этой таблицы.
Удав написал(а):
А теперь упражнение: подумайте, что скажут об этом остальные абаперы в вашей команде?
Конечно, изучать новое всегда сложнее. Но никто же не заставляет принудительно использовать этот велосипед?
А если вдруг нужно будет разобраться как это работает - всегда можно поставить точку останова на SELECT в методе и посмотреть, что он выбирает. Хотя, в большинстве случаях и так понятно, что делает метод с названием SELECT

Удав написал(а):
А теперь - план!
Code:
SELECT
"MANDT" , "BUKRS" , "BELNR" , "GJAHR" , "PAGENO" , "TIMESTMP" , "PAGELG" , "VARDATA"
FROM
"RFBLG"
WHERE
"MANDT" = :A0 AND "BUKRS" = :A1 AND "BELNR" = :A2 AND "GJAHR" = :A3
ORDER BY
"MANDT" , "BUKRS" , "BELNR" , "GJAHR" , "PAGENO"
Как видите, при любом раскладе, для выборки данных из кластера идет выборка всей строки таблы(скажите "гудбай" оптимизации выборок из BSEG и других кластеров)
Большое спасибо! Жаль, что SAP не настолько умён.
Тогда да, для кластерных таблиц подходит только одна мера оптимизации - не делать из них выборок вовсе

Удав написал(а):
нешто и персистенты вам не по нраву будут?
Да, к сожалению, тоже не по нраву

Опять же, там используется * в SELECT, да и ещё вдобавок ООП накручен по самое небалуй...
Удав написал(а):
Цитата:
Вся задумка в анализе кода в том, чтобы дополнительно обезопасить программиста от ошибок ДО запуска кода.
И с этой задаче отлично справляются(внимание, фанфары!) старый добрый SELECT + синтаксическая проверка!
С этим я и не спорю

Но в этом случае каждый раз приходится делать одну и ту же рутиную работу из-за которой код разбухает, становится сложным для понимания ввиду его огромности, да и ещё вдобавок место на сервере поедает, т.к. места больше занимает %)
А ещё как-то встретилась такая интересная выборка, которая проходила проверку синтаксиса, но вываливалась в дамп после запуска:
Code:
SELECT SINGLE belnr gjahr
INTO lv_awkey
FROM bsik
WHERE bukrs = bukrs
AND belnr = belnr
AND gjahr = gjahr.
Видимо, в старых версиях сапа это работало, а в новых уже нет

Так что проверка синтаксиса тоже не всегда работает так, как мы от неё ожидаем

AFH написал(а):
SELECT * INTO CORRESPONDING FIELDS - в SQL-трассировке выглядело как SELECT [выбор только необходимых полей].
Ого, а вот это уже очень интересно! Огромное спасибо!
Запрос:
Code:
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_mkpf
FROM mkpf.
План:
Code:
SELECT
"MBLNR", "MJAHR", "BUDAT"
FROM
"MKPF"
WHERE
"MANDT"=:A0
Обожаю, такие моменты, когда узнаёшь нового об инструменте, который используешь

Минус один к плюс к моему велосипеду

Но остальные плюсы всё же остаются при нём
