Ваша структура данных испорчена, что вас смущает. Почему вы называете user column AT_ID
. Также внешние ключи не объявляются. Лучший подход:
CREATE TABLE ACADEMICTRAINING (
USER_ID NUMBER(5) NOT NULL FOREIGN KEY REFERENCES USERFORM(USER_ID),
START_DATE DATE NOT NULL,
END_DATE DATE NOT NULL
INSTITUTION VARCHAR2(100) NOT NULL
COURSE VARCHAR2(70) NOT NULL
AT_DESCRIPTION VARCHAR2(200)
);
Вы действительно хотите иметь первичный ключ в таблице. В большинстве случаев я бы рекомендовал автоинкрементный первичный ключ. Но это трудно сделать автоматически в Oracle до Oracle 12. Такой столбец должен называться примерно так: ACADEMICTRAINING_ID
.
Вместо этого вам действительно нужен уникальный ключ. Я не знаю, что соответствует вашим требованиям, но допустим, что первые два столбца не могут быть повторены (может быть задействовано больше столбцов). Тогда:
ALTER TABLE ACADEMICTRAINING ADD CONSTRAINT UNQ_ACADEMICTRAINING_2
UNIQUE (USER_ID, START_DATE);
Все, что сказано, то, что вам нужно в вашем UPDATE
, - это способ выбрать , который строка. Примерно так:
UPDATE ACADEMICTRAINING
SET . . .
WHERE USER_ID = :USER_ID AND START_DATE = :START_DATE;
Если бы у вас был первичный ключ, он бы выглядел так:
UPDATE ACADEMICTRAINING
SET . . .
WHERE ACADEMICTRAINING_ID = :ACADEMICTRAINING_ID;