ODBC с колонкой ключей запуска Oracle - PullRequest
0 голосов
/ 23 ноября 2011

Я пытаюсь обновить существующий код, который должен записывать данные в различные базы данных (SQL, Access, Oracle) через ODBC, но у меня возникли некоторые проблемы с Oracle, и я ищу любые предложения.

Я настроил базу данных Oracle с помощью Trigger (базовое онлайн-руководство, которое я хотел бы поддержать).

CREATE TABLE TABLE1 (
    RECORDID NUMBER      NOT NULL PRIMARY KEY,
    ID       VARCHAR(40) NULL,
    COUNT    NUMBER      NULL

);
GO

CREATE SEQUENCE TABLE1_SEQ 
GO

CREATE or REPLACE TRIGGER TABLE1_TRG
BEFORE INSERT ON TABLE1
FOR EACH ROW
    WHEN (new.RECORDID IS NULL)
    BEGIN
        SELECT TABLE1_SEQ.nextval 
        INTO :new.RECORDID 
        FROM dual;
    end;
GO

Затем я заполняю таблицу данных, используя SELECT * FROM TABLE1. Первая проблема заключается в том, что этот DataTable не знает, что столбец RecordId генерируется автоматически. Если у меня есть данные в моей таблице, я не могу их изменить, потому что я получаю ошибку

Невозможно изменить автоинкремент DataColumn с типом 'Double' после его имеет данные.

Если я продолжу игнорировать это, то быстро застряну. Если я создаю новый DataRow и пытаюсь вставить его, я не могу установить RecordID в DBNull.Value, потому что он жалуется, что столбец должен быть ненулевым (NoNullAllowedException). Однако я не могу сгенерировать значение самостоятельно, потому что я не знаю, какое значение мне следует использовать на самом деле, и не хочу испортить триггер, используя следующее доступное значение.

Любые предложения о том, как я должен вставлять данные без жалоб ODBC?

1 Ответ

3 голосов
/ 23 ноября 2011

Не похоже, что ваша первая проблема с базой данных Oracle.В Oracle нет такого понятия, как «автоинкремент».Вы уверены, что сообщение поступает из базы данных Oracle?

С Oracle вы сможете указать любое фиктивное значение при вставке для первичного ключа, и триггер перезапишет его.

В предоставленном вами описании также нет ничего, что помешало бы вам обновить это значение в Oracle (поскольку ваш триггер только для вставки), если у вас нет ссылок на внешний ключ для ключа.

...