powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Изменение значений
20 сообщений из 20, страница 1 из 1
Изменение значений
    #39952752
kirill.galeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день!
Работаю в Oracle, PL/SQL
Столкнулся с проблемой:
есть две таблицы - t1 и t2
в t1 есть уникальный для таблицы id и k_id (ключ к t2)
в t2 есть уникальный для таблицы id и id-родитель - parent_id
связь: t1.k_id = t2.id
нужно изменить значения k_id в t1 на значение parent_id из t2 (значений много)
пишу функцию:

for a in (select parent_id from t2, t1 where t2.id = t1.k_id)
loop
update t1 set k_id = a.parent_id where t1.id IN (--190 значений--);
end loop;

знаю, что неправильно. хочу понять как правильно использовать for..loop
заранее спасибо
...
Рейтинг: 0 / 0
Изменение значений
    #39952767
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kirill.galeev
знаю, что неправильно. хочу понять как правильно использовать for..loop
Правильно не использовать loop.
...
Рейтинг: 0 / 0
Изменение значений
    #39952768
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kirill.galeev,

у т1,т2 есть ФК? если есть то какие?

....
stax
...
Рейтинг: 0 / 0
Изменение значений
    #39952773
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
.

Код: 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.
QL> select * from t1;

        ID       K_ID
---------- ----------
         1        100
         2        200
         3        300

SQL> select * from t2;

        ID  PARENT_ID
---------- ----------
       100         11
       200         22

SQL> update (select t1.k_id,t2.parent_id from t1,t2 where  t1.k_id = t2.id) set k_id=parent_id;

2 rows updated.

SQL> select * from t1;

        ID       K_ID
---------- ----------
         1         11
         2         22
         3        300


.....
stax
...
Рейтинг: 0 / 0
Изменение значений
    #39952797
kirill.galeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

пишу:
Код: plsql
1.
update (select t1.k_id,t2.parent_id from t1,t2 where  t1.k_id = t2.id and t1.id IN (/*значения*/)) set k_id=parent_id;


ошибка:
ORA-01779: нельзя изменить столбец, кот.отображает non key-preserved таблицу
...
Рейтинг: 0 / 0
Изменение значений
    #39952809
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kirill.galeev
Stax,

пишу:
Код: plsql
1.
update (select t1.k_id,t2.parent_id from t1,t2 where  t1.k_id = t2.id and t1.id IN (/*значения*/)) set k_id=parent_id;


ошибка:
ORA-01779: нельзя изменить столбец, кот.отображает non key-preserved таблицу


авторв t1 есть уникальный для таблицы id и k_id
уникальный индекс есть?
скорее всего нет

если нет
1)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> update t1 set k_id=(select parent_id from t2 where t1.k_id = t2.id)
  2  where exists (select 1 from t2 where t1.k_id = t2.id)
  3  /

2 rows updated.

SQL> select * from t1;

        ID       K_ID
---------- ----------
         1         11
         2         22
         3        300



2) merge
3) pl/sql
.....
stax
...
Рейтинг: 0 / 0
Изменение значений
    #39952813
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
уникальный индекс есть?
скорее всего нет
Без разницы. Важно лишь наличие уникальных ключей .
...
Рейтинг: 0 / 0
Изменение значений
    #39952824
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Stax
уникальный индекс есть?
скорее всего нет
Без разницы. Важно лишь наличие уникальных ключей .


не понял про ключи
ключи без индексов?

.....
stax
...
Рейтинг: 0 / 0
Изменение значений
    #39952828
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
не понял про ключи
ключи без индексов?

PK/UK может быть создан над не уникальным индексом. И даже над индексом, содержащим дополнительные атрибуты.
...
Рейтинг: 0 / 0
Изменение значений
    #39952833
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Stax
не понял про ключи
ключи без индексов?

PK/UK может быть создан над не уникальным индексом. И даже над индексом, содержащим дополнительные атрибуты.

чутку перегнул

пусть, или ключ на неуникальном индексе

....
stax
...
Рейтинг: 0 / 0
Изменение значений
    #39952881
kirill.galeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Насколько я знаю, если в set есть селект, он должен вернуть только одно значение. Но сработало. Большое спасибо)

Если не затруднит, я бы хотел узнать как подобное осуществить на PL/SQL?
...
Рейтинг: 0 / 0
Изменение значений
    #39952897
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
чутку перегнул

пусть, или ключ на неуникальном индексе
Извини, Станислав, при твоей готовности безоглядно помогать ты не должен при этом делать ошибок. Иначе начинается профанация. Или ты хочешь стоять в её главе?
...
Рейтинг: 0 / 0
Изменение значений
    #39952900
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kirill.galeev
не затруднит, я бы хотел узнать как подобное осуществить на PL/SQL?
Если запрос выполним из SQL, то он, как правило, без каких-либо изменений исполним и из PL/SQL.
Но в этом мало смысла.

Если у тебя тупая лаба, то ты, лучше, так и скажи.
...
Рейтинг: 0 / 0
Изменение значений
    #39952907
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kirill.galeev,

не знаю наскоко ето правильно (скорее как сделать в цикле )

делал примерно так


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> ed
Wrote file afiedt.buf

  1  declare
  2   cursor c1 is select t1.k_id,t2.parent_id from t1,t2 where  t1.k_id = t2.id for update of t1.k_id;
  3  begin
  4   for r in c1 loop
  5     update t1 set k_id=r.parent_id where current of c1;
  6   end loop;
  7   --rollback;
  8   --commit;
  9* end;
SQL> /

PL/SQL procedure successfully completed.

SQL> select * from t1;

        ID       K_ID
---------- ----------
         1         11
         2         22
         3        300



влоб (для примера)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> ed
Wrote file afiedt.buf

  1  begin
  2   for r in (select * from t2) loop
  3     update t1 set k_id=r.parent_id where t1.k_id = r.id;
  4   end loop;
  5   --rollback;
  6   --commit;
  7* end;
SQL> /

PL/SQL procedure successfully completed.

SQL> select * from t1;

        ID       K_ID
---------- ----------
         1         11
         2         22
         3        300



ps
можно и модным merge (имно без индексов самое простое)

.....
stax
...
Рейтинг: 0 / 0
Изменение значений
    #39952910
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Stax
чутку перегнул

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


не хочу, но знаний (внимательности, собраности, дотошности, ...) не хватает, поэтому приходится стоять

....
stax
...
Рейтинг: 0 / 0
Изменение значений
    #39953164
kirill.galeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
я смотрю вы только балаган разводить умеете, вместо того, чтобы помогать
ни одного сообщения от вас не было полезного в этой ветке
зря ресурсы только тратите
Модератор: Предупреждение: флейм.
...
Рейтинг: 0 / 0
Изменение значений
    #39953165
kirill.galeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
спасибо, поэкспериментриую)
...
Рейтинг: 0 / 0
Изменение значений
    #39953170
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kirill.galeev
я смотрю вы только балаган разводить умеете, вместо того, чтобы помогать
А ты только смотреть и умеешь?
Зачастую, станиславы раздают медвежьи советы. Но при твоём уровне ты не способен отличить плохой совет от хорошего.
kirill.galeev
ни одного сообщения от вас не было полезного в этой ветке
К счастью, здесь нет "кармы", искажённой подобными недорослями.
...
Рейтинг: 0 / 0
Изменение значений
    #39953172
kirill.galeev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
нет, умею не только смотреть
к счастью, его совет мне помог, данные отображаются так, как мне было нужно
да, мой уровень знаний не высокий, т.к. я совсем недавно начал изучать SQL. обратился сюда за помощью, потому что:
а) часто видел его в выдаче моих поисковых запросах по предыдущим проблемам
б) готового ответа на свой вопрос не нашёл и решил спросить знающих людей
А вы вместо помощи только язвите и переходите (?) на оскорбление. Проще было бы не обращать внимание конечно (по работе всё таки здесь), но не могу пройти мимо таких заносчивых как вы.
(с каких пор незнакомые люди тыкают друг-друга?)
это я недоросль? вам там из-за монитора всех очень хорошо видно, да?

Модератор: Читайте вдумчиво и не надо флеймить. Здесь Вас никто не оскорблял.
...
Рейтинг: 0 / 0
Изменение значений
    #39953221
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
имно

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


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