Как вставить 10000 значений в Oracle и сохранить их в правильном порядке? - PullRequest
1 голос
/ 23 января 2012

Я пытаюсь вставить 10000 значений в Oracle из C # и использую приведенный ниже код. ОЧЕНЬ важно, чтобы порядок значений в массиве, который я передаю, сохранялся в Oracle, однако каждый раз, когда я запускаю это, порядок значений меняется. Что я могу изменить, чтобы остановить изменение порядка, или есть совершенно другой подход, который я могу использовать, чтобы вставить 10000 значений в установленном порядке, который можно легко получить?

Список данных представляет собой массив типа double и размера 10000.

var oc = new OracleConnection(ConnectionString);
oc.Open();
var transaction = oc.BeginTransaction();
OracleCommand command = new OracleCommand("",oc);
command.CommandText = ("INSERT INTO DEMO (DISTRIBUTIONSLICES) values (:DISTRIBUTIONSLICES)");

OracleParameter distributionslices = new OracleParameter("DISTRIBUTIONSLICES",OracleDbType.Varchar2, ParameterDirection.Input);

distributionslices.Value = datalist;

command.Parameters.Add(distributionslices);
command.ArrayBindCount = 10000;

command.ExecuteNonQuery();

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

7 голосов
/ 23 января 2012

Ошибка парадигмы: строки в таблице базы данных SQL, как правило, не имеют порядка, на который можно положиться.

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

Затем вы можете получить строки с ORDER BY в столбце заказа, и он даст вамстроки в нужном вам порядке.

4 голосов
/ 23 января 2012
  • Создать последовательность в базе данных (давайте назовем ее seq).
  • Изменить добавление таблицы (номер seq_id);
  • ВСТАВИТЬ В ДЕМО (DISTRIBUTIONSLICES, seq_id) значения (: DISTRIBUTIONSLICES, seq.nextval ())
  • выберите таким образом:

    Выберите * из демонстрационного заказа по seq_id

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