Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
mx1234567 Участник со стажем
Вступление в Клуб: 18.11.2010
|
Пт Июн 08, 2018 21:03  UPDATE (SELECT |
|
Полезность: Нет оценки
|
Как на PL+ написать подобное?
Код: |
UPDATE (SELECT t1.id,
t1.name name1,
t1.desc desc1,
t2.name name2,
t2.desc desc2
FROM table1 t1,
table2 t2
WHERE t1.id = t2.id)
SET name1 = name2,
desc1 = desc2
|
|
|
 |
RustamR Участник
Вступление в Клуб: 26.04.2018
|
Сб Июн 09, 2018 01:39   |
|
Полезность: Нет оценки
|
Первый попавшися из поиска по операциям:
Код: |
update x(x.[PRODUCT_CT].[ACC_PROD] = null
,x.[PRODUCT_CT].[ACC_DOC] = null
,x.[PRODUCT_CT].[FACT_OPER] = null
) in ::[MAIN_DOCUM] all
where x = MDoc.Id;
|
|
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Сб Июн 09, 2018 02:33   |
|
Полезность: Нет оценки
|
RustamR пишет: | Первый попавшися из поиска по операциям:
Код: |
update x(x.[PRODUCT_CT].[ACC_PROD] = null
,x.[PRODUCT_CT].[ACC_DOC] = null
,x.[PRODUCT_CT].[FACT_OPER] = null
) in ::[MAIN_DOCUM] all
where x = MDoc.Id;
|
|
Вопрос был не про простой update таблицы, а про update по select двух связанных таблиц (причём связь не родитель- дочерний класс) |
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Сб Июн 09, 2018 11:07  Re: UPDATE (SELECT |
|
Полезность: Нет оценки
|
mx1234567 пишет: | Как на PL+ написать подобное?
Код: |
UPDATE (SELECT t1.id,
t1.name name1,
t1.desc desc1,
t2.name name2,
t2.desc desc2
FROM table1 t1,
table2 t2
WHERE t1.id = t2.id)
SET name1 = name2,
desc1 = desc2
|
|
Наверно никак
Только разворотом select и update вложенным в FOR, пример
::[SWIFT_MESSAGE].[TORG_ERROR_MES]
или обход table of, в который можно загрузить select-ом
for update пример
[BC_FAKTURA].[HANDLE_OUT] |
|
 |
Эмиралька Эксперт
Вступление в Клуб: 09.11.2015
|
Пт Июн 22, 2018 09:16   |
|
Полезность: Нет оценки
|
mx1234567 пишет: | Код: |
UPDATE (SELECT t1.id,
t1.name name1,
t1.desc desc1,
t2.name name2,
t2.desc desc2
FROM table1 t1,
table2 t2
WHERE t1.id = t2.id)
SET name1 = name2,
desc1 = desc2 |
|
Alkov пишет: | RustamR пишет: | Первый попавшися из поиска по операциям:
Код: |
update x(x.[PRODUCT_CT].[ACC_PROD] = null
,x.[PRODUCT_CT].[ACC_DOC] = null
,x.[PRODUCT_CT].[FACT_OPER] = null
) in ::[MAIN_DOCUM] all
where x = MDoc.Id;
|
|
Вопрос был не про простой update таблицы, а про update по select двух связанных таблиц (причём связь не родитель- дочерний класс) |
А оно так работает? Если не ошибаюсь, update (select ) и в Oracle работает с существенными ограничениями.
И второй вопрос - а зачем? |
|
 |
alyona_1989 Участник
Вступление в Клуб: 23.01.2020
|
Пн Ноя 23, 2020 11:54   |
|
Полезность: Нет оценки
|
Привет всем!
В общем есть вот такой update:
update --+ parallel(30) ENABLE_PARALLEL_DML
Z#KAS_DOC_ANALIT a1
set a1.c_id_quit_doc = (select b1.id from Z#KAS_TEMP_TABLE_B b1 where b1.c_s1 = a1.c_out_idx)
where exists (select 1 from Z#KAS_TEMP_TABLE_B b1 where b1.c_s1 = a1.c_out_idx);
Но по из-за условия = (select b1.id from Z#KAS_TEMP_TABLE_B b1 where b1.c_s1 = a1.c_out_idx) он нормально не распараллеливается как дмл.
Подскажите, возможно ли как-то ускорить этот запрос?
В таблице Z#KAS_DOC_ANALIT у меня порядка 20 млн записей, в Z#KAS_TEMP_TABLE у меня около 900 записей.
Если смотреть на план запроса, это обычный распараллеленный апдейт, но никак не дмл. |
|
 |
Эмиралька Эксперт
Вступление в Клуб: 09.11.2015
|
Вт Ноя 24, 2020 09:30   |
|
Полезность: Нет оценки
|
Цитата: | Привет всем!
В общем есть вот такой update:
update --+ parallel(30) ENABLE_PARALLEL_DML
Z#KAS_DOC_ANALIT a1
set a1.c_id_quit_doc = (select b1.id from Z#KAS_TEMP_TABLE_B b1 where b1.c_s1 = a1.c_out_idx)
where exists (select 1 from Z#KAS_TEMP_TABLE_B b1 where b1.c_s1 = a1.c_out_idx);
Но по из-за условия = (select b1.id from Z#KAS_TEMP_TABLE_B b1 where b1.c_s1 = a1.c_out_idx) он нормально не распараллеливается как дмл.
Подскажите, возможно ли как-то ускорить этот запрос?
В таблице Z#KAS_DOC_ANALIT у меня порядка 20 млн записей, в Z#KAS_TEMP_TABLE у меня около 900 записей.
Если смотреть на план запроса, это обычный распараллеленный апдейт, но никак не дмл. |
Я бы как минимум exists заменила на in
where a1.c_out_idx in (select b1.c_s1 from Z#KAS_TEMP_TABLE_B b1); |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|