Выборка данных с последующим обновлением.

Автор Uukrul, Лютий 19, 2009, 02:15:59 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

Не понял ....
Есть табличка обьявленая как DATA: gt_mseg TYPE STANDARD TABLE OF z_mkpf_mseg WITH HEADER LINE.
z_mkpf_mseg  - это ракурс, вьюха.

И есть выборка из этой вьюхи

SELECT
         werks AS werks budat AS budat  matnr AS matnr
         lifnr AS lifnr shkzg AS shkzg
         SUM( menge ) AS menge
    "APPENDING CORRESPONDING FIELDS OF TABLE gt_mseg
    APPENDING TABLE gt_mseg
    FROM mseg
    WHERE
      werks IN  so_werks  AND
      budat => so_budat-low  AND   "!!! (может быть просто >) ???
      matnr IN  so_matnr AND
      lifnr IN  so_lifnr  AND
      sobkz = 'K'
      GROUP BY werks budat matnr lifnr shkzg.


Так вроде бы типы сходятся.


Uukrul

Цитата: Паганель від Червень 02, 2009, 05:02:35 ПП
Пробывал  и так:
DATA: gt_mseg like z_mkpf_mseg OCCURS 10000 WITH HEADER LINE.
Ну вообще-то я всегда думал что если SELECT * APPENDING TABLE <>, а вот если поля перечисляешь тогда, типа APPENDING CORRESPONDING FIELDS OF TABLE или у тебя в z_mkpf_mseg только поля которые ты указал:
werks AS werks
budat AS budat 
matnr AS matnr
lifnr AS lifnr
shkzg AS shkzg
SUM( menge ) AS menge

В такой последовательности и других нет?

Паганель

#53
Цитата: Uukrul від Червень 02, 2009, 05:32:31 ПП
Ну вообще-то я всегда думал что если SELECT * APPENDING TABLE <>, а вот если поля перечисляешь тогда, типа APPENDING CORRESPONDING FIELDS OF TABLE или у тебя в z_mkpf_mseg только поля которые ты указал:
werks AS werks
budat AS budat  
matnr AS matnr
lifnr AS lifnr
shkzg AS shkzg
SUM( menge ) AS menge

В такой последовательности и других нет?

Есть и другие поля, просто что бы оптимизировать, я использую APPENDING TABLE.

Uukrul

Цитата: Паганель від Червень 02, 2009, 05:46:28 ПП
Есть и другие поля, просто что бы оптимизировать, я использую APPENDING TABLE.
Ну посмотри что на выходе, для пары записей...

Паганель

Не понял, выборка валится сразу .....

Прийдется использовать INTO CORRESPONDING FIELDS OF TABLE
Хотя есть сомнения по поводу оптимальности такого кода.

Uukrul

Цитата: Паганель від Червень 02, 2009, 05:59:55 ПП
Не понял, выборка валится сразу .....
Ну так типизация же нарушена... конечно оно валится.

Паганель

Я тут немного "покурил травы" котрую индусы предлагали, расслабился, и точно туплю.... мой запрос возвратит только werks, budat, matnr ... но никак не струтктуру   z_mkpf_mseg, оттого и валится

Ссори, туплю ...

Martha

Цитата: Паганель від Червень 02, 2009, 05:02:35 ПП
Пробывал  и так:
DATA: gt_mseg like z_mkpf_mseg OCCURS 10000 WITH HEADER LINE.

Есть табличка обьявленая как DATA: gt_mseg TYPE STANDARD TABLE OF z_mkpf_mseg WITH HEADER LINE.


а в чем разница для таблицы в этих двух определениях?

Uukrul

Цитата: Martha від Липень 30, 2009, 02:44:11 ПП
Есть табличка обьявленая как DATA: gt_mseg TYPE STANDARD TABLE OF z_mkpf_mseg WITH HEADER LINE.

а в чем разница для таблицы в этих двух определениях?
Думаю что уже ни в чем... и со временем оно все перейдет на использование TYPE, просто это объявление если не ошибаюсь с версии 4.6 стало доступно, как и не обязательность использования циферки после OCCURS <n>, типа сейчас там ставишь 0 и всех делов, раньше это вроде как влияло на количество буферов открываемых для внутренней таблицы, что типа на прямую влияло на производительность работы с ней. Я по привычке ставлю там как бы для себя если 1, предполагаю, что тут данных будет не много, если 100 то так среднее, если 1000 или больше, то это значит, что-то будет глобальное выгребаться эту таблицу.

Паганель

Ну какая то разница все же есть:

LIKE  - можно использовать в том случае если есть структура, табличка и тд. которые определенные в словаре данных.

А TYPE STANDARD TABLE OF - можно использовать,  даже если тип (табличка, структура) не определена в словаре данных, т.е. вы прямо в коде объявляете тип, типа так:

TYPES: BEGIN OF gs_outtab.
  TYPES: celltab TYPE lvc_t_styl.
  TYPES: colinfo TYPE lvc_t_scol.
  TYPES: sticon TYPE icon_d.
  "
  INCLUDE STRUCTURE msku.
  "
TYPES: END OF gs_outtab.


такое обьявление «пройдет», т.е. система допустит объявление:
DATA: gt_outtab TYPE STANDARD TABLE OF gs_outtab WITH HEADER LINE.
DATA: ls_outtab LIKE LINE OF gt_outtab.


"А так нельзя
DATA: gt_outtab1 LIKE gs_outtab OCCURS 0 WITH HEADER LINE.
DATA: ls_outtab1 LIKE LINE OF gt_outtab1.


Uukrul

Так LIKE это дословно переменная слева будет такая же как переменная справа, а в твоем случае ты объявил тип данных, а потом попытался сказать что переменная будет как... и ссылку на тип даешь, что не логично  ::)

Паганель

Цитата: Uukrul  link=topic=510.msg4592#msg4592 date=1248956798
Так LIKE это дословно переменная слева будет такая же как переменная справа, а в твоем случае ты объявил тип данных, а потом попытался сказать что переменная будет как... и ссылку на тип даешь, что не логично  ::)

Ну да в этом и разница, что like - обьявление ссылкой на переменную, а TYPE STANDARD TABLE OF обьявление со ссылкой на тип.

Хотя ты наверное прав, судя по всему разницы нету...

SMF spam blocked by CleanTalk