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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

Не требует rowid вообще.
Там задача из разряда "избавиться от дублей", которая обсосана в разных вариантах не один десяток раз.
...
Рейтинг: 0 / 0
10.12.2020, 14:22
    #40026369
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эквивалент rowid для нетабличных строчек
Собственно, запрос (от 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
10.12.2020, 14:24
    #40026372
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эквивалент rowid для нетабличных строчек
andrey_anonymous
...

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

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

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

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

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

нет на оба

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

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

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

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

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

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


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

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


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

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


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


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

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

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

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


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

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

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

booby

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

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

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

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


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

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

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

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

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


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