powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / почему два раза выводится 100
6 сообщений из 6, страница 1 из 1
почему два раза выводится 100
    #39867508
Albatross
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
CREATE TABLE a1 (I1 NUMBER, i2 NUMBER);

INSERT INTO a1 


SELECT 1, 1 FROM dual

UNION 

SELECT 2, 1 FROM dual

;
COMMIT;


CREATE TABLE a2 (i3 NUMBER, d NUMBER);

INSERT INTO a2 
SELECT 1, 100 FROM dual;
COMMIT;

BEGIN
FOR t IN (SELECT
  b.rowid,
a.*, b.* FROM a1 a
INNER JOIN a2 b
ON a.i2 = b.i3)

LOOP
  
dbms_output.put_line (t.d);
UPDATE a2
SET d = 200 WHERE ROWID = t.rowid;
END LOOP;

END;



я ожидал увидеть
100
200


а вижу
100
100

т.е. при открытии курсора for данные считываются и где-то сохраняются?
на это же куча памяти тратится, наверное.
...
Рейтинг: 0 / 0
почему два раза выводится 100
    #39867523
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Albatross,

Tвой селект возвращает:

rowid1,1,1,100
rowid2,2,1,100

Посему первая итерация:

1. выберет первую строку: rowid1,1,1,100
2. dbms_output.put_line(t.d) выплюнет 100
3. update изменит d первой строки на 200

Bторая итерация:

1. выберет вторую строку: rowid2,2,1,100
2. dbms_output.put_line(t.d) выплюнет 100
3. update изменит d второй строки на 200

Больше вопросов нет?

SY.
...
Рейтинг: 0 / 0
почему два раза выводится 100
    #39867527
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Albatrossт.е. при открытии курсора for данные считываются и где-то сохраняются?
на это же куча памяти тратится, наверное.

При открытии курсора ничего не считываeтся. Считывает FETCH. Kурсор хранит SCN момента открытия и посему FETCH ищет данные как они были на момент открытия курсора если надо роясь в UNDO. И если UDNO этого момента уже затерт то получишь ORA-01555 (snapshot too old).

SY.
...
Рейтинг: 0 / 0
почему два раза выводится 100
    #39867676
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Albatrossт.е. при открытии курсора for данные считываются и где-то сохраняются?RTFM Multiversion Read Consistency + Statement-Level Read Consistency (FAQ)


P.S. Соломон, полагаешь, твой вольно-косноязычный пересказ лучше?
...
Рейтинг: 0 / 0
почему два раза выводится 100
    #39867690
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYПосему первая итерация:

1. выберет первую строку: rowid1,1,1,100
Или первые сто строк.
...
Рейтинг: 0 / 0
почему два раза выводится 100
    #39867853
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Или первые сто строк.

Ну да, начинаем пихать мат анализ изучающему арифметику.

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


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