powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / эквивалент rowid для нетабличных строчек
25 сообщений из 32, страница 1 из 2
эквивалент rowid для нетабличных строчек
    #40026246
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форуме есть немало примеров, где знатоки SQL использовали внутри запроса выборку по rowid как таблицу указателей (собственно, так и есть).
Удобство - скорость, лаконичность, читабельность. Например, тут: 22234769

Я это max(rowid) взял на вооружение, успешно пользуюсь в случаях, когда речь идет о строках в настоящих таблицах.

А вот когда нужно работать с синтетическими строками, rowid уже не катит, и приходится строками манипулировать не по ссылке, а по их значению.
Есть ли замена для rowid в таких случаях?
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026299
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
А вот когда нужно работать с синтетическими строками

настолько большого количества, что вдруг становится нужен "адрес" строки?

Ответьте для начала себе на этот вопрос, прежде чем разводить флуд в очередной теме.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026321
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

вопрос ведь в принципе не в количестве, а в том как мозг повернут.

"реляционная теория" и "адрес" - это жесткий оксюморон, здесь нельзя прикрыться "новичком", даже чешским.
SQL и адрес - эээммм...
ну, по крайней мере, задумывался он точно не для этого...

Не все, что ходит как утка, и крякает как утка, является уткой.
...
В этом еще одно отличие работы с бд от "программирования".
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026325
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

Мне в принципе непонятно, что мешает для синтетических строк делать уникальный ключ и его использовать. Но если уж речь идёт о max/min, то, наверное, ТС генерит довольно большой объём и почему-то не может адресовать в нём конкретную строку.

А использование max/min по rowid в боевом коде, кроме как в разовых задачах разгребания авгиевых конюшен легаси данных, тем более не представляется необходимым. Ни повторяемости результата, ни гарантии получения конкретной строки...

В общем, очередная флудильная тема от ТС,
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026328
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

вопрос был про адрес , а вовсе не про уникалный или иной ключ поиска .
Этого нельзя понять в рамках sql.
Поэтому и ответов не будет.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026331
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Поэтому и ответов не будет.

Зависит от задачи.
К примеру, если ТС хочет гонять DML по исходным строкам сложного join, то волшебным словом будет "ALIAS".
А если нужна просто симуляция первичного ключа в синтетических демках, то "ROWNUM"
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026347
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

а это ничего, что тс не хочет манипулировать значениями по их значению, но хочет получать доступ к значениям по ссылке?
Вот такая, панимаешь, лингвистика...
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026362
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
booby
Поэтому и ответов не будет.

Зависит от задачи.
К примеру, если ТС хочет гонять DML по исходным строкам сложного join, то волшебным словом будет "ALIAS".
А если нужна просто симуляция первичного ключа в синтетических демках, то "ROWNUM"


Rownum возможно был бы ответом на мой вопрос, если бы он был невидимой псевдоколонкой как rowid.

Посмотрите на пример в первом сообщении и попробуйте его переписать без rowid и без перечисления всех колонок по одной.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026364
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
а это ничего, что тс не хочет манипулировать значениями по их значению, но хочет получать доступ к значениям по ссылке?
Вот такая, панимаешь, лингвистика...


"Область определения" можно описать как "в случае, когда очень задорого отбираем мелкое подмножество из очень большого и хотим проставить метку на отобранные записи, можно воспользоваться rowid найденных записей в пределах согласованного вызова".
Согласованность может обеспечиваться по-разному, от serializable через select for update и по самый dbms_lock/lock table.
Отдельно отмечу, что в практических задачах иногда "в пределах согласованного вызова" можно ослабить до "в пределах одного user call" даже в read committed - если, конечно, квалификация разраба и особенности бизнес-процесса позволяют.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026368
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
пример в первом сообщении

Не требует rowid вообще.
Там задача из разряда "избавиться от дублей", которая обсосана в разных вариантах не один десяток раз.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026369
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, запрос (от Stax):

Код: plsql
1.
2.
select * from emp
 where rowid in (select max(rowid) KEEP (DENSE_RANK first ORDER BY sal DESC) from emp e2 group by deptno)



Этот красивый и универсальный запрос содержит все столбцы из таблицы emp, и не требует обновления если меняются колонки (кроме dept и sal, по которым строится запрос).

Такой запрос не работает с синтетическими строками, потому что у них нет rowid и мне неизвестно можно ли его красиво переписать для случая, где emp это не таблица, а произвольный result set.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026372
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
...

"Область определения" можно описать как "в случае, когда очень задорого отбираем мелкое подмножество из очень большого и хотим проставить метку на отобранные записи, можно воспользоваться rowid найденных записей в пределах согласованного вызова".
...

