|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
На форуме есть немало примеров, где знатоки SQL использовали внутри запроса выборку по rowid как таблицу указателей (собственно, так и есть). Удобство - скорость, лаконичность, читабельность. Например, тут: 22234769 Я это max(rowid) взял на вооружение, успешно пользуюсь в случаях, когда речь идет о строках в настоящих таблицах. А вот когда нужно работать с синтетическими строками, rowid уже не катит, и приходится строками манипулировать не по ссылке, а по их значению. Есть ли замена для rowid в таких случаях? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 08:36 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
НеофитSQL А вот когда нужно работать с синтетическими строками настолько большого количества, что вдруг становится нужен "адрес" строки? Ответьте для начала себе на этот вопрос, прежде чем разводить флуд в очередной теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 11:51 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
env, вопрос ведь в принципе не в количестве, а в том как мозг повернут. "реляционная теория" и "адрес" - это жесткий оксюморон, здесь нельзя прикрыться "новичком", даже чешским. SQL и адрес - эээммм... ну, по крайней мере, задумывался он точно не для этого... Не все, что ходит как утка, и крякает как утка, является уткой. ... В этом еще одно отличие работы с бд от "программирования". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 12:35 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
booby, Мне в принципе непонятно, что мешает для синтетических строк делать уникальный ключ и его использовать. Но если уж речь идёт о max/min, то, наверное, ТС генерит довольно большой объём и почему-то не может адресовать в нём конкретную строку. А использование max/min по rowid в боевом коде, кроме как в разовых задачах разгребания авгиевых конюшен легаси данных, тем более не представляется необходимым. Ни повторяемости результата, ни гарантии получения конкретной строки... В общем, очередная флудильная тема от ТС, ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 12:42 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
env, вопрос был про адрес , а вовсе не про уникалный или иной ключ поиска . Этого нельзя понять в рамках sql. Поэтому и ответов не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 12:45 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
booby Поэтому и ответов не будет. Зависит от задачи. К примеру, если ТС хочет гонять DML по исходным строкам сложного join, то волшебным словом будет "ALIAS". А если нужна просто симуляция первичного ключа в синтетических демках, то "ROWNUM" ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 13:02 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
andrey_anonymous, а это ничего, что тс не хочет манипулировать значениями по их значению, но хочет получать доступ к значениям по ссылке? Вот такая, панимаешь, лингвистика... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 13:42 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
andrey_anonymous booby Поэтому и ответов не будет. Зависит от задачи. К примеру, если ТС хочет гонять DML по исходным строкам сложного join, то волшебным словом будет "ALIAS". А если нужна просто симуляция первичного ключа в синтетических демках, то "ROWNUM" Rownum возможно был бы ответом на мой вопрос, если бы он был невидимой псевдоколонкой как rowid. Посмотрите на пример в первом сообщении и попробуйте его переписать без rowid и без перечисления всех колонок по одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:07 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
booby а это ничего, что тс не хочет манипулировать значениями по их значению, но хочет получать доступ к значениям по ссылке? Вот такая, панимаешь, лингвистика... "Область определения" можно описать как "в случае, когда очень задорого отбираем мелкое подмножество из очень большого и хотим проставить метку на отобранные записи, можно воспользоваться rowid найденных записей в пределах согласованного вызова". Согласованность может обеспечиваться по-разному, от serializable через select for update и по самый dbms_lock/lock table. Отдельно отмечу, что в практических задачах иногда "в пределах согласованного вызова" можно ослабить до "в пределах одного user call" даже в read committed - если, конечно, квалификация разраба и особенности бизнес-процесса позволяют. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:10 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
НеофитSQL пример в первом сообщении Не требует rowid вообще. Там задача из разряда "избавиться от дублей", которая обсосана в разных вариантах не один десяток раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:12 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
Собственно, запрос (от Stax): Код: plsql 1. 2.
Этот красивый и универсальный запрос содержит все столбцы из таблицы emp, и не требует обновления если меняются колонки (кроме dept и sal, по которым строится запрос). Такой запрос не работает с синтетическими строками, потому что у них нет rowid и мне неизвестно можно ли его красиво переписать для случая, где emp это не таблица, а произвольный result set. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:22 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
andrey_anonymous ... "Область определения" можно описать как "в случае, когда очень задорого отбираем мелкое подмножество из очень большого и хотим проставить метку на отобранные записи, можно воспользоваться rowid найденных записей в пределах согласованного вызова". ... И что, rowid, внезапно, в рамках так определенной области, превращается из ключа поиска специального сорта в адрес, в смысле её прямого использования в текстах sql запросов? Это в программировании, раз оно крякает, то оно и есть утка. В (стандартном) sql уток, за рамками ключей поиска, не существует. Бывают еще структуры, поддерживающие быстрый поиск на заданных ключах. Т.е., в самом благоприятном выражении, он жаждет "прямого динамического индекса" к набору данных. Атрибуты ему, в рамках этих ожиданий, до лампады. Впрочем, если все запросы превратить в канальные функции, то что-то на эту тему может быть и изобразится, путем использования дополнительных функций доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:24 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
НеофитSQL ... Такой запрос не работает с синтетическими строками, потому что у них нет rowid и мне неизвестно... о боже... то есть ты совсем-совсем не понял, что там написано... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:27 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
НеофитSQL Этот красивый и универсальный запрос нет на оба Какой бизнес-функционал выполняется таким запросом? Что вернёт запрос после alter table move, после добавления или обновления строк в таблице? Это способ получить в моменте решение текущей проблемы, например с задвоением строк по ожидаемому ключу. при этом, осознавая, что вернётся случайная строка из соответствующих условию. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:28 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
Разговор уходит в какие-то концептуальные дебри архитектур, склада ума программистов и аллергии к указателям. Я всего лишь попросил помочь изменить запрос из двух строчек, чтобы он мог работать не только с таблицами, но и с произвольными вьюхами. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:32 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
env> Какой бизнес-функционал выполняется таким запросом? "Подмножество таблицы сотрудников содержащее по одному из самых высокооплачиваемых работников из каждого отдела" env> Что вернёт запрос после alter table move, после добавления или обновления строк в таблице? Даст правильный ответ, т.к. rowid используется внутри запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:42 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
НеофитSQL Даст правильный ответ, ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:46 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
booby НеофитSQL ... Такой запрос не работает с синтетическими строками, потому что у них нет rowid и мне неизвестно... о боже... то есть ты совсем-совсем не понял, что там написано... Я не против пообсуждать себя, но если вы не можете переписать 2-строчный запрос чтоб он со вьюхой работал, так и скажите. Я пока не смог, думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:46 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
123йй НеофитSQL Даст правильный ответ, Если зарплаты изменились, работники поменялись, или в каком-то из отделов есть более одной топ зарплаты, то и результат может измениться. Это ожидаемо и верно. Но, не работает с произвольными представлениями, только с таблицами. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:49 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
возьми подходящий к случаю dbms_crypto.hash от ключевой комбинации атрибутов своего отношения. В широком диапазоне случаев, при разумном выборе функции хеширования, это даст то, что ты ищешь. Или всегда добавляй к набору вычислимый столбец sys_guid. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:51 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
booby возьми подходящий к случаю dbms_crypto.hash от ключевой комбинации атрибутов своего отношения. В широком диапазоне случаев, при разумном выборе функции хеширования, это даст то, что ты ищешь. Или всегда добавляй к набору вычислимый столбец sys_guid. правда, это всё-таки зависит от того, что ты ищешь на самом деле - как приделать одностолбцовый суррогатный ключ поиска, или всё-таки настаиваешь на имитации "доступа по адресу". Второе тривиальным способом и сделать нельзя и, если такое желание возникат то, прежде всего, ему следует хорошенько удивиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 14:57 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
НеофитSQL Этот красивый и универсальный Вкус развивается, не отчаивайтесь. booby И что, rowid, внезапно, в рамках так определенной области, превращается из ключа поиска специального сорта в адрес, в смысле её прямого использования в текстах sql запросов? Есть сомнения? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 15:00 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
andrey_anonymous .... Есть сомнения? к счастью, нет. Спасибо, здоров. И вам не болеть. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 15:04 |
|
эквивалент rowid для нетабличных строчек
|
|||
---|---|---|---|
#18+
booby возьми подходящий к случаю dbms_crypto.hash от ключевой комбинации атрибутов своего отношения. В широком диапазоне случаев, при разумном выборе функции хеширования, это даст то, что ты ищешь. Или всегда добавляй к набору вычислимый столбец sys_guid. Добавить столбец я умею, select rownum, e.* Удалить без перечисления всех других столбцов - не умею. Перечислять все столбцы в контексте, где задача требует "всю строку" не хочу. Это все равно что record копировать по полям, только хуже. Если бы умел, прелести rowid меньше бы интересовали. Мой вопрос как переписать две строчки без rowid пока висит. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2020, 15:08 |
|
|
start [/forum/topic.php?fid=52&msg=40026364&tid=1880619]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 147ms |
0 / 0 |