powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление данных в цикле
17 сообщений из 17, страница 1 из 1
Обновление данных в цикле
    #39575454
KitKat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Прошу помочь полному профану в программировании.
Пытаюсь обновить данные в одном столбце таблицы новыми числовыми значениями. Вот кусочек кода:
Код: plsql
1.
2.
3.
4.
5.
6.
begin
  FOR i in 1..61 LOOP
  update m_pavlova_ev.job j
  SET j.numbers=i;
END LOOP;
end;



Мои ожидания:
1
2
3
4
5
..
61

А на самом деле везде проставляется последняя цифра 61.
Что тут не так?
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575462
а где where?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
где условие какую строку меняем?
а то 61 раз упдатим всю таблицу, ну и на 61 последний раз))
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575537
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KitKatВсем привет.
Прошу помочь полному профану в программировании.
Пытаюсь обновить данные в одном столбце таблицы новыми числовыми значениями. Вот кусочек кода:
Код: plsql
1.
2.
3.
4.
5.
6.
begin
  FOR i in 1..61 LOOP
  update m_pavlova_ev.job j
  SET j.numbers=i;
END LOOP;
end;



Мои ожидания:
1
2
3
4
5
..
61

А на самом деле везде проставляется последняя цифра 61.
Что тут не так?
Добрый день.
в вашем цикле нужно добавить условие where.
сейчас же цикл постоянно выставляет текущее значение i, а последнее текущее i=61.
сейчас ваш код равен
begin
update m_pavlova_ev.job j
SET j.numbers=61;
commit;
end;
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575565
KitKat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rf_mail,

Простите, не совсем поняла, что за условие и куда его вписать, после set?
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575569
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KitKatПростите, не совсем поняла, что за условие и куда его вписать, после set?

Выкинуть все:

Код: plsql
1.
2.
update m_pavlova_ev.job
  SET numbers=rownum;



SY.
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575600
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KitKat,

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
drop table test purge;

Таблица удалена.


create table test as select 0 id from dual connect by level <= 61;

Таблица создана.


begin
    for i in reverse 1..61 loop
        update test set id = i where rownum <= i;
    end loop;
end;
/

Процедура PL/SQL успешно завершена.


select *
from test
order by 1;

        ID
----------
         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
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        60
        61

61 строк выбрано.
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575607
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KitKatцифра 61а ведь нет такой цифры
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575611
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

А таперь просуммируй число изменений (SQL%ROWCOUNT).

SY.
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575626
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Автор явно цикл просил, и даже сам пробовал. Ну вот я и допилил.
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575628
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

Смайлики в сообщениях и коде ставить нужно. А то ведь кто-то может не понять, что это был юмор.

IMHO
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575629
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА то ведь кто-то может не понять, что это был юмор.В этом порой бывает больше интереса, чем в обратном.
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575667
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad, я допилил твой скрипт. Теперь работает без update.

Код: plsql
1.
2.
drop table test purge;
create table test as select level id from dual connect by level <= 61;
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575780
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет жизни без Recno()
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575862
KitKat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы!
Это получилось.
Но у меня в таблице расставлены значения в столбце numbers в определенном порядке, а мне нужно их обновить, чтобы они стояли в нужной мне последовательности.

То, что должно получиться на картинке.

Например, есть две группы: 1 и 2. В первой должны быть последовательные значения от 1 до count в группе.
А в группе 2 значения от count+1 группы 1 до count+1+count группы 2. При этом не должно быть кратных 5-ти. Ну или хотя бы без последнего условия.

В первой группе получилось обновить значения в столбце numbers, а как во второй группе обновить?
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575878
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KitKat,

merge + row_number () over (order by группа)
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575881
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KitKat,

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
SQL> select * from test order by g,n;

         G          N
---------- ----------
         1          0
         1          0
         1          0
         1          0
         1          0
         1          0
         1          0
         1          0
         1          0
         1          0
         1          0
         1          0
         2          0
         2          0
         2          0
         2          0
         2          0
         2          0
         2          0
         2          0
         2          0
         2          0
         2          0
         2          0

24 rows selected.

SQL> declare
  2   i pls_integer :=0;
  3   cursor c1 is select * from test order by g for update;
  4  begin
  5   for r in c1 loop
  6     i:=i+1;
  7     if r.g=2 and mod(i,5)=0 then i:=i+1; end if;
  8     update test set n=i where current of c1;
  9   end loop;
 10  end;
 11  /

PL/SQL procedure successfully completed.

SQL> select * from test order by g,n;

         G          N
---------- ----------
         1          1
         1          2
         1          3
         1          4
         1          5
         1          6
         1          7
         1          8
         1          9
         1         10
         1         11
         1         12
         2         13
         2         14
         2         16
         2         17
         2         18
         2         19
         2         21
         2         22
         2         23
         2         24
         2         26
         2         27

24 rows selected.

SQL> rollback;

Rollback complete.

SQL>



.....
stax
...
Рейтинг: 0 / 0
Обновление данных в цикле
    #39575884
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Нет жизни без Recno()Лисовод?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление данных в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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