И что, rowid, внезапно, в рамках так определенной области, превращается из ключа поиска специального сорта в адрес, в смысле её прямого использования в текстах sql запросов?

Это в программировании, раз оно крякает, то оно и есть утка.
В (стандартном) sql уток, за рамками ключей поиска, не существует.
Бывают еще структуры, поддерживающие быстрый поиск на заданных ключах.
Т.е., в самом благоприятном выражении, он жаждет "прямого динамического индекса" к набору данных.
Атрибуты ему, в рамках этих ожиданий, до лампады.

Впрочем, если все запросы превратить в канальные функции, то что-то на эту тему может быть и изобразится,
путем использования дополнительных функций доступа.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026375
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
...
Такой запрос не работает с синтетическими строками, потому что у них нет rowid и мне неизвестно...

о боже...
то есть ты совсем-совсем не понял, что там написано...
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026377
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Этот красивый и универсальный запрос

нет на оба

Какой бизнес-функционал выполняется таким запросом? Что вернёт запрос после alter table move, после добавления или обновления строк в таблице?

Это способ получить в моменте решение текущей проблемы, например с задвоением строк по ожидаемому ключу. при этом, осознавая, что вернётся случайная строка из соответствующих условию.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026380
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разговор уходит в какие-то концептуальные дебри архитектур, склада ума программистов и аллергии к указателям.

Я всего лишь попросил помочь изменить запрос из двух строчек, чтобы он мог работать не только с таблицами, но и с произвольными вьюхами.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026386
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env> Какой бизнес-функционал выполняется таким запросом?

"Подмножество таблицы сотрудников содержащее по одному из самых высокооплачиваемых работников из каждого отдела"

env> Что вернёт запрос после alter table move, после добавления или обновления строк в таблице?

Даст правильный ответ, т.к. rowid используется внутри запроса.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026388
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL


Даст правильный ответ,
который может не совпадать с ответом полученным при предыдущем и последующем запуске этого запроса.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026389
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby
НеофитSQL
...
Такой запрос не работает с синтетическими строками, потому что у них нет rowid и мне неизвестно...

о боже...
то есть ты совсем-совсем не понял, что там написано...


Я не против пообсуждать себя, но если вы не можете переписать 2-строчный запрос чтоб он со вьюхой работал, так и скажите.

Я пока не смог, думаю.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026392
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй
НеофитSQL


Даст правильный ответ,
который может не совпадать с ответом полученным при предыдущем и последующем запуске этого запроса.


Если зарплаты изменились, работники поменялись, или в каком-то из отделов есть более одной топ зарплаты, то и результат может измениться. Это ожидаемо и верно.

Но, не работает с произвольными представлениями, только с таблицами.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026393
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возьми подходящий к случаю dbms_crypto.hash от ключевой комбинации атрибутов своего отношения.
В широком диапазоне случаев, при разумном выборе функции хеширования, это даст то, что ты ищешь.

Или всегда добавляй к набору вычислимый столбец sys_guid.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026396
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
возьми подходящий к случаю dbms_crypto.hash от ключевой комбинации атрибутов своего отношения.
В широком диапазоне случаев, при разумном выборе функции хеширования, это даст то, что ты ищешь.

Или всегда добавляй к набору вычислимый столбец sys_guid.


правда, это всё-таки зависит от того, что ты ищешь на самом деле - как приделать одностолбцовый суррогатный ключ поиска,
или всё-таки настаиваешь на имитации "доступа по адресу".

Второе тривиальным способом и сделать нельзя и, если такое желание возникат то,
прежде всего, ему следует хорошенько удивиться.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026401
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Этот красивый и универсальный

Вкус развивается, не отчаивайтесь.

booby

И что, rowid, внезапно, в рамках так определенной области, превращается из ключа поиска специального сорта в адрес, в смысле её прямого использования в текстах sql запросов?

Есть сомнения?
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026402
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
....
Есть сомнения?

к счастью, нет.
Спасибо, здоров.
И вам не болеть.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026403
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby
возьми подходящий к случаю dbms_crypto.hash от ключевой комбинации атрибутов своего отношения.
В широком диапазоне случаев, при разумном выборе функции хеширования, это даст то, что ты ищешь.

Или всегда добавляй к набору вычислимый столбец sys_guid.


Добавить столбец я умею, select rownum, e.*

Удалить без перечисления всех других столбцов - не умею.
Перечислять все столбцы в контексте, где задача требует "всю строку" не хочу. Это все равно что record копировать по полям, только хуже.

Если бы умел, прелести rowid меньше бы интересовали.

Мой вопрос как переписать две строчки без rowid пока висит.
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026404
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
...
Перечислять все столбцы в контексте, где задача требует "всю строку" не хочу...

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


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