|
ROWNUM и его последствия
|
|||
---|---|---|---|
#18+
ROWNUM и его последствия: Давно решил спросить у мудрых Ораклистов в чем здесь проблема: CREATE TABLE MY_TABLE ( BID NUMBER(10) primary key, /* UNIQUE ASC INDEX на BID */ SID NUMBER(10), NAME VARCHAR2(10) ); Инсертим туда все что угодно, значения не имеет. Теперь самое интересное SELECT BID, SID, NAME FROM MY_TABLE WHERE BID>= (SELECT MAX(BID) FROM (SELECT BID FROM MY_TABLE WHERE BID>=6926 AND BID<=7026 AND ROWNUM<=10) ) Приводит к ошибке, да к какой: ORA-03113, end-of-file on communication channel Правиться так: SELECT BID, SID, NAME FROM MY_TABLE WHERE BID>= (SELECT MAX(BID) FROM (SELECT BID FROM MY_TABLE WHERE BID>=6926 AND BID<=7026) WHERE ROWNUM<=10 ) Все ОК, сколько то там роус селектед. Вот не понятно, почему я должен ROWNUM за скобки ставить? По идее если у меня на BID создан ASC индекс, то запрос SELECT BID FROM MY_TABLE WHERE BID>=6926 AND BID<=7026 AND ROWNUM<=10 возвратит мне 10 записей в которых BID будут не перемешаны хаотично (так как не используеться ORDER BY) а возвратяться в порядке возрастания. Далее береться максимальное значение из этой выборки и руководствуясь им делаеться окончательный запрос. Допустим есть некий конфликт индексов между запросами SELECT BID, SID, NAME FROM MY_TABLE и SELECT BID FROM MY_TABLE WHERE BID>=6926 AND BID<=7026 AND ROWNUM<=10. Но, даже если я заменю SELECT BID, SID, NAME FROM MY_TABLE на SELECT ID FROM MY_SOME_TABLE WHERE ID>=...(здесь подзапрос), то все равно возникнет ошибка. Так в чем же здесь дело??????? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2001, 16:44 |
|
|
start [/forum/topic.php?fid=52&msg=32011613&tid=1993562]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
34ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 125ms |
0 / 0 |