Вставить в определенное место в таблице БД Oracle? - PullRequest
1 голос
/ 19 мая 2011

Предположим, у меня есть таблица, содержащая следующие данные:

Name | Things
-------------
Foo  |   5
Bar  |   3
Baz  |   8

Если я хочу вставить строку, чтобы конечное состояние таблицы:

Name | Things
-------------
Foo  |   5
Qux  |   6
Bar  |   3
Baz  |   8

Возможно ли это?

Я понимаю, что мы обычно не полагаемся на порядок строк в таблице, но я унаследовал некоторый код, который делает именно это. Если я смогу вставить в локацию, я смогу избежать значительного рефакторинга.

Ответы [ 2 ]

7 голосов
/ 19 мая 2011

Как вы говорите, вы не можете полагаться на порядок строк в таблице (без ORDER BY).

Я бы, вероятно, реорганизовал код в любом случае - есть вероятность, что он сломается без предупреждения в какой-то момент в будущем - несомненно, лучше иметь дело с ним сейчас при контролируемых обстоятельствах?

3 голосов
/ 20 мая 2011

Я бы добавил столбец FLOAT в таблицу, и если вы хотите вставить строку между строками, значения которых в этом столбце равны 7.00000 и 8.000000 соответственно, ваша новая строка будет иметь значение 7.50000. Если затем вы захотите вставить строку между 7.00000 и 7.50000, новая строка получит 7.25000 и так далее. Затем, когда вы заказываете по этому столбцу, вы получаете столбцы в нужном порядке. Довольно легко модернизировать. Но не так крепко, как хочется. Вы должны отозвать все разрешения на обновление / вставку из таблицы и обработать ввод-вывод с помощью хранимой процедуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...