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

случайному
НеофитSQL
из самых высокооплачиваемых работников из каждого отдела"

Кроме запроса в формате ad-hoc такой результат не имеет смысла.


НеофитSQL
Даст правильный ответ

не совпадающий с предыдущим
НеофитSQL
т.к. rowid используется внутри запроса



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

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

ЧЯДНТ?
Код: 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.
create table emp(deptno, sal)
as select mod(rownum,3), rownum from dual connect by level < 10;
Table created

-- Фсьуо харашо и не требует обновления, удобно, стильно, молодежно.

insert into emp
select * from emp
 where rowid in (select max(rowid) KEEP (DENSE_RANK first ORDER BY sal DESC) from emp e2 group by deptno)
 ;
3 rows inserted

-- Но тут случается "обновление колонок" и...

alter table emp add(f integer generated always as (1));
Table altered

insert into emp
select * from emp
 where rowid in (select max(rowid) KEEP (DENSE_RANK first ORDER BY sal DESC) from emp e2 group by deptno)
;
-- Упс, что-то пошло не так...
insert into emp
select * from emp
 where rowid in (select max(rowid) KEEP (DENSE_RANK first ORDER BY sal DESC) from emp e2 group by deptno)
 
ORA-54013: INSERT operation disallowed on virtual columns
 
SQL> 
...
Рейтинг: 0 / 0
эквивалент rowid для нетабличных строчек
    #40026422
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

Insert фигурировал у Stax, т.к он отвечал на другой вопрос.

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

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


от задачи зависит
мож и хорошо что разные люди, иногда даже так надо (+ random)

зы
выделить на октябрский парад по одному самому молодому сотруднику из каждого отдела

вручить приз самому высокооплачиваему по одному на отдел

и тд

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

случайному
НеофитSQL
из самых высокооплачиваемых работников из каждого отдела"

Кроме запроса в формате ad-hoc такой результат не имеет смысла.


НеофитSQL
Даст правильный ответ

не совпадающий с предыдущим
НеофитSQL
т.к. rowid используется внутри запроса



В очередной раз пожалею бедолагу, которому попадёт на сопровождение ваш код. Угадывать, почему сегодня в отчёте Иванов, хотя вчера был Петров, а данные в таблице не менялись уже год - впустую потраченные часы чьей-то жизни.


Трудно сказать вы это написали потому что придираетесь к деталям, или неспособны мыслить абстрактно.

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

Код: 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.
SQL> create table dropme_t (deptno, sal) as select 1,1 from dual;

Table created.

SQL> select * from dropme_t where rowid in (select max(rowid) from dropme_t group by deptno);

    DEPTNO        SAL
---------- ----------
         1          1

SQL> alter table dropme_t rename to dropme_tt;

Table altered.

SQL> create or replace view dropme_t as select distinct * from dropme_tt;

View created.

SQL> select * from dropme_t where rowid in (select max(rowid) from dropme_t group by deptno);
select * from dropme_t where rowid in (select max(rowid) from dropme_t group by deptno)
                             *
ERROR at line 1:
ORA-01446: cannot select ROWID from, or sample, a view with DISTINCT, GROUP BY,
etc.



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


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