powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите понять логику rownum без явного order by
8 сообщений из 8, страница 1 из 1
Помогите понять логику rownum без явного order by
    #39885221
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть таблица с номерами, из которой мне нужно взять один произвольный свободный номер.
Делаю это я так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
update IDS
set STATUS = 1, CHANGED = sysdate, INFO = :info
where STATUS = 0
and ID > 10000
and ID < 90000
and rownum = 1
returning ID into :id


Запрос обновляет какую-то произвольную строку, задавая в ней STATUS=1. Какой вернется ID — не имеет значения, но может быть любым. Но на деле он получается не любым, а последовательным.
По ID в таблице задан первичный ключ, поэтому обычно эта произвольная строка имеет ID=10001, при повторных вызовах 10002, 10003 и так далее.
Но если вручную убрать выставленные статусы (задать STATUS=0 для всех обновленных строк), то при повторении запроса эти строки не используются и обновляются (и возвращаются ID) строки 10004, 10005 и т.д.
Если бы ID каждый раз были рандомные, либо если бы после обнуления статусов они начали использоваться повторно с 10001, то это было бы логично. Но почему нумерация продолжается, как если бы в таблице был какой-то указатель на строку?
...
Рейтинг: 0 / 0
Помогите понять логику rownum без явного order by
    #39885222
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
Код: plsql
1.
2.
and ID > 10000
and ID < 90000

Почитай план, чудак.
...
Рейтинг: 0 / 0
Помогите понять логику rownum без явного order by
    #39885223
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
У меня есть таблица с номерами, из которой мне нужно взять один произвольный свободный номер.
Делаю это я так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
update IDS
set STATUS = 1, CHANGED = sysdate, INFO = :info
where STATUS = 0
and ID > 10000
and ID < 90000
and rownum = 1
returning ID into :id


если бы после обнуления статусов они начали использоваться повторно с 10001, то это было бы логично.



как можно повторно, если Вы явно указываете STATUS = 0 (флажок повторно НЕ выбирать)

.....
stax
...
Рейтинг: 0 / 0
Помогите понять логику rownum без явного order by
    #39885228
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

предположу row migration.
...
Рейтинг: 0 / 0
Помогите понять логику rownum без явного order by
    #39885463
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic
Почитай план, чудак.

Код: plaintext
1.
2.
3.
4.
UPDATE STATEMENT  ALL_ROWSCost: 113  Bytes: 17  Cardinality: 1  			
	3 UPDATE IDS 		
		2 COUNT STOPKEY  	
			1 TABLE ACCESS FULL TABLE IDS Cost: 113  Bytes: 1 360 051  Cardinality: 80 003  
На что именно обратить внимание?

Stax
как можно повторно, если Вы явно указываете STATUS = 0 (флажок повторно НЕ выбирать)

Еще я писал « задать STATUS=0 для всех обновленных строк ».

проходил мимо...
предположу row migration.

По всей видимости да. А последовательность видимо потому, что записи в таблице тоже создавались последовательно.
...
Рейтинг: 0 / 0
Помогите понять логику rownum без явного order by
    #39885474
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
Но если вручную убрать выставленные статусы (задать STATUS=0 для всех обновленных строк)
в этой же сессии?
...
Рейтинг: 0 / 0
Помогите понять логику rownum без явного order by
    #39885486
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть в той же, хоть в новой. После commit, разумеется.
...
Рейтинг: 0 / 0
Помогите понять логику rownum без явного order by
    #39885512
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
На что именно обратить внимание?
На твой update. Тебе не нужно пытаться постичь интимную логику "у неё внутри с неонкой". Результат update-а не противоречит всему statement-у? - Тогда в чем претензия?
Хочешь чего-то особенного? - Будь добр сперва это заказать.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите понять логику rownum без явного order by
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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