Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление данных в цикле / 17 сообщений из 17, страница 1 из 1
25.12.2017, 14:20
    #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
25.12.2017, 14:23
    #39575462
а где where?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных в цикле
где условие какую строку меняем?
а то 61 раз упдатим всю таблицу, ну и на 61 последний раз))
...
Рейтинг: 0 / 0
25.12.2017, 15:17
    #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
25.12.2017, 15:46
    #39575565
KitKat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных в цикле
rf_mail,

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

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

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



SY.
...
Рейтинг: 0 / 0
25.12.2017, 16:37
    #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
25.12.2017, 16:48
    #39575607
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных в цикле
KitKatцифра 61а ведь нет такой цифры
...
Рейтинг: 0 / 0
25.12.2017, 16:53
    #39575611
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных в цикле
AmKad,

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

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

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

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

IMHO
...
Рейтинг: 0 / 0
25.12.2017, 17:23
    #39575629
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных в цикле
Leonid KudryavtsevА то ведь кто-то может не понять, что это был юмор.В этом порой бывает больше интереса, чем в обратном.
...
Рейтинг: 0 / 0
25.12.2017, 19:00
    #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
26.12.2017, 04:14
    #39575780
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных в цикле
Нет жизни без Recno()
...
Рейтинг: 0 / 0
26.12.2017, 09:42
    #39575862
KitKat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных в цикле
Всем спасибо за ответы!
Это получилось.
Но у меня в таблице расставлены значения в столбце numbers в определенном порядке, а мне нужно их обновить, чтобы они стояли в нужной мне последовательности.

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

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

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

merge + row_number () over (order by группа)
...
Рейтинг: 0 / 0
26.12.2017, 10:20
    #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
26.12.2017, 10:25
    #39575884
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление данных в цикле
982183Нет жизни без Recno()Лисовод?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Обновление данных в цикле / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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