我写这个触发器监视一个名为employees的表,当从该表中删除一个雇员的触发器应该触发,并复制员工我们想从表中员工删除,并把另一个表称为deleted_employees,但是当我把下面的SQL语句从 员工删除WHERE雇员= 100 SQL错误说:如何写一个触发器来移动数据我想从表中删除它到antother删除它之前
Error starting at line 17 in command:
delete from employees where employee_id = 100
Error report:
SQL Error: ORA-02292: integrity constraint (HR.DEPT_MGR_FK) violated - child
record found
02292. 00000 - "integrity constraint (%s.%s) violated - child record found"
*Cause: attempted to delete a parent key value that had a foreign
dependency.
*Action: delete dependencies first then parent or disable constraint.
CREATE OR REPLACE TRIGGER EMPLOYEE_DELETED
BEFORE DELETE ON EMPLOYEES
DECLARE
CURSOR CUR_EMP IS
SELECT EMPLOYEE_ID , FIRST_NAME , LAST_NAME , EMAIL ,
PHONE_NUMBER , HIRE_DATE , JOB_ID , SALARY ,
COMMISSION_PCT , MANAGER_ID , DEPARTMENT_ID
FROM EMPLOYEES;
EMP_REC CUR_EMP%ROWTYPE;
BEGIN
OPEN CUR_EMP;
while(CUR_EMP%FOUND) LOOP
FETCH CUR_EMP INTO EMP_REC;
INSERT INTO deleted_employees
(EMPLOYEE_ID , FIRST_NAME , LAST_NAME ,
EMAIL ,
PHONE_NUMBER , HIRE_DATE ,job_id , salary ,
COMMISSION_PCT , MANAGER_ID , DEPARTMENT_ID)
VALUES
(EMP_REC.EMPLOYEE_ID ,EMP_REC.FIRST_NAME ,EMP_REC.LAST_NAME ,
EMP_REC.EMAIL , EMP_REC.PHONE_NUMBER , EMP_REC.HIRE_DATE ,
EMP_REC.JOB_ID , EMP_REC.SALARY , EMP_REC.COMMISSION_PCT ,
EMP_REC.MANAGER_ID , EMP_REC.DEPARTMENT_ID);
END LOOP;
CLOSE CUR_EMP;
END;
我不知道如何测试触发器,有什么想法?!
你的错误与触发器无关(不是说触发器是正确的没有双重检查,循环有点奇怪)。您试图删除在外键中引用的行;你不能因为它违反了数据库的完整性。 – Ben
那么我能做些什么来解决它。 –
您需要找出哪些数据依赖于您首先要删除的内容。如果你不想要数据,那么在删除你的内容之前删除它。如果你确实想保留这些数据,那么不要删除任何东西...... – Ben