Текущее время: Ср, июл 30 2025, 01:46

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot]


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

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