Я встречаюсь с ошибкой при обновлении одной записи несколько раз.Обновление одной записи несколько раз
SQL код:
UPDATE EMPLOYEES
SET FIRST_NAME='J',
LAST_NAME='E',
EMAIL='[email protected]',
PHONE_NUMBER='123456789',
HIRE_DATE='10/13/2015',
JOB_ID=(SELECT JOB_ID FROM JOBS WHERE JOB_TITLE='Programmer'),
SALARY=4000,
COMMISSION_PCT=0,
DEPARTMENT_ID=(SELECT DEPARTMENT_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME='IT'),
MANAGER_ID=(SELECT MANAGER_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME='IT')
WHERE EMPLOYEE_ID=15;
Сообщение об ошибке:
Error starting at line : 1 in command -
UPDATE EMPLOYEES SET FIRST_NAME='J', LAST_NAME='E', EMAIL='[email protected]', PHONE_NUMBER='123456789',
HIRE_DATE='10/13/2015',
JOB_ID=(SELECT JOB_ID FROM JOBS WHERE JOB_TITLE='Programmer'), SALARY=4000, COMMISSION_PCT=0,
DEPARTMENT_ID=(SELECT DEPARTMENT_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME='IT'),
MANAGER_ID=(SELECT MANAGER_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME='IT') WHERE EMPLOYEE_ID=15
Error report -
SQL Error: ORA-00001: unique constraint (GAS.JHIST_EMP_ID_ST_DATE_PK) violated
ORA-06512: at "GAS.ADD_JOB_HISTORY", line 10
ORA-06512: at "GAS.UPDATE_JOB_HISTORY", line 2
ORA-04088: error during execution of trigger 'GAS.UPDATE_JOB_HISTORY'
00001. 00000 - "unique constraint (%s.%s) violated"
*Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
For Trusted Oracle configured in DBMS MAC mode, you may see
this message if a duplicate entry exists at a different level.
*Action: Either remove the unique restriction or do not insert the key.
Вот триггер: (опять-таки из раздела комментариев)
CREATE OR REPLACE TRIGGER "GAS"."UPDATE_JOB_HISTORY"
AFTER UPDATE OF job_id, department_id
ON employees FOR EACH ROW
BEGIN
add_job_history(:old.employee_id,
:old.hire_date,
sysdate,
:old.job_id,
:old.department_id);
END;
/
ALTER TRIGGER "GAS"."UPDATE_JOB_HISTORY" ENABLE;
Вот код для add_job_history
.
create or replace PROCEDURE add_job_history (p_emp_id job_history.employee_id%type ,
p_start_date job_history.start_date%type ,
p_end_date job_history.end_date%type , p_job_id job_history.job_id%type ,
p_department_id job_history.department_id%type)
IS
BEGIN
INSERT INTO job_history (employee_id,
start_date,
end_date,
job_id,
department_id)
VALUES(p_emp_id,
p_start_date,
p_end_date,
p_job_id,
p_department_id);
END add_job_history;
Возможно, вы не можете обновить HIRE_DATE. Это может быть ограничение, возможно, EmployeeId с StartDate является основным ключом здесь. Попробуйте обновить без HIRE_DATE –
Какие-нибудь триггеры? – jarlh
, но в требовании вам также необходимо обновить rent_date –