Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как указать сортровку при апдейте в Оракле ?


Страницы:   1 2

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]

И что, никак ? Ладно, я уже через курсор сделал.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо