Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Изменение значений / 20 сообщений из 20, страница 1 из 1
29.04.2020, 11:15
    #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
29.04.2020, 11:38
    #39952767
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение значений
kirill.galeev
знаю, что неправильно. хочу понять как правильно использовать for..loop
Правильно не использовать loop.
...
Рейтинг: 0 / 0
29.04.2020, 11:40
    #39952768
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение значений
kirill.galeev,

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

....
stax
...
Рейтинг: 0 / 0
29.04.2020, 11:53
    #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
29.04.2020, 12:36
    #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
29.04.2020, 12:59
    #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
29.04.2020, 13:09
    #39952813
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение значений
Stax
уникальный индекс есть?
скорее всего нет
Без разницы. Важно лишь наличие уникальных ключей .
...
Рейтинг: 0 / 0
29.04.2020, 13:21
    #39952824
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение значений
Elic
Stax
уникальный индекс есть?
скорее всего нет
Без разницы. Важно лишь наличие уникальных ключей .


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

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

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

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

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

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

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

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

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

Если у тебя тупая лаба, то ты, лучше, так и скажи.
...
Рейтинг: 0 / 0
29.04.2020, 15:57
    #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
29.04.2020, 16:02
    #39952910
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение значений
Elic
Stax
чутку перегнул

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


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

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

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

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


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