169 похожих чатов

Я имею ввиду, что если разрешить другие вторичные ключи, то

создаётся generic тип.
А как этому типу можно другие ключи добавить?

19 ответов

18 просмотров
Iurii-Slobodchikov Автор вопроса

Такая строчка не канает.

Iurii-Slobodchikov Автор вопроса

А вот и продолжение вопроса о добавлении дополнительных вторичных ключей, раз никто не знает, можно ли так делать или нет. Предлагаю такой костыль: 1. Есть стандартная таблица с типом MSEG без всяких вторичных ключей. 2. Создаём другой тип MY_MSEG и навешиваем туда другие неуникальные вторичные ключи. 3. Присваиваем MY_MSEG = MSEG и работаем со вторичными ключами MY_MSEG. Внимание, вопрос: будет ли происходить физическое копирование данных таблицы MSEG в таблицу MY_MSEG? Или данные будут браться по ссылке и будут только индексы пересчитываться при первом использовании?

Iurii-Slobodchikov Автор вопроса
Alexandr Zhuravlev
будет

а это точно-преточно?

Iurii Slobodchikov
а это точно-преточно?

Ну глянь в профилировщике памяти, раз не веришь. 🙂

Iurii Slobodchikov
а это точно-преточно?

Точно. Как только начнёшь юзать её - скопируется

Iurii Slobodchikov
а это точно-преточно?

Смотри про table sharing https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-us/abenitab_perfo.htm

Iurii Slobodchikov
А вот и продолжение вопроса о добавлении дополните...

костыль в таком случае обычно делается так - тип создаем только с полями для индекса/индексов + поле ref to оригинальный тип строки

Iurii-Slobodchikov Автор вопроса
Alexandr Zhuravlev
костыль в таком случае обычно делается так - тип с...

да, тоже так иногда делаю, но не очень удобно так делать. нам бы вторичных ключей навешать да юзать их...

Iurii-Slobodchikov Автор вопроса
Alexandr Zhuravlev
костыль в таком случае обычно делается так - тип с...

да, я тоже иногда такой костыль использую. о нём, кстати, мало кто знает. ещё похожий интересный способ есть, если нужно по одной и той же таблице делать LOOP с одинаковыми WHERE (и не фильтровать строки 2 раза, а только один раз): DATA ltr_mseg TYPE REF TO mseg. DATA lt_mara TYPE HASHED TABLE OF mara WITH UNIQUE KEY matnr. LOOP AT mseg ASSIGN FIELD-SYMBOL<ls_mseg> WHERE shkzg = 'H' AND koart = 'D' OR zeile < 10 OR mkpf CP '*400*' AND menge BETWEEN 100 AND 1000. INSERT REF #( <ls_mseg> ) INTO TABLE ltr_mseg. " Собираем ключи для выборки INSERT VALUE #( matnr = <ls_mseg>-matnr ) INTO TABLE lt_mara. ENDLOOP. " Выбираем справочные данные по ключам из выборки IF NOT lt_mara[] IS INITIAL. SELECT * FROM mara FOR ALL ENTRIES IN @lt_mara INTO CORRESPONDING FIELDS OF @lt_mara. ENDIF. LOOP AT ltr_mseg REFERENCE INTO DATA(lrs_mseg). " Читаем справочные данные по ключам READ TABLE lt_mara ASSIGNING FIELD-SYMBOL(<ls_mara>) WITH TABLE KEY matnr = lrs_mseg->matnr. CHECK sy-subrc = 0. " И меняем только те, данные, которые были выше в WHERE lrs_mseg->menge = <ls_mara>-menge. ENDLOOP.

Iurii-Slobodchikov Автор вопроса
Iurii Slobodchikov
да, я тоже иногда такой костыль использую. о нём, ...

Ну и раз меня сегодня чего-то пропёрло, то ещё могу сказать что можно делать, например, хэшированные таблицы с ключом-ссылкой. И можно по этой ссылке делать чтение по ключу. Тоже бывает иногда полезным. Но нужно быть осторожным - ссылки могут разыменовываться)

Iurii Slobodchikov
да, я тоже иногда такой костыль использую. о нём, ...

Я не понял смысла, смысла честно: судя по коду, можно сделать всё в первом лупе.

Iurii-Slobodchikov Автор вопроса
Vladimir K
Я не понял смысла, смысла честно: судя по коду, мо...

В первом лупе выбираем ключи для mara, потом читаем mara, а потом заполняем mseg из mara

Iurii Slobodchikov
В первом лупе выбираем ключи для mara, потом читае...

Пропустил кусок теста, сорян. Хорошо придумано. 👍

Vladimir K
Я не понял смысла, смысла честно: судя по коду, мо...

смысл в 1 лупе собрать уникальные поля по условиям потом по собранному сделать select * for all entries во втором лупе записать выбранное в оригинальную таблицу в те же строки, что по условиям из первого цикла, и чтобы не гонять условие 2 раза в первом цикле запоминаем ссылки на нужные строки и во втором гоняем уже только их безусловно

Alexandr Zhuravlev
смысл в 1 лупе собрать уникальные поля по условиям...

Да, спасибо, я уже понял, что пропустил кусок текста про "выбрать до второго лупа"

Iurii Slobodchikov
да, я тоже иногда такой костыль использую. о нём, ...

Только ltr_mseg нельзя делать уникальной по ключам индекса, если они же не являются ключом исходной таблицы

Iurii-Slobodchikov Автор вопроса
Vladimir K
Только ltr_mseg нельзя делать уникальной по ключам...

а зачем её делать уникальной? это же просто ссылки на исходную таблицу

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта