pl / sql触发我的代码

时间:2016-06-02 18:19:32

标签: plsql

编写一个触发器emp_dept_hist_trg,监视employee表,如下所示。 - OLD_DEPARTMENT_NAME始终是'(新员工)'。 - 如果新的department_id为NULL,则NEW_DEPARTMENT_NAME将为' ---'。 当员工更改他/她的部门(旧的department_id不等于新的department_id)时,触发器会自动在emp_dept_hist表中插入一行(记录)。 (如果旧的department_id和new department_id都为NULL(从NULL部门到NULL部门),则触发器不会在emp_dept_hist表中插入行(记录)。) - 根据旧的department_id从department表中查找旧的部门名称。 - 如果旧的department_id为NULL,则OLD_DEPARTMENT_NAME将为' ---'。 - 根据新的department_id从department表中查找新的部门名称。 - 如果新的department_id为NULL,则NEW_DEPARTMENT_NAME将为' ---'。 - SYSDATE可以在EFFECTIVE_DATE列中使用。

actual table:
CREATE TABLE emp_dept_hist

(

EMPLOYEE_ID NUMBER(4) NOT NULL,

EMPLOYEE_NAME VARCHAR2(50) NOT NULL,

OLD_DEPARTMENT_NAME VARCHAR2(100) NOT NULL,

NEW_DEPARTMENT_NAME VARCHAR2(100) NOT NULL,

EFFECTIVE_DATE DATE NOT NULL

);

我的代码:

Create or Replace
    TRIGGER emp_dept_hist_trg
    AFTER UPDATE or DELETE ON employee
    FOR EACH ROW
    DECLARE
    v_count NUMBER;
    old_department_name varchar2(30);
    new_department_name varchar2(30);
    BEGIN

INSERT INTO emp_DEPT_HIST 
VALUES(:OLD.employee_id, 
:OLD.employee_name, 
old_department_name, 
new_department_name, 
effective_date);
DBMS_OUTPUT.PUT_LINE('1 row copied.');

select department_name
INTO old_department_name 
from department
where department.department_id = :OLD.department_id ;

Select department_name 
into new_department_name 
from department
where :NEW.department_id = department.department_id;

SELECT COUNT(*) 
INTO v_count
FROM emp_dept_hist;
DBMS_OUTPUT.PUT_LINE('Total records: ' || to_char(v_count));
END emp_dept_hist_trg;

当我尝试运行此代码时,它给了我一个错误    PL / SQL:ORA-00984:此处不允许列

我的代码有什么不对。

0 个答案:

没有答案