2016-04-13 2 views
0

Я портирую приложение на базе SQL Server в Oracle. Наш Oracle DBA предоставил мне схему, которая должна была быть идентична исходной схеме SQL Server (и сгенерирована из нее), но автоматические сгенерированные ключи отсутствуют. Я пытаюсь изменить эти таблицы PK из нормального INT для увеличения. Я делаю это с Oracle SQL Developer 4.0.3 и Oracle 12c.Добавить автоматически сгенерированный ключ в существующий ПК в Oracle

Ошибка, которую я получаю ORA-01442: column to be modified to NOT NULL is already NOT NULL Я получаю это после редактирования таблицы, выбора столбца и установки его раскрывающегося списка «Идентификация» в «Сгенерировано как идентификатор». Я не уверен, почему разработчик SQl пытается сделать его недействительным, когда он уже является ПК.

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

Спасибо.

ответ

3

Если столбец уже определен как NOT NULL, нет необходимости переопределять его как NOT NULL. Поэтому вы получаете ошибку ora-01442.

Лучший способ для получения значений последовательности, такие как идентичность в SQL Server, это определить столбец с последовательностью по умолчанию, перед тем как вставлять строки:

CREATE SEQUENCE SEQ_NAME 
START WITH  1 
INCREMENT BY 1 
NOCACHE 
NOCYCLE; 

ALTER TABLE table_name MODIFY column_name INT DEFAULT SEQ_NAME.NEXTVAL; 

PD: Этот параметр по умолчанию работает с 12 в. До 11 г или менее вы должны создать триггер

Смежные вопросы