Текущее время: Вт, июл 29 2025, 13:26

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Перенос поля из таблицы в структуру.
СообщениеДобавлено: Вт, ноя 11 2008, 14:46 
Начинающий
Начинающий

Зарегистрирован:
Вт, ноя 11 2008, 13:25
Сообщения: 22
Здравствуйте!

Есть стандартная таблица, в нее добавили поле z (через ключ разработчика), а так же добавили пустой include inc_z.

Прошли годы, табличка росла и заполнялась данными.

И тут, совершенно неожиданно, возникла необходимость переместить поле z в структуру inc_z.
Поле z исправно заполнялось, ко-во строк в табличке десятки миллионов.

Отсюда вопрос: Существует ли простой и быстрый способ переноса поля с данными из таблицы в структуру :?:

PS: Я не есть ABAP программист, просьба сильно не пинать. :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: re
СообщениеДобавлено: Вт, ноя 11 2008, 14:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
потренируйтесь на ненужной таблице -
_сложите в один запрос_ :
- удаление поля в таблице
- добавление одноименного поля в структуру в таблице
перенесите,
возможно случится чудо и данные в поле останутся


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 11 2008, 14:56 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
На мой взгляд вариант один. Сделать по человечески:
1. Добавить поле через APPEND структуру.
2. Пройтись по всем записям, сохраняя ключ таблички и значение z поля во временной таблице БД.
3. Удалить все, что относится к модификации стандарта (поле и инклуд).
4. Пройтись по временной БД табличке, заполняя по ключу значения в добавленном через APPEND поле.
5. Удалить временную таблицу.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 11 2008, 15:01 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, окт 20 2008, 10:29
Сообщения: 339
Откуда: Мюнхен
Пол: Мужской
думаю чуда не будет. вряд ли получится это сделать. как вариант: сделать копию таблицы, программно (ну или если есть другие способы) скопировать все данные в нее из оригинальной таблицы, потом сделать изменения в структуре оригинальной таблицы, потом скопировать либо все данные из копии в оригинал (если они были утеряны во время изменения структуры) либо программно перенести только это поле. в принципе ничего сложного, только надо четко проверить, полностью ли сделалась копия таблицы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перенос поля из таблицы в структуру.
СообщениеДобавлено: Вт, ноя 11 2008, 15:09 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
lightfast написал(а):
Здравствуйте!

Есть стандартная таблица, в нее добавили поле z (через ключ разработчика), а так же добавили пустой include inc_z.

Прошли годы, табличка росла и заполнялась данными.

И тут, совершенно неожиданно, возникла необходимость переместить поле z в структуру inc_z.
Поле z исправно заполнялось, ко-во строк в табличке десятки миллионов.

Отсюда вопрос: Существует ли простой и быстрый способ переноса поля с данными из таблицы в структуру :?:

PS: Я не есть ABAP программист, просьба сильно не пинать. :roll:


Доверить данную операцию ABAP - программисту простой и быстрый способ.
Главное чтобы хватило места и был бекап данных.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 11 2008, 15:43 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
VID написал:
думаю чуда не будет. вряд ли получится это сделать.

Какое чудо требуется и что не получится?
Изменение структуры таблицы конечно не ежедневная, но вполне штатная операция, имеющая поддержку штатными средствами. Другое дело, что таблица видимо большая, соответственно могут быть проблемы с местом и временем (т.е. если потребуется вручную выполнить адаптацию талицы, то её надо делать в фоне и желательно чтобы в системе никто больше не рабтал с данной таблицей)
Цитата:
как вариант: сделать копию таблицы, программно (ну или если есть другие способы) скопировать все данные в нее из оригинальной таблицы, потом сделать изменения в структуре оригинальной таблицы, потом скопировать либо все данные из копии в оригинал (если они были утеряны во время изменения структуры) либо программно перенести только это поле. в принципе ничего сложного, только надо четко проверить, полностью ли сделалась копия таблицы

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 11 2008, 15:45 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, окт 20 2008, 10:29
Сообщения: 339
Откуда: Мюнхен
Пол: Мужской
Чуда, про которое писал trop :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 11 2008, 20:10 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
VID написал:
думаю чуда не будет.


