Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Результат запроса обновить другую таблицу в оракле  [new]
dow1985
Member

Откуда:
Сообщений: 17
Коллеги, подскажите пожалуйста, как результатом одного запроса обновить другую таблицу

select stringtext from string_table, screen_lookup
where screen_lookup.nameid=string_table.stringnumberid and
screen_lookup.devicetype=1 and
screen_lookup.sluindex between 1 and 127 and
screen_lookup.slutype=6


Полученными значениями обновить таблицу string_table столбец stringtext при условии, что screen_lookup.nameid=string_table.stringnumberid and
screen_lookup.devicetype=2 and
screen_lookup.sluindex between 1 and 127 and
screen_lookup.slutype=6
14 янв 15, 23:20    [17119861]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51767

dow1985
как результатом одного запроса обновить другую таблицу

С помощью MERGE.

Posted via ActualForum NNTP Server 1.5

14 янв 15, 23:24    [17119871]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
dow1985
Member

Откуда:
Сообщений: 17
Дмитрий, Спасибо попробую.
15 янв 15, 10:08    [17120757]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
dow1985
Member

Откуда:
Сообщений: 17
Попытался при помощи merge обновить столбец, но к сожалению не удалось.

merge into string_table s

using (select stringtext from string_table, screen_lookup where nameid=stringnumberid and devicetype=1 and sluindex between 1 and 127) p

on (screen_lookup.nameid=s.stringnumberid and screen_lookup.devicetype=2 and screen_lookup.sluindex between 1 and 127 and screen_lookup.slutype=6)

when matched then update set s.stringtext=p.stringtext

Error at Command Line:5 Column:124
Error report:
SQL Error: ORA-00904: "SCREEN_LOOKUP"."SLUTYPE": недопустимый идентификатор
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:

Подскажите пожалуйста, в чем ошибка?
15 янв 15, 23:46    [17124946]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
DmitryTyum
Member

Откуда:
Сообщений: 62
Я могу ошибиться. Но по-моему вот так можно
update (
select screen_lookup.devicetype, stringtext, min(stringtext)over(order by screen_lookup.devicetype desc) tg from string_table, screen_lookup 
where screen_lookup.nameid=string_table.stringnumberid and 
screen_lookup.devicetype in(1,2) and 
screen_lookup.sluindex between 1 and 127 and 
screen_lookup.slutype=6
)
set stringtext = tg
where devicetype = 1
16 янв 15, 00:05    [17124984]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
DmitryTyum
Member

Откуда:
Сообщений: 62
Ой. Наоборот.
update (
select screen_lookup.devicetype, stringtext, min(stringtext)over(order by screen_lookup.devicetype) tg
from string_table, screen_lookup 
where screen_lookup.nameid=string_table.stringnumberid and 
screen_lookup.devicetype in(1,2) and 
screen_lookup.sluindex between 1 and 127 and 
screen_lookup.slutype=6
)
set stringtext = tg
where devicetype = 2
16 янв 15, 00:10    [17124998]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
DmitryTyum
Member

Откуда:
Сообщений: 62
Облом. Аналитические запросы делают подзапрос не доступным к изменению.

merge into string_table s
using (
select string_table.stringnumberid, stringtext
from string_table, screen_lookup 
where screen_lookup.nameid=string_table.stringnumberid and 
screen_lookup.devicetype=1 and 
screen_lookup.sluindex between 1 and 127 and 
screen_lookup.slutype=6
) f
on (f.stringnumberid=s.stringnumberid and 
s.devicetype=2 and 
s.sluindex between 1 and 127 and 
s.slutype=6)
when matched then update s.stringtext = f.stringtext
16 янв 15, 00:39    [17125058]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
Добрый Э - Эх
Guest
dow1985
Попытался при помощи merge обновить столбец, но к сожалению не удалось.

merge into string_table s

using (select stringtext from string_table, screen_lookup where nameid=stringnumberid and devicetype=1 and  sluindex between 1 and 127) p

on (screen_lookup.nameid=s.stringnumberid and screen_lookup.devicetype=2 and  screen_lookup.sluindex between 1 and 127 and screen_lookup.slutype=6)

when matched then update set s.stringtext=p.stringtext


Error at Command Line:5 Column:124
Error report:
SQL Error: ORA-00904: "SCREEN_LOOKUP"."SLUTYPE": недопустимый идентификатор
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:

Подскажите пожалуйста, в чем ошибка?

в ON-кляузе мерджа дОлжно указывать связь между приемником данных (это твое s) и источником данных (это твое p). что такое screen_lookup в этом случае - совершенно непонятно, о чем тебе оракл и сообщил в ошибке.
16 янв 15, 05:48    [17125221]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
dow1985
Member

Откуда:
Сообщений: 17
Запрос

merge into string_table s
using (
select string_table.stringnumberid, stringtext
from string_table, screen_lookup
where screen_lookup.nameid=string_table.stringnumberid and
screen_lookup.devicetype=1 and
screen_lookup.sluindex between 1 and 127 and
screen_lookup.slutype=6
) f
on (f.stringnumberid=s.stringnumberid and
s.devicetype=2 and
s.sluindex between 1 and 127 and
s.slutype=6)
when matched then update s.stringtext = f.stringtext

К сожалению выдал ошибку, скорее всего потому что в string_table SLUTYPE,devicetype, sluindex эти столбцы из screen_lookup

Error at Command Line:24 Column:1
Error report:
SQL Error: ORA-00904: "S"."SLUTYPE": недопустимый идентификатор
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:

Приложил скриншоты таблиц string_table, Screen_lookup

К сообщению приложен файл. Размер - 31Kb
16 янв 15, 09:06    [17125512]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
dow1985
Member

Откуда:
Сообщений: 17
Еще один скриншот

К сообщению приложен файл. Размер - 22Kb
16 янв 15, 09:07    [17125520]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
dow1985
Member

Откуда:
Сообщений: 17
Добрый Э - Эх,

Можно как указать связь по screen_lookup?

фактически, что нужно сделать это взять данные из string_table.stringtext используя для связи параметры screen_lookup.devicetype=1, screen_lookup.nameid=string_table.stringnumberid и вставить в string_table.stringtext используя для связи параметры screen_lookup.devicetype=2 и screen_lookup.nameid=string_table.stringnumberid
16 янв 15, 09:12    [17125554]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
DmitryTyum
Member

Откуда:
Сообщений: 62
А что - мой мёрдж не сработал?
16 янв 15, 19:08    [17130061]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
dow1985
Member

Откуда:
Сообщений: 17
К сожалению нет
16 янв 15, 21:15    [17130625]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
dow1985
Member

Откуда:
Сообщений: 17
Запрос

merge into string_table s
using (
select string_table.stringnumberid, stringtext
from string_table, screen_lookup
where screen_lookup.nameid=string_table.stringnumberid and
screen_lookup.devicetype=1 and
screen_lookup.sluindex between 1 and 127 and
screen_lookup.slutype=6
) f
on (f.stringnumberid=s.stringnumberid and
s.devicetype=2 and
s.sluindex between 1 and 127 and
s.slutype=6)
when matched then update s.stringtext = f.stringtext

К сожалению выдал ошибку, скорее всего потому что в string_table SLUTYPE,devicetype, sluindex эти столбцы из screen_lookup

Error at Command Line:24 Column:1
Error report:
SQL Error: ORA-00904: "S"."SLUTYPE": недопустимый идентификатор
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
16 янв 15, 21:15    [17130629]     Ответить | Цитировать Сообщить модератору
 Re: Результат запроса обновить другую таблицу в оракле  [new]
blkangel
Member

Откуда:
Сообщений: 1982
dow1985
Коллеги, подскажите пожалуйста, как результатом одного запроса обновить другую таблицу

select stringtext from string_table, screen_lookup
where screen_lookup.nameid=string_table.stringnumberid and
screen_lookup.devicetype=1 and
screen_lookup.sluindex between 1 and 127 and
screen_lookup.slutype=6


Полученными значениями обновить таблицу string_table столбец stringtext при условии, что screen_lookup.nameid=string_table.stringnumberid and
screen_lookup.devicetype=2 and
screen_lookup.sluindex between 1 and 127 and
screen_lookup.slutype=6


dow1985
фактически, что нужно сделать это взять данные из string_table.stringtext используя для связи параметры screen_lookup.devicetype=1, screen_lookup.nameid=string_table.stringnumberid и вставить в string_table.stringtext используя для связи параметры screen_lookup.devicetype=2 и screen_lookup.nameid=string_table.stringnumberid


Где истина? Вставить или обновить? Отсюда и кривизна запроса. Вы сами себе задачу представляете? На словах можете рассказать.
19 янв 15, 09:42    [17135753]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить