![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как указать сортровку при апдейте в Оракле ?
ANB © (2005-05-17 12:32:00)Делаю апдейт :
update Step S
set S.Num = rownum * 10
where S.Test_ID = :Test_ID
Все замечательно работало, пока не повесил на Step еще один индекс. Съехала сортировка и теперь не так идет перенумерация. В селекте можно ордер бай добавить. А как здесь ? Или без курсора никак ?
Sergey13 (2005-05-17 15:44:00) [21]2[17] Desdechado © (17.05.05 15:40)
> а он назначается Ораклом как попало
Не то что бы "как попало", но сортировать по нему бестолку. 8-)
ANB (2005-05-17 15:42:00) [22]
> Johnmen © (17.05.05 15:30) [15]
ну так порядок все равно хранить в num придется. А кнопки делать вверх-вниз лень. Вывел в грид num, народу показал - все довольны.
Desdechado (2005-05-17 15:40:00) [23]странно про индексы-то...
я вот когда с IB на Oracle перебрался, отлавливал у себя в программе баги такого рода:
- в IB если делаешь SELECT * FROM tbl, то, при наличии первичного или уникального ключа, данные выбираются отсортированными по нему
- в Oracle при такой же операции данные выбираются отсортированными по rowid, а он назначается Ораклом как попало (это всего лишь ВНУТРЕННИЙ идентификатор строки в базе)
Поэтому пришлось под Оракл вставлять явные сортировки.
Sergey13 (2005-05-17 15:37:00) [24]2[14] ANB © (17.05.05 15:17)
Я делал подобное. Но на клиенте в цикле прокручивал датасет и перенумеровывал.
Johnmen (2005-05-17 15:30:00) [25]>ANB © (17.05.05 15:17) [14]
>в автомате добавляю в него по 10 и сортирую по нему же.
Не понял... Это зачем ?
>И юзер должен иметь возможность ее менять.
Ну и пусть меняет.
Любая "смена" разложима на атомарные операции перестановки. Их и надо делать....
Или ты о чём ?
ANB (2005-05-17 15:17:00) [26]
> Johnmen © (17.05.05 15:11) [13]
- не, там уже ничего не придумаешь лучше. Хотя попробуй :
Есть шаги (записи в таблице Step), которые надо выполнять в строгой последовательности. И юзер должен иметь возможность ее менять.
Я реализовал - завел поле num, в автомате добавляю в него по 10 и сортирую по нему же. Для красоты, если юзер начнем жестоко менять нумерацию, делая 15, 16, 17 я сделал перенумерацию с сохранением старого порядка.
Johnmen (2005-05-17 15:11:00) [27]>- типа ?
Типа структура/логика БД.
ANB (2005-05-17 15:06:00) [28]
> но я бы правил консерваторию :)
- типа ?
> Sergey13 © (17.05.05 15:04) [11]
- жаль. Ну пусть курсором обновляется.
Sergey13 (2005-05-17 15:04:00) [29]2[9] ANB © (17.05.05 14:55)
При "чистом" селекте данные берутся из индекса. Апдейтится же сама таблица, а не индекс. Порядок, ИМХО, все равно не гарантируется. Просто везло наверное раньше. 8-)
>Дык есть способ (хинтануть например или еще что) ?
Я не знаю такого хинта. 8-)
Johnmen (2005-05-17 15:02:00) [30]Попробуй добавить в where ... and (S.Step+1=S.Step+1)
но я бы правил консерваторию :)
ANB (2005-05-17 14:55:00) [31]
> Sergey13 © (17.05.05 13:19) [5]
- при апдейте с where курсор неявно все равно создается. И выборка идет. Правила те же. Только теперь на уникальный индекс переключился. Дык есть способ (хинтануть например или еще что) ?
ANB (2005-05-17 14:24:00) [32]
> DenK_vrtz © (17.05.05 13:25) [7]
ой, да ладно, кошерно, не кошерно. Почему бы и не поюзать, если работает. Я и в DDL использовал rownum.
DenK_vrtz (2005-05-17 13:25:00) [33]>ANB ©
rownum использовать в DML-операции, как-то, мягко сказать, не по-человечески :)
Johnmen (2005-05-17 13:20:00) [34]>см. сабж
Посмотрел. Не увидел... М.б. мне к окулисту сходить ? :)))
Но потелепатив малька, думаю, что у тебя что-то в консерватории (в структуре/логике БД) не то.
Sergey13 (2005-05-17 13:19:00) [35]2[4] ANB © (17.05.05 13:16)
Там сортировка - побочный эфект вроде. Просто данные при селектеиз индекса берутся, а не из таблицы. Но тут то селекта нет. Хотя может я и ошибаюсь.
ANB (2005-05-17 13:16:00) [36]
> Тут скорее вопрос почему раньше работало. 8-)
- да есть такая фича в оракле. Если индекс один и запрос такой, что он юзается, то данные приходят в сортировке по нему сами.
> Ты вообще о чём ???
см. сабж. Там перенумерация в подчиненной таблице. Как в старом GWBasic перенумерация операторов.
Johnmen (2005-05-17 13:14:00) [37]Какая сортировка ? Где сортировка ? Какая перенумерация ? Где здесь ?
Ты вообще о чём ???
Sergey13 (2005-05-17 13:13:00) [38]>Все замечательно работало, пока не повесил на Step еще один индекс.
Тут скорее вопрос почему раньше работало. 8-)
ANB (2005-05-17 12:57:00) [39]И что, никак ? Ладно, я уже через курсор сделал.