Я работаю с Toad for Oracle 12.1
моей моей базой данных. У меня есть таблица под названием TBLEMPLOYEE
, которые уже содержат некоторые данные в нем и, Column Name
называется ID
, чьи данные значения увеличиваются от 1 до N.Жаба для Oracle, Редактирование ID Столбец для автоинкремента ID
ID Name Gender DateOfBirth Type
------------------------------------
1 Mark Male 10/10/1982 1
2 Mary Female 11/11/1981 2
3 Esther Female 12/12/1984 2
4 Matthew Male 9/9/1983 1
5 John Male 5/5/1985 1
6 Luke Male 6/6/1986 1
Теперь я хочу, чтобы изменить Column ID
таким образом, что она будет иметь автоинкрементным ID, когда я добавляю новые данные в Table
.
Я знаю, что в жабе мы можем это сделать, когда создадим New Table
с этим поведением. Например, при использовании Create Table
и во вновь созданном Column
, мы могли бы установить Default/Virtual/Identity
настройки как Identity
:
И Toad
покажет интерфейс с кучей настроек, чтобы сделать это:
И будет автоматически переведен на:
(START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999999999999999999999 CACHE 20 NOCYCLE ORDER NOKEEP)
В настройках Default/Virtual/Identity
.
Но я не могу сделать то же самое, когда я делаю Alter Table
вместо Create Table
.
Почему это так?
И поскольку у меня уже есть некоторые данные в TBLEMPLOYEE
, я хочу избежать создания новой таблицы и повторной установки данных, если это возможно.
Как я могу это сделать?
Это текущий сценарий SQL (если это может помочь):
ALTER TABLE MYSCHEMA.TBLEMPLOYEE
DROP PRIMARY KEY CASCADE;
DROP TABLE MYSCHEMA.TBLEMPLOYEE CASCADE CONSTRAINTS;
CREATE TABLE MYSCHEMA.TBLEMPLOYEE
(
ID NUMBER NOT NULL,
NAME VARCHAR2(80 BYTE) NOT NULL,
GENDER VARCHAR2(6 BYTE),
DATEOFBIRTH DATE,
EMPLOYEETYPE INTEGER NOT NULL,
)
TABLESPACE USERS
RESULT_CACHE (MODE DEFAULT)
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
ALTER TABLE MYSCHEMA.TBLEMPLOYEE ADD (
PRIMARY KEY
(ID)
USING INDEX
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
ENABLE VALIDATE);
Я пробовал ваше предложение, но я получил следующую ошибку - любую идею? ALTER TABLE MYSCHEMA.TBLEMPLOYEE ИЗМЕНИТЬ (ID DEFAULT (НАЧАТЬ С 7 Инкримент 1 MINVALUE 1 MAXVALUE 9999999999999999999999999999 CACHE 20 NOCYCLE ORDER NOKEEP)) Ошибка в строке 3 ORA-00936: отсутствует выражение – Ian
Я думаю, что то, что вы хотите сделать, это переопределить последовательность , Для этого вам, вероятно, следует воссоздать последовательность https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6015.htm#i2067093 –
Вот что я * не * хочу делать на самом деле. .. Если возможно, я хочу сохранить текущие данные неповрежденными ... :(см. Мой вопрос: «И поскольку у меня уже есть некоторые данные в TBLEMPLOYEE, я хочу избежать создания новой таблицы и повторной установки данных, если возможно . " – Ian