powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Что-то я не так делаю или еще немного про апдейт
10 сообщений из 10, страница 1 из 1
Что-то я не так делаю или еще немного про апдейт
    #32188408
SQL Крися
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не трудно, помогите плиз...

Имеются две таблички:
Цены1(артикул, тип, цена)
Цены2(артикул, тип, цена)

Нужно в Цены1 сделать такую же цену, как в Цены2 (связав их по артикулам и типу цены)

Пишу:
update Цены1 sp set sp.цена=(select цена
from Цены2
where sp.артикул=артикул
and sp.тип=тип)

А он мне отвечает: ORA-01407: Невозможно заменить Цена1 на Null
Но в Цены2 нет нулевых значений!!
В чем может быть ошибка?
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188417
Фотография Andrew Campball
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не ошибаюсь, то можно сделать так:

UPDATE (SELECT a.Цена Цена1а, b.Цена Цена2б
FROM Цена1 a,
Цена2 b
WHERE a.артикул = b.артикул
and a.тип = b.тип)
SET Цена1а = Цена2б
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188431
drive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так
Код: plaintext
1.
2.
update  "Цены1"  sp set sp.цена=(select цена from  "Цены2"  sp2 
where sp.артикул=sp2.артикул and sp.тип=sp2.тип)
where exists(select * from  "Цены2"  t where sp.артикул=t.артикул and sp.тип=t.тип)
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188435
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя в таблице Цены1 есть артикул, который не присутствует в таблице Цены2, поэтому подзапрос возвращает NULL. А пример Andrew Campball, к сожалению, не прокатит, такой синтаскис c update.. from допустим в MSSQL, Sybase, но не в Oracle.
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188437
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет, сорри, перепутал, работает.
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188438
Фотография Andrew Campball
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 drive

Можно и так, но скорость в моем варианте будет лучше. (рекомендации Тома Кайта)

Оператор UPDATE и NULL-значения
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188754
SQL Крися
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для drive:
Пыталась, не работает

Для Denis Popov
>У тебя в таблице Цены1 есть артикул, который не присутствует в таблице Цены2, поэтому подзапрос возвращает NULL

Там полно таких значений, но он же должен выбирать по условию Цены1.артикул=Цены2.артикул


Для Andrew Campball:
Сделала, как ты советовал, оракл мне ответил:
ORA-01779 cannot modify a column which maps to a non key-preserved table
У меня в help нет описания такой ошибки. Не подскажете, как с ней справится?
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188769
andrew_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если так :

update Цены1 sp set sp.цена=nvl((select цена
from Цены2
where sp.артикул=артикул
and sp.тип=тип),sp.цена)

сегодня на работе проверю, работает такое или нет :)
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188781
drive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, у меня все работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table  "Цены1"  ( "цена"  number,  "артикул"  number,  "тип"  varchar2( 10 ));
create table  "Цены2"  ( "цена"  number,  "артикул"  number,  "тип"  varchar2( 10 ));
insert into  "Цены1"  values( 100 , 1 ,'S');
insert into  "Цены1"  values( 100 , 2 ,'R');
insert into  "Цены1"  values( 100 , 2 ,'S');
insert into  "Цены2"  values( 200 , 1 ,'S');
insert into  "Цены2"  values( 200 , 2 ,'R');

update  "Цены1"  sp set sp. "цена" =(select  "цена"  from  "Цены2"  sp2 
where sp. "артикул" =sp2. "артикул"  and sp. "тип" =sp2. "тип" )
where exists(select * from  "Цены2"  t where sp. "артикул" =t. "артикул"  and sp. "тип" =t. "тип" )

 2  rows updated
...
Рейтинг: 0 / 0
Что-то я не так делаю или еще немного про апдейт
    #32188835
SQL Крися
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сработало!! Спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Что-то я не так делаю или еще немного про апдейт
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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