Попробовала из принципа - по крайней мере с Z табличками все работает отлично. Последовательность действий такая:
1) Создала табличку ZTEST с полями:
MANDT - key
ZKEY (CHAR 2) - key
ZFIELD1 (CHAR 2)
2) Заполнила данными.
3) В SE11 зашла в изменение, удалила поле ZFIELD1. Сохранила (не активируя, но думаю это не принципиально). Нажала на кнопку Append Structure, создала append с полем ZFIELD1 (CHAR 2). Активировала append и табличку.
4) Не отходя от кассы, зашла в меню Utilities -> Database Object -> Database Utility, нажала кнопку [Activate and Adjust Database] с Save Data. Ахалай-махалай - все данные на месте.

В п.4 есть опция запускать в бэкграунде.

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 11 2008, 20:40 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Jelena написала:
VID написал:
думаю чуда не будет.


Попробовала из принципа - по крайней мере с Z табличками все работает отлично. Последовательность действий такая:
1) Создала табличку ZTEST с полями:
MANDT - key
ZKEY (CHAR 2) - key
ZFIELD1 (CHAR 2)
2) Заполнила данными.
3) В SE11 зашла в изменение, удалила поле ZFIELD1. Сохранила (не активируя, но думаю это не принципиально). Нажала на кнопку Append Structure, создала append с полем ZFIELD1 (CHAR 2). Активировала append и табличку.
4) Не отходя от кассы, зашла в меню Utilities -> Database Object -> Database Utility, нажала кнопку [Activate and Adjust Database] с Save Data. Ахалай-махалай - все данные на месте.

В п.4 есть опция запускать в бэкграунде.


Сколько млн. записей было в таблице?
Возможно, что система при активации таких изменений запустит утилиту Conversion... типа, старая таблица переименовывается в QCM*, создается новая с именем QCM8, данные копируются из QCM* в QCM8*, QCM8 переименовывается в табл. с исходным именем, QCM* удаляется.
Но не уверен, будет ли в данном случае так.
Вот тут-то при операции CONVERSION возможны некоторые нехорошие ситауции...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 12 2008, 18:04 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Art386 написал:
Сколько млн. записей было в таблице?


Примерно 0.000002 миллиона. :) Вообще-то цель была показать, что такое в принципе возможно. Никто не предлагает сразу нестись в продуктив и там на практике внедрять полученные на форуме советы. Но, скажем, в тестовой системе, предварительно посоветовавшись с Базисом, почему бы и не попробовать? А то мы тут можем гадать до посинения... :?

Кстати, с таким количеством записей может пора уже об архивировании подумать?

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 12 2008, 18:18 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Вт, сен 12 2006, 12:57
Сообщения: 85
При изменении структуры таблицы физически создается новая таблица (с добавлением окончания к имени) с новой структурой, затем все данные из старой таблицы перебрасываются в новую move-corresponoding'ом, т.е. соответствие полей определяется по их именам. При отсутствии ошибок, старая таблица стирается и заменяется новой. Поэтому не удивительно что у вас сработало :-) Главное чтобы не менялось имя поля, ну и тип конечно...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 12 2008, 18:40 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
sub-zer0 написал(а):
При изменении структуры таблицы физически создается новая таблица (с добавлением окончания к имени) с новой структурой, затем все данные из старой таблицы перебрасываются в новую move-corresponoding'ом, т.е. соответствие полей определяется по их именам. При отсутствии ошибок, старая таблица стирается и заменяется новой. Поэтому не удивительно что у вас сработало :-) Главное чтобы не менялось имя поля, ну и тип конечно...

я, наверное, этот же способ и описал, как вы указали... :)

Кстати, при изменении структуры вполне может вызываться и ALTER TABLE в СУБД.

В документации написано, когда невозможен ALTER, то вызывается утилита Conversion, о чем мы упоминали уже.
В частности, приводился пример, что если у поля типа С изменить длину, то будет отрабатывать именно преобразование (Conversion).

В каких еще сдучаях будет работать ALTER, а в каких преобразование, не знаю


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB