Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поменять столбцы местами / 13 сообщений из 13, страница 1 из 1
31.07.2019, 22:52
    #39843737
Frequency
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
В таблице Столбец - А и Столбец В.

Как можно выполнить UPDATE , перенести данный из А к В и наоборот из В к А одновременно, одним словом заменить данный столбца А на В.

Без создания дополнительных столбцов, синонима таблицы, представлений , дубликации таблицы и временных таблиц ?
...
Рейтинг: 0 / 0
31.07.2019, 22:56
    #39843738
Frequency
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
Каждую секунду идет транзакция, нужно поменять местами без потери инфы и деактивации таблицы
...
Рейтинг: 0 / 0
31.07.2019, 23:04
    #39843740
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
OPS$ORACLE@repo SQL> create table dropme ( x number,y number);

Table created.

OPS$ORACLE@repo SQL> insert into dropme values ( &1, &2 );
Enter value for 1: 22
Enter value for 2: 33
old   1: insert into dropme values ( &1, &2 )
new   1: insert into dropme values ( 22, 33 )

1 row created.

OPS$ORACLE@repo SQL> /
Enter value for 1: 55
Enter value for 2: 66
old   1: insert into dropme values ( &1, &2 )
new   1: insert into dropme values ( 55, 66 )

1 row created.

OPS$ORACLE@repo SQL> commit;

Commit complete.

OPS$ORACLE@repo SQL> select * from dropme;

         X          Y
---------- ----------
        22         33
        55         66

OPS$ORACLE@repo SQL> update (select x,y from dropme) set x=y, y=x;

2 rows updated.

OPS$ORACLE@repo SQL> select * from dropme;

         X          Y
---------- ----------
        33         22
        66         55

OPS$ORACLE@repo SQL> 
...
Рейтинг: 0 / 0
31.07.2019, 23:10
    #39843743
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
FrequencyКак можно выполнить UPDATE , перенести данный из А к В и наоборот из В к А одновременноИменно так дословно и написать.
FrequencyКаждую секунду идет транзакция, нужно поменять местами без потери инфы и деактивации таблицыИ как ты собираешься понимать, где А - это изначальное А, а где А - это изначальное В?
...
Рейтинг: 0 / 0
31.07.2019, 23:14
    #39843745
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
FrequencyКаждую секунду идет транзакция, нужно поменять местами без потери инфы и деактивации таблицы

Обыкновенное чудо- А кто у нас муж
- Волшебник
- Предупреждать надо...

Так не бывает, смена архитектуры приложения на лету?
как часто эти данные используются? Можно ли потребителей этой информации временно отключить?
Должен быть момент времени, после которого играем по новым правилам.

То есть, готовим новую таблицу
Готовим view из новой и старой

приостанавливаем вставку

Переключаемся на view
не торопясь, доливаем данные

приостанавливаем вставку
переключаемся на новую старую удаляем
...
Рейтинг: 0 / 0
01.08.2019, 07:58
    #39843800
kaldorey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
Это можно делать, если у каждой строки есть метка времени или ID. По ним определяем порядок и потихоньку в цикле по порциям обновляем записи. Так не повлияет на текущую деятельность. Если есть какие то отчеты или выборки других сервисов, можно их вначале подготовить, чтобы с какого то периода или ID брали с нового столбца, все остальное со старого. Эту метку можно вынести в отдельное место, чтобы оба процесса смотрели на нее, тогда ничего ручного в этом процессе не будет.
Может затянуться на дни, но вариант жизнеспособный
...
Рейтинг: 0 / 0
01.08.2019, 08:55
    #39843826
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
Добавляешь поле UPDATE_FLAG default 'N',
Код: plsql
1.
2.
3.
4.
update table
set A = B
   , B = A
   , UPDATE_FLAG = 'Y'


Новые записи идут с флагом 'N', проапдейченные с 'Y'.
Проще, чем по дате заливки данных или по ID.
...
Рейтинг: 0 / 0
01.08.2019, 08:58
    #39843829
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
DshedooДобавляешь полеЧукча не читатель?
FrequencyБез создания дополнительных столбцов
...
Рейтинг: 0 / 0
01.08.2019, 09:16
    #39843837
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
Вообще постановка мутная

ЯТД, если это действительно реальная задача, а не бред воспалённого воображения, там все не так и совсем совсем по другому.

(Упомянутая недавно проблема XYZ)

Поэтому гадать и что-то предлагать бесполезно.
...
Рейтинг: 0 / 0
01.08.2019, 09:18
    #39843840
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
Elic,

Сомневаюсь, что это вызвано ограничением прав, иначе этой темы вообще не было бы.
Так как сменили бы заливку, а ему бы сказали проапдейтить от сих до сих.

Скорее всего автор не в курсе, что можно юзать set A=B, B=A.
И под "дополнительными столбцами" он подразумевал что-то типа:

Код: plsql
1.
2.
update table set C = A, D = B;
update table set A = D, B = C;
...
Рейтинг: 0 / 0
01.08.2019, 09:33
    #39843853
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
Vadim LejninЯТД, если это действительно реальная задача, а не бред воспалённого воображения, там все не так и совсем совсем по другому.

(Упомянутая недавно проблема XYZ)

Поэтому гадать и что-то предлагать бесполезно.Хорошо, что понял.
Но практика показывает, что помогатые сперва "помогают", а потом думают.
...
Рейтинг: 0 / 0
01.08.2019, 09:49
    #39843866
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
ElicVadim LejninЯТД, если это действительно реальная задача, а не бред воспалённого воображения, там все не так и совсем совсем по другому.

(Упомянутая недавно проблема XYZ)

Поэтому гадать и что-то предлагать бесполезно.Хорошо, что понял.
Но практика показывает, что помогатые сперва "помогают", а потом думают.

Я исправляюсь :)
Первый вопрос был конкретный, был конкретный ответ

Когда появился идиотское уточнение, я сразу указал что ТС гонит пургу, и попытался указать, что не так в его постановке задачи.
...
Рейтинг: 0 / 0
01.08.2019, 14:14
    #39844100
Frequency
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поменять столбцы местами
DshedooElic,

Скорее всего автор не в курсе, что можно юзать set A=B, B=A.

[/src]

Всем спасибо этого достаточно
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поменять столбцы местами / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]