Счастливые владельцы Oracle 7.3 ...

Дядя Петя
Дата: 31.05.2006 19:08:54
Не могли бы счастливые владельцы Oracle 7.3 проверить работоспособность двух запросов:

1)
SELECT * FROM
(SELECT rownum r, maintable.* FROM
(SELECT owner, table_name FROM all_tables
ORDER BY owner, table_name) maintable)
WHERE r between 1 AND 15

2)
SELECT * FROM
(SELECT rownum r, maintable.* FROM
(SELECT owner, table_name FROM all_tables
ORDER BY owner, LPAD(table_name, 30, '0')) maintable)
WHERE r between 1 AND 15
--
Дата: 31.05.2006 22:49:32
order by в подзапросах появился в 8i

так что - несчастные)
Дядя Петя
Дата: 01.06.2006 11:02:32
И что в таких случаях делать ?
orawish
Дата: 01.06.2006 11:34:07
ну, например, вырезать/обкомментировать
Типа - договориться писать order by ля-ля - в одну строку с первой позиции и перед упаковкой запроса в ~from делать
replace(s,chr(10)||'order by ',chr(10)||'--order by '
Дядя Петя
Дата: 01.06.2006 11:54:37
Проблема не в комментировании ORDER BY.
Вопрос стоит так: возможно ли на Oracle 7.3 делать сортировку и
при это корректно выводить номер строки (rownum) ?
Vadim_Maximov
Дата: 01.06.2006 11:57:36
А на 7-ке разве есть rownum?
mcureenab
Дата: 01.06.2006 12:08:57
Vadim_Maximov
А на 7-ке разве есть rownum?


Есть.
mcureenab
Дата: 01.06.2006 12:17:28
Дядя Петя
Не могли бы счастливые владельцы Oracle 7.3 проверить работоспособность двух запросов:



На кой такие навороты? Нужно получить первые 15 строк выборки? Так просто напиши запрос с сортировкой без всяких там rownum, а в программе, которая этот запрос выполняет выбери только 15 строк и пронумеруй.

Конечно, сортировка без явного ограничения на размер выборки может занять больше времени, поэтому для 8i и далее лучше применить твои запросы предварительно убрав пару скобок, которые как недавно выяснилось плохо сказываются на плане выполнения.

1)
SELECT rownum r, maintable.* FROM
(SELECT owner, table_name FROM all_tables
ORDER BY owner, table_name) maintable
WHERE rownum <= 15

2)
SELECT rownum r, maintable.* FROM
(SELECT owner, table_name FROM all_tables
ORDER BY owner, LPAD(table_name, 30, '0')) maintable
WHERE rownum <= 15
Elic
Дата: 01.06.2006 12:19:12
Дядя Петя
Вопрос стоит так: возможно ли на Oracle 7.3 делать сортировку и
при это корректно выводить номер строки (rownum) ?
Надёжно - никак.
Есть только танцы с бубнами:
  • кажущаяся упорядоченность данных как побочный эффект группировки;
  • указание хинтами доступа к таблице по индексу, могущему обеспечить нужный порядок без сортировки.